首页 > 其他分享 >Verilog HDL中如何控制模块的调用与否

Verilog HDL中如何控制模块的调用与否

时间:2024-05-30 16:58:35浏览次数:22  
标签:wire 15 clk Verilog 模块 ifdef input HDL

Verilog HDL中如何控制模块的调用与否(实用)

语言 :Verilg HDL
EDA工具:ISE、Vivado、Quartus II

  • 关键词: 调用,Verilog HDL,ifdef 和 endif ,generate语句
一、引言

在FPGA开发调试中,经常需要添加debug核,ila或者vio,在调试结束或者功能测试完成之后,需要将之前添加的debug核去掉,以使得工程轻量化,那么这时我们最常用的方法是直接将ila模块注释掉,这种方法简单快速,但是影响代码美观,在debug模块比较多的时候,也比较繁琐。本文,在结合平时做项目中的经验,对Verilog HDL中控制模块调用与否的方式 作了一个总结,望能对各位实操应用中有所帮助。

二、模块调用与否的几种方法
1. 注释

常用方法是直接注释,如下,用 “//”

// ila_smooth ila_smooth (
//     .clk(clk), // input wire clk
//     .probe0(freq_in), // input wire [16:0]  probe0  
//     .probe1(freqmax1), // input wire [15:0]  probe1 
//     .probe2(freqmax2), // input wire [15:0]  probe2 
//     .probe3(freqmax3), // input wire [15:0]  probe3 
//     .probe4(freqmax4))// input wire [15:0]  probe4 

或者 “/* */”

  /*
  ila_smooth ila_smooth (
     .clk(clk), // input wire clk
     .probe0(freq_in), // input wire [16:0]  probe0  
    .probe1(freqmax1), // input wire [15:0]  probe1 
      .probe2(freqmax2), // input wire [15:0]  probe2 
     .probe3(freqmax3), // input wire [15:0]  probe3 
     .probe4(freqmax4))// input wire [15:0]  probe4 
 */
2. 使用预处理指令`ifdef

在Verilog中,ifdef 和 endif 是条件编译指令,它们允许在编译时根据条件包含或排除代码块。这些指令通常用于创建可配置的设计,使得同一段代码可以适应不同的硬件平台或配置要求。

ifdef 和 endif 的基本用法:

ifdef:如果定义了指定的宏(macro),则包含 ifdef 和 endif 之间的代码块。
endif:标记 ifdef 条件编译块的结束

因此,我们只需要将 模块置于 ifdef 和 endif 之间即可,然后通过是否宏定义 ifdef 来决定是否调用该模块,如下所示,

 `define ILA_EN 
 //`define ILA_EN 
`ifdef ILA_EN
  ila_smooth ila_smooth (
     .clk(clk), // input wire clk
     .probe0(freq_in), // input wire [16:0]  probe0  
    .probe1(freqmax1), // input wire [15:0]  probe1 
      .probe2(freqmax2), // input wire [15:0]  probe2 
     .probe3(freqmax3), // input wire [15:0]  probe3 
     .probe4(freqmax4))// input wire [15:0]  probe4 
`endif

