Verilog在桶移位器的Generate语法中为每个测试用例返回X
在写了一个模块为8位桶移位器和旋转,它返回x的输出,我不知道如何解决它! 我应该写这个模块与生成语法,我上传了4位桶移位器和旋转图片Verilog在桶移位器的Generate语法中为每个测试用例返回X,verilog,hdl,Verilog,Hdl,在写了一个模块为8位桶移位器和旋转,它返回x的输出,我不知道如何解决它! 我应该写这个模块与生成语法,我上传了4位桶移位器和旋转图片 module OneGate(input D, S, W0, output W); wire Temp; and (Temp, D, S); or (W, Temp, W0); endmodule module Barrel_Shifter_8_bit(input [7:0]D, [7:0]S, SbarR, output [8:0]W)
module OneGate(input D, S, W0, output W);
wire Temp;
and (Temp, D, S);
or (W, Temp, W0);
endmodule
module Barrel_Shifter_8_bit(input [7:0]D, [7:0]S, SbarR, output [8:0]W);
integer i;
wire Temp;
wire [8:0]WW[8:0];
genvar col, row;
generate
for (row = 0; row < 8; row = row + 1) begin
for (col = 0; col < 8; col = col + 1) begin
if (col == 0) begin
assign WW[row][0] = 0;
end
if (row + col < 8)
OneGate Gates(D[row + col], S[col], WW[row][col], WW[row][col+1]);
else
OneGate Gates(D[col - ( 3 - row)] & SbarR, S[col], WW[row][col], WW[row][col+1]);
end
end
endgenerate
assign W = '{WW[0][7], WW[1][7], WW[2][7], WW[3][7], WW[4][7], WW[5][7], WW[6][7], WW[7][7], WW[8][7]};
endmodule
module Test;
reg [7:0]In = '{0, 0, 1, 1, 0, 0, 0, 0};
reg [7:0]Se = '{0, 0, 0, 0, 0, 0, 1, 0};
wire [8:0]W = '{0, 0, 0, 0, 0, 0, 0, 0, 0};
Barrel_Shifter_8_bit TempB(In, Se, 0, W);
initial begin
#10;
#50 Se = '{0, 0, 0, 0, 1, 0, 0, 0};
#50 Se = '{0, 0, 0, 0, 0, 1, 0, 0};
#50 Se = '{0, 0, 0, 0, 0, 0, 0, 1};
#50 Se = '{0, 0, 0, 0, 0, 0, 1, 0};
#50;
end
endmodule
模块一门(输入D、S、W0、输出W);
导线温度;
和(温度、D、S);
或(W,温度,W0);
端模
模块桶形移位器8位(输入[7:0]D、[7:0]S、SbarR、输出[8:0]W);
整数i;
导线温度;
电线[8:0]WW[8:0];
genvar col,世界其他地区;
生成
对于(行=0;行<8;行=行+1)开始
对于(col=0;col<8;col=col+1)开始
如果(col==0)开始
分配WW[行][0]=0;
终止
如果(行+列<8)
一个闸门(D[行+列]、S[列]、WW[行][列]、WW[行][列+1]);
其他的
一个闸门(D[col-(3排)]和SbarR,S[col],WW[row][col],WW[row][col+1]);
终止
终止
最终生成
分配W={WW[0][7]、WW[1][7]、WW[2][7]、WW[3][7]、WW[4][7]、WW[5][7]、WW[6][7]、WW[7][7]、WW[8][7];
端模
模块测试;
reg[7:0]In='{0,0,1,1,0,0,0,0};
reg[7:0]Se='{0,0,0,0,0,0,1,0};
wire[8:0]W='{0,0,0,0,0,0,0,0,0};
桶形移位器8位TempB(In,Se,0,W);
初始开始
#10;
#50 Se='{0,0,0,0,1,0,0,0};
#50 Se='{0,0,0,0,0,1,0,0};
#50 Se='{0,0,0,0,0,0,0,0,1};
#50 Se='{0,0,0,0,0,0,1,0};
#50;
终止
端模
在测试台上的W
上有多个驱动程序。Changewire[8:0]W='{0,0,0,0,0,0}代码>至导线[8:0]W
您将看到1s,其中有Xs
其他说明:
“{}
因为分配压缩数组是非常少见的。我建议更改为更标准的格式。示例:Se='{0,0,0,0,1,0,0,0,0}代码>至<代码>Se=8'b0000_1000代码>或Se=8'h8代码>
输入[7:0]D,[7:0]S,SbarR,输出[8:0]W
推断SbarR
为[7:0]SbarR
。建议更改为输入[7:0]D,S,输入SbarR,输出[7:0]W
W[8]
、WW[8]
和WW[*][8]
从不使用,请将它们设置为8位宽,而不是9位宽<代码>导线[7:0]W代码>,wire[7:0]WW[7:0]代码>