verilog case语句_verilog语法进阶

2023-11-03

欢迎FPGA工程师加入官方微信技术群

模块的结构、数据类型、变量和基本运算符号

3.1.模块的结构

Verilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。下面举例说明:

00a83671e776d9fc2c4b899707d7eeb1.png
图1 模块示例

m

请看上面的例子: 程序模块旁边有一个电路图的符号。在许多方面,程序模块和电路图符号是一致的,这是因为电路图符号的引脚也就是程序模块的接口。而程序模块描述了电路图符号所实现的逻辑功能。以上就是设计一个简单的Verilog程序模块所需的全部内容。从上面的例子可以看出,Verilog结构位于在module和endmodule声明语句之间,每个Verilog程序包括四个主要部分:端口定义、I/O说明、内部信号声明、功能定义。

3.1.1、模块的端口定义

模块的端口声明了模块的输入输出口。其格式如下:

module 模块名(口1,口2,口3,口4, ………);

…….

endmodule

模块的端口表示的是模块的输入和输出口名,也就是它与别的模块联系端口的标识。在模块被引用时,在引用的模块中,有些信号要输入到被引用的模块中,有的信号需要从被引用的模块中取出来。在引用模块时其端口可以用两种方法连接:

1)在引用时,严格按照模块定义的端口顺序来连接,不用标明原模块定义时规定的端口名,举例说明如下:

模块名 实例化名( 连接端口1信号名, 连接端口2信号名,连接端口3信号名,….,,,);

2)在引用时用“.”标明原模块定义时规定的端口名,举例说明如下:

模块名 实例化名(.端口1名( 连接信号1名),.端口2名( 连接信号2名),….,,,);

这样表示的好处在于可以用端口名与被引用模块的端口对应,不必严格按端口顺序对应,提高了程序的可读性和可移植性。

3.1.2、模块内容

模块的内容包括I/O说明、内部信号声明、功能定义。

3.1.2.1、I/O说明的格式如下:

输入口: input [信号位宽-1 :0] 端口名1;

input [信号位宽-1 :0] 端口名2;

………;

input [信号位宽-1 :0] 端口名i; //(共有i个输入口)

输出口: output [信号位宽-1 :0] 端口名1;

output [信号位宽-1 :0] 端口名2;

………;

output [信号位宽-1 :0] 端口名j; //(共有j个输出口)

输入/输出口:

inout [信号位宽-1 :0] 端口名1;

inout [信号位宽-1 :0] 端口名2;

………;

inout [信号位宽-1 :0] 端口名k; //(共有k个双向总线端口)

I/O说明也可以写在端口声明语句里。其格式如下:

module module_name(input port1,input port2,…

output port1,output port2… );

3.1.2.2、内部信号说明:

在模块内用到的和与端口有关的wire 和 reg 类型变量的声明。如:

reg [width-1 : 0] R变量1,R变量2 。。。。;

wire [width-1 : 0] W变量1,W变量2 。。。。;

………..

3.1.2.3、功能定义:

模块中最重要的部分是逻辑功能定义部分。有三种方法可在模块中产生逻辑。

1)用“assign”声明语句,如: assign a = b & c;

2)实例化模块,如: and u1( q, a, b );

3)用“always”块

如:always @(posedge clk or posedge clr)

begin

if(clr) q <= 0;

else if(en) q <= d;

end

采用“assign”语句是描述组合逻辑最常用的方法之一。而“always”块既可用于描述组合逻辑也可描述时序逻辑。上面的例子用“always”块生成了一个带有异步清除端的D触发器。“always”块可用很多种描述手段来表达逻辑,例如上例中就用了if...else语句来表达逻辑关系。如按一定的风格来编写“always”块,可以通过综合工具把源代码自动综合成用门级结构表示的组合或时序逻辑电路。

3.1.3、理解要点:

