IT评测·应用市场-qidao123.com
标题: Always语句和assign的用法 [打印本页]
作者: 水军大提督 时间: 2024-6-21 13:37
标题: Always语句和assign的用法
Always语句
简介
always语句块从仿真0时候开始实行其中的行为语句;最后一条实行完成后,再开始实行其中的第一条语句,如此往复循环,直到整个仿真竣事。因此,always语句块常用于对数字电路中一组反复实行的活动举行建模。
应用场景
always块是Verilog中用来形貌组合逻辑以及时序逻辑的语法。
在这上面的语法末节中也说过了。
需要增补的是一个设计中可以有多个always块,或者说一定有很多个always块。
这些硬件块都是相互独立同时工作的。每个块之间的连接是决定命据流的缘故原由。为了模仿这种行为,一个always块被做成一个一连的过程(硬件不大概断断续续工作),当敏感列表中的一个信号变化时,它就会被触发并实行一些动作(always块内的语句)
语法简介
always 和 always@(*) 的区别
有@时,是每次实行语句时,必须满意括号内的条件才气继承实行语句,否则不实行。
always@(敏感变乱列表) 用于形貌时序逻辑;
敏感变乱(上升沿 posedge、下降沿 negedge);always @ (posedge clk)
或电平。Always@(a)
verilog规定,always@()中的是指该always块内的全部输入信号的变化为敏感列表,也就是仿真时只有当always@(*)块内的输入信号产生变化,该块内形貌的信号才会产生变化。
若没有@,则是一般在testbench 中产生时钟信号,指不会满意特定的条件,实行完一次后立马继承实行下一次,一直重复实行。always #5 CLK=~CLK;
有@时,是每次实行语句时,必须满意括号内的条件才气继承实行语句,否则不实行
always@()语句的意思是always模块中的任何一个输入信号或电平发生变化时,
该语句下方的模块将被实行。
1、always语句有两种触发方式。第一种是电平触发,例如always @(a or b or c),a、b、c均为变量,当其中一个发生变化时,下方的语句将被实行。
2、第二种是沿触发,例如always @(posedge clk or negedge rstn),即当时钟处在上升沿或下降沿时,语句被实行。
3、而对于always@(),意思是以上两种触发方式都包罗在内,恣意一种发生变化都会触发该语句。
敏感列表: 触发always块内部语句的条件。
只有一条语句,不需要使用begin -end;第二种是有多条语法,需要使用begin end包裹起来。保举全部都用begin end包裹起来,如许形式比力固定,比力方面阅读以及形成固定风格。
Assigin语句
简介:
assign相当于一条连线,将表达式右边的电路直接通过wire(线)连接到左边,左边信号必须是wire型。当右边变化了左边立马变化,方便用来形貌简单的组合逻辑
应用场景:
wire类型或雷同于wire数据类型的信号需要一连赋值。类比用于连接面包板上零件的电线。只要+5V电池施加在导线的一端,连接到导线另一端的部件就会得到所需的电压。
在Verilog中,这个概念是通过assign语句实现的,其中任何或其他雷同的wire数据类型都可以用一个值一连驱动。该值可以是常数,也可以是由一组信号组成的表达式。
使用规则:
LHS(左值) 应该始终是wire类型的标量或向量网络, 或者标量或矢量网络的串联, 而绝对不能是reg类型的标量或矢量寄存器。(这是扩展一个知识点:
Reg与wire的区别,wire用于一连赋值语句,而reg用于过程赋值语句,reg会保持上一次赋值,而wire在一连不断的改变,在电路明白上来说,wire相当于一根导线,而reg,则相当于在wire中间加了一个寄存器,有条件的赋值,这就需要根据敏感信号来判断)
RHS 可以包罗标量或向量寄存器以及函数调用。
只要 RHS 上的任何操纵数的值发生变化, LHS 就会使用新值举行更新。
assign 语句也称为一连赋值, 而且始终处于活动状态。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) |
Powered by Discuz! X3.4 |