fix freq counter need long delay to work

morgan 2024-03-27 12:44:03 +08:00
parent 3a76f207e1
commit 8eeec0bae8
1 changed files with 16 additions and 9 deletions

View File

@ -14,9 +14,17 @@ class FrequencyCounter(Module, AutoCSR):
setattr(self, name, counter)
self.update_en = CSRStorage()
# # #
timer = Signal(counter_width)
timer_tick = Signal()
self.sync += Cat(timer, timer_tick).eq(timer + 1)
self.sync +=[
If(self.update_en.storage,
Cat(timer, timer_tick).eq(timer + 1)
).Else(
Cat(timer, timer_tick).eq(0)
)
]
for domain in domains:
sync_domain = getattr(self.sync, domain)
@ -30,18 +38,17 @@ class FrequencyCounter(Module, AutoCSR):
divided_sys_r = Signal()
divided_tick = Signal()
self.sync += divided_sys_r.eq(divided_sys)
self.comb += divided_tick.eq(divided_sys & ~divided_sys_r)
self.sync += [
divided_sys_r.eq(divided_sys),
divided_tick.eq(divided_sys & ~divided_sys_r)
]
counter = Signal(counter_width)
counter_csr = getattr(self, "counter_" + domain)
self.sync += [
If(timer_tick,
If(self.update_en.storage, counter_csr.status.eq(counter)),
counter.eq(0),
).Else(
If(divided_tick, counter.eq(counter + 1))
)
If(timer_tick, counter_csr.status.eq(counter)),
If(divided_tick, counter.eq(counter + 1)),
If(~self.update_en.storage, counter.eq(0)),
]
class SkewTester(Module, AutoCSR):