• 命名块 verilog


    命名块

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

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

    仿真代码如下:

    实例

    `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<=100) begin: runoob_d2
                # 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 功能。

  • 相关阅读:
    网络安全——CVE-2015-1635-HTTP远程代码执行
    flink源码分析 - 获取调用位置信息
    Redis五种常用数据类型有哪些?对应的数据存储空间又是怎样的?带你从零开始学习
    学生静态HTML个人博客主页【Web大学生网页作业成品】HTML+CSS+JavaScript
    LeetCode-891. 子序列宽度之和【排序,数学,数组】
    postman基础
    意法STTH60RQ06-Y汽车级快恢复二极管,原厂渠道ASEMI代理
    ADS村田电感.mod(spice netlist文件)和.s2p模型导入与区别
    (附源码)spring boot建达集团公司平台 毕业设计 141538
    研究生学术与职业素养讲座MOOC---期末复习(1-15)
  • 原文地址:https://blog.csdn.net/qq_36613247/article/details/125531743