关于verilog中的always

always

always语句块从仿真0时刻开始执行其中的行为语句;最后一条执行完成后,再开始执行其中的第一条语句,如此往复循环,直到整个仿真结束。因此,always语句块常用于对数字电路中一组反复执行的活动进行建模。

always 和 always@(*) 的区别

  • 有@时,是每次执行语句时,必须满足括号内的条件才能继续执行语句,否则不执行。
  • always@(敏感事件列表) 用于描述时序逻辑;敏感事件(上升沿 posedge、下降沿 negedge);或电平。
  • verilog规定,always@()中的是指该always块内的所有输入信号的变化为敏感列表,也就是仿真时只有当always@(*)块内的输入信号产生变化,该块内描述的信号才会产生变化。
  1. 若没有@,则是一般在teastbench 中产生时钟信号,指不会满足特定的条件,执行完一次后立马继续执行下一次,一直重复执行。always #10 CLK=~CLK;
  2. 有@时,是每次执行语句时,必须满足括号内的条件才能继续执行语句,否则不执行。

3种模式

always@()语句的意思是always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。
1、always语句有两种触发方式。第一种是电平触发,例如always @(a or b or c),a、b、c均为变量,当其中一个发生变化时,下方的语句将被执行。
2、第二种是沿触发,例如always @(posedge clk or negedge rstn),即当时钟处在上升沿或下降沿时,语句被执行。
3、而对于always@(
),意思是以上两种触发方式都包含在内,任意一种发生变化都会触发该语句。

补充initial

Verilog语言中的两种过程:always过程和initial过程(执行一次)。

补充assign

assign 用于描述组合逻辑,所有的assign 和 always 块都是并行发生。

posted @ 2020-02-03 10:27  friedCoder  阅读(4477)  评论(0编辑  收藏  举报