Verilog基础:块语句

相关阅读

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:顺序块使以下的两个赋值有确定性结果。

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

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

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

beginareg = 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块可能很有用。

beginfork@Aevent;@Bevent;joinareg = 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.mzph.cn/news/58124.shtml

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

相关文章

树状表格子节点移动 - 在Vue.js中实现上下移动子节点的表格功能

目录 功能介绍 示例 代码 视图部分 逻辑部分 完整代码 功能介绍 本文介绍了如何在Vue.js框架下实现一个树状表格,其中支持选择子节点行的上下移动。通过这个功能,用户可以方便地改变子节点的顺序。代码示例和详细的实现步骤将展示如何使用Vue.js的相…

基于YOLOv8模型和DarkFace数据集的黑夜人脸检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型和DarkFace数据集的黑夜人脸检测系统可用于日常生活中检测与定位黑夜下的人脸,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目…

【教程】部署apprtc服务中安装google-cloud-cli组件的问题及解决

#0# 前置条件 已经安装完成node,grunt,node 组件和python pip包等。需要安装google-cloud-cli组件。 Ubuntu安装google-cloud-cli组件 apprtc项目运行需要google-cloud-cli前置组件,且运行其中的dev_appserver.py。 根据google官方的关于安…

DC/DC开关电源学习笔记(三)开关频率和储能元件

(三)开关频率和储能元件 1.开关频率2.储能元件 1.开关频率 频率是开关电源的一个基本属性,它代表了直流电压开启和关断的速率。了解开关频率就可以了解实际应用中电源线路的工作原理。 开关电源利用开关动作将直流电转换为特定频率的脉冲电…

ant-vue1.78版a-auto-complete表单自动搜索返回列表中的关键字标红

a-auto-complete表单自动搜索返回列表中的关键字标红 通常在做关键字标红的场景,都是后端返回html结构,前端直接渲染实现,但是如果需要前端处理的话,实现也是很简单的,接下来我直接上应用场景吧 应用场景就是通过关键…

理解TiDB集群的P99计算方式

原文来源: https://tidb.net/blog/c38dd8ac 一、背景简介 在学习prometheus时,会遇到一个histogram_quantile()函数,用于对histogram类型的指标进行分位数计算,实际上这个函数就是histogram这个指标类型最常用的函数。 此函数…

jq插件:jqgrid和validform的二次封装

做久了vue和react框架项目,偶尔也需要做做原生的项目。不可否认vue的双向绑定机制确实很香,但是也是建立在原生js基础上。所以,只有做更多的原生js项目,才能更加了解vue框架的底层原理。在日常开发中,也会不可避免的会…

mybatis:动态sql【2】+转义符+缓存

目录 一、动态sql 1.set、if 2.foreach 二、转义符 三、缓存cache 1. 一级缓存 2. 二级缓存 一、动态sql 1.set、if 在update语句中使用set标签&#xff0c;动态更新set后的sql语句&#xff0c;&#xff0c;if作为判断条件。 <update id"updateStuent" pa…

jmeter+ant+jenkins接口自动化测试框架

大致思路&#xff1a;Jmeter可以做接口测试&#xff0c;也能做压力测试&#xff0c;而且是开源软件&#xff1b;Ant是基于Java的构建工具&#xff0c;完成脚本执行并收集结果生成报告&#xff0c;可以跨平台&#xff0c;Jenkins是持续集成工具。将这三者结合起来可以搭建一套We…

火山引擎云调度GTM“同城容灾”与“异地多活”实践

随着企业不断推进数字化进程&#xff0c;高并发业务和海量数据的挑战也随之而来。在现实生活中&#xff0c;除了地震、台风、挖光纤这种小概率事件&#xff0c;还有很多人为造成的高概率数据丢失事件&#xff0c;比如人为操作失误、硬件故障、网络攻击等等&#xff0c;故障容灾…

vue可编辑表格

内容包含:校验。下拉框。输入框。日期控件 效果图 1.代码目录 2.index.js import SjjEditable from ./src/editable.vue // import Vue from vueSjjEditable.install = function (Vue) {Vue.component(SjjEditable.name, SjjEditable) }export default SjjEditable 3.util…

【进阶篇】MySQL 存储引擎详解

文章目录 0.前言1.基础介绍2.1. InnoDB存储引擎底层原理InnoDB记录存储结构和索引页结构InnoDB记录存储结构&#xff1a;InnoDB索引页结构&#xff1a; 3. MVCC 详解3.1. 版本号分配&#xff1a;3.2. 数据读取&#xff1a;3.3. 数据写入&#xff1a;3.4. 事务隔离级别&#xff…

【ubuntu】 20.04 网络连接器图标不显示、有线未托管、设置界面中没有“网络”选项等问题解决方案

问题 在工作中 Ubuntu 20.04 桌面版因挂机或不当操作&#xff0c;意外导致如下问题 1、 Ubuntu 网络连接图标消失 2、 有线未托管 上图中展示的是 有线 已连接 &#xff0c;故障的显示 有线 未托管 或其他字符 3、 ”设置“ 中缺少”网络“选项 上图是设置界面&#xff0c…

【Cesium创造属于你的地球】实现地球展示、灵活进行坐标转换、视角切换

大家好&#xff0c;我是AIC山鱼&#xff01;&#x1f449;这是我的主页 &#x1f40b;作为CSDN博主和前端优质创作者✍&#xff0c;我致力于为大家带来新颖、脱俗且有趣的内容。 &#x1f431;我还创建了山鱼社区&#xff0c;这是一个独特的社区&#x1f3e0;&#xff0c;&…

供水营业收费管理系统:智慧水务的得力助手

随着我国经济的快速发展&#xff0c;城市化进程不断加快&#xff0c;供水行业的需求也不断增长。为满足人们日益增长的用水需求&#xff0c;提高供水企业的管理水平和服务质量&#xff0c;供水营业收费管理系统应运而生&#xff0c;成为智慧水务的得力助手。 一、供水营业收费管…

【Hadoop】HDFS读写流程和客户端命令使用

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

ChromeOS 的 Linux 操作系统和 Chrome 浏览器分离

科技媒体 Ars Technica 报道称&#xff0c;谷歌正在将 ChromeOS 的浏览器从操作系统中分离出来 —— 让它变得更像 Linux。虽然目前还没有任何官方消息&#xff0c;但这项变化可能会在本月的版本更新中推出。 据介绍&#xff0c;谷歌将该项目命名为 "Lacros"—— 代表…

python爬虫12:实战4

python爬虫12&#xff1a;实战4 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产生不好…

Hadoop Hdfs基本命令

0目录 1.hadoop安装问题处理 2.hdfs基本命令 3.上传/下载文件和文件夹 1.hadoop安装问题处理 如果安装有进程无法启动&#xff0c;如下图 重新检查6个配置文件 Core-site.xml \ hdfs-site.xml \ hadoop-env.sh \ yarn-site.xml \ workers \ yarn-site.xml 来到hadoop313目录…

SpringBoot 跨域问题和解决方法

Spring Boot 是一种用于构建独立的、生产级别的Java应用程序的框架。在开发Web应用程序时&#xff0c;经常会遇到跨域资源共享&#xff08;CORS&#xff09;问题。本文将详细介绍Spring Boot中的跨域问题以及相应的解决方法。 目录 什么是跨域&#xff1f;1. 使用Spring Boot…