OpenCores
URL https://opencores.org/ocsvn/myhdl_lfsr/myhdl_lfsr/trunk

Subversion Repositories myhdl_lfsr

[/] [myhdl_lfsr/] [trunk/] [lfsr_gen.py] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 raineys
from myhdl import *
2
from lfsr_tap_table import *
3
from lfsr_logic import *
4
import random
5
 
6
#Author: Shawn Rainey 
7
#        rainey.shawn@gmail.com
8
 
9
def lfsr_export(exportfn=toVerilog, directory=".", width=32, init_value=1):
10
 
11
    reset = ResetSignal(0, active=1, async=True)
12
    clock = Signal(bool(0))
13
    word_sig = Signal(modbv(0)[width:])
14
 
15
    lfsr_mod = get_lfsr(width, init_value)
16
 
17
    exportfn.name = "lfsr_" + str(width)
18
    exportfn.directory = directory
19
    exportfn(lfsr_mod, reset, clock, word_sig)
20
 
21
def lfsr_sim(clocks, width=32, init_value = 1):
22
 
23
    lfsr_mod = get_lfsr(width, init_value)
24
 
25
    def lfsr_tb():
26
        reset = ResetSignal(0, active=1, async=True)
27
        clock = Signal(bool(0))
28
        word_sig = Signal(modbv(0)[width:])
29
 
30
 
31
        lfsr_inst = lfsr_mod(reset, clock, word_sig)
32
 
33
        @always(delay(1))
34
        def clock_toggle():
35
            clock.next = not clock
36
 
37
        return instances()
38
 
39
    tb = traceSignals(lfsr_tb)
40
    sim = Simulation(tb)
41
    sim.run(clocks*2)
42
 
43
 
44
def generate_all_widths():
45
    lfsr_start = 1
46
    for width in lfsr_tap_table:
47
        lfsr_width = width
48
        if lfsr_width > 2:
49
            lfsr_start = random.getrandbits(lfsr_width-2)+1
50
        else:
51
            lfsr_start = 1
52
 
53
        lfsr_export(toVHDL, "generated", lfsr_width, lfsr_start)
54
        #alternatively: But this has problems with large widths
55
        #lfsr_export(toVHDL, lfsr_width, lfsr_start)
56
 
57
 
58
if __name__ == "__main__":
59
    lfsr_width = 32
60
 
61
    #start with a pseudo-random number that will fit in our register and be non-zero
62
    lfsr_start = random.getrandbits(lfsr_width-2)+1
63
 
64
    #may also start with a non-zero constant:
65
    #lfsr_start = 1
66
 
67
 
68
    generate_all_widths()
69
 
70
    lfsr_width = 8
71
    lfsr_start = 1
72
    #Generate a simulation with 256 clocks
73
    #lfsr_sim(256, lfsr_width, lfsr_start)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.