讲解Verilog 语句块

Verilog是一门类C语言,语法与C接近,但Verilog是硬件设计语言,与C实质不同。

  • Verilog代码对应硬件实体。比如在Verilog里写的
    a+b,最后会得到由硬件实现的加法器
  • Verilog代码到硬件的过程叫
    综合。综合就是将Verilog代码转化为硬件实现
  • Verilog并行执行

关键词:顺序块,并行块,嵌套块,命名块,disable

Verilog 语句块提供了将两条或更多条语句组成语法结构上相当于一条一句的机制。主要包括两种类型:顺序块和并行块。

顺序块

顺序块用关键字 begin 和 end 来表示。

顺序块中的语句是一条条执行的。当然,非阻塞赋值除外。

顺序块中每条语句的时延总是与其前面语句执行的时间相关。

在本节之前的仿真中,initial 块中的阻塞赋值,都是顺序块的实例。

并行块

并行块有关键字 fork 和 join 来表示。

并行块中的语句是并行执行的,即便是阻塞形式的赋值。

并行块中每条语句的时延都是与块语句开始执行的时间相关。

顺序块与并行块的区别显而易见,下面用仿真说明。

仿真代码如下:

实例

`timescale 1ns/1ns

module test ;
   reg [3:0]   ai_sequen, bi_sequen ;
   reg [3:0]   ai_paral,  bi_paral ;
   reg [3:0]   ai_nonblk, bi_nonblk ;

//============================================================//
   //(1)Sequence block
   initial begin
       #5 ai_sequen         = 4'd5 ;    //at 5ns
       #5 bi_sequen         = 4'd8 ;    //at 10ns
   end
   //(2)fork block
   initial fork
       #5 ai_paral          = 4'd5 ;    //at 5ns
       #5 bi_paral          = 4'd8 ;    //at 5ns
   join
   //(3)non-block block
   initial fork
       #5 ai_nonblk                 #5 bi_nonblk             join endmodule 

仿真结果如下:

如图所示,顺序块顺序执行,第 10ns 时,信号 bi_sequen 才赋值为 8。 而并行块,ai_paral 与 bi_paral 的赋值是同时执行的,所以均在 5ns 时被赋值。

而非阻塞赋值,也能达到和并行块同等的赋值效果。

嵌套块

顺序块和并行块还可以嵌套使用。

仿真代码如下:

实例
`timescale      1ns/1ns

module test ;

   reg [3:0]   ai_sequen2, bi_sequen2 ;
   reg [3:0]   ai_paral2,  bi_paral2 ;
   initial begin
       ai_sequen2         = 4'd5 ;    //at 0ns        fork            #10 ai_paral2          = 4'd5 ;    //at 10ns
           #15 bi_paral2          = 4'd8 ;    //at 15ns
       join
       #20 bi_sequen2      = 4'd8 ;    //at 35ns
   end

endmodule

仿真结果如下:

并行块语句块内是并行执行,所以信号 ai_paral2 和信号 bi_paral2 分别在 10ns, 15ns 时被赋值。而并行块中最长的执行时间为 15ns,所以顺序块中的信号 bi_sequen2 在 35ns 时被赋值。

命名块

我们可以给块语句结构命名。

命名的块中可以声明局部变量,通过层次名引用的方法对变量进行访问。

仿真代码如下:

实例

`timescale 1ns/1ns

module test;

   initial begin: runoob   //命名模块名字为runoob,分号不能少
       integer    i ;       //此变量可以通过test.runoob.i 被其他模块使用
       i = 0 ;
       forever begin
           #10 i = i + 10 ;      
       end
   end

   reg stop_flag ;
   initial stop_flag = 1'b0 ;    always begin : detect_stop        if ( test.runoob.i == 100) begin //i累加10次,即100ns时停止仿真            $display("Now you can stop the simulation!!!");            stop_flag = 1'b1 ;
       end
       #10 ;
   end

endmodule

仿真结果如下: 命名的块也可以被禁用,用关键字 disable 来表示。

disable 可以终止命名块的执行,可以用来从循环中退出、处理错误等。

与 C 语言中 break 类似,但是 break 只能退出当前所在循环,而 disable 可以禁用设计中任何一个命名的块。

仿真代码如下:

实例

`timescale 1ns/1ns

module test;

   initial begin: runoob_d //命名模块名字为runoob_d
       integer    i_d ;
       i_d = 0 ;
       while(i_d# 10 ;
           if (i_d >= 50) begin       //累加5次停止累加
               disable runoob_d3.clk_gen ;//stop 外部block: clk_gen
               disable runoob_d2 ;       //stop 当前block: runoob_d2
           end
           i_d = i_d + 10 ;
       end
   end

   reg clk ;
   initial begin: runoob_d3
       while (1) begin: clk_gen  //时钟产生模块
           clk=1 ;      #10 ;
           clk=0 ;      #10 ;
       end
   end

endmodule

仿真结果如下:

由图可知,信号 i_d 累加到 50 以后,便不再累加,以后 clk 时钟也不再产生。

可见,disable 退出了当前的 while 块。 需要说明的是,disable 在 always 或 forever 块中使用时只能退出当前回合,下一次语句还是会在 always 或 forever 中执行。因为 always 块和 forever 块是一直执行的,此时的 disable 有点类似 C 语言中的 continue 功能。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/223615.html<

(0)
运维的头像运维
上一篇2025-04-16 01:22
下一篇 2025-04-16 01:23

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注