32-битный баррель в Verilog не имеет ввода - PullRequest
1 голос
/ 27 октября 2019

Я создаю 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'. На самом деле понятия не имею, что происходит.

...