mirror of
https://github.com/steveicarus/iverilog.git
synced 2026-09-04 08:34:09 +02:00
By adding ivtest to the iverilog source tree, it is easier to keep the regression test synchronized with the source that is being tested. This should be especially helpful for PRs that add a new feature, and have a matching ivtest PR with the regression test for that feature.
297 lines
3.7 KiB
Verilog
297 lines
3.7 KiB
Verilog
/*
|
|
* This test is derived from bug report PR#511. Mostly what it is
|
|
* doing is checking the behavior of === and wait.
|
|
*/
|
|
|
|
`timescale 1 ps / 1 ps
|
|
|
|
module I54;
|
|
|
|
initial begin
|
|
#500000
|
|
$display( "FAILED." );
|
|
$finish;
|
|
end
|
|
|
|
parameter I148 = 4096;
|
|
|
|
integer I20;
|
|
integer I57;
|
|
integer I58;
|
|
|
|
integer I137;
|
|
|
|
time I106;
|
|
time I95;
|
|
time I97;
|
|
|
|
time I122;
|
|
time I142;
|
|
time I67;
|
|
time I25;
|
|
time I83;
|
|
time I128;
|
|
time I10;
|
|
time I12;
|
|
time I73;
|
|
time I159;
|
|
|
|
reg I77;
|
|
reg I108;
|
|
reg I2;
|
|
reg I81;
|
|
reg I60;
|
|
reg I114;
|
|
reg I124;
|
|
reg I41;
|
|
|
|
reg I151;
|
|
reg I43;
|
|
reg [1:0] I68;
|
|
reg [4*8-1:0] I138;
|
|
reg [3:0] I71;
|
|
reg [3:0] I149;
|
|
reg [3:0] I6;
|
|
reg [3:0] I76;
|
|
reg I48;
|
|
reg I61;
|
|
reg I62;
|
|
reg I49;
|
|
reg I158;
|
|
reg I85;
|
|
reg [2:0] I84;
|
|
reg [2:0] I30;
|
|
reg I94;
|
|
|
|
wire I69;
|
|
wire I98;
|
|
|
|
reg I115;
|
|
reg I101;
|
|
reg I14;
|
|
reg I78;
|
|
reg I131;
|
|
reg I24;
|
|
reg I52;
|
|
reg I13;
|
|
reg I132;
|
|
reg I139;
|
|
reg I107;
|
|
|
|
wire I93;
|
|
wire [3:0] I120;
|
|
wire [3:0] I82;
|
|
wire I38;
|
|
wire I22;
|
|
wire [1:0] I46;
|
|
wire [2:0] I1;
|
|
wire [4*8-1:0] I4;
|
|
wire [3:0] I125;
|
|
wire [3:0] I36;
|
|
wire [3:0] I91;
|
|
wire [3:0] I3;
|
|
wire [3:0] I143;
|
|
wire [1:0] I72;
|
|
wire I34;
|
|
wire I150;
|
|
wire I40;
|
|
wire [1:0] I51;
|
|
|
|
reg [1:0] I39;
|
|
reg [4-1:0] I70;
|
|
|
|
wire I103;
|
|
wire I29;
|
|
|
|
wire I74;
|
|
wire I144;
|
|
|
|
reg I63;
|
|
reg I15;
|
|
reg I146;
|
|
reg I110;
|
|
reg I152;
|
|
reg I129;
|
|
reg I19;
|
|
reg I112;
|
|
reg I102;
|
|
reg I156;
|
|
reg I121;
|
|
|
|
wire I23;
|
|
wire [3:0] I118;
|
|
wire [3:0] I86;
|
|
wire I28;
|
|
wire I65;
|
|
wire [1:0] I79;
|
|
wire [2:0] I17;
|
|
wire [4*8-1:0] I133;
|
|
wire [3:0] I27;
|
|
wire [3:0] I99;
|
|
wire [3:0] I135;
|
|
wire [3:0] I90;
|
|
wire [3:0] I35;
|
|
wire [1:0] I55;
|
|
wire I8;
|
|
wire I126;
|
|
wire I5;
|
|
wire [1:0] I140;
|
|
|
|
reg [1:0] I116;
|
|
reg [4-1:0] I45;
|
|
|
|
wire I105;
|
|
wire I33;
|
|
|
|
wire I75;
|
|
wire I145;
|
|
|
|
reg I64;
|
|
reg I16;
|
|
reg I147;
|
|
reg I111;
|
|
reg I153;
|
|
reg I130;
|
|
reg I21;
|
|
reg I113;
|
|
reg I104;
|
|
reg I157;
|
|
reg I123;
|
|
|
|
wire I26;
|
|
wire [3:0] I119;
|
|
wire [3:0] I87;
|
|
wire I32;
|
|
wire I66;
|
|
wire [1:0] I80;
|
|
wire [2:0] I18;
|
|
wire [4*8-1:0] I134;
|
|
wire [3:0] I31;
|
|
wire [3:0] I100;
|
|
wire [3:0] I136;
|
|
wire [3:0] I92;
|
|
wire [3:0] I37;
|
|
wire [1:0] I56;
|
|
wire I9;
|
|
wire I127;
|
|
wire I7;
|
|
wire [1:0] I141;
|
|
|
|
reg [1:0] I117;
|
|
reg [4-1:0] I47;
|
|
|
|
wire [256:0] I59;
|
|
wire [256:0] I50;
|
|
wire [256:0] I88;
|
|
wire [256:0] I154;
|
|
wire [256:0] I89;
|
|
wire [256:0] I155;
|
|
|
|
assign I69 = I59[I20];
|
|
assign I98 = I50[I20];
|
|
assign I103 = I88[I57];
|
|
assign I29 = I154[I57];
|
|
assign I105 = I89[I58];
|
|
assign I33 = I155[I58];
|
|
|
|
wire I109 = ( ~ I94 ) & ( ~ I151 );
|
|
wire I96 = ( ~ I94 ) & ( I151 );
|
|
wire I42 = ( I94 ) & ( ~ I151 );
|
|
wire I44 = ( I94 ) & ( I151 );
|
|
|
|
always @( I114 ) begin
|
|
I132 <= #I106 I114;
|
|
I102 <= #I95 I114;
|
|
I104 <= #I97 I114;
|
|
end
|
|
|
|
always @( I124 ) begin
|
|
I139 <= #I106 I124;
|
|
I156 <= #I95 I124;
|
|
I157 <= #I97 I124;
|
|
end
|
|
|
|
initial begin
|
|
I77 = 1'b0;
|
|
#0 ;
|
|
#(I142) I77 = 1'b1;
|
|
forever #(I122/2) I77 = ~ I77;
|
|
end
|
|
|
|
initial begin
|
|
I108 = 1'b0;
|
|
#0 ;
|
|
#(I25) I108 = 1'b1;
|
|
forever #(I67/2) I108 = ~ I108;
|
|
end
|
|
|
|
initial begin
|
|
I2 = 1'b0;
|
|
#0 ;
|
|
#(I128) I2 = 1'b1;
|
|
forever #(I83/2) I2 = ~ I2;
|
|
end
|
|
|
|
initial begin
|
|
I81 = 1'b0;
|
|
#0 ;
|
|
#(I12) I81 = 1'b1;
|
|
forever #(I10/2) I81 = ~ I81;
|
|
end
|
|
|
|
initial begin
|
|
I60 = 1'b0;
|
|
#0 ;
|
|
#(I159) I60 = 1'b1;
|
|
forever #(I73/2) I60 = ~ I60;
|
|
end
|
|
|
|
initial begin
|
|
I114 = 1'b1;
|
|
#300000 ;
|
|
@( posedge I81 ) ;
|
|
@( posedge I81 ) ;
|
|
#50 I114 = 1'b0;
|
|
end
|
|
|
|
initial begin
|
|
I124 = 1'b1;
|
|
#300000 ;
|
|
@( posedge I60 ) ;
|
|
@( posedge I60 ) ;
|
|
#50 I124 = 1'b0;
|
|
end
|
|
|
|
initial begin : I53
|
|
|
|
I137 = 1600;
|
|
I20 = 40;
|
|
I57 = 0;
|
|
I58 = 80;
|
|
I106 = 150;
|
|
I95 = 300;
|
|
I97 = 0;
|
|
I151 = 1'b0;
|
|
I94 = 1'b0;
|
|
I122 = 6400;
|
|
I142 = 0;
|
|
I67 = 6270;
|
|
I25 = 0;
|
|
I83 = 6400;
|
|
I128 = 1000;
|
|
I10 = 6270;
|
|
I12 = 0;
|
|
I73 = 6400;
|
|
I159 = 1000;
|
|
|
|
wait ( I114 === 1'b1 );
|
|
wait ( I114 === 1'b0 );
|
|
wait ( I124 === 1'b0 );
|
|
|
|
$display( "PASSED" );
|
|
$finish;
|
|
|
|
end
|
|
|
|
endmodule
|