Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
verilog中的32位桶形移位器没有输入_Verilog - Fatal编程技术网

verilog中的32位桶形移位器没有输入

verilog中的32位桶形移位器没有输入,verilog,Verilog,我正在创建一个具有多个MUX的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) begi

我正在创建一个具有多个MUX的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]

但在模拟中,我注意到换档器中的输入a没有值,在modelsim中,它显示为'32'hzzzz'。真的不知道发生了什么。

解决方法是查看波形并跟踪信号丢失的位置。我们无法帮助您,因为我们不知道“mux”的作用。对不起,mux是2:1多路复用器。我检查了换档器中的波形,似乎a和b没有连接,因为它们没有值。但是在测试台上,我明确地连接了它们。你是如何注意到输入是“z”的?这通常是输入为的网络的初始值。在您的情况下可能是编译问题。你真的编译了测试台吗?你是否输入了
vsim shifter\u 32bit
而不是
vsim shifter\u test
?我使用GUI选择了文件,所以这应该不是问题。解决方法是查看波形并跟踪信号丢失的位置。我们无法帮助您,因为我们不知道“mux”的作用。对不起,mux是2:1多路复用器。我检查了换档器中的波形,似乎a和b没有连接,因为它们没有值。但是在测试台上,我明确地连接了它们。你是如何注意到输入是“z”的?这通常是输入为的网络的初始值。在您的情况下可能是编译问题。您真的编译了测试台吗?您是否键入了
vsim shifter\u 32bit
而不是
vsim shifter\u test
?我使用GUI选择了文件,所以这应该不是问题所在。
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;