(1)
assign c=(sel)?a:b;
(2)
always @(sel or a or b) begin
if(sel)
c = a;
else
c = b;
end
这两段代码,我用quartus综合出来的结果都是一个选择器,可是我私觉得,这样两种风格的代码,咱们都会偏向使用第一种,除了书写方便外,是否还有别的优点?如资源分配等?
发表于
2012-9-25 21:18 |
只看该做者
第一种好。 if else的逻辑是:只要条件不符合,就走else路。 试想若是上级电路出错,出现sel=1'bx的时候,那么代码(2)的c就会走else路=b。 而? :的运行结果跟实际电路更接近:连控制端sel都是不定值了,那c毫无疑问地应该是x,除非a=b。 总之,代码(1)在综合结果、资源利用等方面和(2)是彻底一致的,但(1)的前仿结果跟后仿、跟实际电路更接近。php |
发表于
2012-10-1 09:46 |
只看该做者
编码规范严格的企业里,是规定要用第二种的, 可靠性比第一种高,不容易写错ide |
请教各位大虾,关于
Verilog
中三目运算符的用法
就是这个 out=s?a:b;这个用法只能用在assign中吗?谢谢各位了
always initial均可以
楼上正解
shxr (2010-7-13 09:21:40)
那可以用非阻塞赋值如“out<=s?a:b;”吗?
回楼上能够你这至关于 assign out_t=s?a:b; always@(...) out<=out_t;
谢谢!指点
这条语句就至关于一个if---else语句
注意:
if
语句和
case
语句都只能用于
always
语句内部,若是要在
always
语句以外应用条件语句,可用三目运算符
?
:以下:
assign data = ( sel ) ? a : b ;