Verilog语法笔记(夏宇闻第三版)-结构说明语句

news2024/11/19 7:45:18

目录

initial语句:

always语句:

task和function说明语句:

task和function说明语句的不同点:

task说明语句:

function说明语句:


Verilog语言中的任何过程模块都从属于以下四种结构的说明语句:

1) initial说明语句

2) always说明语句

3) task说明语句

4) function说明语句

initial和always说明语句在仿真的一开始即开始执行。initial语句只执行一次。相反,always语 句则是不断地重复执行,直到仿真过程结束。在一个模块中,使用initial和always语句的次数是不 受限制的。task和function语句可以在程序模块中的一处或多处调用。

initial语句:

initial语句的格式如下:

例:

从这个例子中,我们可以看到initial语句的另一用途,即用initial语句来生成激励波形作为电路的 测试仿真信号。一个模块中可以有多个initial块,它们都是并行运行的。initial块常用于测试文件 和虚拟模块的编写,用来产生仿真测试信号和设置信号记录等仿真环境。


always语句:

always语句在仿真过程中是不断重复执行的。 其声明格式如下:

always语句由于其不断重复执行的特性,只有和一定的时序控制结合在一起才有用。如果一个always 语句没有时序控制,则这个always语句将会发成一个仿真死锁。见下例:

这个always语句将会生成一个0延迟的无限循环跳变过程,这时会发生仿真死锁。如果加上时序控制, 则这个always语句将变为一条非常有用的描述语句。见下例:

这个例子生成了一个周期为:period(=2*half_period) 的无限延续的信号波形,常用这种方法来描 述时钟信号,作为激励信号来测试所设计的电路。

这个例子中,每当areg信号的上升沿出现时把tick信号反相,并且把counter增加1。这种时间控制是 always语句最常用的。

always 的时间控制可以是沿触发也可以是电平触发的,可以单个信号也可以多个信号,中间需要用 关键字 or 连接,如:

沿触发的always块常常描述时序逻辑,如果符合可综合风格要求可用综合工具自动转换为表示时序逻 辑的寄存器组和门级逻辑,而电平触发的always块常常用来描述组合逻辑和带锁存器的组合逻辑,如 果符合可综合风格要求可转换为表示组合逻辑的门级逻辑或带锁存器的组合逻辑。一个模块中可以有 多个always块,它们都是并行运行的。


task和function说明语句:

task和function说明语句分别用来定义任务和函数。利用任务和函数可以把一个很大的程序模块分解 成许多较小的任务和函数便于理解和调试。输入、输出和总线信号的值可以传入、传出任务和函数。 任务和函数往往还是大的程序模块中在不同地点多次用到的相同的程序段。学会使用task和function 语句可以简化程序的结构,使程序明白易懂,是编写较大型模块的基本功。

task和function说明语句的不同点:

1) 函数只能与主模块共用同一个仿真时间单位,而任务可以定义自己的仿真时间单位。

2) 函数不能启动任务,而任务能启动其它任务和函数。

3) 函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量。

4) 函数返回一个值,而任务则不返回值。

task说明语句:

如果传给任务的变量值和任务完成后接收结果的变量已定义,就可以用一条语句启动任务。任务完成 以后控制就传回启动过程。如任务内部有定时控制,则启动的时间可以与控制返回的时间不同。任务 可以启动其它的任务,其它任务又可以启动别的任务,可以启动的任务数是没有限制的。不管有多少任务启动,只有当所有的启动任务完成以后,控制才能返回。

  • 定义任务的语法如下:

  • 启动任务并传递输入输出变量的声明语句的语法如下:

  • 下面的例子说明怎样定义任务和调用任务:

任务调用变量(v,w,x,y,z)和任务定义的I/O变量(a,b,c,d,e)之间是一一对应的。当任务启动时,由 v,w,和x.传入的变量赋给了a,b,和c,而当任务完成后的输出又通过c,d和e赋给了x,y和z。

function说明语句:

函数的目的是返回一个用于表达式的值。

请注意这一项是可选项,如缺省则返回值为一位寄存器类型数据。下面用例子说明:

  • 从函数返回的值:

函数的定义蕴含声明了与函数同名的、函数内部的寄存器。如在函数的声明语句中为缺省,则这个寄存器是一位的,否则是与函数定义中一致的寄 存器。函数的定义把函数返回值所赋值寄存器的名称初始化为与函数同名的内部变量。

  • 函数的调用:

  •  函数的使用规则

        1) 函数的定义不能包含有任何的时间控制语句,即任何用#、@、或wait来标识的语句。

        2) 函数不能启动任务。

        3) 定义函数时至少要有一个输入参量。

        4) 在函数的定义中必须有一条赋值语句给函数中的一个内部变量赋以函数的结果值,该内             部变量具有和函数名相同的名字。

下面的例子中定义了一个可进行阶乘运算的名为factorial的函数,该函数返回一个32位的寄存器类 型的值,该函数可后向调用自身,并且打印出部分结果值。

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

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

相关文章

【GNN】图基本知识代码、nxworks包的基本使用

一个写得很好的博客: 图或网络中的中心性:点度中心性、中介中心性、接近中心性、特征向量中心性、PageRank 特征向量中心性(eigenvector centrality) 特征向量中心性的基本思想是,一个节点的中心性是相邻节点中心性的函…

Reactive思考

最近在学习响应式编程,由此翻看了很多资料,在此把思考过程记录下 目录 来由 规范 具体实现 历史 1. Servlet的尝试 1.1 Async实现demo 2. web应用层 2.1 web-flux 2.2 web-flux/web-mvc 与 spring-web架构关系 3. DBConnection层 相关可能混淆…

STL中vector怎么扩容

