54 lines
1.1 KiB
Python
54 lines
1.1 KiB
Python
|
from ReBba.Components.Debouncer import Debouncer
|
||
|
|
||
|
from amaranth import Const
|
||
|
from amaranth.sim import Simulator
|
||
|
|
||
|
import os
|
||
|
|
||
|
class TestBench:
|
||
|
def __init__(self):
|
||
|
pass
|
||
|
|
||
|
def holdTest(self):
|
||
|
dut = self.dut
|
||
|
yield
|
||
|
yield
|
||
|
|
||
|
yield dut.input.eq(Const(1))
|
||
|
yield
|
||
|
yield dut.input.eq(Const(0))
|
||
|
yield
|
||
|
|
||
|
for _ in range(5):
|
||
|
assert(yield(dut.output) == 1)
|
||
|
yield
|
||
|
|
||
|
yield dut.input.eq(Const(1))
|
||
|
yield
|
||
|
yield dut.input.eq(Const(0))
|
||
|
yield
|
||
|
|
||
|
for _ in range(16):
|
||
|
assert(yield(dut.output) == 1)
|
||
|
yield
|
||
|
|
||
|
assert(yield(dut.output) == 0)
|
||
|
yield
|
||
|
yield
|
||
|
|
||
|
def simulate(self):
|
||
|
self.dut = Debouncer(15)
|
||
|
|
||
|
sim = Simulator(self.dut)
|
||
|
sim.add_clock(1e-6) # 1 MHz
|
||
|
sim.add_sync_process(self.holdTest)
|
||
|
|
||
|
with sim.write_vcd(os.path.dirname(os.path.abspath(__file__)) + "/Debouncer.vcd"):
|
||
|
sim.run()
|
||
|
|
||
|
def main():
|
||
|
bench = TestBench()
|
||
|
bench.simulate()
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|