用三元运算符替换触发器复位:RTL仿真与综合效果是否一致?
使用三元运算符替换触发器复位逻辑的可行性分析
异步复位场景
完全可以用三元运算符替换传统的if-else复位逻辑,代码行数更少,逻辑清晰,可读性并不会打折扣。
你给出的两段异步复位RTL代码,在仿真和综合阶段的效果完全一致:
代码1(if-else写法):
always_ff @(posedge clk, posedge ares) begin if (ares) begin signal <= a; end else begin signal <= b; end end
代码2(三元运算符写法):
always_ff @(posedge clk, posedge ares) begin signal <= ares ? a : b; end
两者都会被综合成带异步置位/复位的触发器,仿真时的行为也完全相同:当ares上升沿到来时,signal立即被赋值为a;时钟上升沿且ares无效时,signal被赋值为b。
同步复位场景
同步复位下,同样可以用三元运算符替换if-else逻辑,且两种写法的仿真与综合效果也一致。
举个例子:
传统if-else同步复位写法:
always_ff @(posedge clk) begin if (sres) begin signal <= a; end else begin signal <= b; end end
三元运算符写法:
always_ff @(posedge clk) begin signal <= sres ? a : b; end
这两段代码都会被综合成带同步复位的触发器,仿真时只有在时钟上升沿且sres有效时,signal才会被赋值为a;否则在时钟上升沿时赋值为b,行为完全一致。
内容的提问来源于stack exchange,提问作者Mahmoud Maarouf
相关产品推荐
相关产品推荐

