Verilog 冗余条件运算符
我在verilog代码中多次遇到这种编码风格:Verilog 冗余条件运算符,verilog,Verilog,我在verilog代码中多次遇到这种编码风格: input enable; input [1:0] mode; wire mode_enable; assign mode_enable = ( enable & (mode == 2'b00) ) ? 1'b1 : 1'b0; 这里条件运算符的用途是什么?这似乎是多余和混乱的,因为我认为这会产生完全相同的结果: assign mode_enable = ( enable & (mode == 2'b00) ); 这有助于模拟
input enable;
input [1:0] mode;
wire mode_enable;
assign mode_enable = ( enable & (mode == 2'b00) ) ? 1'b1 : 1'b0;
这里条件运算符的用途是什么?这似乎是多余和混乱的,因为我认为这会产生完全相同的结果:
assign mode_enable = ( enable & (mode == 2'b00) );
这有助于模拟或指导合成吗?更新问题:
(enable&(mode==2'b00))
和(enable&(mode==2'b00))之间唯一的区别是什么?1'b1:1'b0
是后者在合成时推断出的mux。合成甚至可以优化mux
RLT设计师想要mux的原因:
对原问题: 只有当
b
和c
为单位时,它才是冗余的。若它们是多位宽度,那个么方程就不能简化<如果b
和c
在相同的位索引上都有a 1值,则code>a将为1
例如,假设b
和c
的宽度为2位:(assigna=(b&c)?1'b1:1'b0
)
=2b
=3,c
将是1,因为a
=2b&c
=2b
=1,c
将为0,因为a
=0b&c
a
、b
和c
的大小都不是1,则不会给出相同的结果:
assign a = b & c;
但这是一样的:
assign a = b && c;
b和c的尺寸是多少?好问题。这是我看到的简化版本,但我认为b和c都是计算为单个位的表达式。我需要找到代码来查看。因为很多人都指出,如果我们处理多位信号,这并不是多余的,所以我调整了问题以使其更清楚。因此,总结一下:除非我有很好的理由,否则这不是我想做的事。我会问写代码的人,但他已经不在这里工作了。谢谢