fix freq counter need long delay to work
parent
3a76f207e1
commit
8eeec0bae8
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue