Я создаю 32-битный шифтер с несколькими муксами, вот код:
module shifter_32bit(a, b, out);
input [31:0] a;
input [4:0] b;
output wire [31:0] out;
genvar gv_i;
genvar gv_j;
genvar step;
generate
for (gv_i = 0; gv_i < 5; gv_i = gv_i+1) begin: level
for(gv_j = 0; gv_j < 32; gv_j = gv_j+1) begin: bit
wire mux_wire;
if(gv_i == 0) begin
if (gv_j - (1<<gv_i) < 0) begin
mux mux_s(b[gv_i], a[gv_i], 1'b0, mux_wire);
end else begin
mux mux_s(b[gv_i], a[gv_i], a[gv_i - (1<<gv_i)], mux_wire);
end
end else if(gv_i == 4) begin
if (gv_j - (1<<gv_i) < 0) begin
mux mux_s(b[gv_i], a[gv_i], 1'b0, out[gv_j]);
end else begin
mux mux_s(b[gv_i], a[gv_i], a[gv_i - (1<<gv_i)], out[gv_j]);
end
end else begin
if (gv_j - (1<<gv_i) < 0) begin
mux mux_s(b[gv_i], level[gv_i-1].bit[gv_j].mux_wire, 1'b0, mux_wire);
end else begin
mux mux_s(b[gv_i], level[gv_i-1].bit[gv_j].mux_wire, level[gv_i-1].bit[gv_j - (1<<gv_i)].mux_wire, mux_wire);
end
end
end
end
endgenerate
endmodule // a[31:0], out[31:0]
А вот и тестовый стенд:
module shifter_test;
reg [31:0] a = 32'd4;
reg [4:0] step = 5'd4;
wire [31:0] out;
shifter_32bit shifter(a,step,out);
initial
begin
#50 a = 32'd4;
#50 a = 32'd8;
#50;
end
endmodule // mux_4way_test;
Но в симуляции я заметилэтот вход a в переключателе не имеет значения, в моделях он отображается как '32'hzzzzzzzz'. На самом деле понятия не имею, что происходит.