88
99from veriloggen import *
1010
11+
1112def mkRegChain (length = 120 , width = 8 ):
1213 m = Module ("reg_chain" )
1314
@@ -19,97 +20,98 @@ def mkRegChain(length=120, width=8):
1920 seq = Seq (m , 'seq' , clk , rst )
2021
2122 update_cond_value = m .TmpReg (3 , initval = 0 )
22- seq ( update_cond_value (sw [0 :3 ]) )
23+ seq (update_cond_value (sw [0 :3 ]))
2324
2425 area_size = m .TmpReg (2 , initval = 0 )
25- seq ( area_size (sw [3 :5 ]) )
26-
26+ seq (area_size (sw [3 :5 ]))
27+
2728 count = m .TmpReg (2 , initval = 0 )
28- seq ( count .inc () )
29-
29+ seq (count .inc ())
30+
3031 update_cond = m .TmpReg (initval = 0 )
31- seq ( update_cond (count < update_cond_value ) )
32+ seq (update_cond (count < update_cond_value ))
3233
3334 orig = m .TmpReg (width , initval = 0 )
3435 prev = orig
3536
3637 regs = []
37-
38+
3839 for i in range (length ):
3940 area_id = i // (length // 4 )
4041 r = m .TmpReg (width , initval = 0 )
4142 regs .append (r )
42- seq .If (AndList (update_cond , area_id <= area_size ))( r (prev + 1 ) )
43+ seq .If (AndList (update_cond , area_id <= area_size ))(r (prev + 1 ))
4344 prev = r
4445
45- seq .If (AndList (update_cond , area_size == 0 ))( orig (regs [1 * length // 4 - 1 ] + 3 ) )
46- seq .If (AndList (update_cond , area_size == 1 ))( orig (regs [2 * length // 4 - 1 ] + 2 ) )
47- seq .If (AndList (update_cond , area_size == 2 ))( orig (regs [3 * length // 4 - 1 ] + 1 ) )
48- seq .If (AndList (update_cond , area_size == 3 ))( orig (regs [4 * length // 4 - 1 ] + 0 ) )
46+ seq .If (AndList (update_cond , area_size == 0 ))(orig (regs [1 * length // 4 - 1 ] + 3 ))
47+ seq .If (AndList (update_cond , area_size == 1 ))(orig (regs [2 * length // 4 - 1 ] + 2 ))
48+ seq .If (AndList (update_cond , area_size == 2 ))(orig (regs [3 * length // 4 - 1 ] + 1 ))
49+ seq .If (AndList (update_cond , area_size == 3 ))(orig (regs [4 * length // 4 - 1 ] + 0 ))
4950
5051 seq .make_always ()
51-
52- m .Assign ( dout (orig ) )
52+
53+ m .Assign (dout (orig ))
5354
5455 return m
5556
57+
5658def mkTest (length = 120 , width = 8 ):
5759 m = Module ('test' )
58-
60+
5961 main = mkRegChain (length , width )
6062 params = m .copy_params (main )
6163 ports = m .copy_sim_ports (main )
62-
64+
6365 clk = ports ['CLK' ]
6466 rst = ports ['RST' ]
6567 sw = ports ['sw' ]
6668 dout = ports ['dout' ]
6769
6870 fsm = FSM (m , 'fsm' , clk , rst )
6971 count = m .TmpReg (32 , initval = 0 )
70-
71- fsm ( sw ((3 << 3 ) | 4 ) )
72- fsm ( count .inc () )
73- fsm .If (count == 2000 )( count (0 ) )
74- fsm .goto_next (count == 2000 )
75-
76- fsm ( sw ((2 << 3 ) | 4 ) )
77- fsm ( count .inc () )
78- fsm .If (count == 2000 )( count (0 ) )
79- fsm .goto_next (count == 2000 )
80-
81- fsm ( sw ((1 << 3 ) | 4 ) )
82- fsm ( count .inc () )
83- fsm .If (count == 2000 )( count (0 ) )
84- fsm .goto_next (count == 2000 )
85-
86- fsm ( sw ((0 << 3 ) | 4 ) )
87- fsm ( count .inc () )
88- fsm .If (count == 2000 )( count (0 ) )
89- fsm .goto_next (count == 2000 )
90-
91- fsm ( sw ((2 << 3 ) | 3 ) )
92- fsm ( count .inc () )
93- fsm .If (count == 2000 )( count (0 ) )
94- fsm .goto_next (count == 2000 )
95-
96- fsm ( sw ((2 << 3 ) | 2 ) )
97- fsm ( count .inc () )
98- fsm .If (count == 2000 )( count (0 ) )
99- fsm .goto_next (count == 2000 )
100-
101- fsm ( sw ((2 << 3 ) | 1 ) )
102- fsm ( count .inc () )
103- fsm .If (count == 2000 )( count (0 ) )
104- fsm .goto_next (count == 2000 )
105-
106- fsm ( sw ((2 << 3 ) | 0 ) )
107- fsm ( count .inc () )
108- fsm .If (count == 2000 )( count (0 ) )
109- fsm .goto_next (count == 2000 )
72+
73+ fsm (sw ((3 << 3 ) | 4 ))
74+ fsm (count .inc ())
75+ fsm .If (count == 2000 )(count (0 ))
76+ fsm .goto_next (count == 2000 )
77+
78+ fsm (sw ((2 << 3 ) | 4 ))
79+ fsm (count .inc ())
80+ fsm .If (count == 2000 )(count (0 ))
81+ fsm .goto_next (count == 2000 )
82+
83+ fsm (sw ((1 << 3 ) | 4 ))
84+ fsm (count .inc ())
85+ fsm .If (count == 2000 )(count (0 ))
86+ fsm .goto_next (count == 2000 )
87+
88+ fsm (sw ((0 << 3 ) | 4 ))
89+ fsm (count .inc ())
90+ fsm .If (count == 2000 )(count (0 ))
91+ fsm .goto_next (count == 2000 )
92+
93+ fsm (sw ((2 << 3 ) | 3 ))
94+ fsm (count .inc ())
95+ fsm .If (count == 2000 )(count (0 ))
96+ fsm .goto_next (count == 2000 )
97+
98+ fsm (sw ((2 << 3 ) | 2 ))
99+ fsm (count .inc ())
100+ fsm .If (count == 2000 )(count (0 ))
101+ fsm .goto_next (count == 2000 )
102+
103+ fsm (sw ((2 << 3 ) | 1 ))
104+ fsm (count .inc ())
105+ fsm .If (count == 2000 )(count (0 ))
106+ fsm .goto_next (count == 2000 )
107+
108+ fsm (sw ((2 << 3 ) | 0 ))
109+ fsm (count .inc ())
110+ fsm .If (count == 2000 )(count (0 ))
111+ fsm .goto_next (count == 2000 )
110112
111113 fsm .make_always ()
112-
114+
113115 uut = m .Instance (main , 'uut' ,
114116 params = m .connect_params (main ),
115117 ports = m .connect_ports (main ))
@@ -119,30 +121,31 @@ def mkTest(length=120, width=8):
119121 init = simulation .setup_reset (m , rst , m .make_reset (), period = 100 )
120122
121123 nclk = simulation .next_clock
122-
124+
123125 init .add (
124126 sw (0 ),
125127 Delay (1000 * 200 ),
126128 Systask ('finish' ),
127129 )
128130
129131 return m
130-
132+
133+
131134if __name__ == '__main__' :
132135 main = mkRegChain (length = 120 )
133136 verilog = main .to_verilog ('tmp.v' )
134137 print (verilog )
135138
136139 #test = mkTest()
137140 #verilog = test.to_verilog('tmp.v')
138- #print(verilog)
141+ # print(verilog)
139142
140143 # run simulator (Icarus Verilog)
141144 #sim = simulation.Simulator(test)
142- #rslt = sim.run() # display=False
145+ # rslt = sim.run() # display=False
143146 ##rslt = sim.run(display=True)
144- #print(rslt)
147+ # print(rslt)
145148
146149 # launch waveform viewer (GTKwave)
147- #sim.view_waveform() # background=False
148- #sim.view_waveform(background=True)
150+ # sim.view_waveform() # background=False
151+ # sim.view_waveform(background=True)
0 commit comments