在写了一个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);
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
答案 0 :(得分:1)
您的测试平台中W
上有多个驱动程序。将wire [8:0]W = '{0, 0, 0, 0, 0, 0, 0, 0, 0};
更改为wire [8:0] W;
,您会看到其中有Xs的1s。
其他说明:
'{}
因为分配打包数组非常罕见。我建议更改更标准的格式。示例:Se = '{0, 0, 0, 0, 1, 0, 0, 0};
到Se = 8'b0000_1000;
或Se = 8'h8;
input [7:0]D, [7:0]S, SbarR, output [8:0]W
推断SbarR
为[7:0] SbarR
。建议更改为input [7:0] D, S, input SbarR, output [7:0] W
W[8]
,WW[8]
和WW[*][8]
,使它们为8位宽而不是9位。 wire [7:0] W;
,wire [7:0] WW [7:0];