在回答你的第一个问题之前,我觉得首先你得明白Verilog是什么。Verilog是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
简单点理解就是,他是用来描述硬件的语言。描述硬件是什么意思,就是你这里搭出来的电路里是怎么反应的,用Verilog描述出来。比如,你给输入了1hz的时钟信号,然后上升沿的时候,你所搭建的数字电路里电流会有什么变化,电压值会怎么变化。然后你用verilog描述出来说这里会这样变化。
所以,你要先弄明白数字电路的一些基础的组合逻辑电路和延时电路。Verilog里面的基本语句是并行语句。就是同时发生的意思。
像你说的三个always语句他是同时发生的。不存在谁等谁的问题。就是三个人各走各的路。
像你说的a只有在b中被赋值。那么a最开始是什么值呢??这个怎么说呢,具体要看你的电路。你的电路搭好之后,你的a的初始值其实就有一个了(高电平,低电平或者悬空高阻状态之类的,你的电路搭起来了,这里就是一个管脚或者一个测试点这样子,你大概理解下就是是实际电路中的一个具体的芯片管脚或者导线测试点了。)这个时候三个always并行的时候,第一个always是直接就根据a当前的状态进行判断了,同时,这个第二个always这里相当于有一个D触发器接下来会把D触发器的输出端反馈回来给a(实际电路中是有一定的延时的)所以,实际上,要等到第二次时钟沿再来的时候这个时候第一个always判断的a才是前面一个时钟沿当时第二个always中被赋值的a。
额我说的可能有点乱,不知道这样你能理解了不?
要想理解verilog一定要先把数字电路基础先认真的学一遍。因为verilog的本质是描述硬件,我觉得比较准确的说是描述数字电路。他的各种描述出的功能实际的完成是各种基本的数字电路组合而成的。
前面算是回答你的第一个问题。
你的第二个问题,Verilog跟C性质相不相同,看了第一个问题的回答,我想你自己应该也能有答案了。不相同。C语言是执行语言,而Verilog是描述性的语言。性质是不一样的。
C语言是顺序语言,Verilog整理来说是算并行语言,只是里面有几个语句的内部是顺序执行的。但是本身的基础语句之间是并行的。就比如,你前面的两个always语句,他们是并行的。再比如如下一段,
a<=b; ①
b<=c; ②
always@(上升沿) ③
{d<=b; ④
e<=c; ⑤}
①②③这三句也是并行的。
而always的内部④⑤是顺序执行的
假设设置的初始状态a=1,b=0,c=0,d=1,e=1
那么电路开机后在第一个时钟上升沿来临前后会发生什么变化
上升沿还没来
a=1 ---- a=0 b赋值给了a
b=0 ----- b=0 c赋值给了b
c=0 ------ c=0 c还是那个c
d=1 ------ d=1 d还是那个d
e=1 ------ e=1 e还是那个e
上升沿来了
a=0
b=0
c=0
d=0 b赋值给了d
e=0 c赋值给了e
再说一句,这个是理想状态的上升是瞬间上升的。实际电路中因为上升是有时间的,所以这个上升沿触发的赋值是会延后的。太久了也不搞技术有点忘了,这个延迟时间好像是tr?
第三个问题。你正在学这个的话,一定要去学着画画波形图,更有助于你理解!!!等你完全搞明白了你就不会觉得乱了
|