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