|
| 1 | +import sys |
| 2 | +import os |
| 3 | +from veriloggen import * |
| 4 | + |
| 5 | +def mkLed(): |
| 6 | + m = Module('blinkled') |
| 7 | + width = m.Parameter('WIDTH', 8) |
| 8 | + num_inst = m.Parameter('NUM_INST', 4) |
| 9 | + clk = m.Input('CLK') |
| 10 | + rst = m.Input('RST') |
| 11 | + led = m.OutputReg('LED', width) |
| 12 | + count = m.Reg('count', 32) |
| 13 | + |
| 14 | + m.Always(Posedge(clk))( |
| 15 | + If(rst)( |
| 16 | + count(0) |
| 17 | + ).Else( |
| 18 | + If(count == 1023)( |
| 19 | + count(0) |
| 20 | + ).Else( |
| 21 | + count(count + 1) |
| 22 | + ) |
| 23 | + )) |
| 24 | + |
| 25 | + # genvar i; |
| 26 | + i = m.Genvar('i') |
| 27 | + |
| 28 | + # generate for(i=0; i<NUM_INST; i=i+1) begin: gen_for; |
| 29 | + gen_for = m.GenerateFor(i(0), i<num_inst, i(i+1), scope='gen_for') |
| 30 | + gen_count = gen_for.Reg('gen_count', 32) |
| 31 | + |
| 32 | + # if(i==0) begin: gen_if_true // generate-if |
| 33 | + gen_if = gen_for.GenerateIf(i == 0, 'gen_if_true') |
| 34 | + gen_if.Always(Posedge(clk))( |
| 35 | + gen_count(count) |
| 36 | + ) |
| 37 | + |
| 38 | + # end else begin // gen_if_false else |
| 39 | + gen_if = gen_if.Else('gen_if_false') |
| 40 | + gen_if_count = gen_if.Reg('gen_if_count', 32) |
| 41 | + gen_if.Always(Posedge(clk))( |
| 42 | + gen_count(Scope(gen_for[i-1], gen_count)), |
| 43 | + gen_if_count(gen_count), |
| 44 | + ) |
| 45 | + # ... end endgenerate |
| 46 | + |
| 47 | + m.Always(Posedge(clk))( |
| 48 | + If(rst)( |
| 49 | + led(0) |
| 50 | + ).Else( |
| 51 | + If(Scope(gen_for[num_inst-1], gen_if, gen_if_count) == 1024 - 1)( |
| 52 | + led(led + 1) |
| 53 | + ))) |
| 54 | + |
| 55 | + return m |
| 56 | + |
| 57 | +if __name__ == '__main__': |
| 58 | + led = mkLed() |
| 59 | + verilog = led.to_verilog() |
| 60 | + print(verilog) |
0 commit comments