请参阅我以前的文章: 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
答案 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