0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习-Verilog例化说明

FPGA设计论坛 来源:未知 2022-12-12 09:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Verilog例化说明

1.什么是模块例化?为什么要例化?

模块例化可以理解成模块调用。对于一个FPGA工程,通常是由一个顶层模块与多个功能子模块组成,为了实现顶层模块与子模块的连接,需要进行模块间的例化(或说是调用)。在一个FPGA项目工程中,其输入、输出端口命名通常在设计前期就已确定下来,但会存在一些中间变量,一个工程可能会让不同的工程师在不同的时间段内共同完成,不同的人对于这些变量的命名会有所不同,故例化很有必要。

2.实例说明例化方法

实例:静态数码管显示
根据功能将 FPGA 顶层例化了以下两个功能子模块:计时模(time_count)和数码管静态显示模块(seg_led_static),如下图所示:
1.计时模块(仅显示端口及参数)

module time_count(
inputclk , // 时钟信号
inputrst_n , // 复位信号

output reg flag // 一个时钟周期的脉冲信号
);

//parameter define
parameter MAX_NUM = 25000_000; // 计数器最大计数值
......(省略功能代码)

endmodule
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

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
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

3.顶层模块(着重看下面“例化计时模块”、“例化数码管静态显示模块”)

module seg_led_static_top (
input sys_clk , // 系统时钟
input sys_rst_n, // 系统复位信号(低有效)

output [5:0] sel , // 数码管位选
output [7:0] seg_led // 数码管段选
);

//parameter define
parameter TIME_SHOW = 25'd25000_000; // 数码管变化的时间间隔0.5s

//wire define
wire 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
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

上面给出了顶层模块的完整代码,子模块只有模块的端口和参数定义的代码。这是因为顶层模块对子模块做例化时,只需要知道子模块的端口信号名,而不用关心子模块内部具体是如何实现的。

如果子模块内部使用parameter 定义了一些参数,Verilog 也支持对参数的例化(也叫参数的传递),即顶层模块可以通过例化参数来修改子模块内定义的参数。

下图为模块例化。

上图右侧是例化的数码管静态显示模块,子模块名是指被例化模块的模块名,而例化模块名相当于标识,当例化多个相同模块时,可以通过例化名来识别哪一个例化,我们一般命名为“u_”+“子模块名”。信号列表中“.”之后的信号是数码管静态显示模块定义的端口信号,括号内的信号则是顶层模块声明的信号,这样就将顶层模块的信号与子模块的信号一一对应起来,同时需要注意信号的位宽要保持一致。

接下来再来介绍一下参数的例化,参数的例化是在模块例化的基础上,增加了对参数的信号定义。

下图为参数例化:

在对参数进行例化时,在模块名的后面加上“#”,表示后面跟着的是参数列表。计时模块定义的MAX_NUM 和顶层模块的 TIME_SHOW 都是等于25000_000,当在顶层模块定义 TIME_SHOW=12500_000时,那么子模块的 MAX_NUM 的值实际上是也等于 12500_000。当然即使子模块包含参数,在做模块的例化时也可以不添加对参数的例化,这样的话,子模块的参数值等于该模块内部实际定义的值。

值得一提的是,Verilog 语法中的localparam 代表的意思同样是参数定义,用法和 parameter 基本一致,区别在于 parameter 定义的参数可以做例化,而 localparam 定义的参数是指本地参数,上层模块不可以对localparam 定义的参数做例化。







精彩推荐



至芯科技12年不忘初心、再度起航12月17日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询!
System Verilog中fork...join、join_none和join_none的用法和解析
移位寄存器(左移、右移、双向)的Verilog实现
扫码加微信邀请您加入FPGA学习交流群




欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!


点个在看你最好看






原文标题:FPGA学习-Verilog例化说明

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1663

    文章

    22494

    浏览量

    638991

