原创 学习笔记——浅谈Verilog中的赋值方式[Verilog][FPGA]

2010-9-8 14:29 1462 1 1 分类: EDA/ IP/ 设计与制造

在Verilog中有两种赋值方式,一种是连续赋值,另外一种就是过程赋值。这其中还有另外一个概念就是阻塞式赋值和非阻塞式赋值。


首先讲讲自己对连续赋值和过程赋值的理解。


举个例子




module Procedual;


reg A,B,Z;


always@(B)


begin


    Z = A;


    A = B;


end


endmodule


module Continuous;


wire A,B,Z;


    assign Z = A;


    assign A = B;


endmodule


     如果在某一时刻B的值发生了改变,那么左边的赋值模块中两个赋值语句Z=A;A=B;讲依次执行,(这是阻塞式赋值,后面分析非阻塞式赋值“<=”两者的区别)。A在这一时刻将被赋为B的新值,而Z没有得到B的值,因为这句是在A=B;之前执行。如果A发生变化的话,这个赋值模块将不会被执行,因为A不是在always的敏感信号列表里面。


    同样的情况在右边的语句中由于B发生变化,引发了assign A=B;的执行,这样继而引发assign Z=A;的执行,这样两个语句都将执行。如果A发生变化,同样会使这两个语句执行。


总结一下:



过程赋值连续赋值

在always语句或者initial语句内出现


执行与周围其他语句有关


驱动寄存器变量(reg)


使用“=”或者“<=”赋值符号


在一个模块内出现


与其他语句并行执行


在右端操作数的值发生变化的时候执行


驱动线网变量(wire)


有assign关键字


 


阻塞和非阻塞


1:阻塞赋值“=”


阻塞赋值语句是在这句之后所有语句执行之前执行的,也就是这句没有执行的话后面的语句就无法执行,这也是“阻塞”的意思。可以理解为为顺序执行。


2:非阻塞赋值“<=”


非阻塞赋值语句是和后面的相关语句同时执行,可以理解为并行执行。


说明:


(1).时序电路建模时候,使用非阻塞赋值


(2).组合逻辑建模时候,使用阻塞赋值


     一般assign语句使用“=”阻塞赋值。


 


以上内容参考之夏宇闻的《Verilog数字系统设计教程》,这是很好的一本书,讲的比较实在,值得学习FPGA的看看。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
1
关闭 站长推荐上一条 /3 下一条