Verilog在桶移位器的Generate语法中为每个测试用例返回X

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)

在写了一个模块为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

模块一门(输入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
上有多个驱动程序。Change
wire[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]