STL vector扩容 vector容器 vector被称为向量容器,该容器擅长在尾部插入或删除元素,时间复杂度为O(1);而对于在vector容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间)&#xf…

十九、Kubernetes中Pod调度第一篇

1、概述 在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制某些Pod到达某些…

Gradle学习笔记之插件

文章目录插件的作用插件的分类和使用脚本插件对象插件第三方插件用户自定义插件buildSrc项目编写步骤其他项目/模块引用步骤java插件常用属性插件的作用 插件可以帮助我们促进代码的重用、项目更高程度的模块化、自动化和便捷化,减少功能类似代码的编写&#xff0c…

【数据结构与算法】 | 用队列实现栈

用队列实现栈 链接: https://leetcode.cn/problems/implement-stack-using-queues/ 1. 要求 2. 思路 栈的性质是先进后出,队列的性质是先进先出。 题目要求是用两个队列来完成栈的实现,那么大思路就是通过倒腾数据来完成。 3. 代码实现…

JAVA系列 多线程 Thread类 耦合 线程调度 如何创建线程 弱耦合 完全解耦 思维结构整理

这估计是我JAVA系列 基础知识点梳理的最后一篇文章了吧 之后一段时间 我打算去看看之前承诺更新的JAVA的一些项目了 然后我要好好玩一段时间游戏 然后跟某些好朋友见面 所以后面会忙一点 然后就是很多同学 六级还没有考 估计很多人是开学再考把 这个假期就不要玩的太厉害了 没事…

人员超员识别系统 yolov5

人员超员识别系统通过yolov5深度学习网络模型对现场画面进行实时监测,监测到画面中区域人数超过规定人数时,立即抓拍存档预警。YOLO系列算法是一类典型的one-stage目标检测算法,其利用anchor box将分类与目标定位的回归问题结合起来&#xff…

一篇彻底解决:Fatal error compiling: 无效的目标发行版: 11 -> [Help 1]

先在这声明,如果我的方法没有解决你的问题,那你直接私信我,我第一时间帮你解决,送佛送到西!!! 这个问题,主要原因就是JDK的版本问题,“无效的目标发行版:11”的意思是你在某个位置配置了JDK11,但是在其他位置配置的并不是11&…

靶机测试Gears of War笔记

靶机介绍Its a CTF machine that deals with the history of gears of war, where we must try to escape from prison and obtain root privileges. it has some rabbit holes, so you have to try to connect the tracks to get access.This works better with VirtualBox ra…

[ 数据结构 ] 二叉树详解--------前序、中序、后序、存储、线索化

0 前言 why?为什么需要树结构? 数组虽然查找快(通过下标访问),但无法动态扩容(拷贝到新的数组),而链表相反,树结构刚好结合两者优点 浅谈树? 树的存储和读取效率都很高,比如二叉排序树,理解树的抽象模型有助于理解递归的原理,树的模型接近于单向链表,父节点指向左右子树,而…

【因果发现】 针对时序数据的因果图学习

文章目录 一、任务二、数据集说明三、专业名词CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、任务 This track focuses on solving a causal structure learning problem in AIOps. AIOps 相关:主要目标是从事件序列数据中挖掘因果图关系,并辅助定位根因。 主要需要解…

php学习笔记-php数组的创建和使用,数组常用函数-day03

php数组的创建和使用,数组常用函数数组的概念一维数组的创建和使用1.直接将变量声明为数组元素2.通过array()函数来创建一维数组3.数组的元素值的访问4.数组元素的赋值方式5.数组的注意事项二维数组的创建和使用1.二维数组的创建2.二维数组的数组元素值访问3.二维元…

ArcGIS基础实验操作100例--实验67设置标注样式

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验67 设置标注样式 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

Java+Swing可视化图像处理软件

JavaSwing可视化图像处理软件一、系统介绍二、功能展示1.图片裁剪2.图片缩放3.图片旋转4.图像灰度处理5.图像变形6.图像扭曲7.图像移动三、项目相关3.1 乱码问题3.2 如何将GBK编码系统修改为UTF-8编码的系统?四、其它1.其他系统实现2.获取源码一、系统介绍 该系统实…

Allegro174版本新功能介绍之和172版本兼容设置

Allegro174版本新功能介绍之和172版本兼容设置 Allegro升级到了174版本的时候,如果按照常规操作用174版本保存PCB之后,用172版本是无法打开的。 但是174版本开放了一个和172版本兼容的窗口,即便是174版本保存了PCB,172同样还是能够打开 具体操作如下 选择Setup选择User p…

[Linux]git命令行

🥁作者: 华丞臧. 📕​​​​专栏:【LINUX】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文…

前端入门笔记 05 —— js基础

基于ES6 生成html文件&#xff0c;script标签引入js文件 简单语句直接用console面板 <!DOCTYPE html> <html><head><title>js核心语法</title><meta charset"UTF-8" /></head><body><script src "./1.5j…

多线程(4)

文章目录1.单例模式2. 阻塞队列3. 定时器4.线程池前言 :   前面的一些文章&#xff0c;我们已经将有关多线的基础知识了解了&#xff0c; 下面我们来写一些关于多线程的代码案例&#xff0c;来强化对多线程的理解&#xff0c;另外通过这些案例补充一下其他方面的知识。 1.单例…

印度如何在云计算中抓住千载难逢的机会

云对印度的影响大流行和后大流行时期的虚拟和混合世界越来越依赖于云&#xff0c;并随之提高灵活性、敏捷性和创新性。在这场快速的数字化转型中&#xff0c;印度企业也纷纷加入云解决方案以促进业务增长。NASSCOM-EY的调查显示&#xff0c;78%的印度IT公司、53%的医疗保健和BF…