首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >N位数的If-否则条件

N位数的If-否则条件
EN

Stack Overflow用户
提问于 2015-11-10 01:31:14
回答 1查看 1.2K关注 0票数 0

我想设计一个波纹进位加法器,它将增加n位A和B数。在添加之前,我希望检查任何输入是否为零。如果任何值为零,我希望返回另一个输入作为输出。我的剧本和下面的类似-

代码语言:javascript
复制
module RCA #(parameter n=10) (input [n-1:0] A, input [n-1:0] B,output [n-1:0] R);

wire [n-1:0] r1;
wire [n:0] carry;
assign carry[0]=0;

genvar i;
generate
for (i=0;i<n;i=i+1) begin:ripple_block
FA fa(.a(p[i]),.b(q[i]),.s(r1[i]),.cout(carry[i+1]));
end
endgenerate

if (p==0) begin:a1
assign R=q;
end

if (q==0) begin:a2
assign R=p;
end

else begin:a3
assign R=r1;
end

endmodule

我收到错误了

代码语言:javascript
复制
"Elaboration time unknown or bad value encountered for generate if-statement condition 
expression. Please make sure it is elaboration time constant."

请帮我找出脚本中的错误。

谢谢法哈纳

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 02:28:12

您以错误的方式使用了条件。if..else条件必须在过程块中使用。在这里,它直接在模块内部使用。

编译器期望if..elsegenerate块中。但我想这不是你代码的目的。

只需删除条件并使用三元操作符 (? :)。因此,代码如下所示:

代码语言:javascript
复制
module RCA #(parameter n=10) (input [n-1:0] A, input [n-1:0] B,output [n-1:0] R);
// ...
// ...
generate
//...
//...
endgenerate

//if (p==0) begin:a1
/***Use of ternary operator here***/
  assign R= (p==0) ? q : ((q==0) ? p : r1); 
// end

// if (q==0) begin:a2
// assign R=p;
// end
// 
// else begin:a3
// assign R=r1;
// end

endmodule

也可以有其他方法。使用always_combalways @(*)是一些替代方案。有关三元操作符和您的问题的更多信息,请参阅链接。和往常一样,SystemVerilog 1800-2012年第11章和第12章可能很有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33621381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档