如果用Verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。上面分别采用了“assign”语句、实例元件和“always”块,描述的逻辑功能是同时执行的。也就是说,如果把这三项写到一个 VeriIog 模块文件中去,它们的次序不会影响逻辑实现的功能。这三项是同时执行的,也就是并发的。

然而,在“always”模块内,逻辑是按照指定的顺序执行的。“always”块中的语句称为“顺序语句”,因为它们是顺序执行,所以“always”块也称作“过程块”。请注意,两个或更多的“always”语句块,它们是同时执行的,而模块内部的语句是顺序执行的。 看一下“always”块内的语句,你就会明白它是如何实现功能的。 if..else… if必须顺序执行,否则其功能就没有任何意义。如果else语句在if语句之前执行,其功能就会不符合要求!为了能实现上述描述的功能,“always”语句块内部的语句将按照书写的顺序执行。

在Verilog 模块中所有过程块(如:initial块、always块)、连续赋值语句、实例引用都是并行的。它们表示的是一种通过变量名互相连接的关系。在同一模块中这三者出现的先后次序没有关系。只有连续赋值语句assign 和实例引用语句可以独立于过程块而存在于模块的功能定义部分。以上是与C语言有很大的不同。许多与C语言类似的语句只能出现在过程块中,而不能随意出现在模块功能定义的范围内。

3.2、数据类型及其常量、变量

Verilog HDL中总共有十九种数据类型,数据类型是用来表示数字电路硬件中的数据储存和传送元素的。先只介绍四个最基本的数据类型,它们是:reg型、wire型、i

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

verilog case语句_verilog语法进阶 的相关文章

