赋值语句和块语句
1 赋值语句
1.1 非阻塞赋值(如b<=a)
- 块语句中,语句所赋的变量值不能立即就为下面的语句所用。
- 块结束后,才完成赋值操作。
- 在时序逻辑模块中,最常用这种方法。
2.2 阻塞赋值(如b=a)
- 赋值语句执行完后,块才结束。
- b的值在赋值语句执行完后立刻改变。
- 不适合用在时序逻辑模块中。
非阻塞赋值案例
always(@posedge clk)
begin
b<=a;
c<=b;
end
阻塞赋值案例
always(@posedge clk)
begin
b=a;
c=b;
end
2 块语句
2.1 顺序块
- 块内语句按顺序执行
- 每条语句的延迟时间是相对于前一语句的仿真时间。
- 直到最后一条语句执行完,块才结束。
格式:
begin: 块名
块内声明语句
语句1;
语句2;
…
end
其中,块名即块的名字,可省略;块内声明语句可以是参数声明语句,reg型变量声明语句等。
2.2 并行块
- 块内语句同事执行
- 块内语句的延迟时间是相对于程序流程控制进入到块内的仿真时间。
- 延迟时间是用来给赋值语句提供执行时序。
- 按时间时序排序在最后的语句(或disable时),块结束。
格式:
fork: 块名
块内声明语句
语句1;
语句2;
…
join
2.3 起始时间和结束时间
- 顺序块的起始时间为第一条语句执行的时间,结束时间为最后一条语句结束的时间。
- 并行块的起始时间对于块内所有语句都是相同的,结束时间是按时间排序在最后的语句执行结束后的时间。