02、Verilog例化说明
目录
1、Verilog例化说明
2、接口(interface)例化说明
3、SV(class)例化说明
1、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
2.数码管静态显示模块(仅显示端口及参数)
module seg_led_static ( input clk , // 时钟信号input rst_n , // 复位信号(低有效)input add_flag, // 数码管变化的通知信号output reg [5:0] sel , // 数码管位选output reg [7:0] seg_led // 数码管段选);
......(省略功能代码)endmodule
3.顶层模块(着重看下面“例化计时模块”、“例化数码管静态显示模块”)
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开发文档。
2、接口(interface)例化说明
3、SV(class)例化说明
参考:最强Verilog例化说明_奇点FPGA的博客-CSDN博客_verilog例化
02、Verilog例化说明相关推荐
- Vs code如何快速生成Verilog例化模板
问题描述 用过很多种编辑器,Vs code对与Verilog的语法支持,以及Vivado关联都是目前我最满意的. 也是我用过安装插件最方便的一款软件,最关键的是它不需要破解,直接在官网下载正版,安装即 ...
- 【 Sublime Text 】如何使用Sublime Text直接生成Verilog例化模板
目录 背景 具体实现方式 其他方法 参考链接 背景 可以这么说,我们使用Sublime Text来编写Verilog代码最希望拥有的功能也就是自动生成Verilog例化模板,这也是我准备弃用notep ...
- (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模块 ...
- FPGA学习-Verilog例化说明
原文作者:FPGA设计论坛 Verilog例化说明 1.什么是模块例化?为什么要例化? 模块例化可以理解成模块调用.对于一个FPGA工程,通常是由一个顶层模块与多个功能子模块组成,为了实现顶层模块与子 ...
- 最强Verilog例化说明
文章目录 Verilog例化说明 1.什么是模块例化?为什么要例化? 2.实例说明例化方法 Verilog例化说明 1.什么是模块例化?为什么要例化? 模块例化可以理解成模块调用.对于一个FPGA工程 ...
- Verilog初级教程(7)Verilog模块例化以及悬空端口的处理
博文目录 写在前面 正文 按顺序排列的端口连接 按名称排列的端口连接 未连接/悬空端口处理 关于模块端口的说明 参考资料 交个朋友 写在前面 此系列相关博文: Verilog初级教程(6)Verilo ...
- (16)Verilog模块例化-基本语法(四)(第4天)
(16)Verilog模块例化-基本语法(四)(第4天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)Verilog模块例化-基本语法(四)(第4天) 5)技术 ...
- (11)VHDL例化system Verilog
(11)VHDL例化system Verilog 1.1 目录 1)目录 2)FPGA简介 3)VHDL简介 4)VHDL例化system Verilog 5)结语 1.2 FPGA简介 FPGA(F ...
最新文章
- 为什么以太坊能成为区块链2.0的代表之作?
- iOS中构造函数与析构函数
- 互联网协议 — HTTP/3 超文本传输协议第 3 版
- LLVM 与 Clang 介绍 — LinuxTOY
- python使用ffmpeg截取视频段
- linux中如何复制文件并重命名_linux 下怎么复制一个文件到另外一个目录并且重命名...
- 关于 redis crackit 安全事件分析
- POI java导出Excel宏文件
- redis实现分布式锁的几种方式
- 2023成都理工大学计算机考研信息汇总
- 全网无损音乐、超清视频免费下!
- 企业内部短信模板大全分析
- back_insert_iterator
- OSChina 周三乱弹 —— 念念不忘,必有回响
- python好学吗要有什么基础-Python0基础好学吗?
- debussy下载及安装
- msp心形16个闪灯c语言程序,心形流水灯程序
- DOCTYPE 的作用是什么
- Codeforces 1635 E. Cars 二分图+拓扑排序
- 中小学语文在线学习辅导哪家好?优质课程随你挑