打印

请教一个verilog的问题

[复制链接]
2680|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
c1apton|  楼主 | 2012-3-14 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
Backkom80| | 2012-3-15 12:51 | 只看该作者
:lol,嘻嘻,笑而不语

使用特权

评论回复
板凳
GoldSunMonkey| | 2012-3-15 19:30 | 只看该作者
本帖最后由 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的资料
都会有说这方面的。

使用特权

评论回复
地板
GoldSunMonkey| | 2012-3-15 19:33 | 只看该作者
你不语,我语~

使用特权

评论回复
5
GoldSunMonkey| | 2012-3-15 19:33 | 只看该作者
哈哈

使用特权

评论回复
6
Backkom80| | 2012-3-16 09:37 | 只看该作者
嘻嘻,:P

使用特权

评论回复
7
GoldSunMonkey| | 2012-3-16 14:02 | 只看该作者
;P

使用特权

评论回复
8
c1apton|  楼主 | 2012-3-16 14:08 | 只看该作者
3楼,猴哥是吧,你的这个答案我百度过了,但没看懂,关于阻塞赋值和非阻塞赋值的区别我知道,我不理解的是ADDRESS为5'b0X000,为什么满足5'b00???: A=1;这个条件,自个想了半天琢磨不透,旁边有没个人问,所以才跑来这里发帖的。

使用特权

评论回复
9
c1apton|  楼主 | 2012-3-16 14:09 | 只看该作者
2# Backkom80

呵呵,新手,见笑了

使用特权

评论回复
10
GoldSunMonkey| | 2012-3-16 14:12 | 只看该作者
。。。您仔细看了没有?

使用特权

评论回复
11
GoldSunMonkey| | 2012-3-16 14:13 | 只看该作者
百度的答案是错的。你好好看下可否?

如果哪句话感觉不懂,就贴出来。我给你分析。

使用特权

评论回复
12
c1apton|  楼主 | 2012-3-16 14:28 | 只看该作者
百度的答案是错的。你好好看下可否?

如果哪句话感觉不懂,就贴出来。我给你分析。
GoldSunMonkey 发表于 2012-3-136 14:13

3楼不是说的和百度的一样的吗?
是这样的,我是在数字系统设计那本书上看到的这个题,答案是A=1,B=0,从答案来理解是,一开始给A和B赋初值A=0,B=0,当ADDRESS=5'b0X000,满足5'b00???这个条件,所以给A进行了第二次赋值,赋为1,然后跳出CASE,而B没有变化。我这样理解错了吗?
如果是这样的话,ADDRESS为5'b0X000,为什么满足5'b00???: A=1;这个条件,我在这里不懂。。。

使用特权

评论回复
13
GoldSunMonkey| | 2012-3-16 14:44 | 只看该作者
为什么一样?

使用特权

评论回复
14
c1apton|  楼主 | 2012-3-16 14:59 | 只看该作者
sorry!
begin
       A=1;//给A赋1
       B=1;//给B赋1
     end
  endcase
这里不一样,没仔细看,等下面壁。。。
不过,begin这里不是还没执行到就跳出去了吗?

使用特权

评论回复
15
GoldSunMonkey| | 2012-3-16 15:03 | 只看该作者
首先,你给的代码有问题,我只是觉得应该是casex或者casez,
你贴这样的代码,首先证明你对VERILOG还不如我熟。
第二给你讲一下三种的区别。
在case语句中,敏感表达式与各项值之间的比较,是一种全等比较。
casez与casex语句是case语句的两种变体,三者的表示形式中唯一的区别是三个关键词case、casez、casex的不同。
在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。
在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。
按此如果你使用case是错误的。

如果使用casex或者casez就理解。

另外我和百度,不一样的地方,我告诉你,这个是优先级的。
你都不仔细看。哎~

学习应该仔细认真

使用特权

评论回复
16
jakfens| | 2012-3-16 15:09 | 只看该作者
:D学习了

使用特权

评论回复
17
jakfens| | 2012-3-16 15:11 | 只看该作者
“ADDRESS的值是5'b0X000”也是代码?

使用特权

评论回复
18
GoldSunMonkey| | 2012-3-16 15:17 | 只看该作者
是呀,肯定是

使用特权

评论回复
19
GoldSunMonkey| | 2012-3-16 15:18 | 只看该作者
sorry!
begin
       A=1;//给A赋1
       B=1;//给B赋1
     end
  endcase
这里不一样,没仔细看,等下面壁。。。
不过,begin这里不是还没执行到就跳出去了吗? ...
c1apton 发表于 2012-3-16 14:59
关键不在此

使用特权

评论回复
20
c1apton|  楼主 | 2012-3-16 15:23 | 只看该作者
15# GoldSunMonkey
你说的对,前面我没仔细看,另外case(ADDRESS)这里应该是casex(ADDRESS),在14楼时检查出来了,当时本来想把1楼的改过来的,想了下,这是犯错的证据,还是不改了,是的,学习应该仔细认真,我该好好检讨一下。
不过这题总算是搞懂了,多谢版主!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

31

帖子

1

粉丝