亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Verilog

掌握 Verilog 块语句:顺序与并行执行

有方法将一组语句分组,使其在语法上等价于单条语句,称为 块语句。块语句分两种:顺序和并行。

顺序块

语句用 begin 和 end 关键字包裹,按给定顺序依次执行。延迟值相对于前一条语句执行时间。块内所有语句执行完后控制权可转移别处。

module design0;
bit [31:0] data;
// "initial" 块在时间 0 启动
initial begin
    // 10 时间单位后 data 变为 0xfe
    #10 data = 8'hfe;
    $display ("[Time=%0t] data=0x%0h", $time, data);
    // 20 时间单位后 data 变为 0x11
    #20 data = 8'h11;
    $display ("[Time=%0t] data=0x%0h", $time, data);
end
endmodule

上例中,begin-end 块第一条语句在 10 时间单位执行,第二条在 30 时间单位执行(因相对性:在前一语句执行后 20 时间单位)。

仿真日志

ncsim> run
[Time=10] data=0xfe
[Time=30] data=0x11
ncsim: *W,RNQUIE: Simulation is complete.

并行块

并行 块可并发执行语句,延迟控制提供赋值的时间排序。语句用 fork 和 join 关键字包裹以并行启动。

initial begin
    #10 data = 8'hfe;
    fork
        #20 data = 8'h11;
        #10 data = 8'h00;
    join
end

上例中,fork-join 块在执行 10 时间单位处的语句后启动。块内语句并行执行,首先启动的是赋值 8'h00 的语句,因其延迟为 fork-join 启动后 10 时间单位。再过 10 时间单位,第一条语句启动,data 获得值 8'h11。

initial begin
    #10 data = 8'hfe;
    fork
        #10 data = 8'h11;
        begin
            #20 data = 8'h00;
            #30 data = 8'haa;
        end
    join
end

上例有 begin-end 块,块内语句顺序执行,但该块本身与其他语句并行启动。故 data 在 20 时间单位得 8'h11,30 时间单位得 8'h00,60 时间单位得 8'haa。

块命名

顺序和并行块均可通过在 begin 和 fork 后添加 : name_of_block 命名。这样可在 disable 语句中引用该块。

begin : name_seq
[statements]
end
fork : name_fork
[statements]
join

Verilog

  1. 挖掘遥测数据价值:提升车队效率的专家实战策略
  2. 升级 S&OP、数据与规划系统,赢在未来
  3. 通过自动化数据准备加速洞察生成
  4. Verilog基础:设计你的第一个与门
  5. Verilog 入门:数字电路设计完整教程
  6. 掌握 Verilog 拼接操作:实用指南
  7. Verilog 核心要点速览
  8. 深入理解 Verilog 赋值语句:类型、语法与最佳实践
  9. Verilog阻塞与非阻塞赋值:关键区别详解
  10. 掌握Verilog控制流:if-else、case、循环语句全解析
  11. 掌握Verilog函数:高效RTL设计的复用利器
  12. 理解 Verilog 调度语义:时序、事件与执行顺序