Skip to content

Commit 79251c2

Browse files
committed
sample/led with testbench.
1 parent bb5d8e0 commit 79251c2

File tree

3 files changed

+88
-6
lines changed

3 files changed

+88
-6
lines changed

sample/led/Makefile

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,13 @@ check:
2727

2828
.PHONY: clean
2929
clean:
30-
rm -rf *.pyc __pycache__ parsetab.py *.out
30+
rm -rf *.pyc __pycache__ parsetab.py *.out tmp.v uut.vcd
31+
32+
.PHONY: sim
33+
sim:
34+
iverilog -Wall tmp.v
35+
./a.out
36+
37+
.PHONY: view
38+
view:
39+
gtkwave --giga uut.vcd &

sample/led/led.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,35 @@ def mkLed():
3232

3333
return m
3434

35-
if __name__ == '__main__':
35+
def mkTest():
36+
m = Module('test')
37+
38+
# target instance
3639
led = mkLed()
37-
verilog = led.to_verilog()
40+
41+
# copy paras and ports
42+
params = m.copy_params(led)
43+
ports = m.copy_sim_ports(led)
44+
45+
clk = ports['CLK']
46+
rst = ports['RST']
47+
48+
uut = m.Instance(led, 'uut',
49+
params=m.connect_params(led),
50+
ports=m.connect_ports(led))
51+
52+
lib.simulation.setup_waveform(m, uut, m.get_vars())
53+
lib.simulation.setup_clock(m, clk, hperiod=5)
54+
init = lib.simulation.setup_reset(m, rst, m.reset(), period=100)
55+
56+
init.add(
57+
Delay(1000 * 100),
58+
Systask('finish'),
59+
)
60+
61+
return m
62+
63+
if __name__ == '__main__':
64+
test = mkTest()
65+
verilog = test.to_verilog('tmp.v')
3866
print(verilog)

sample/led/test_led.py

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,51 @@
11
import led
22

33
expected_verilog = """
4+
module test #
5+
(
6+
parameter WIDTH = 8
7+
)
8+
(
9+
);
10+
11+
reg CLK;
12+
reg RST;
13+
wire [(WIDTH - 1):0] LED;
14+
15+
blinkled
16+
#(
17+
.WIDTH(WIDTH)
18+
)
19+
uut
20+
(
21+
.CLK(CLK),
22+
.RST(RST),
23+
.LED(LED)
24+
);
25+
26+
initial begin
27+
$dumpfile("uut.vcd");
28+
$dumpvars(0, uut, CLK, RST, LED);
29+
end
30+
31+
initial begin
32+
CLK = 0;
33+
forever begin
34+
#5 CLK = (!CLK);
35+
end
36+
end
37+
38+
initial begin
39+
RST = 0;
40+
#100;
41+
RST = 1;
42+
#100;
43+
RST = 0;
44+
#100000;
45+
$finish;
46+
end
47+
endmodule
48+
449
module blinkled #
550
(
651
parameter WIDTH = 8
@@ -35,8 +80,8 @@
3580
"""
3681

3782
def test_led():
38-
led_module = led.mkLed()
39-
led_code = led_module.to_verilog()
83+
test_module = led.mkTest()
84+
code = test_module.to_verilog()
4085

4186
from pyverilog.vparser.parser import VerilogParser
4287
from pyverilog.ast_code_generator.codegen import ASTCodeGenerator
@@ -45,4 +90,4 @@ def test_led():
4590
codegen = ASTCodeGenerator()
4691
expected_code = codegen.visit(expected_ast)
4792

48-
assert(expected_code == led_code)
93+
assert(expected_code == code)

0 commit comments

Comments
 (0)