Verilog基础:always结构和initial结构

相关阅读

Verilog基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


        always和initial是Verilog中的核心,它们被称为结构(construct),用于组织语句的执行方式。下面将分别对这两者进行阐述。

always结构

        图1是always结构的BNF范式语法(有关BNF范式,可以参考以往文章)。

图1 always结构的语法

        它看起来非常简单,即always关键词后面跟着一条语句(statement)即可。always结构代表了在仿真时其后面的这条语句会一直循环执行。

        语句是什么?这是个好问题,下面来看Verilog中语句的定义,如图2所示,它依旧是以BNF范式的形式给出的。

图2 语句的定义

        可以看出,语句可以是众多类语句中的一种,比如阻塞赋值语句(blocking_assignment) 、选择语句(case_statement),块语句(par_block、seq_clock)被视作一条语句,用于将多条语句以某种方式组织起来,它们在之前的文章中讨论过Verilog基础:块语句。

        由于always结构会持续执行后面的语句,因此该语句应有“过程语句前置时序控制”,这在之前的文章中也讨论过Verilog基础:延时模型。

        下面就是因为没有时序控制而出现死锁(仿真时间无法推进)的情况。

always clk = !clk   //由于赋值语句一直执行,仿真时间停止在0,而无法推进

        下面通过添加延迟时序控制(delay control),正确地使用了always结构,产生了一个时钟信号。

always #5 clk = !clk   //赋值语句每5时间单位执行一次,因此该时钟周期为10个时间单位

        更常见的情况下,always结构后面会跟一个语句块,比如顺序块begin-end,而更常见的时序控制会使用事件控制(event control)。

always @(a, b) begin      //语句前的@后使得该过程被挂起,直到a或b之一的值发生改变c = a | b;d = a & b;
end

        一个好的建议是,当使用always结构时,不论后面是否只有一条语句,都使用顺序块begin-end,这样能防止出现错误。

initial结构

        图3是initial结构的BNF范式语法。

图3 initial结构的语法

        它与always结构非常相似,唯一不同的就是initial结构使用的是initial关键词加一条语句。initial结构代表着其后面的语句只会执行一次,一旦执行完毕后,initial结构就被销毁。从它这抽象的描述中,就可知它是不可综合的,它常用于仿真时使用的testbench中。

        下面是一个initial结构,它在特定的时间将信号赋特定值,可以看做描述了一段波形。

initial begin a=1'b1;     //在开始时,a是1#5 a=1'b0;  //在5时间单位,a变为0#10 a=1'b1; //在15时间单位,a变为1
end

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

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

相关文章

弹框el-dialog title展示不下,鼠标hover显示tip

el-dialog title展示不下&#xff0c;鼠标hover显示tip <el-dialog:visible.sync"shows":close-on-click-modal"false"v-dialogDragwidth"520px"><template #title><div class"custom-title"><el-tooltipplaceme…

【文件操作和IO】

文件操作和IO 1.文件2. 硬盘上文件的目录结构3. 文件路径4. 文件重要分类&#xff1a;5. Java中操作文件5.1 Java对于文件操作的API5.2 Java中使用File类来进行文件操作5.3 File类属性5.4 构造方法5.5 方法&#xff1a; 6. 文件内容的读写 -- 文件流&#xff08;数据流&#xf…

Apache Superset

前言 最近在准备一个小的项目&#xff0c;需要对 Hive 的数据进行展示&#xff0c;所以想到了把 Hive 的数据导出到 MySQL 然后用 Superset 进行展示。 Superset 1.1 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接…

kubesphere all in one部署Jenkins提示1 Insufficient cpu

原因 devops 至少一个cpu&#xff08;1000m&#xff09;&#xff0c;但是其他资源已经占用了很多cpu CPU 资源以 CPU 单位度量。Kubernetes 中的一个 CPU 等同于&#xff1a; 1 个 AWS vCPU 1 个 GCP核心 1 个 Azure vCore 裸机上具有超线程能力的英特尔处理器上的 1 个超线程…

RISC-V架构的三种特权模式如何切换

1、RISC-V的三种特权模式 特权模式功能描述机器模式&#xff08;M-mode&#xff09;具有最高特权等级&#xff0c;具有访问所有资源的权限&#xff0c;通常运行固件和内核用户模式&#xff08;U-mode&#xff09;权限要比M模式低&#xff0c;通常是用来运行操作系统内核管理员…

MyBatis3源码深度解析(十七)MyBatis缓存(一)一级缓存和二级缓存的实现原理

文章目录 前言第六章 MyBatis缓存6.1 MyBatis缓存实现类6.2 MyBatis一级缓存实现原理6.2.1 一级缓存在查询时的使用6.2.2 一级缓存在更新时的清空 6.3 MyBatis二级缓存的实现原理6.3.1 实现的二级缓存的Executor类型6.3.2 二级缓存在查询时使用6.3.3 二级缓存在更新时清空 前言…

2024年第六届区块链与物联网国际会议(BIOTC 2024)即将召开!

