| module sub_mod(input i_in, output o_out); |
| assign o_out = i_in; |
| endmodule |
| |
| module test(i_clk, i, i_reg, o_reg, o_wire, o_mr, o_mw, o_ml); |
| input i_clk; |
| input i; |
| input i_reg; |
| output o_reg; |
| output o_wire; |
| output o_mr, o_mw, o_ml; |
| |
| // Enable this to see how it doesn't fail on yosys although it should |
| //reg o_wire; |
| // Enable this instead of the above to see how logic can be mapped to a wire |
| logic o_wire; |
| // Enable this to see how it doesn't fail on yosys although it should |
| //reg i_reg; |
| // Disable this to see how it doesn't fail on yosys although it should |
| //reg o_reg; |
| |
| logic l_reg; |
| |
| // Enable this to tst if logic-turne-reg will catch assignments even if done before it turned into a reg |
| assign l_reg = !o_reg; |
| initial o_reg = 1'b0; |
| always @(posedge i_clk) |
| begin |
| o_reg <= !o_reg; |
| l_reg <= !o_reg; |
| end |
| |
| assign o_wire = !o_reg; |
| // Uncomment this to see how a logic already turned intoa reg can be freely assigned on yosys |
| assign l_reg = !o_reg; |
| |
| sub_mod sm_inst ( |
| .i_in(1'b1), |
| .o_out(o_reg) |
| ); |
| |
| wire mw1[0:1]; |
| wire mw2[0:1]; |
| wire mw3[0:1]; |
| reg mr1[0:1]; |
| reg mr2[0:1]; |
| reg mr3[0:1]; |
| logic ml1[0:1]; |
| logic ml2[0:1]; |
| logic ml3[0:1]; |
| |
| assign o_mw = mw1[i]; |
| assign o_mr = mr1[i]; |
| assign o_ml = ml1[i]; |
| |
| assign mw1[1] = 1'b1; |
| //assign mr1[1] = 1'b1; |
| assign ml1[1] = 1'b1; |
| always @(posedge i_clk) |
| begin |
| mr2[0] = 1'b0; |
| mw2[0] = 1'b0; |
| ml2[0] = 1'b0; |
| end |
| |
| always @(posedge i_clk) |
| begin |
| mr3[0] <= 1'b0; |
| mw3[0] <= 1'b0; |
| ml3[0] <= 1'b0; |
| end |
| |
| endmodule |
| |