frontend/bist: only keep random datas (we can generate random addresses with control)
This commit is contained in:
parent
b1e734b2ac
commit
c37d3af5b5
|
@ -127,21 +127,16 @@ class _LiteDRAMBISTGenerator(Module):
|
||||||
self.done = Signal()
|
self.done = Signal()
|
||||||
self.base = Signal(awidth)
|
self.base = Signal(awidth)
|
||||||
self.length = Signal(awidth)
|
self.length = Signal(awidth)
|
||||||
self.random_data_enable = Signal()
|
self.random = Signal()
|
||||||
self.random_addr_enable = Signal()
|
|
||||||
self.ticks = Signal(32)
|
self.ticks = Signal(32)
|
||||||
|
|
||||||
# # #
|
# # #
|
||||||
|
|
||||||
# data / address generators
|
# data / address generators
|
||||||
data_gen = Generator(31, n_state=31, taps=[27, 30]) # PRBS31
|
data_gen = Generator(31, n_state=31, taps=[27, 30]) # PRBS31
|
||||||
addr_gen = Generator(23, n_state=23, taps=[17, 22]) # PRBS23
|
addr_gen = CEInserter()(Counter(awidth))
|
||||||
assert (23 + ashift) < awidth # addressing large enough for random
|
|
||||||
self.submodules += data_gen, addr_gen
|
self.submodules += data_gen, addr_gen
|
||||||
self.comb += [
|
self.comb += data_gen.random_enable.eq(self.random)
|
||||||
data_gen.random_enable.eq(self.random_data_enable),
|
|
||||||
addr_gen.random_enable.eq(self.random_addr_enable)
|
|
||||||
]
|
|
||||||
|
|
||||||
# dma
|
# dma
|
||||||
dma = LiteDRAMDMAWriter(dram_port)
|
dma = LiteDRAMDMAWriter(dram_port)
|
||||||
|
@ -202,12 +197,9 @@ class LiteDRAMBISTGenerator(Module, AutoCSR):
|
||||||
length : in
|
length : in
|
||||||
Number of DRAM words to write.
|
Number of DRAM words to write.
|
||||||
|
|
||||||
random_data_enable : in
|
random : in
|
||||||
Enable random data (LFSR)
|
Enable random data (LFSR)
|
||||||
|
|
||||||
random_addr_enable : in
|
|
||||||
Enable random addressing (LFSR)
|
|
||||||
|
|
||||||
ticks : out
|
ticks : out
|
||||||
Duration of the generation.
|
Duration of the generation.
|
||||||
"""
|
"""
|
||||||
|
@ -218,8 +210,7 @@ class LiteDRAMBISTGenerator(Module, AutoCSR):
|
||||||
self.done = CSRStatus()
|
self.done = CSRStatus()
|
||||||
self.base = CSRStorage(awidth)
|
self.base = CSRStorage(awidth)
|
||||||
self.length = CSRStorage(awidth)
|
self.length = CSRStorage(awidth)
|
||||||
self.random_data_enable = CSRStorage()
|
self.random = CSRStorage()
|
||||||
self.random_addr_enable = CSRStorage()
|
|
||||||
self.ticks = CSRStatus(32)
|
self.ticks = CSRStatus(32)
|
||||||
|
|
||||||
# # #
|
# # #
|
||||||
|
@ -260,10 +251,7 @@ class LiteDRAMBISTGenerator(Module, AutoCSR):
|
||||||
core.length.eq(length_sync.o)
|
core.length.eq(length_sync.o)
|
||||||
]
|
]
|
||||||
|
|
||||||
self.specials += [
|
self.specials += MultiReg(self.random.storage, core.random, clock_domain)
|
||||||
MultiReg(self.random_data_enable.storage, core.random_data_enable, clock_domain),
|
|
||||||
MultiReg(self.random_addr_enable.storage, core.random_addr_enable, clock_domain),
|
|
||||||
]
|
|
||||||
|
|
||||||
ticks_sync = BusSynchronizer(32, clock_domain, "sys")
|
ticks_sync = BusSynchronizer(32, clock_domain, "sys")
|
||||||
self.submodules += ticks_sync
|
self.submodules += ticks_sync
|
||||||
|
@ -278,8 +266,7 @@ class LiteDRAMBISTGenerator(Module, AutoCSR):
|
||||||
self.done.status.eq(core.done),
|
self.done.status.eq(core.done),
|
||||||
core.base.eq(self.base.storage),
|
core.base.eq(self.base.storage),
|
||||||
core.length.eq(self.length.storage),
|
core.length.eq(self.length.storage),
|
||||||
core.random_data_enable.eq(self.random_data_enable.storage),
|
core.random.eq(self.random.storage),
|
||||||
core.random_addr_enable.eq(self.random_addr_enable.storage),
|
|
||||||
self.ticks.status.eq(core.ticks)
|
self.ticks.status.eq(core.ticks)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -292,8 +279,7 @@ class _LiteDRAMBISTChecker(Module, AutoCSR):
|
||||||
self.done = Signal()
|
self.done = Signal()
|
||||||
self.base = Signal(awidth)
|
self.base = Signal(awidth)
|
||||||
self.length = Signal(awidth)
|
self.length = Signal(awidth)
|
||||||
self.random_data_enable = Signal()
|
self.random = Signal()
|
||||||
self.random_addr_enable = Signal()
|
|
||||||
self.ticks = Signal(32)
|
self.ticks = Signal(32)
|
||||||
self.errors = Signal(32)
|
self.errors = Signal(32)
|
||||||
|
|
||||||
|
@ -301,13 +287,9 @@ class _LiteDRAMBISTChecker(Module, AutoCSR):
|
||||||
|
|
||||||
# data / address generators
|
# data / address generators
|
||||||
data_gen = Generator(31, n_state=31, taps=[27, 30]) # PRBS31
|
data_gen = Generator(31, n_state=31, taps=[27, 30]) # PRBS31
|
||||||
addr_gen = Generator(23, n_state=23, taps=[17, 22]) # PRBS23
|
addr_gen = CEInserter()(Counter(awidth))
|
||||||
assert (23 + ashift) < awidth # addressing large enough for random
|
|
||||||
self.submodules += data_gen, addr_gen
|
self.submodules += data_gen, addr_gen
|
||||||
self.comb += [
|
self.comb += data_gen.random_enable.eq(self.random)
|
||||||
data_gen.random_enable.eq(self.random_data_enable),
|
|
||||||
addr_gen.random_enable.eq(self.random_addr_enable)
|
|
||||||
]
|
|
||||||
|
|
||||||
# dma
|
# dma
|
||||||
dma = LiteDRAMDMAReader(dram_port)
|
dma = LiteDRAMDMAReader(dram_port)
|
||||||
|
@ -392,12 +374,9 @@ class LiteDRAMBISTChecker(Module, AutoCSR):
|
||||||
length : in
|
length : in
|
||||||
Number of DRAM words to check.
|
Number of DRAM words to check.
|
||||||
|
|
||||||
random_data_enable : in
|
random : in
|
||||||
Enable random data (LFSR)
|
Enable random data (LFSR)
|
||||||
|
|
||||||
random_addr_enable : in
|
|
||||||
Enable random addressing (LFSR)
|
|
||||||
|
|
||||||
ticks: out
|
ticks: out
|
||||||
Duration of the check.
|
Duration of the check.
|
||||||
|
|
||||||
|
@ -411,8 +390,7 @@ class LiteDRAMBISTChecker(Module, AutoCSR):
|
||||||
self.done = CSRStatus()
|
self.done = CSRStatus()
|
||||||
self.base = CSRStorage(awidth)
|
self.base = CSRStorage(awidth)
|
||||||
self.length = CSRStorage(awidth)
|
self.length = CSRStorage(awidth)
|
||||||
self.random_data_enable = CSRStorage()
|
self.random = CSRStorage()
|
||||||
self.random_addr_enable = CSRStorage()
|
|
||||||
self.ticks = CSRStatus(32)
|
self.ticks = CSRStatus(32)
|
||||||
self.errors = CSRStatus(32)
|
self.errors = CSRStatus(32)
|
||||||
|
|
||||||
|
@ -454,10 +432,7 @@ class LiteDRAMBISTChecker(Module, AutoCSR):
|
||||||
core.length.eq(length_sync.o)
|
core.length.eq(length_sync.o)
|
||||||
]
|
]
|
||||||
|
|
||||||
self.specials += [
|
self.specials += MultiReg(self.random.storage, core.random, clock_domain)
|
||||||
MultiReg(self.random_data_enable.storage, core.random_data_enable, clock_domain),
|
|
||||||
MultiReg(self.random_addr_enable.storage, core.random_addr_enable, clock_domain),
|
|
||||||
]
|
|
||||||
|
|
||||||
ticks_sync = BusSynchronizer(32, clock_domain, "sys")
|
ticks_sync = BusSynchronizer(32, clock_domain, "sys")
|
||||||
self.submodules += ticks_sync
|
self.submodules += ticks_sync
|
||||||
|
@ -479,8 +454,7 @@ class LiteDRAMBISTChecker(Module, AutoCSR):
|
||||||
self.done.status.eq(core.done),
|
self.done.status.eq(core.done),
|
||||||
core.base.eq(self.base.storage),
|
core.base.eq(self.base.storage),
|
||||||
core.length.eq(self.length.storage),
|
core.length.eq(self.length.storage),
|
||||||
core.random_data_enable.eq(self.random_data_enable.storage),
|
core.random.eq(self.random.storage),
|
||||||
core.random_addr_enable.eq(self.random_addr_enable.storage),
|
|
||||||
self.ticks.status.eq(core.ticks),
|
self.ticks.status.eq(core.ticks),
|
||||||
self.errors.status.eq(core.errors)
|
self.errors.status.eq(core.errors)
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue