verilog语句执行顺序的疑问?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog语句执行顺序的疑问?相关的知识,希望对你有一定的参考价值。

小弟刚学verilog,有些疑问,模块里面always、intial、模块引用、门实例这些语句块是并行执行还是串行?不胜感激

可综合的都是并行执行的。其实也不难理解,verilog是硬件语言,也就可以看成是一个电路。在实际的电路中没办法延迟,没办法让一边先通电,再让另一边通电,所以一切都是同时进行的。

这并行的前提都是“可综合”。

如果是写testbench,会用到不可综合的模块,这些模块是行为级的,在实际电路中无法实现。比如task,比如阻塞赋值等等,这些都是有顺序的。
参考技术A 所有块是并行的。always块和forever通电后只要满足触发条件就始终执行,initial是仿真用的,只执行一次。
举例如下:
always@(posedge clk)
begin
a=b;
c=d;
end

always@ (posedge clk or negedge rst)
if(scl)
df=1'b1;
else df=1'b0;
上面的两个块为并行。在时钟上升沿到来时同时判定两个always块内逻辑是否符合,符合则执行相关语句。
参考技术B 各个ALWAYS模块都是并行执行的,这比较难理解,你需要慢慢理解

Verilog学习笔记基本语法篇········ 循环语句

在Verilog中存在着4种类型的循环语句,用来控制执行语句的执行次数。

1)forever语句: 连续执行的语句。

2)repeat语句:  连续执行n次的语句。

3)while语句:    执行语句,直至某个条件不满足。

4)for 语句:      三个部分,尽量少用或者不用for循环。

各语句的格式与注意事项:

1)forever格式:

    forever   语句;

或:forever   begin 多条语句 end

常用于产生周期性的波形,用来作为仿真测试信号。它与always的不同之处是不能独立在程序中,必须写在initial块中。

2)repeat格式:

    repeat(表达式)   语句;

或:repeat(表达式)   begin 多条语句 end

在repeat中,其表达式常为常量表达式。(可实现乘法器P60)

3)while格式:

    while(表达式)   语句;

或:while(表达式)   begin 多条语句 end

4)for的格式:

for(表达式1;表达式2;表达式3)

    语句;

执行过程与 c 语言中的for循环相同,注意表达式之间要用分号分割。

 

以上是关于verilog语句执行顺序的疑问?的主要内容,如果未能解决你的问题,请参考以下文章

Verilog语法中case语句是否只执行一条语句

Verilog的If语句和Case语句

Verilog语言顺序

verilog中fork...join在testbench延时很有用

system verilog学习笔记2

verilog阻塞赋值和非阻塞赋值的区别