原文标题:FPGA学习-Verilog例化说明

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Verilog HDL语法学习笔记

    Verilog HDL 语 言 最 初 是 作为 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后来被著名的 Cadence Design Systems 公司收购)模拟器产品开发的硬件建模语言。
    的头像 发表于 03-04 15:04 5751次阅读
    <b class='flag-5'>Verilog</b> HDL语法<b class='flag-5'>学习</b>笔记

    FPGA 入门必看:Verilog 与 VHDL 编程基础解析!

    很多开发者第一次接触FPGA,都会有同样的疑问:FPGA是硬件,不是软件,怎么写程序?答案就是用硬件描述语言(HDL),最常用的就是Verilog和VHDL。今天,我们就带你入门,搞清楚FPG
    的头像 发表于 01-19 09:05 698次阅读
    <b class='flag-5'>FPGA</b> 入门必看:<b class='flag-5'>Verilog</b> 与 VHDL 编程基础解析!

    【ALINX 教程】FPGA Multiboot 功能实现——基于 ALINX Artix US+ AXAU25 开发板

    至安全镜像(Golden Image)。 适用对象 已掌握 FPGA 基础开发(会写Verilog、会生成bitstream) 熟悉 Vivado 工程流程 对 FPGA 配置机制尚不深入,希望进入
    的头像 发表于 01-05 15:41 1617次阅读
    【ALINX 教程】<b class='flag-5'>FPGA</b> Multiboot 功能实现——基于 ALINX Artix US+ AXAU25 开发板

    如何使用FPGA实现SRIO通信协议

    本例程详细介绍了如何在FPGA上实现Serial RapidIO(SRIO)通信协议,并通过Verilog语言进行编程设计。SRIO作为一种高速、低延迟的串行互连技术,在高性能计算和嵌入式系统中广
    的头像 发表于 11-12 14:38 6056次阅读
    如何使用<b class='flag-5'>FPGA</b>实现SRIO通信协议

    请问测试用.verilog文件是怎么生成的呢?

    在仿真时可以通过添加.verilog文件,直接读入ITCM中,从而在仿真时我们就可以知道处理器的运行结果,例如打印hello_world字样。
    发表于 11-11 07:56

    verilog testbench中运行测试用时,运行到make run_test出错怎么解决?

    按照胡老师书上的在verilog testbench中运行测试用时,在运行到make run_test步骤时出错,查了很多方案没有解决。
    发表于 11-11 06:52

    开源RISC-V处理器(蜂鸟E203)学习(二)修改FPGA综合环境(移植到自己的Xilinx FPGA板卡)

    1.简述 首先感谢芯来开源了蜂鸟E203 risc-v处理器,提供了比较完整的工程环境、配套的软硬件。但是配套的FPGA板卡实在太贵,对于自费学习的来说是不小的学习成本,而且我也认为完备环境
    发表于 10-31 08:46

    蜂鸟E203移植到FPGA开发板前的IP核化工作

    和3.2768KHz低频时钟,在FPGA板上只有外部晶振提供时钟,因此需要clocking wizard IP核提供时钟,并且res
    发表于 10-27 07:35

    E203外设的与编译配置

    外设,包括硬件、总线连接、底层开辟空间等一系列过程,同时需要在软件中配置地址、接口信号数据类型等,才能正常编译使外设运行相应的程序。接下来将以SHA256外设模块为,介绍上述过程。 SHA即
    发表于 10-24 07:14

    Xilinx BRAM IP核配置及其

    )的,所以通过合理分配BRAM的大小,可以提高片上block的利用率。 完成以后,进行综合,可以通过report utilization来查看资源消耗情况 可以看到使用的板子
    发表于 10-24 06:10

    如何利用Verilog HDL在FPGA上实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDL在FPGA上实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。在FPGA中实现SRAM读写测试,包括设计SRAM接口模块
    的头像 发表于 10-22 17:21 4548次阅读
    如何利用<b class='flag-5'>Verilog</b> HDL在<b class='flag-5'>FPGA</b>上实现SRAM的读写测试

    如何在资源受限型应用中使用 FPGA

    的性能需求,同时在严格的功耗、尺寸和成本限制内运行。现代现场可编程门阵列 (FPGA) 可以满足这些相互竞争的需求。 本文回顾了为资源受限型应用选择 FPGA 时需要考虑的关键设计标准。然后,以 [Altera] 经过[功率和成本优化的
    的头像 发表于 10-03 17:31 2174次阅读
    如何在资源受限型应用中使用 <b class='flag-5'>FPGA</b>

    FPGA在机器学习中的具体应用

    随着机器学习和人工智能技术的迅猛发展,传统的中央处理单元(CPU)和图形处理单元(GPU)已经无法满足高效处理大规模数据和复杂模型的需求。FPGA(现场可编程门阵列)作为一种灵活且高效的硬件加速平台
    的头像 发表于 07-16 15:34 3079次阅读

    RTL级机器人电机控制器的FPGA设计

    借助Verilog,在FPGA中实现了带编码器的两台电机的电机控制系统的RTL级设计。
    的头像 发表于 07-07 14:01 3077次阅读
    RTL级机器人电机控制器的<b class='flag-5'>FPGA</b>设计

    【高云GW5AT-LV60 开发套件试用体验】基于开发板进行深度学习实践,并尽量实现皮肤病理图片的识别

    可以多看看。*附件:fpga_cnn.rar 相关文件都在里面了 探索了一阵子cnn,并且也跟着网上的一些开源的方案学习一些 比如这里的:# 一起学习Verilog
    发表于 06-11 22:35