iverilog/ivtest/ivltests/param_select3.v

55 lines
1.1 KiB
Verilog

/*
* This program demonstrates non-constant part selects
* applied to a parameter value.
*/
module main;
parameter foo = 32'h76543210;
reg [3:0] tmp;
reg [3:0] idx;
initial begin
if (foo[0 +: 4] !== 4'h0) begin
$display("FAILED -- %b !== 0", foo[0 +: 4]);
$finish;
end
if (foo[4 +: 4] !== 4'h1) begin
$display("FAILED -- %b !== 1", foo[4 +: 4]);
$finish;
end
if (foo[8 +: 4] !== 4'h2) begin
$display("FAILED -- %b !== 2", foo[8 +: 4]);
$finish;
end
if (foo[12+: 4] !== 4'h3) begin
$display("FAILED -- %b !== 3", foo[12 +: 4]);
$finish;
end
for (idx = 0 ; idx < 8 ; idx = idx + 1) begin
tmp = foo[(idx*4) +: 4];
if (tmp !== idx) begin
$display("FAILED -- %b !== %b", idx, tmp);
$finish;
end
end
for (idx = 0 ; idx < 8 ; idx = idx + 1) begin
tmp = foo[(idx*4+3) -: 4];
if (tmp !== idx) begin
$display("FAILED -- %b !== %b", idx, tmp);
$finish;
end
end
$display("PASSED");
end
endmodule // main