Verilog基础:块语句

news2025/1/15 16:41:01

相关阅读

Verilog基础专栏https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


1、块语句

        块语句(block statements)是一种把语句组织在一起,这样他们在语法上就像单个语句一样工作。Verilog HDL中有两种类型的块:

  • 顺序块,也叫begin-end块
  • 并行块,也叫fork-join块

        顺序块应该由关键词beginend分隔,顺序块中的过程语句应该按照它们在块中给出的顺序依次执行。

        并行块应该由关键词forkjoin分隔,并行块中的过程语句并发执行(这里的并发执行不是指严格在同时有两个语句执行,而是指在同一个仿真时间同时执行,因为实际上仿真器永远是串行执行语句,在这里指语句的执行顺序不确定)。

1.1、顺序块

顺序块具有以下特性:

  • 语句应按顺序执行,一条语句执行完后才会执行下一条语句。
  • 每条语句的延迟是相对于前一条语句完成的仿真时间而言的。
  • 控制流应该在最后一条语句完成后从块内传出。

下图给出了顺序块语法的BNF表示。

 例1:顺序块使以下的两个赋值有确定性结果。

begin
    areg = breg;
    creg = areg;  //creg存储了breg的值
end

        第一条语句对areg的赋值一定会在控制转移到执行第二条语句前完成,因此creg获得的是areg也即是breg的值。

例2:可以在顺序块中使用时序控制来在时间上分离两个赋值。

begin
    areg = breg; 
    @(posedge clock) creg = areg;  //只有posedge上升沿事件发生,第二条语句才会执行
end

例3:以下示例显示了如何使用顺序块和时序控制的组合来指定时序波形:

parameter d = 50; // 一个参数声明
reg [7:0] r; // 声明一个8位reg变量
begin // 一个由时序控制的波形
    #d r = 'h35;
    #d r = 'hE2;
    #d r = 'h00;
    #d r = 'hF7;
    #d -> end_wave; //触发一个叫end_wave的事件 
end

1.2、并行

并行块具有以下特性:

  • 语句并发执行。
  • 每个语句的延迟是相对于进入并行块的仿真时间而言的。
  • 时序控制可用于为赋值提供时间顺序。
  • 时序上最后一条语句执行完成后,控制从块内传出。

下图给出了并行块语法的BNF表示。

        例子:以下示例通过使用并行块而不是顺序块对1.1例3中所示的波形进行重新描述。reg上产生的波形对于两种实现方式来说完全相同。

fork
    #50 r = 'h35;
    #100 r = 'hE2;
    #150 r = 'h00;
    #200 r = 'hF7;
    #250 -> end_wave;
join

1.3、块名字

        顺序块和并行块都可以通过在关键字beginfork后面添加:name_of_block来命名。块的命名有几个目的:

  • 它使得能为块声明局部变量(variables)、参数(parameter)和命名事件(named event)。
  • 它允许在诸如disable语句之类的语句中引用块。(即允许层次引用)

        所有变量应为静态变量;也就是说,所有变量都存在一个唯一的位置,离开或进入块不应对变量有任何影响。

        命名块创建了一个新的结构层次,从而允许在任何位置对命名块内的变量进行访问。

1.4、开始和结束时间

        顺序块和并行块都有开始和结束时间的概念。对于顺序块,开始时间是执行第一条语句时,结束时间是执行完最后一条语句时。对于并行块,所有语句的开始时间(仿真时间)都相同,而结束时间是执行完最后一个被调度语句的时间。

        顺序块和并行块可以相互嵌入,从而使复杂的控制结构能够容易地表达并具有高度的结构。当块相互嵌入时,块开始和结束的时间很重要。直到达到块的完成时间,也就是说,直到块完全完成执行,才应继续执行块后面的语句。

例1:以下示例是1.1例3的语句,但这些语句以相反的顺序编写,但仍产生相同的波形

fork
    #250 -> end_wave;
    #200 r = 'hF7;
    #150 r = 'h00;
    #100 r = 'hE2;
    #50 r = 'h35; 
join

例2:当在发生两个单独的事件(称为事件的连接)之后进行赋值时,fork-join块可能很有用。

begin
    fork
        @Aevent;
        @Bevent;
    join
    areg = breg;
end

        这两个事件可以按任何顺序发生(甚至在同一仿真时间发生),fork-join块将完成并退出,对areg进行赋值。相反,如果fork-join块是begin-end块,并且Bevent发生在Aevent之前,那么该块将等待下一个Bevent才会跳出begin-end块。

例3:此示例显示了两个顺序块,每个块将在其控制事件发生时执行。因为事件控制在fork-join块中,所以它们是并行执行的,因此这两个顺序块之间是可以并行执行的。

fork
    @enable_a begin
        #ta wa = 0;
        #ta wa = 1;
        #ta wa = 0;
    end
    @enable_b begin
        #tb wb = 1;
        #tb wb = 0;
        #tb wb = 1;
    end
join

以上内容来源于《IEEE Standard for Verilog® Hardware Description Language 2005》,有删改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“惠医通-医院挂号订单平台”

结合已学习过的vue3和TS完成的项目,便于患者对自己想要就诊的科室进行挂号,付款 一:项目简介 前端技术栈 Vue3 TS vue-router Element-ui Axios Pinia 项目架构 二:主要模块 1. axios二次封装 1.1 创建实例 //利用axios.creat…

如何调整DOSBOX软件的运行窗口大小

