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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6.如何判断数据库搜索是否走索引?

判断是否使用索引搜索 索引在数据库中是一个不可或缺的存在,想让你的查询结果快准狠,还是需要索引的来帮忙,那么在mongo中如何判断搜索是不是走索引呢?通常使用执行计划(解释计划、Explain Plan)来查看查询…

苍穹外卖-day13:vue基础回顾+进阶

vue基础回顾进阶 课程内容 VUE 基础回顾路由 Vue-Router状态管理 vuexTypeScript 1. VUE 基础回顾 1.1 基于脚手架创建前端工程 1.1.1 环境要求 要想基于脚手架创建前端工程,需要具备如下环境要求: ​ node.js 前端项目的运行环境 学习web阶段已安…

2024普通人如何创业!2024年普通人创业五大热门项目 !五个适合穷人创业项目低成本生意! 2024最适合创业的五大行业! 2024适合上班族的创业

1、减肥减脂 贾玲1年瘦100斤狠狠刺激了减肥人群。用户群体体量极大,瑜伽、减肥、健身都可以切入,可以分享减肥的经历、运动跟练、饮食食谱等。有的一个春节期间就涨粉5000,变现嫁接到高客单的陪练全案。 2、卖随身WiFi 现在网络是共需&#…

Elasticsearch实战:索引阻塞 —— 数据保护的终极武器

文章目录 1、索引阻塞的种类2、什么时候使用阻塞?场景1:进行系统维护场景。场景2:保护数据不被随意更改场景。场景3:优化资源使用的场景。场景4:遵守安全规则场景。 3、添加索引阻塞API4、解除设置 API5、小结6、参考 …

如何在SpringCloud2023中快速集成注册中心

你好,这里是codetrend专栏“SpringCloud2023实战”。欢迎点击关注查看往期文章。 注册中心在前文提到有很多选型,在这里以Spring Cloud Zookeeper为例说明注册中心的集成和使用。 选择Spring Cloud Zookeeper作为注册中心原因如下: 依赖更少…

【3DsMax】UVW展开——以制作牙膏盒为例

效果 步骤 1. 从网上下载牙膏盒贴图,我下载的贴图地址为(牙膏盒贴图链接) 2. 打开3DsMax,创建一个长方体,设置长宽高分别为180、45、40毫米 打开材质编辑器,点击漫反射后的按钮 双击“位图” 将材质赋予长…

【每日八股】Java基础经典面试题4

前言:哈喽大家好,我是黑洞晓威,25届毕业生,正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结🥰。 本篇文章记录的Java基础面试题,如果你也在复习的话不妨…

重装系统后鼠标识别不了咋办

不知道大家在重装系统时,有没有遇到过系统重装完成后,鼠标不能使用的情况。在这种情况下,我们要怎么操作电脑解决这个问题呢?今天就跟大家分享重装系统后鼠标识别不了咋办。 一、主板没有设置兼容usb 在重装系统时,如果主板没有设置兼容usb,就会出现鼠标使用不了的现象。…

流畅的 Python 第二版(GPT 重译)(十一)

第二十章:并发执行器 抨击线程的人通常是系统程序员,他们心中有着典型应用程序员终其一生都不会遇到的用例。[…] 在 99%的用例中,应用程序员可能会遇到的情况是,生成一堆独立线程并将结果收集到队列中的简单模式就是他们需要了解…

【Linux】线程预备知识{远程拷贝/重入函数与volatile关键字/认识SIGCHILD信号/普通信号/实时信号}

文章目录 0.远程拷贝1.重入函数与volatile关键字2.认识SIGCHILD信号3.普通信号/实时信号 0.远程拷贝 打包资源:tar czf code.tgz *远程传输:scp code.tgz usr服务器ip:/home/usr/路径解压:tar xzf code.tgz 1.重入函数与volatile关键字 先看…

深度解析 Android 系统属性

目录 Android系统属性 1.属性在哪里? 2.属性长什么样? 3.如何读写属性: 4.属性的作用 属性文件生成过程 如何添加系统属性 1.添加系统属性到 /system/build.prop 2.添加系统属性到 /vendor/build.prop 3.添加系统属性到 /product/b…

cdn尝试(减少打包体积)

如果是vue-cli创造的工程,在build后面加上 --report,就会在dist文件夹下出现report.html用于分析打包后个文件的体积 也可以使用插件: webpack使用webpack-bundle-analyzer进行分析; vite使用rollup-plugin-visualizer进行分析…

论文解读—— 基于边缘梯度方向插值和 Zernike 矩的亚像素边缘检测

论文:《 Subpixel edge detection based on edge gradient directional interpolation and Zernike moment》 地址: http://www.dpi-proceedings.com/index.php/dtcse/article/view/24488 摘要 在本文中,我们提出了一种基于边缘梯度方向插值…

D2587A高压大电流DC-DC,采用TO220T-5L或TO263-5L封装形式

1、概述 D2587A稳压器是专为反激式、升压和正向转换器应用而设计的单片集成电路。该器件提供四种不同的输出电压版本:3.3V、5V、12V 和可调节电压。这些稳压器需要的外部元器件很少,因此具有成本效益,并且易于使用。该电源开关是一款5A NPN器…

介绍5款 世界范围内比较广的 5款 mysql Database Management Tool

介绍5款 世界范围内比较广的 5款 Mysql Database Management Tool 文章目录 介绍5款 世界范围内比较广的 5款 Mysql Database Management Tool前言MySQL Workbench:Navicat Premium:DBeaver Community:HeidiSQL:SQLyog&#xff1a…

每日学习笔记:C++ STL 的无序容器(unordered_set、unordered_map)

定义 特性 能够快速查找元素 操作函数 负载系数 元素个数 / bucket个数 提供哈希函数 提供等价准则 方法一:重写元素的操作符 方法二:自定义函数对象

点云配准:从二维到三维的艺术

点云配准:从二维到三维的艺术 在计算机视觉和机器学习的领域中,配准是一个至关重要的步骤,它涉及到将不同视角或时间点捕获的数据集对齐到同一个坐标系统中。这一过程不仅对二维图像至关重要,而且在三维世界的理解中也发挥着关键作…

Apipost IDEA插件新升级,Apipost Helper上架IDEA插件市场

大家好!今天向大家介绍一个非常方便的IDEA插件——Apipost Helper!相信很多使用过Apipost的朋友在开发过程中都希望能够直接将编写好的API同步至Apipost,而无需手动填写。前段时间,Apipost推出了Apipost IDEA插件的内测版&#xf…

YOLOv4学习

YOLOv4学习 什么是 parameter aggregation?什么是 Skip-connections?正是梯度的反向传播才使得损失函数得以在训练过程中不断优化,以使得模型逐渐学习到“正确的”知识,对吗?什么是Bag-of-Freebies?什么是B…

LLM—Transformer作用及信息流

一、Transformer的作用 Transformer架构的精髓在于其创新性地采用了编码器与解码器的堆叠设计,这一设计巧妙地融合了多头自注意力机制(Multi-Head Attention)和位置前馈网络(Position-wise Feed Forward Network)两大核…