Add regression tests for mixed procedural/continuous assignments.
This commit is contained in:
parent
53b8220b9f
commit
2299fc1b2b
|
|
@ -0,0 +1,2 @@
|
|||
ivltests/sv_mixed_assign_error1.v:10: error: Cannot perform procedural assignment to array 'q' because it is also continuously assigned.
|
||||
Elaboration failed
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
ivltests/sv_mixed_assign_error2.v:15: error: Cannot perform procedural assignment to array word 'p['sd1]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error2.v:16: error: Cannot perform procedural assignment to array word 'p[i]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error2.v:17: error: Cannot perform procedural assignment to array word 'q['sd0]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error2.v:18: error: Cannot perform procedural assignment to array word 'q['sd1]' because it is also continuously assigned.
|
||||
4 error(s) during elaboration.
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
ivltests/sv_mixed_assign_error3.v:10: error: Cannot perform procedural assignment to variable 'q' because it is also continuously assigned.
|
||||
Elaboration failed
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
ivltests/sv_mixed_assign_error4.v:13: error: Cannot perform procedural assignment to part select 'v['sd3:'sd2]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:14: error: Cannot perform procedural assignment to part select 'v['sd5:'sd4]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:18: error: Cannot perform procedural assignment to part select 'v['sd2+:'sd2]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:19: error: Cannot perform procedural assignment to part select 'v['sd5-:'sd2]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:22: error: Cannot perform procedural assignment to part select 'v[lsb+:'sd2]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:23: error: Cannot perform procedural assignment to part select 'v[msb-:'sd2]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:26: error: Cannot perform procedural assignment to bit select 'v['sd2]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:27: error: Cannot perform procedural assignment to bit select 'v['sd4]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:30: error: Cannot perform procedural assignment to bit select 'v[lsb]' because it is also continuously assigned.
|
||||
ivltests/sv_mixed_assign_error4.v:31: error: Cannot perform procedural assignment to bit select 'v[msb]' because it is also continuously assigned.
|
||||
10 error(s) during elaboration.
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
// Check different words in an array word can be procedurally and continuously assigned.
|
||||
module test();
|
||||
|
||||
logic [7:0] a[2:0];
|
||||
|
||||
assign a[0] = 8'd1;
|
||||
|
||||
reg failed = 0;
|
||||
|
||||
initial begin
|
||||
a[1] = 8'd2;
|
||||
#0 $display("%b %b %b", a[0], a[1], a[2]);
|
||||
if (a[0] !== 8'd1 || a[1] !== 8'd2 || a[2] !== 8'bx) failed = 1;
|
||||
/*
|
||||
* IEEE 1800-2017 states that "A force or release statement shall not be
|
||||
* applied to a variable that is being assigned by a mixture of continuous
|
||||
* and procedural assignments.", but some other compilers allow this. It
|
||||
* looks to be more work to detect and report it as an error than to allow
|
||||
* it.
|
||||
*/
|
||||
force a[0] = 8'd3;
|
||||
#0 $display("%b %b %b", a[0], a[1], a[2]);
|
||||
if (a[0] !== 8'd3 || a[1] !== 8'd2 || a[2] !== 8'bx) failed = 1;
|
||||
force a[1] = 8'd4;
|
||||
#0 $display("%b %b %b", a[0], a[1], a[2]);
|
||||
if (a[0] !== 8'd3 || a[1] !== 8'd4 || a[2] !== 8'bx) failed = 1;
|
||||
release a[0];
|
||||
#0 $display("%b %b %b", a[0], a[1], a[2]);
|
||||
if (a[0] !== 8'd1 || a[1] !== 8'd4 || a[2] !== 8'bx) failed = 1;
|
||||
release a[1];
|
||||
#0 $display("%b %b %b", a[0], a[1], a[2]);
|
||||
if (a[0] !== 8'd1 || a[1] !== 8'd4 || a[2] !== 8'bx) failed = 1;
|
||||
|
||||
if (failed)
|
||||
$display("FAILED");
|
||||
else
|
||||
$display("PASSED");
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
// Check different parts of a variable can be procedurally and continuously assigned.
|
||||
module test();
|
||||
|
||||
logic [11:0] v;
|
||||
|
||||
assign v[7:4] = 4'd1;
|
||||
|
||||
reg failed = 0;
|
||||
|
||||
initial begin
|
||||
v[11:8] = 4'd2;
|
||||
#0 $display("%b", v);
|
||||
if (v !== 12'b00100001xxxx) failed = 1;
|
||||
/*
|
||||
* IEEE 1800-2017 states that "A force or release statement shall not be
|
||||
* applied to a variable that is being assigned by a mixture of continuous
|
||||
* and procedural assignments.", but some other compilers allow this. It
|
||||
* looks to be more work to detect and report it as an error than to allow
|
||||
* it.
|
||||
*/
|
||||
force v[7:4] = 8'd3;
|
||||
#0 $display("%b", v);
|
||||
if (v !== 12'b00100011xxxx) failed = 1;
|
||||
force v[11:8] = 8'd4;
|
||||
#0 $display("%b", v);
|
||||
if (v !== 12'b01000011xxxx) failed = 1;
|
||||
release v[7:4];
|
||||
#0 $display("%b", v);
|
||||
if (v !== 12'b01000001xxxx) failed = 1;
|
||||
release v[11:8];
|
||||
#0 $display("%b", v);
|
||||
if (v !== 12'b01000001xxxx) failed = 1;
|
||||
|
||||
if (failed)
|
||||
$display("FAILED");
|
||||
else
|
||||
$display("PASSED");
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
// Check entire array cannot be both procedurally and continuously assigned.
|
||||
module test();
|
||||
|
||||
logic [7:0] p[1:0];
|
||||
logic [7:0] q[1:0];
|
||||
|
||||
assign q = p;
|
||||
|
||||
initial begin
|
||||
q = '{ 8'd0, 8'd0 };
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
// Check array word cannot be both procedurally and continuously assigned.
|
||||
module test();
|
||||
|
||||
logic [7:0] p[1:0];
|
||||
logic [7:0] q[1:0];
|
||||
|
||||
assign p[1] = 8'd2;
|
||||
|
||||
assign q = p;
|
||||
|
||||
integer i;
|
||||
|
||||
initial begin
|
||||
p[0] = 8'd3;
|
||||
p[1] = 8'd4;
|
||||
p[i] = 8'd5;
|
||||
q[0] = 8'd6;
|
||||
q[1] = 8'd7;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
// Check entire vector cannot be both procedurally and continuously assigned.
|
||||
module test();
|
||||
|
||||
logic [7:0] p;
|
||||
logic [7:0] q;
|
||||
|
||||
assign q = p;
|
||||
|
||||
initial begin
|
||||
q = 8'd0;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
// Check vector part cannot be both procedurally and continuously assigned.
|
||||
module test();
|
||||
|
||||
logic [7:0] v;
|
||||
|
||||
assign v[5:2] = 4'd0;
|
||||
|
||||
integer lsb = 0;
|
||||
integer msb = 7;
|
||||
|
||||
initial begin
|
||||
v[1:0] = 2'd1;
|
||||
v[3:2] = 2'd1;
|
||||
v[5:4] = 2'd1;
|
||||
v[7:6] = 2'd1;
|
||||
|
||||
v[0 +: 2] = 2'd2;
|
||||
v[2 +: 2] = 2'd2;
|
||||
v[5 -: 2] = 2'd2;
|
||||
v[7 -: 2] = 2'd2;
|
||||
|
||||
v[lsb +: 2] = 2'd3;
|
||||
v[msb -: 2] = 2'd3;
|
||||
|
||||
v[0] = 1'b1;
|
||||
v[2] = 1'b1;
|
||||
v[4] = 1'b1;
|
||||
v[6] = 1'b1;
|
||||
|
||||
v[lsb] = 1'b1;
|
||||
v[msb] = 1'b1;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -204,6 +204,12 @@ sv_foreach9 vvp_tests/sv_foreach9.json
|
|||
sv_foreach10 vvp_tests/sv_foreach10.json
|
||||
sv_interface vvp_tests/sv_interface.json
|
||||
sv_literals vvp_tests/sv_literals.json
|
||||
sv_mixed_assign1 vvp_tests/sv_mixed_assign1.json
|
||||
sv_mixed_assign2 vvp_tests/sv_mixed_assign2.json
|
||||
sv_mixed_assign_error1 vvp_tests/sv_mixed_assign_error1.json
|
||||
sv_mixed_assign_error2 vvp_tests/sv_mixed_assign_error2.json
|
||||
sv_mixed_assign_error3 vvp_tests/sv_mixed_assign_error3.json
|
||||
sv_mixed_assign_error4 vvp_tests/sv_mixed_assign_error4.json
|
||||
sv_module_port1 vvp_tests/sv_module_port1.json
|
||||
sv_module_port2 vvp_tests/sv_module_port2.json
|
||||
sv_module_port3 vvp_tests/sv_module_port3.json
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"type" : "NI",
|
||||
"source" : "sv_mixed_assign1.v",
|
||||
"iverilog-args" : [ "-g2009" ]
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"type" : "NI",
|
||||
"source" : "sv_mixed_assign1.v",
|
||||
"iverilog-args" : [ "-g2009" ]
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"type" : "CE",
|
||||
"source" : "sv_mixed_assign_error1.v",
|
||||
"gold" : "sv_mixed_assign_error1",
|
||||
"iverilog-args" : [ "-g2009" ]
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"type" : "CE",
|
||||
"source" : "sv_mixed_assign_error1.v",
|
||||
"gold" : "sv_mixed_assign_error1",
|
||||
"iverilog-args" : [ "-g2009" ]
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"type" : "CE",
|
||||
"source" : "sv_mixed_assign_error1.v",
|
||||
"gold" : "sv_mixed_assign_error1",
|
||||
"iverilog-args" : [ "-g2009" ]
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"type" : "CE",
|
||||
"source" : "sv_mixed_assign_error1.v",
|
||||
"gold" : "sv_mixed_assign_error1",
|
||||
"iverilog-args" : [ "-g2009" ]
|
||||
}
|
||||
Loading…
Reference in New Issue