前言 小编最近正在学习微机原理,碰到一些问题,在安装DOSBOX后,打开应用,会出现运行窗口特别小,字体也很小的情况,使用时会感觉特别费劲,看着特别的不舒服,那么这个时候就需要调整一…

【LeetCode题目详解】第八章 贪心算法 part01 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和 day31补

贪心算法理论基础 关于贪心算法,你该了解这些! 题目分类大纲如下: # 什么是贪心 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 这么说有点抽象,来举一个例子: 例如,有一堆钞票&…

【C#】C#:“指派给常量数组的必须是常量”

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 记录一个有意思的代码片段。 首先,复习一下常量。…

安防监控/磁盘阵列存储/视频汇聚平台EasyCVR调用rtsp地址返回的IP不正确是什么原因?

安防监控/云存储/磁盘阵列存储/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RT…

leetcode 563.二叉树的坡度

⭐️ 题目描述 🌟 leetcode链接:https://leetcode.cn/problems/binary-tree-tilt/description/ 代码: class Solution { public:int childFind(TreeNode* root , int& sumTile) {if (root nullptr) {return 0; // 空树坡度为0}int l…

VBA技术资料MF48:VBA_在Excel中将列号与字母转换

【分享成果,随喜正能量】除非自己的认知获得了改变和刷新,否则,人们常说的“顺应自己的内心”,顺的不过是一颗旧心,一颗惯性的,充满了各种习性的套路之心。与“顺应自己的内心”恰恰相反,人要用…

2023最新独立版校园跑腿校园社区小程序系统源码 | 附教程

2023最新独立版校园跑腿校园社区小程序系统源码 | 附教程 测试环境:NginxPHP7.2MySQL5.6 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务 源码下载:https://download.c…

二叉搜索树(C++)

二叉搜索树 概念二叉搜索树的应用二叉搜索树的实现K模型基本结构和函数声明接口实现①find——查找关键码②Insert——插入关键码③Erase——删除关键码(重点)时间复杂度 源码(整体)非递归递归 KV模型 在使用C语言写数据结构阶段时…

【Linux】进程通信 — 信号(下篇)

文章目录 📖 前言1. 阻塞信号1.1 信号其他相关常见概念:1.2 sigset_t:1.2 - 1 信号集操作函数 1.3 sigprocmask:1.4 sigpending: 2. 进程处理信号2.1 内核页表和用户页表:2.2 内核态和用户态:2.…

华为OD机试 - VLAN资源池 - 回溯、双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、核心思想2、具体解题思路 五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&…

产品帮助中心对SaaS行业的作用

帮助中心是一款SaaS产品必不可少的一部分,为了帮助用户更好的解决产品相关问题,提高新用户的使用体验,并且引导其更好地使用产品。 所以今天我们就来谈谈帮助中心对SaaS行业的作用,以及制作帮助中心的方法,每个产品帮…

基于 OV5640 的图像采集显示系统(DVP 接口时序逻辑设计)

文章目录 前言一、DVP 接口时序逻辑设计二、基本数据流接收三、像素位置输出四、舍弃前 N 张图像五、系统异常状态恢复控制六、完整代码展示七、仿真代码展示八、仿真波形展示前言 上一节,我们已经完成了 OV5640 初始化逻辑的介绍。接下来,将要开始完成 DVP 接口的时序设计。…

Maven入门教程(一):安装Maven环境

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 ​ 在项目开发中Maven可以对jar包和对工程之间的依赖关系进行管理。maven仓库中存储jar包,可以一次下载,所有项目通用。 1. 安装…

Java项目-苍穹外卖-Day07-redis缓存应用-SpringCache/购物车功能

文章目录 前言缓存菜品问题分析和实现思路缓存菜品数据清理缓存数据功能测试 SpringCache介绍入门案例 缓存套餐 前言 本章节主要是进行用户端的购物车功能开发 和redis作为mysql缓存的应用以及SpringCache的介绍 因为很多人查询数据库会导致mysql的查询效率降低,可…

解读亚马逊云科技语义搜图检索方案

图像检索(包括文搜图和图搜图)是各个行业中常见的一个应用场景。比如在电商场景中,基于以图搜图做相似商品查找;在云相册场景中,基于文搜图来找寻所需的图像素材。 传统基于标签的图像检索方式,即先使用目标…

压力传感器的性能技术指标

压力传感器采用第四代无线传输方式,加入用高性能的感压芯片,配合先进的电路处理和温度补偿技术,选用不锈钢外壳做隔离防腐,能够测量与接触部分材质相兼容的气体和液体等介质的表压和绝压。 应用场合:如供水、排水、消…

如何空手套白狼?一口气省7K再抓住一个7K起步的工作?

今日话题,教你如何省七千再得到一个七千起步的技能!现在网络行业已经是全世界重点发展的目标,开发行业更是各个企业重点培养,但是在学校教的网络知识太基础太老掉牙?报班随便就是小一万该如何是好呢?解决方…

树莓派3b无屏幕登录

如果要无屏登录,烧写时最好设置,勾选WIFI ,登录密码,和SSH 树莓派操作系统下载地址 树莓派资源下载 | 树莓派实验室 无屏幕无键盘登录:新版中可能要先SSH登录,然后才能在RASPI-CONFIG中打开串口控制台 登录…

1A快恢复整流二极管型号汇总

快恢复整流二极管是二极管中的一种,开关特性好、反向恢复时间短,在开关电源、PWM脉宽调制器、变频器等电子电路中经常能看到它的身影。快恢复整流二极管的内部结构与普通PN结二极管不同,它属于PIN结型二极管,即在P型硅材料与N型硅…