目录
前言
在verilog的使用过程中,always语句块的使用是时许逻辑的起始点,本文就来和大家讨论一下always语句块及它们是如何使用的。
一、always语句块是什么?
alway是语句块又被称为过程块,在过程块中赋值的语句就是过程赋值语句,没错就是我们在assign学习中提到的与连续性赋值语句相对应的语句,我们先来看看它长嘛样?
举个例子
always @(posedge CLK)
Q = D;
原来是这屌样,so easy!
从它的格式和我们举得例子中可以看出来,这个语句只有两个部分需要我们关注:敏感信号条件表和各类的顺序语句;
首先我们所以说敏感信号条件表,从例子中我们看到是 posedge CLk ,它就是敏感信号,而 Q = D ;就是各类顺序语句,什么?你只看到一句?那是因为我善,哈哈哈只写了一句!
二、always语句的特点
1.always语句本身没有什么意义,而是和其内部封装的顺序语句构成语句块,也就是过程块,这才使得它有了底气,成为最常用的语句之一,always语句就像一层包装纸,只有它里面的东西才是它的卖点。
2.在always语句中他的赋值目标的数字类型必须是 reg 型。
3.我们说它没有意义其实也不竟然,always语句还有一个很傲娇的脾气,如果你想享用它的身体(过程赋值语句),你不满足它的条件她是不答应的,你说什么条件?都写在了敏感信号条件表中了。
三、敏感信号条件表
刚刚我们说到想要使用always封装的过程赋值语句,就必须满足敏感信号条件表中的条件,跟我来,我们来窥一窥其中的奥秘。
敏感条件有两种,一种是边沿敏感,一种是电平敏感。
格式 | 解释 | 例子 | |
---|---|---|---|
边沿敏感 | (posedge 信号名) | 当信号上升沿到来时满足 | posedge clk |
(negedge 信号名) | 当信号下降沿到来时满足 | negedge clk | |
电平敏感 | (信号1,信号2,信号3) | 信号列表中任一信号有变化时满足 | (a,b,c) |
(信号1 or 信号2 or 信号3) | (a or b or c) |
做成表格是不是一目了然,只有满足条件才能使用过程块。
看来我们已经学会了,我们来挑逗一下她吧!
always @(posedge clk) Q = D;
当clk信号的上升沿到来时,执行Q = D;这赋值语句;不然无论你的D如何变化,Q也菩提本无树,看不见你。
这个过程块综合出来是这样的:
再来一个
always @(D)
Q = D;
当D有变化时(不管是由1变0还是由0变1),激活该语句块,将D的值赋给Q;否则,该语句块挂起,Q的值保持不变直到下一次赋值。
这个过程块综合出来是这样的:
再强调一下哈,过程块语句中的赋值目标必须是 reg 型的。
做几点说明:
由于always语句可以描述边沿变化,在设计时序电路中得到广泛应用。
always语句中还可以使用if、case、for循环等语句,其功能更加强。
总结
以上就是今天要讲的内容,本文介绍了什么是always语句,还有她的特点,及敏感信号条件表是什么,她是时序逻辑可开始,属于Verilog大厦非常重要的地基。