请教一个关于三目运算的问题
时间:10-02
整理:3721RD
点击:
input wire go,
.......localparam DVSR = 5000000;
reg[22:0] ms_reg;
.......
assign ms_next=(clr || (ms_reg==DVSR && go)) ? 4'b0 :
(go) ? ms_reg + 1:
ms_reg;
请问这段三目运算应该怎么理解?
.......localparam DVSR = 5000000;
reg[22:0] ms_reg;
.......
assign ms_next=(clr || (ms_reg==DVSR && go)) ? 4'b0 :
(go) ? ms_reg + 1:
ms_reg;
请问这段三目运算应该怎么理解?
先计算(clr || (ms_reg==DVSR && go)),如果为1,则给ms_next赋值4'b0 ,
如果为0,则判断go是否为1,如果go为1,则赋值ms_reg + 1,否则赋值ms_reg。
就相当于嵌套的if else
要有括号,否则容易出错。
DVSR && go这个逻辑与是怎么运算的
我觉得,仿真(综合)工具的理解如下:assign ms_next=(clr || ( (ms_reg==DVSR) && go)) ? 4'b0 :
( (go) ? ms_reg + 1: ms_reg );
所以写代码的时候,改写()的时候就给个,这样大家都没有歧义。
5楼正解。
“==”的运算优先级高于&&,所以先执行“ms_reg==DVSR”。
但从代码可读性来说,最好写成“(ms_reg==DVSR) && go”
