3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-07 09:55:20 +00:00
yosys/tests/simple/reg_wire_error.v
Udi Finkelstein 2b9c75f8e3 This PR should be the base for discussion, do not merge it yet!
It correctly detects reg/wire mix and incorrect use on blocking,nonblocking assignments within blocks and assign statements.

What it DOES'T do:
Detect registers connected to output ports of instances.

Where it FAILS:
memorty nonblocking assignments causes spurious (I assume??) errors on yosys-generated "_ADDR", "_DATA", "EN" signals.

You can test it with tests/simple/reg_wire_error.v (look inside for the comments to enable/disable specific lines)
2018-03-11 23:09:34 +02:00

41 lines
959 B
Verilog

module sub_mod(input i_in, output o_out);
assign o_out = i_in;
endmodule
module test(i_clk, i_reg, o_reg, o_wire);
input i_clk;
input i_reg;
output o_reg;
output o_wire;
// 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)
);
endmodule