| 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 | |