欢迎光临散文网 会员登陆 & 注册

fpga中always时序模块对变量赋值(变量何时更新值)

2022-08-04 09:13 作者:GXTon_阿通  | 我要投稿

在verilog语句中

一个always就是一个独立的程序块.

"独立"说明是,单独运行.


多个always之间是并行的.


通常情况下:

按照程序的习惯,最好是一个always只处理一个信号.否则容易逻辑混乱.

比如:

(如下图, 里面包含data和key两个变量,放到了一个always模块中  ,不推荐这种写法).

对于上面代码有些疑问,起中244行和245行:

// 在复位后,第一个时钟上升沿,key从0变为1,

//那么,第第一个时钟上升沿时,那一刻,key的值是多少?

key <= ~key; 

// 上面key从上升沿的时候,从0变成了1,那么,下面的if是否满足呢?

if(key == 1) 

    data <= 1;


这里可以先给大家答案, 复位后第一个上升沿到来时,

key 的值是1.

if里key的值还没有来得及更新,所以data是0.

下面就开始分析一下:

上面代码虽然是一个always,

但是它包含了两个变量,所以,为了看清楚,可以把两个变量拆分到不同的always模块中,推荐这种风格的代码写法.

即:(这个代码和上面的代码是等效的.)

运行结果:

总结:

一个变量在always模块中进行变化,
如果key在上升沿加加,那么key值会立刻进行变化.

但是变化的key值,在其他always模块中并没有即时更新,

在其他模块中key值还是原来的值,

这就有了滞后.


为了更加清楚,再次举例:


运行结果:

data会滞后key一拍,虽然代码中是同时运行的.


fpga中always时序模块对变量赋值(变量何时更新值)的评论 (共 条)

分享到微博请遵守国家法律