Files
iverilog/ivtest/ivltests/array_slice_concat.v
T

37 lines
1.1 KiB
Verilog
Raw Normal View History

2023-10-23 16:00:38 +09:00
module ArraySliceWithNarrowStart(
input wire [159:0] a,
input wire start,
output wire [95:0] out
);
wire [31:0] a_unflattened[0:4];
assign a_unflattened[0] = a[31:0];
assign a_unflattened[1] = a[63:32];
assign a_unflattened[2] = a[95:64];
assign a_unflattened[3] = a[127:96];
assign a_unflattened[4] = a[159:128];
wire [31:0] array_slice_6[0:2];
assign array_slice_6[0] = a_unflattened[{2'h0, start} > 3'h4 ? 3'h4 : {2'h0, start} + 3'h0];
assign array_slice_6[1] = a_unflattened[{2'h0, start} > 3'h3 ? 3'h4 : {2'h0, start} + 3'h1];
assign array_slice_6[2] = a_unflattened[{2'h0, start} > 3'h2 ? 3'h4 : {2'h0, start} + 3'h2];
assign out = {array_slice_6[2], array_slice_6[1], array_slice_6[0]};
endmodule
2023-10-26 11:30:56 +09:00
module top;
reg [159:0] a;
reg start;
wire [95:0] out;
2024-01-20 11:25:35 -08:00
2023-10-26 11:30:56 +09:00
ArraySliceWithNarrowStart dut(.a(a), .start(start), .out(out));
2024-01-20 11:25:35 -08:00
2023-10-26 11:30:56 +09:00
initial begin
a = {32'h44444444, 32'h33333333, 32'h22222222, 32'h11111111};
start = 1;
2024-01-01 11:01:19 -08:00
#1;
2023-10-26 11:30:56 +09:00
if (out !== 96'h444444443333333322222222) begin
$display("FAILED");
$finish;
end
$display("PASSED");
2024-01-20 11:25:35 -08:00
end
2023-10-26 11:30:56 +09:00
endmodule