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

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

3天内不再提示

Verilog例化说明

FPGA设计论坛 来源:FPGA设计论坛 2024-12-17 11:29 次阅读

Verilog例化说明

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

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

2.实例说明例化方法

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

285ac5fa-b85e-11ef-93f3-92fbcf53809c.png


1.计时模块(仅显示端口及参数

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

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

//parameter define
parameter 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 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

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

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

下图为模块例化。

289d8a84-b85e-11ef-93f3-92fbcf53809c.png


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

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

下图为参数例化:

28c82c6c-b85e-11ef-93f3-92fbcf53809c.png

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

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

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

    关注

    28

    文章

    1351

    浏览量

    110077
  • 数码管显示
    +关注

    关注

    0

    文章

    63

    浏览量

    13815
  • 显示模块
    +关注

    关注

    1

    文章

    50

    浏览量

    23567

原文标题:Verilog例化说明

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

收藏 人收藏

    评论

    相关推荐

    Verilog HDL和VHDL区别

    Verilog和VHDL之间的区别将在本文中通过示例进行详细说明。对优点和缺点的Verilog和VHDL进行了讨论。
    的头像 发表于 12-20 09:03 3697次阅读
    <b class='flag-5'>例</b>说<b class='flag-5'>Verilog</b> HDL和VHDL区别

    模块

    能不能分享个Verilog模块的教程?
    发表于 01-02 00:43

    Verilog HDL语言100详解

    Verilog HDL语言100详解希望对大家有所帮助
    发表于 09-01 15:58

    说FPGA连载62:电子点菜单之FIFO说明

    `说FPGA连载62:电子点菜单之FIFO说明特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1c0nf6Qc ddr_avl_br
    发表于 12-26 17:22

    verilog中调用VHDL模块

    模块的化形式就可以了。下面举个简单的例子来说明如何在verilog模块中VHDL模块。 2选1多路复用器的VHDL描述:entity
    发表于 07-03 12:58

    verilog中调用VHDL模块

    模块的化形式就可以了。下面举个简单的例子来说明如何在verilog模块中VHDL模块。 2选1多路复用器的VHDL描述:entity
    发表于 07-09 01:14

    如何利用python自动生成verilog模块模板?

    如何利用python自动生成verilog模块模板?
    发表于 06-21 06:06

    Verilog HDL程序设计-135

    verilog HDL基础程序135,适合初学者。
    发表于 11-06 09:49 23次下载

    Verilog教程之Verilog的命令格式资料说明

    本文档的主要内容详细介绍的是Verilog HDL教程之Verilog HDL的命令格式资料说明
    发表于 01-09 08:00 31次下载
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b>的命令格式资料<b class='flag-5'>说明</b>

    FPGA视频教程之Verilog基础的详细资料说明

    本文档的主要内容详细介绍的是FPGA视频教程之Verilog基础的详细资料说明包括了:1.Verilog HDL简介,2.Verilog HDL模型的基本结构,3.
    发表于 03-21 15:02 37次下载
    FPGA视频教程之<b class='flag-5'>Verilog</b>基础的详细资料<b class='flag-5'>说明</b>

    实现Verilog HDL模块程序设计的详细资料说明

    HDL和VHDL的使用比率大概是80%和20%,在中国,大多数电子行业企业都采用Verilog。而模块的设计让Verilog HDL语言具有思路清晰、逻辑关系明确、可读性强等特点,模块
    发表于 03-25 08:00 4次下载
    实现<b class='flag-5'>Verilog</b> HDL模块<b class='flag-5'>化</b>程序设计的详细资料<b class='flag-5'>说明</b>

    Verilog HDL教程135免费下载

    本文档的主要内容详细介绍的是Verilog HDL教程135免费下载。
    发表于 01-21 16:30 72次下载
    <b class='flag-5'>Verilog</b> HDL教程135<b class='flag-5'>例</b>免费下载

    Verilog快速掌握之模块资源下载

    FPGA逻辑设计中通常是一个大的模块中包含了一个或多个功能子模块,verilog通过模块调用或称为模块实例的方式来实现这些子模块与高层模块的连接,有利于简化每一个模块的代码,易于维护和修改。
    发表于 04-30 09:30 25次下载

    在SpinalHDL中如何优雅地端口?

    在编写Verilog代码时最痛苦的事情便是模块时端口的连接,这时候的你我便成了连线工程师,本节就在SpinalHDL中如何像软件调用方法那样优雅地
    的头像 发表于 06-16 17:19 1946次阅读

    FPGA学习-Verilog说明

    Verilog 说明 1.什么是模块?为什么要
    的头像 发表于 12-12 09:50 4136次阅读