错误(10734):SWSelector.v处的Verilog HDL错误(13):选择器不是常量

时间:2018-11-13 17:16:24

标签: verilog

请参阅我以前的文章: Error (10482): VHDL error: object "select_vector" is used but not declared

我将代码从VHDL转换为verilog,但是现在出现此错误:

  

(错误(10734):SWSelector.v处的Verilog HDL错误。(13):选择器不是   常量)

任何建议如何处理?选择器开关有8种可能来自解码器。因此,每当选择器的值匹配3'b000时,我都希望将rq分配给请求。这是我的代码:

module SWSelector(
input [7:0] rq,
input [2:0] selector,
output [7:0] request
);
localparam NUM=3'b000;
generate
genvar i;
for(i=0;i<7;i=i+1)
    begin: label
    if(selector == NUM)
        begin
            assign request[i] = rq[i];
        end 
    else 
        begin
        assign request[i]=0;
        end
    end
endgenerate
endmodule

1 个答案:

答案 0 :(得分:0)

由于if语句在生成中,因此您要让该工具预先评估selector的设置,以便找出selecter == NUM的评估结果,但您的工具却没有不知道是因为它是信号,而不是参数。

您要使用generate创建一个Always块,可以在其中检查selector的值,如下所示:

module SWSelector(
    input [7:0] rq,
    input [2:0] selector,
    output reg [7:0] request
);
    localparam NUM=3'b000;
    generate
        genvar i;
        for(i=0;i<7;i=i+1)
        begin: label
            always @* begin
                if(selector == NUM)
                    request[i] = rq[i];
                else
                    request[i]=0;
            end
        end
    endgenerate
endmodule

或者,如toolic所说,您可以使用三元数和assign

修改:

不生成:

module SWSelector(
    input [7:0] rq,
    input [2:0] selector,
    output reg [7:0] request
);
    localparam NUM=3'b000;

    integer i;
    always @* begin
        for(i=0;i<7;i=i+1) 
            if(selector == NUM)
                request[i] = rq[i];
            else
                request[i]=0;
     end
endmodule