随机推荐

  • deep learning编程作业总结3---一步步搭建多层神经网络及应用

    本周的主要学习了如何搭建一个多层神经网络 涉及较多的理论知识 因此本编博客将对自己所学的有关神经的知识做一个总结 图1展示的是具有4个隐藏层的神经网络结构 它的输入由x1 x2 x3构成 表示样本X具有三个特征 随后进入第一个隐藏层 该层分
  • python财务报表预测股票价格_建模股票价格数据并进行预测(统计信号模型):随机信号AR模型+Yule-Walker方程_Python...

    1 背景 针对股票市场中AR 模型的识别 建立和估计问题 利用AR 模型算法对股票价格进行预测 2 模型选取 股票的价格可视为随机信号 将此随机信号建模为 一个白噪声通过LTI系统的输出 通过原始数据求解 所建模型参数 得到模型 即可预测近
  • 华为od业务主管面试问题-我的回答

    目录 1 怎么处理项目上的需求 2 业余会不会学什么东西 3 你对加班的看法 4 你对OD的看法 5 哪里人 6 后续的发展 7 你对华为的认识 对当前岗位的了解 1 怎么处理项目上的需求 gt 项目经理和产品经理进行需求对接 gt 项目经
  • vant-list + toast分页加载,数据加载后会滚动至顶部

    vant list toast分页加载 数据加载后会滚动至顶部 主要原因是 toast组件在全局添加了 pointer event none 解决办法 在对应的van list的属性值添加 pointer event volunteer l
  • QT控件之(TableView)的居中效果

    T将tableView中的表头以及文本内容都进行居中处理 1 需要在构造函数中增加一句 以下增加的是表头的效果 ui gt tableView gt horizontalHeader gt setSectionResizeMode QHea
  • SQL注入之布尔盲注

    布尔盲注 如果确定页面注入点存在 如果页面没有回显并且没有报错信息可以考虑使用布尔盲注 布尔盲注的判断条件是页面布尔类型状态 当传递参数 id 1 and 1 1 这里以sqlilab的闯关为例 当传递参数 id 1 and 1 2 比较两
  • MyBatis学习(三):解析MyBatis的SQL映射XML文件写法和使用原理

    上面的两篇文章 分别是MyBatis的入门小程序和MyBatis的配置XML解析 有需要的可以先去看看这两篇文章 本篇文章 会来讲解SQL映射XML文件的写法以及如何使用 MyBatis真正的力量在于其映射语句 这里应该是奇迹发生的地方 S
  • Vue传参出现 Required String parameter 'username' is not present

    场景描述 在 使用axios 发送HTTP请求时 传递了后端指定的请求参数 但是后端报错 描述信息为 Required String parameter username is not present 分析问题 开始找原因 确定前端传递的参
  • jsp页面整合ECharts绘制图表(以折线图为例)

    文章目录 jsp页面整合ECharts绘制折线图 先看效果图 前端代码 后端测试代码 jsp页面整合ECharts绘制折线图 官网 https echarts apache org zh index html 官网上有demo可以直接调试样
  • 2021-06-15 好用的STF-Git项目

    好用的STF Git项目 1 基于openstf二次开发的群控管理平台 快速开始 Mac Linux centos 相关工具 测试使用版本 2 deploy stf docker 在Ubuntu上使用一键操作部署STF主服务器的脚本 1 基
  • Pyecharts——Python高级可视化

    Pyecharts是百度开源的移植到Python上的可视化工具 里面方法调用起来像是标记性语言 因此代码的可读性很强 一目了然 下面是一个绘制散点图的例子 import pyecharts options as opts from pyec
  • 出现 DeprecationWarning: BICUBIC is deprecated and will be removed in Pillow 10 的解决方法

    目录 1 问题所示 2 原理分析 3 解决方法 1 问题所示 使用plt代码模块的时候 问题如下 home kkjz anaconda3 envs py17 lib python3 7 site packages ipykernel lau
  • 强推,黑白照片一步完美上色,Picture Colorizer Pro Mac版

    今天在国外一个网站偶尔发现一个超棒的软件Picture Colorizer Pro专业版 黑白照片或老旧照片自动上色 心动不如行动 马上下载上手使用 效果超棒 它的强在在于色彩还原非常真实 有老照片的胶片感 边缘过度很精细 没有粗糙的感觉
  • 在C++中如何使用httpClient,用Newtonsoft解析JSON

    现在C 也不行了吗 网上找不到相关代码 为了搞清楚C 中如何使用httpClient和Newtonsoft 研究了一下午 我从未用C 编程 一直用C 现学现卖 https download csdn net download cnwjl 1
  • 深入浅出java并发编程(AbstractQueuedSynchronizer)(AQS)

    前言 Abstract抽象的 Ownable拥有 Synchronizer同步器 Queued队列 AbstractOwnableSynchronizer简称为AOS AbstractQueuedSynchronizer简称为AQS Abs
  • Springboot+mybatis+druid的整合

    最近的公司项目后端用到了Springboot框架 把阿里的druid作为数据源 采用mybatis druid的方式 本人之前也是在这里踩了很多坑 因此感觉有必要出个博客来记录一下 首先 用druid最为数据源的好处就不多说了 灵活动态切换
  • docker保存和加载tar及其tar.gz

    1 导出和加载tar 1 1 save和load命令 save命令 docker save options images images 示例 docker save o nginx tar nginx latest 或 docker sav
  • 005_关于QT之QWidget的事件处理机制

    一 eventFilter函数 事件过滤函数 一般用于容器组件来决定是否将事件传递给子组件 当前组件的事件过滤函数 在事件直接发生在当前组件时该组件的过滤函数是不被调用的 二 event函数 用于组件内部事件函数的分发 在这个函数内部调用事
  • opencv esp32cam的初步应用

    import urllib request import numpy as np import cv2 def cam esp32cam的ip地址 url 192 168 43 1 png 获取esp32cam的镜头 imgResp url
  • verilog case语句_verilog语法进阶

    欢迎FPGA工程师加入官方微信技术群 模块的结构 数据类型 变量和基本运算符号 3 1 模块的结构 Verilog的基本设计单元是 模块 block 一个模块是由两部分组成的 一部分描述接口 另一部分描述逻辑功能 即定义输入是如何影响输出的