|
| 1 | +from __future__ import absolute_import |
| 2 | +from __future__ import print_function |
| 3 | +import veriloggen |
| 4 | +import thread_ram_style |
| 5 | + |
| 6 | +expected_verilog = """ |
| 7 | +module test; |
| 8 | +
|
| 9 | + reg CLK; |
| 10 | + reg RST; |
| 11 | +
|
| 12 | + blinkled |
| 13 | + uut |
| 14 | + ( |
| 15 | + .CLK(CLK), |
| 16 | + .RST(RST) |
| 17 | + ); |
| 18 | +
|
| 19 | +
|
| 20 | + initial begin |
| 21 | + $dumpfile("uut.vcd"); |
| 22 | + $dumpvars(0, uut); |
| 23 | + end |
| 24 | +
|
| 25 | +
|
| 26 | + initial begin |
| 27 | + CLK = 0; |
| 28 | + forever begin |
| 29 | + #5 CLK = !CLK; |
| 30 | + end |
| 31 | + end |
| 32 | +
|
| 33 | +
|
| 34 | + initial begin |
| 35 | + RST = 0; |
| 36 | + #100; |
| 37 | + RST = 1; |
| 38 | + #100; |
| 39 | + RST = 0; |
| 40 | + #10000; |
| 41 | + $finish; |
| 42 | + end |
| 43 | +
|
| 44 | +
|
| 45 | +endmodule |
| 46 | +
|
| 47 | +
|
| 48 | +
|
| 49 | +module blinkled |
| 50 | +( |
| 51 | + input CLK, |
| 52 | + input RST |
| 53 | +); |
| 54 | +
|
| 55 | + reg [10-1:0] myram_0_addr; |
| 56 | + wire [32-1:0] myram_0_rdata; |
| 57 | + reg [32-1:0] myram_0_wdata; |
| 58 | + reg myram_0_wenable; |
| 59 | +
|
| 60 | + myram |
| 61 | + inst_myram |
| 62 | + ( |
| 63 | + .CLK(CLK), |
| 64 | + .myram_0_addr(myram_0_addr), |
| 65 | + .myram_0_rdata(myram_0_rdata), |
| 66 | + .myram_0_wdata(myram_0_wdata), |
| 67 | + .myram_0_wenable(myram_0_wenable) |
| 68 | + ); |
| 69 | +
|
| 70 | + reg [32-1:0] th_blink; |
| 71 | + localparam th_blink_init = 0; |
| 72 | + reg signed [32-1:0] _th_blink_times_0; |
| 73 | + reg signed [32-1:0] _th_blink_i_1; |
| 74 | + reg signed [32-1:0] _th_blink_wdata_2; |
| 75 | + reg _myram_cond_0_1; |
| 76 | + reg signed [32-1:0] _th_blink_sum_3; |
| 77 | + reg _tmp_0; |
| 78 | + reg _myram_cond_1_1; |
| 79 | + reg _myram_cond_2_1; |
| 80 | + reg _myram_cond_2_2; |
| 81 | + reg signed [32-1:0] _tmp_1; |
| 82 | + reg signed [32-1:0] _th_blink_rdata_4; |
| 83 | +
|
| 84 | + always @(posedge CLK) begin |
| 85 | + if(RST) begin |
| 86 | + myram_0_addr <= 0; |
| 87 | + myram_0_wdata <= 0; |
| 88 | + myram_0_wenable <= 0; |
| 89 | + _myram_cond_0_1 <= 0; |
| 90 | + _myram_cond_1_1 <= 0; |
| 91 | + _tmp_0 <= 0; |
| 92 | + _myram_cond_2_1 <= 0; |
| 93 | + _myram_cond_2_2 <= 0; |
| 94 | + end else begin |
| 95 | + if(_myram_cond_2_2) begin |
| 96 | + _tmp_0 <= 0; |
| 97 | + end |
| 98 | + if(_myram_cond_0_1) begin |
| 99 | + myram_0_wenable <= 0; |
| 100 | + end |
| 101 | + if(_myram_cond_1_1) begin |
| 102 | + _tmp_0 <= 1; |
| 103 | + end |
| 104 | + _myram_cond_2_2 <= _myram_cond_2_1; |
| 105 | + if(th_blink == 4) begin |
| 106 | + myram_0_addr <= _th_blink_i_1; |
| 107 | + myram_0_wdata <= _th_blink_wdata_2; |
| 108 | + myram_0_wenable <= 1; |
| 109 | + end |
| 110 | + _myram_cond_0_1 <= th_blink == 4; |
| 111 | + if(th_blink == 10) begin |
| 112 | + myram_0_addr <= _th_blink_i_1; |
| 113 | + end |
| 114 | + _myram_cond_1_1 <= th_blink == 10; |
| 115 | + _myram_cond_2_1 <= th_blink == 10; |
| 116 | + end |
| 117 | + end |
| 118 | +
|
| 119 | + localparam th_blink_1 = 1; |
| 120 | + localparam th_blink_2 = 2; |
| 121 | + localparam th_blink_3 = 3; |
| 122 | + localparam th_blink_4 = 4; |
| 123 | + localparam th_blink_5 = 5; |
| 124 | + localparam th_blink_6 = 6; |
| 125 | + localparam th_blink_7 = 7; |
| 126 | + localparam th_blink_8 = 8; |
| 127 | + localparam th_blink_9 = 9; |
| 128 | + localparam th_blink_10 = 10; |
| 129 | + localparam th_blink_11 = 11; |
| 130 | + localparam th_blink_12 = 12; |
| 131 | + localparam th_blink_13 = 13; |
| 132 | + localparam th_blink_14 = 14; |
| 133 | + localparam th_blink_15 = 15; |
| 134 | + localparam th_blink_16 = 16; |
| 135 | +
|
| 136 | + always @(posedge CLK) begin |
| 137 | + if(RST) begin |
| 138 | + th_blink <= th_blink_init; |
| 139 | + _th_blink_times_0 <= 0; |
| 140 | + _th_blink_i_1 <= 0; |
| 141 | + _th_blink_wdata_2 <= 0; |
| 142 | + _th_blink_sum_3 <= 0; |
| 143 | + _tmp_1 <= 0; |
| 144 | + _th_blink_rdata_4 <= 0; |
| 145 | + end else begin |
| 146 | + case(th_blink) |
| 147 | + th_blink_init: begin |
| 148 | + _th_blink_times_0 <= 10; |
| 149 | + th_blink <= th_blink_1; |
| 150 | + end |
| 151 | + th_blink_1: begin |
| 152 | + _th_blink_i_1 <= 0; |
| 153 | + th_blink <= th_blink_2; |
| 154 | + end |
| 155 | + th_blink_2: begin |
| 156 | + if(_th_blink_i_1 < _th_blink_times_0) begin |
| 157 | + th_blink <= th_blink_3; |
| 158 | + end else begin |
| 159 | + th_blink <= th_blink_7; |
| 160 | + end |
| 161 | + end |
| 162 | + th_blink_3: begin |
| 163 | + _th_blink_wdata_2 <= _th_blink_i_1; |
| 164 | + th_blink <= th_blink_4; |
| 165 | + end |
| 166 | + th_blink_4: begin |
| 167 | + th_blink <= th_blink_5; |
| 168 | + end |
| 169 | + th_blink_5: begin |
| 170 | + $display("wdata = %d", _th_blink_wdata_2); |
| 171 | + th_blink <= th_blink_6; |
| 172 | + end |
| 173 | + th_blink_6: begin |
| 174 | + _th_blink_i_1 <= _th_blink_i_1 + 1; |
| 175 | + th_blink <= th_blink_2; |
| 176 | + end |
| 177 | + th_blink_7: begin |
| 178 | + _th_blink_sum_3 <= 0; |
| 179 | + th_blink <= th_blink_8; |
| 180 | + end |
| 181 | + th_blink_8: begin |
| 182 | + _th_blink_i_1 <= 0; |
| 183 | + th_blink <= th_blink_9; |
| 184 | + end |
| 185 | + th_blink_9: begin |
| 186 | + if(_th_blink_i_1 < _th_blink_times_0) begin |
| 187 | + th_blink <= th_blink_10; |
| 188 | + end else begin |
| 189 | + th_blink <= th_blink_15; |
| 190 | + end |
| 191 | + end |
| 192 | + th_blink_10: begin |
| 193 | + if(_tmp_0) begin |
| 194 | + _tmp_1 <= myram_0_rdata; |
| 195 | + end |
| 196 | + if(_tmp_0) begin |
| 197 | + th_blink <= th_blink_11; |
| 198 | + end |
| 199 | + end |
| 200 | + th_blink_11: begin |
| 201 | + _th_blink_rdata_4 <= _tmp_1; |
| 202 | + th_blink <= th_blink_12; |
| 203 | + end |
| 204 | + th_blink_12: begin |
| 205 | + _th_blink_sum_3 <= _th_blink_sum_3 + _th_blink_rdata_4; |
| 206 | + th_blink <= th_blink_13; |
| 207 | + end |
| 208 | + th_blink_13: begin |
| 209 | + $display("rdata = %d", _th_blink_rdata_4); |
| 210 | + th_blink <= th_blink_14; |
| 211 | + end |
| 212 | + th_blink_14: begin |
| 213 | + _th_blink_i_1 <= _th_blink_i_1 + 1; |
| 214 | + th_blink <= th_blink_9; |
| 215 | + end |
| 216 | + th_blink_15: begin |
| 217 | + $display("sum = %d", _th_blink_sum_3); |
| 218 | + th_blink <= th_blink_16; |
| 219 | + end |
| 220 | + endcase |
| 221 | + end |
| 222 | + end |
| 223 | +
|
| 224 | +
|
| 225 | +endmodule |
| 226 | +
|
| 227 | +
|
| 228 | +
|
| 229 | +module myram |
| 230 | +( |
| 231 | + input CLK, |
| 232 | + input [10-1:0] myram_0_addr, |
| 233 | + output [32-1:0] myram_0_rdata, |
| 234 | + input [32-1:0] myram_0_wdata, |
| 235 | + input myram_0_wenable |
| 236 | +); |
| 237 | +
|
| 238 | + reg [10-1:0] myram_0_daddr; |
| 239 | + (* ram_style = "block" *) |
| 240 | + reg [32-1:0] mem [0:1024-1]; |
| 241 | +
|
| 242 | + always @(posedge CLK) begin |
| 243 | + if(myram_0_wenable) begin |
| 244 | + mem[myram_0_addr] <= myram_0_wdata; |
| 245 | + end |
| 246 | + myram_0_daddr <= myram_0_addr; |
| 247 | + end |
| 248 | +
|
| 249 | + assign myram_0_rdata = mem[myram_0_daddr]; |
| 250 | +
|
| 251 | +endmodule |
| 252 | +""" |
| 253 | + |
| 254 | + |
| 255 | +def test(): |
| 256 | + veriloggen.reset() |
| 257 | + test_module = thread_ram_style.mkTest() |
| 258 | + code = test_module.to_verilog() |
| 259 | + |
| 260 | + from pyverilog.vparser.parser import VerilogParser |
| 261 | + from pyverilog.ast_code_generator.codegen import ASTCodeGenerator |
| 262 | + parser = VerilogParser() |
| 263 | + expected_ast = parser.parse(expected_verilog) |
| 264 | + codegen = ASTCodeGenerator() |
| 265 | + expected_code = codegen.visit(expected_ast) |
| 266 | + |
| 267 | + assert(expected_code == code) |
0 commit comments