本帖最后由 GoldSunMonkey 于 2012-3-15 19:45 编辑
A=0; //初始化A的值
B=0;//初始化B的值
case(ADDRESS)
5'b00???: A=1;//只要高两位为00,不管低三位是什么,都让A为1
5'b01???: B=1;//只要高两位为01,不管低三位是什么,都让B为1
5'b10?00,5'b11?00://如果最高两位是10或者11,第3位不管是什么,最低两位是00的话,执行 下面的
语句块,其实,完全可以用5'b1??00代替,如果你不在乎高阻态和未知态的话!
begin
A=1;//给A赋1
B=1;//给B赋1
end
endcase
解释:想算对结果,必须得理解阻塞赋值的特点才行。
阻塞赋值的特点是如果对一个信号两次赋值的话,第二次赋值有效。刚开始的时候你赋初始值都为
0,然后会根据ADDRESS的值对A和B的值进行改动,这时如果你的ADDRESS为5'b0X000,所以仅对A
进行了第二次赋值,赋为1,然后跳出CASE,而B没有变化,这也就是你的结果。
学习verilog,我觉得首先要分清阻塞赋值和非阻塞赋值的区别,很重要,不过只要是verilog的资料
都会有说这方面的。
|