微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教一个关于三目运算的问题

请教一个关于三目运算的问题

时间: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;

请问这段三目运算应该怎么理解?

先计算(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”

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top