verilog问题,能解释下为啥是这个答案吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog问题,能解释下为啥是这个答案吗相关的知识,希望对你有一定的参考价值。

在下一个程序段中,当ADDRESS的值等于5'b0X000时,问casex执行完后A和B的值是多少。
A=0;
B=0;
casex(ADDRESS)
5'b00???: A=1;
5'b01???: B=1;
5'b10?00,5'b11?00:
begin
A=1;
B=1;
end
endcase
标准答案: A=1 and B=0;

casex是顺序执行的满足条件就退出
所以5‘b00???是满足5’b0x000的
因为这里‘x’和‘?’ 一样会被看成是任意满足的数值。
如果在实际电路里面这种语义的东西是综合不出来的。所以请尽量避免进到casex()的信号是带有x数值的信号。追问

(5‘b00???是满足5’b0x000 )?那(5'b01???不满足5’b0x000吗)
0和x匹配,1和x就不匹配了?

追答

顺序执行的意思就是匹配完了第一个就不会匹配第二个了。否则也没有parallel_case的说法了。

参考技术A 在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。
在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。

题中5‘b0X000的X不考虑,所以与之匹配的是5’b00???。A的值为1,B的值不变
参考技术B case语句条件互斥不需要考虑优先级,但是casex是有优先级的,上面的优先级高所以答案就是你看到的了。。

verilog: 看代码时遇一问题:把两个12位的数扩展成13位相加,为啥在前面补最高位,不应该补0吗?

默认的reg类型是unsigned。所以需要程序员自己判断这个变量是不是有可能是负数。有可能的话就需要做符号扩展。就是你看见的东西。
如果声明成signed reg的话,就不需要做扩展了,只需要保证被赋值的变量位数够用就行了。追问

如果原来的符号位为1,那么数不是变了吗?如1_1011(-11)变成11_1011(-27)

追答

你写的数都是-5. 取反加一。

追问

也就是说我们处理的数据都是以补码形式表示的

参考技术A 这样应该是减法吧,变成补码相加的 参考技术B 是不是 有符号位的加法,最高位可能代表符号吧?
最好贴出上下文看看。追问

如果原来的符号位为1,那么数不是变了吗?如1_1011(-11)变成11_1011(-27)

追答

关键代码贴出来看看啊,否则怎么帮你分析?

以上是关于verilog问题,能解释下为啥是这个答案吗的主要内容,如果未能解决你的问题,请参考以下文章

你能解释一下为啥 DirectoryInfo.GetFiles 会产生这个 IOException 吗?

verilog: 看代码时遇一问题:把两个12位的数扩展成13位相加,为啥在前面补最高位,不应该补0吗?

为啥 type(nil)==nil 是假的?

verilog,为啥设计组合电路时不能引入反馈

verilog中if else中能套if else吗,有啥错误啊,为啥??? case中能套if else吗 case中能套case吗

verilog中除法运算在modelsim仿真中只要一个时钟周期就能完成,实际上也是这样吗?