FPGA学习-Verilog例化说明
原文作者:FPGA设计论坛
Verilog例化说明
1.什么是模块例化?为什么要例化?
模块例化可以理解成模块调用。对于一个FPGA工程,通常是由一个顶层模块与多个功能子模块组成,为了实现顶层模块与子模块的连接,需要进行模块间的例化(或说是调用)。在一个FPGA项目工程中,其输入、输出端口命名通常在设计前期就已确定下来,但会存在一些中间变量,一个工程可能会让不同的工程师在不同的时间段内共同完成,不同的人对于这些变量的命名会有所不同,故例化很有必要。
2.实例说明例化方法
实例:静态数码管显示
根据功能将 FPGA 顶层例化了以下两个功能子模块:计时模(time_count)和数码管静态显示模块(seg_led_static),如下图所示:
1.计时模块(仅显示端口及参数)
module time_count(input clk , // 时钟信号input rst_n , // 复位信号output reg flag // 一个时钟周期的脉冲信号
);//parameter defineparameter MAX_NUM = 25000_000; // 计数器最大计数值
......(省略功能代码)endmodule
数码管静态显示模块(仅显示端口及参数)
module seg_led_static ( input clk , // 时钟信号input rst_n , // 复位信号(低有效)input add_flag, // 数码管变化的通知信号output reg [5:0] sel , // 数码管位选output reg [7:0] seg_led // 数码管段选);
......(省略功能代码)endmodule
顶层模块(着重看下面“例化计时模块”、“例化数码管静态显示模块”)
module seg_led_static_top (input sys_clk , // 系统时钟input sys_rst_n, // 系统复位信号(低有效)output [5:0] sel , // 数码管位选output [7:0] seg_led // 数码管段选);//parameter defineparameter TIME_SHOW = 25'd25000_000; // 数码管变化的时间间隔0.5s//wire definewire add_flag; // 数码管变化的通知信号//例化计时模块
time_count #( //参数例化使用’#‘.MAX_NUM (TIME_SHOW)
) u_time_count(.clk (sys_clk ),.rst_n (sys_rst_n),.flag (add_flag ));//例化数码管静态显示模块
seg_led_static u_seg_led_static (.clk (sys_clk ),.rst_n (sys_rst_n),.add_flag (add_flag ),.sel (sel ),.seg_led (seg_led ));endmodule
上面给出了顶层模块的完整代码,子模块只有模块的端口和参数定义的代码。这是因为顶层模块对子模块做例化时,只需要知道子模块的端口信号名,而不用关心子模块内部具体是如何实现的。
如果子模块内部使用parameter 定义了一些参数,Verilog 也支持对参数的例化(也叫参数的传递),即顶层模块可以通过例化参数来修改子模块内定义的参数。
下图为模块例化。
上图右侧是例化的数码管静态显示模块,子模块名是指被例化模块的模块名,而例化模块名相当于标识,当例化多个相同模块时,可以通过例化名来识别哪一个例化,我们一般命名为“u_”+“子模块名”。信号列表中“.”之后的信号是数码管静态显示模块定义的端口信号,括号内的信号则是顶层模块声明的信号,这样就将顶层模块的信号与子模块的信号一一对应起来,同时需要注意信号的位宽要保持一致。
接下来再来介绍一下参数的例化,参数的例化是在模块例化的基础上,增加了对参数的信号定义。
下图为参数例化:
在对参数进行例化时,在模块名的后面加上“#”,表示后面跟着的是参数列表。计时模块定义的MAX_NUM 和顶层模块的 TIME_SHOW 都是等于25000_000,当在顶层模块定义 TIME_SHOW=12500_000时,那么子模块的 MAX_NUM 的值实际上是也等于 12500_000。当然即使子模块包含参数,在做模块的例化时也可以不添加对参数的例化,这样的话,子模块的参数值等于该模块内部实际定义的值。
值得一提的是,Verilog 语法中的localparam 代表的意思同样是参数定义,用法和 parameter 基本一致,区别在于 parameter 定义的参数可以做例化,而 localparam 定义的参数是指本地参数,上层模块不可以对localparam 定义的参数做例化。
FPGA学习-Verilog例化说明相关推荐
- (41)System Verilog 例化System Verilog模块
(41)System Verilog 例化System Verilog模块 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 例化Sys ...
- (42)System Verilog 例化Verilog模块
(42)System Verilog 例化Verilog模块 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 例化Verilog模块 ...
- 02、Verilog例化说明
目录 1.Verilog例化说明 2.接口(interface)例化说明 3.SV(class)例化说明 1.Verilog例化说明 1.什么是模块例化?为什么要例化? 模块例化可以理解成模块调用.对 ...
- 最强Verilog例化说明
文章目录 Verilog例化说明 1.什么是模块例化?为什么要例化? 2.实例说明例化方法 Verilog例化说明 1.什么是模块例化?为什么要例化? 模块例化可以理解成模块调用.对于一个FPGA工程 ...
- Vs code如何快速生成Verilog例化模板
问题描述 用过很多种编辑器,Vs code对与Verilog的语法支持,以及Vivado关联都是目前我最满意的. 也是我用过安装插件最方便的一款软件,最关键的是它不需要破解,直接在官网下载正版,安装即 ...
- 【 Sublime Text 】如何使用Sublime Text直接生成Verilog例化模板
目录 背景 具体实现方式 其他方法 参考链接 背景 可以这么说,我们使用Sublime Text来编写Verilog代码最希望拥有的功能也就是自动生成Verilog例化模板,这也是我准备弃用notep ...
- ZYNQ之FPGA学习----Verilog HDL语法(2)
5 Verilog 高级知识点(二) 5.1 Verilog 语句块 Verilog 语句块提供了将两条或更多条语句组成语法结构上相当于一条一句的机制.主要包括两种类型:顺序块和并行块. 顺序块 顺序 ...
- FPGA学习-Verilog实现独立按键消抖
文章目录 前言 一.独立按键消抖原理 二.按键消抖程序实现(Verilog) 1.按键触发判断 2.计数器模块实现 3.按键状态更新 4.按键控制led亮灭 三.仿真测试文件编写 四.编译结果 前言 ...
- FPGA学习——verilog捕捉信号上升沿下降沿
在FPGA使用中,常常需要进行信号的边沿检测,如在串口通信中,需要检测接收信号的下降沿来判断串口的的起始位. 常用的方法就是:设计两个一位的寄存器,用来接收被检测的信号,系统时钟来一次记一次输入信号, ...
最新文章
- 利用PyMySQL模块操作数据库
- python文件写入字典格式输出_Python把对应格式的csv文件转换成字典类型存储脚本的方法...
- 如何进行服务器备份操作系统,如何在Linux服务器上做备份和恢复
- 12.history的用法
- pip install 出现报asciii码错误的问题
- fastxml 大于符号不转换_JQuery框架及Ajax技术练习
- Ruby on Rails 和 J2EE:两者能否共存?
- C# 创建文件夹 Directory
- composer安装yii2框架提示“fxp/composer-asset-plugin”与composer版本不符
- springboot医院预约挂号系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT
- 手机电脑传文件?教你三种最简单的方法!
- 数据库架构设计——数据库选型
- 高阶函数,太有用啦!
- linux下实现线程暂停
- codeforces 1364D Ehabs Last Corollary
- 计算机安全模式还原系统,Win10电脑安全模式怎么还原系统?Win10电脑安全模式还原系统方法步骤...
- ubuntu关机卡死
- pam_shells.so
- 软件网关工业生产设备PLC数据采集转存数据库记录仪IOT gateway
- 请简要叙述在微型计算机使用过程都需要注意哪些事项?并说明了理由.,应用写作模拟试题及答案(参考模板)...