Verilog基础:disable语句

这篇具有很好参考价值的文章主要介绍了Verilog基础:disable语句。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相关文章

Verilog基础专栏https://blog.csdn.net/weixin_45791458/category_12263729.html


1.disable语句

        disable语句提供了终止并发活动过程的能力,同时保持了Verilog过程描述的结构化本质。disable语句在处理意外情况时很有用,例如硬件中断或全局复位。

        disable语句可以有如下用途。

        1、提前结束task的执行。

        2、终止命名块的执行,执行后面的语句(类似于C语言的goto)。

        3、跳出循环语句(类似于C语言的break)。

        4、跳出循环中的后续语句(类似于C语言的continue)。

        disable语句能够终止task或命名块的活动,说明如下:

        1、在disable语句执行后,task或者命名块的执行(包括此时命名块内已经使能的task)将被停止,然后位于task使能语句和命名块之后的语句开始执行。

        2、如果task使能时嵌套的(例如,A使能B,B使能C),那么在disable一个task时,将禁用所有向下嵌套的task(例如,disable A,那么A、B和C全部终止),不管此时是否B,C是否已被使能。

        3、如果task被并发地使能多次,那么disable该任务将终止该任务的所有激活。

        如果任务被终止,那么下面的结果没有定义。

        1、从output和inout参数返回给实参的值。

        2、已经调度但还没进行LHS赋值的非阻塞赋值。

        3、过程连续赋值(assign 和 force)。

        可以在命名块和任务中使用disable语句来禁用包含disable语句的命名块或任务。disable语句也可用于禁用函数中的命名块,但不能用于禁用函数。如果函数中的disable语句禁用了调用该函数的命名块或任务,则该行为是未定义的。禁用自动任务或自动任务中的命名块的过程与禁用常规任务的过程一样,适用于该任务的所有并发执行(第三条)。

2.disable语句的例子

例子:禁用包含disable语句的命名块。

//块在块内终止了自己
begin: block_name
    rega = reg b;
    disable block_name;
    regc = rega;  //这条语句永远不会被执行
end

例子:disable语句当做goto使用,命名块后的语句继续执行。

begin: block_name
    ...........
    if(a == 0)
        disable block_name;
end  //命名块的结束
//继续执行下面的语句
..........

例子:这个例子演示了使用disable语句终止不包含此disable语句的命名块的执行。如果块当前正在执行,这将导致控制跳转到块之后的语句。如果块是循环体,它的行为就像一个continue(进入下一次循环)。如果该块当前没有执行,则disable不起作用。

module m (...);
    always begin:always1
        ....
        task1();  //task使能
        ....
    end
    always begin
        ....
        disable always1; //跳出always块,如果此时task1正在执行,则会终止执行
        ....   
    end
endmodule

例子:这个例子演示了disable被当做从一个task的提早返回(注意是提早)。

task proc_a;
    begin: block_name
        ...........
        if(a == 0)
            disable proc_a;//退出任务,此时的返回值是不定的
    end //命名块的结束
endtask //任务的结束

例子:这个例子演示了disable被当做从一个task的返回(类似于C语言的return)。

task proc_a;
    begin: block_name
        ...........
        if(a == 0)
            disable block_name;//退出命名块,随后任务正常返回
    end  //命名块的结束
endtask //任务的结束

例子:这个例子展示了以与continue和break两个语句相同的方式使用disable语句。

begin : outer_block 
    for (i = 0; i < n; i = i+1) begin : inner_block 
        @clk
        if (a == 0) // "continue" loop
        disable inner_block ; //这相当于退出for中的命名块,根据条件可能执行下一次for循环
        ... // statements
        @clk
        if (a == b) // "break" from loop
        disable outer_block; //这相当于退出包括for的命名块,这会终止for语句的执行
        ... // statements
        end 
    end

例子:这个例子展示了并发执行的disable语句。使用disable语句同时禁用一系列语句和名为action的任务。该示例显示了一个fork-join块,其中包含一个命名的顺序块(event_expr)和一个disable语句,该语句等待事件reset的发生。顺序块和disable语句并行执行。event_expr块等待事件ev1出现一次,事件trig出现三次。当这四个事件发生后,再加上d个时间单位的延迟,任务操作就会执行。当事件重置发生时,无论顺序块中的事件是什么,fork-join块都会终止,包括任务的执行。

fork 
    begin : event_expr
        @ev1;
        repeat (3) @trig;
        #d action (areg, breg);
    end 
    @reset disable event_expr;
join 

例子:下一个例子是可触发单稳态的行为描述。事件retrig的发生将重新启动单稳定时间段并给q赋值1。如果在250个时间单位内retrig重复发生,那么q将保持为1,而不会变成0。

always begin : monostable
    #250 q = 0;
end 
always @retrig begin 
    disable monostable;
    q = 1;
end

以上内容来源于《Verilog 编程艺术》和《IEEE Standard for SystemVerilog》文章来源地址https://www.toymoban.com/news/detail-538725.html

到了这里,关于Verilog基础:disable语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • fpga开发基于verilog HDL的四人抢答器

    鱼弦:CSDN内容合伙人、CSDN新星导师、全栈领域创作新星创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) 智能电子抢答器可容纳4组参赛者抢答,每组设一个抢答钮。 ③ 电路具有第一抢答信号的鉴别和锁存功能。

    2024年02月04日
    浏览(49)
  • 【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|

    1.1 索引目的 本篇索引旨在 收藏CSDN全站中有关数字IC领域高价值文章 ,在数字芯片领域中,就算将架构,设计,验证,DFT,后端诸多岗位加在一起的数量,都不及软件类一个细分方向的岗位数量多,反映在社区氛围或是开源资料的丰富度而言,数字IC领域相较于软件/互联网领

    2024年02月03日
    浏览(120)
  • FPGA/Verilog HDL/AC620零基础入门学习——第一个项目按键控制LED

    最近要考试了,所以我赶紧补习FPGA,我们用的是小梅哥的AC620开发板,软件是Quartus。推荐看这个视频教程:零基础轻松学习FPGA,小梅哥FPGA设计思想与验证方法视频教程 用按键控制LED灯的亮灭就是一个二选一多路器,两个IO,a、b,可以是高电平,也可以是低电平。 输入按键

    2024年02月05日
    浏览(57)
  • FPGA在校学习记录系列---实验4不同状态的LED+开发板(Verilog HDL)

    此系列记录FPGA在学校的学习过程。 FPGA系列 需要用到的软硬件: 软件:Quartus II 15.0 (64-bit) 硬件: 5CEBA4F23C7芯片 链接: FPGA在校学习记录系列—新建一个FPGA工程编写程序并仿真(Verilog HDL) 创建的工程名字为:LED (这次不用仿真,直接用开发板验证) 编译文件 按键资源:

    2024年04月09日
    浏览(49)
  • Verilog HDL系统任务说明语句task

    task说明语句 如果传给任务的变量和任务完成后接受任务的变量已定义,就可以用一条语句启动任务,任务完成以后控制传回启动的过程。 1.1任务的定义 定义任务的语法如下: 1.2任务的调用及变量的传递 任务调用: 1.3例子 用两种不同的方法设计一个功能相同的模块,完成

    2024年02月03日
    浏览(47)
  • FPGA硬件工程师Verilog面试题(基础篇一)

    ✅作者简介:大家好我是:嵌入式基地,是一名嵌入式工程师,希望一起努力,一起进步! 📃个人主页:嵌入式基地 🔥系列专栏:FPGA Verilog 习题专栏 微信公众号:嵌入式基地 点击进行在线练习 描述 制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换:

    2023年04月26日
    浏览(44)
  • 【Verilog HDL】FPGA-Verilog文件的基本结构

    🎉欢迎来到FPGA专栏~Verilog文件的基本结构 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ Verilog HDL系列博客参考书籍 《

    2024年02月04日
    浏览(83)
  • Verilog HDL中的数字进制(Verilog数字表示方法&&X/Y态解析)

    在Verilog中的数字表示方式,最常用的格式是: 位宽\\\'基数常量 ,如4’b1011 位宽 :描述常量所含位数的十进制整数。注意,位宽是将进制转化为二进制之后的位数。(如4’d10,表示十进制的10,转换为二进制就是4’b1010,其常量的二进制是4位) 例如4’b1011中的4就是位宽,通

    2024年02月11日
    浏览(40)
  • FPGA用verilog HDL实现串口通讯协议

    串口通信是一种通过串行传输数据的通信方式。它使用单个数据线将数据位逐个传输,而不是同时传输多个数据位。串口通信常用于连接计算机与外部设备,如打印机、调制解调器、传感器等。 串口通信一般使用的是异步传输方式,即发送方和接收方的时钟不同步。数据传输

    2024年02月05日
    浏览(62)
  • 数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(二)

    所有的是时序逻辑电路都可以拆成组合逻辑电路+存储 (关于组合逻辑电路的理解可以参考我数电的博客https://blog.csdn.net/y_u_yu_yu_/article/details/127592466) 可以分成两个部分,组合逻辑电路和存储电路。组合逻辑电路的输入一个是x信号一个是当前的状态,这两个信号决定了组合

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包