2024年第六届区块链与物联网国际会议&#xff08;简称&#xff1a;BIOTC 2024&#xff09;将于2024 年 7 月 19 日至 21 日在日本福冈召开&#xff0c;旨在为来自行业、学术界和政府的研究人员、从业者和专业人士提供一个论坛&#xff0c;就研发区块链和物联网的专业实践进行交…

简介:使用TensorFlow实现python简版神经网络模型

如果你想进一步深入AI编程的魔法世界&#xff0c;那么TensorFlow和PyTorch这两个深度学习框架将是你的不二之选。它们可以帮助你构建更加复杂的神经网络模型&#xff0c;实现图像识别、语音识别等高级功能。 模型原理&#xff1a;神经网络是一种模拟人脑神经元结构的计算模型&a…

python 基于 websocket 的简单将视频推流到网页

本来有一台设备是要搞成无线的形式的&#xff0c;设备的摄像头的数据可以在一台局域网连接的平板上查看&#xff0c;因为试着使用 RTMP 推流&#xff0c;感觉延时太大了&#xff0c;而 Webrtc 感觉有太麻烦了&#xff0c;所以一开始看到这篇文章使用 UDP 协议进行推流&#xff…

stable diffusion webui ubuntu 安装

1.git clone 下来 GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UIStable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub.https://github.com/AUTOMATIC1111/stable-diffus…

数据仓库相关概述

数据仓库概述 数据仓库概念 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据&#xff0c;借助数据仓库的分析能力&#xff0c;企业可从数据中获得宝贵的信息进而改进决策。同时&#xff0c;随着时间的推移&#xff0c;数据仓…

期刊如何反击一波可疑图像

出版商正在部署基于人工智能的工具来检测可疑图像&#xff0c;但生成式人工智能威胁着他们的努力。 期刊正在努力检测用于分析蛋白质和DNA的凝胶的操纵图像。图片来源&#xff1a;Shutterstock 似乎每个月都会有一系列针对研究人员的新高调指控&#xff0c;这些研究人员的论文…

Go --- Go语言垃圾处理

概念 垃圾回收&#xff08;GC-Garbage Collection&#xff09;暂停程序业务逻辑SWT&#xff08;stop the world&#xff09;程序根节点&#xff1a;程序中被直接或间接引用的对象集合&#xff0c;能通过他们找出所有可以被访问到的对象&#xff0c;所以Go程序的根节点通常包括…

完全理解ARM启动流程:Uboot-Kernel

内容共计5W字数&#xff0c;但是我还是很多地方说的不够尽兴。那么下次聊&#xff01; 前言 bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 PC机上引导程序一般由BIOS开始执行&#xff0c;然后读取硬盘中位于MBR(Main Bo…

openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整

文章目录 openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整247.1 SQL调优关键参数调整 openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整 247.1 SQL调优关键参数调整 本节将介绍影响openGauss SQL调优性能的关键数据库主节点配置参数&#xff0c;配…

【JVM】为对象分配内存的方式,死亡对象判断方法

目录 为对象分配内存的方式 指针碰撞 空闲列表 TLAB 死亡对象判断方法 引用计数法 可达性分析算法 为对象分配内存的方式 指针碰撞 一般情况下&#xff0c;JVM的对象都放在堆内存中&#xff08;发生逃逸分析除外&#xff09;。当类加载检查通过后&#xff0c;JVM为新生…

python 中怎样使用任意关键词实参?

在 Python 中&#xff0c;可以使用任意数量的关键字实参和任意关键字实参&#xff0c;也被称为 kwargs。 这允许你在函数调用时传递任意数量的关键字参数。 你可以使用任意数量的关键字实参&#xff08;Keyword Arguments&#xff09;和任意关键字实参&#xff08;Arbitrary Ke…

sonar接入maven项目

1、介绍 sonar是一款静态代码质量分析工具&#xff0c;支持Java、Python、PHP、JavaScript、CSS等25种以上的语言&#xff0c;而且能够集成在IDE、Jenkins、Git等服务中&#xff0c;方便随时查看代码质量分析报告。他有如下特性 (1) 检查代码是否遵循编程标准&#xff1a;如命…

走迷宫---dfs在矩阵图里的应用模板

题目描述如下&#xff1a; dfs算法解决迷宫问题的一个标准模板 &#xff0c;通过递归与回溯暴力遍历所有能走的点&#xff0c;并比较找出所有可行方案的最优解 解决这道问题的核心思想和组合数如出一辙&#xff0c;可以说是组合数的升级版 结合注释看dfs更清晰易懂&#xff0…

springcloud-Eureka注册中心

如果你要理解这个技术博客博客专栏 请先学习以下基本的知识&#xff1a; 什么是微服务什么是服务拆分什么是springcloud Springcloud为微服务开发提供了一个比较泛用和全面的解决框架&#xff0c;springcloud继承了spring一直以来的风格——不重复造轮子&#xff0c;里面很多的…