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

Subversion Repositories myhdl_lfsr

[/] [myhdl_lfsr/] [trunk/] [lfsr_gen.py] - Rev 2

Compare with Previous | Blame | View Log

from myhdl import *
from lfsr_tap_table import *
from lfsr_logic import *
import random
 
#Author: Shawn Rainey 
#        rainey.shawn@gmail.com
 
def lfsr_export(exportfn=toVerilog, directory=".", width=32, init_value=1):
 
    reset = ResetSignal(0, active=1, async=True)
    clock = Signal(bool(0))
    word_sig = Signal(modbv(0)[width:])
 
    lfsr_mod = get_lfsr(width, init_value)
 
    exportfn.name = "lfsr_" + str(width)
    exportfn.directory = directory
    exportfn(lfsr_mod, reset, clock, word_sig)
 
def lfsr_sim(clocks, width=32, init_value = 1):
 
    lfsr_mod = get_lfsr(width, init_value)
 
    def lfsr_tb():
        reset = ResetSignal(0, active=1, async=True)
        clock = Signal(bool(0))
        word_sig = Signal(modbv(0)[width:])
 
 
        lfsr_inst = lfsr_mod(reset, clock, word_sig)
 
        @always(delay(1))
        def clock_toggle():
            clock.next = not clock
 
        return instances()
 
    tb = traceSignals(lfsr_tb)
    sim = Simulation(tb)
    sim.run(clocks*2)
 
 
def generate_all_widths():
    lfsr_start = 1
    for width in lfsr_tap_table:
        lfsr_width = width
        if lfsr_width > 2:
            lfsr_start = random.getrandbits(lfsr_width-2)+1
        else:
            lfsr_start = 1
 
        lfsr_export(toVHDL, "generated", lfsr_width, lfsr_start)
        #alternatively: But this has problems with large widths
        #lfsr_export(toVHDL, lfsr_width, lfsr_start)
 
 
if __name__ == "__main__":
    lfsr_width = 32
 
    #start with a pseudo-random number that will fit in our register and be non-zero
    lfsr_start = random.getrandbits(lfsr_width-2)+1
 
    #may also start with a non-zero constant:
    #lfsr_start = 1
 
 
    generate_all_widths()
 
    lfsr_width = 8
    lfsr_start = 1
    #Generate a simulation with 256 clocks
    #lfsr_sim(256, lfsr_width, lfsr_start)
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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