Verilog为每个测试用例返回X为桶式移位器生成语法

时间:2014-11-11 21:03:22

标签: verilog hdl

在写了一个8位桶形移位器的模块并旋转,它返回x输出,我不知道如何解决它! 我应该用生成语法编写这个模块,我上传了4位桶形移位器的图片并旋转

modeling

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

1 个答案:

答案 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];