请教verilog的语句解析。assign a= (b=1)?(c && d) ? 1'b1:1'b0:1'b0;

这两个问号是如何对应给a赋值的?

当b=0的时候a的值为0,当b=1时,a的值取决于c,d的值,当c=1,d=1时a的值等于1,当c=1,d=0或者c=0,d=1或者c=0,d=0时a的值为0。

首先会判断b的值是否等于1,等于0,则直接对a进行赋值为0,如果b的值为1,那么会执行(c && d) ? 1'b1:1'b0,然后根据c&&d的结果判断赋值的结果,当c=1,d=1,时a赋值为1,其他情况都赋值为0。

扩展资料:

Verilog是一种大小写敏感的硬件描述语言。其中,它的所有系统关键字都是小写的。

Verilog具有一些编译指令,它们的基本格式为`<keyword>,注意第一个符号不是单引号,而是键盘上数字1左边那个键对应的撇号。常用的编译指令有文本宏预定义`define、`include,它们的功能与C语言中类似,分别提供文本替换、文件包含的功能。

三目运算符“表达式1?表达式2:表达式3”,的执行为,先判断表达式1的结果,结果为真执行表达式2,否则执行表达式3。

Verilog还允许设计人员为每个延迟时间设置最大值、典型值、最小值,在编译阶段可以通过编译代码选择其中一个。

参考资料来源:百度百科-VerilogHDL

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-01
写的代码风格不好,致使别人很难理解,如果加上括号就好理解了.
assign a= (b=1)? ((c && d) ? 1'b1:1'b0) :1'b0; 我在后面加上括号
先判断b的值,不过我认为verilog中的等于应该是==而不是=吧,也可以直接写(b),
1.如果b等于0,则a的值就是0,不管你的cd是多少。
2.如果b=1,则进入我加的括号里面的那个问号判断,这时候再判断c&&d的值,如果是1,a=1,如果是0,a=0
所以我们可以给出真值表 tab
b 0 1 1 1 1
c x 1 0 0 1
d x 1 0 1 0
a 0 1 0 0 0本回答被提问者和网友采纳
第2个回答  2012-12-23
1111
相似回答