iverilog/ivtest/ivltests/sv_unpacked_wire.v

43 lines
827 B
Verilog

module main;
localparam width = 8;
reg clk;
reg [1:0] addr;
logic [width-1:0] data [0:3];
reg [width-1:0] Q;
// Does SystemVerilog support continuous assignment
// of unpacked arrays? I think it does, but the LRM
// is really not clear on this.
wire [width-1:0] data_x[0:3];
assign data_x = data;
always @(posedge clk)
Q <= data_x[addr];
reg [2:0] idx;
initial begin
clk = 0;
data[0] = 0;
data[1] = 1;
data[2] = 2;
data[3] = 3;
addr = 0;
for (idx = 0 ; idx < 4 ; idx += 1) begin
clk = 0;
#1 addr = idx[1:0];
#1 clk = 1;
#1 if (Q !== data[addr]) begin
$display("FAILED -- data[%0d]==%h, Q==%h", addr, data[addr], Q);
$finish;
end
end
$display("PASSED");
end // initial begin
endmodule // main