注意`define ILA_HSG_EN 语句可以置于.v文件的任何位置,一般放到文件的最开始处,不调用 ifdef 和 endif 之间的模块时,将宏定义注释掉就行,宏定义中可以 有多个模块
在这里插入图片描述

3. 使用generate语句

在Verilog中,generate 和 endgenerate 是用于生成参数化结构的关键字,它们允许你根据一个参数重复生成一段代码,或者根据条件生成代码块。这种结构在设计中非常有用,尤其是当你需要创建多个相同结构的实例时,可以大大减少代码的冗余。

使用方法如下,当参数USER_TX_ILA 输入为1时候,模块起效,否则无效,

generate
if( USER_ILA == 1 )   

 ila_smooth ila_smooth (
     .clk(clk), // input wire clk
     .probe0(freq_in), // input wire [16:0]  probe0  
    .probe1(freqmax1), // input wire [15:0]  probe1 
      .probe2(freqmax2), // input wire [15:0]  probe2 
     .probe3(freqmax3), // input wire [15:0]  probe3 
     .probe4(freqmax4))// input wire [15:0]  probe4 

endgenerate 

USER_TX_ILA可以用作参数输入,如下所示。

module top #(
  parameter USER_ILA = 0
)(
三、结尾

本文主要介绍了在Verilog HDL编程中,如何根据不同情况控制模块是否被调用的方法。文章的核心内容可以概括为以下几点:

注释方法: 通过在代码中使用注释符号//或/* */来临时禁用模块,这种方法简单快捷,但会使得代码看起来杂乱,尤其是在需要注释掉多个模块时。

条件编译指令: 使用ifdef和endif预处理指令来根据是否定义了特定的宏来决定是否编译某段代码。通过定义或注释掉宏,可以灵活地控制模块的调用,使得代码更加整洁。

generate语句: 利用generate和endgenerate关键字,根据参数或条件来生成代码块。这种方法适用于需要根据不同参数多次生成相同结构模块的情况,可以减少代码重复,提高代码的可维护性。

标签:wire,15,clk,Verilog,模块,ifdef,input,HDL
From: https://blog.csdn.net/qq_34895681/article/details/138965065

相关文章

  • Nginx反向代理之 upstream 模块
    upstream模块的内容应放于nginx.conf配置的http{}标签内,其默认的调度算法是rr(轮循round-robin)ngx_http_upstream_module模块官方文档upstream模块内部server标签参数说明#提示:以上的参数和专业的haproxy参数类似,但不如haproxy的参数易懂。upstream模块调度算......
  • BOSHIDA 如何选择适合自己应用的AC/DC电源模块?
    BOSHIDA如何选择适合自己应用的AC/DC电源模块?AC/DC电源模块是将交流电转换为直流电的设备,广泛应用于各种电子设备中。选择适合自己应用的AC/DC电源模块需要考虑多个因素。 一,需要考虑电源模块的功率。功率是一个衡量电源模块输出能力的重要指标,通常以瓦特(W)为单位。根据应用......
  • YOLOv10最新创新点改进系列:融合最新顶会提出的HCANet网络中卷积和注意力融合模块(CAFM
    YOLOv10全网最新创新点改进系列:融合最新顶会提出的HCANet网络中卷积和注意力融合模块(CAFM),有效提升小目标检测性能,大幅度拉升目标检测效果!遥遥领先!YOLOv10全网最新创新点改进系列:融合最新顶会提出的HCANet网络中卷积和注意力融合模块(CAFM-2024年4月开源),有效提升小目标检......
  • lua语言:模块热更新方案
    我们知道,lua通过package模块来管理模块的搜索和加载,当使用require首次成功加载一个模块后,模块(Table)会被存储在package.loaded中,之后的require行为会直接获取到已加载的模块缓存。如何在程序执行时,将对模块文件的修改热更新到程序中,同时确保运行时状态的正常。这是项目开发中常见......
  • python基础 - 模块与包
    模块与包import包名.模块名importdemo.demo#前缀比较长,一般推荐from包名import模块名demo.demo.fun1(2)fromdemoimportdemodemo.fun1(3)fromdemo.demoimportfun1fun1(4)标准路径标准路径>当前路径>项目路径>其他标准路径importsysforoneinsy.path:pr......
  • 新手福利:这个模块/工具让你开发的程序轻松实现自动升级功能!
    文章目录......
  • pandas模块
    为什么要学习pandas?numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!什么是panda......
  • BOSHIDA AC/DC电源模块:可靠持久的能源供应
    BOSHIDAAC/DC电源模块:可靠持久的能源供应AC/DC电源模块是一种被广泛应用于工业、通信、医疗等领域的电源设备。其可靠持久的能源供应能够保证设备的正常运行和稳定性能,具有重要的意义。在本文中,我们将详细介绍AC/DC电源模块的特点和优势。 AC/DC电源模块是一种将交流电转化......
  • 一款交流220V转直流3.3V蓝牙WIFI模块单片机供电的非隔离芯片WT5107
    一款交流220V转直流3.3V蓝牙WIFI模块单片机供电的非隔离芯片WT5107WT5107是一种高性能和高精度的非隔离降压开关电源恒压控制驱动芯片,适用于220VAC或全电压范围输入。它特别适合于小家电和白色家电等设备的电源,固定输出为3.3V。该芯片内部集成了高压MOS功率管,采用恒压控制模式,可......
  • ESP8266模块上传温湿度传感器的数据到云平台(乐为物联)
    ESP8266相关AT指令AT:检测模块是否正常工作,返回“OK”表示正常。AT+RST:重启模块。AT+CWMODE=:设置Wi-Fi模式,可以是以下几种:1:Station模式,连接到一个Wi-Fi网络。2:SoftAP模式,创建一个Wi-Fi热点。3:SoftAP+Station模式,同时作为热点和连接到一个Wi-Fi网络。AT+CWJAP="",""......