Verilog中的`define与`if的使用

这篇具有很好参考价值的文章主要介绍了Verilog中的`define与`if的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一部分代码可能有时候用,有时候不用,为了避免全部编译占用资源,可以使用条件编译语句。

语法

// Style #1: Only single `ifdef
`ifdef <FLAG>
	// Statements
`endif

// Style #2: `ifdef with `else part
`ifdef <FLAG>
	// Statements
`else
	// Statements
`endif

// Style #3: `ifdef with additional ifdefs
`ifdef <FLAG1>
	// Statements
`elsif <FLAG2>
	// Statements
`elsif <FLAG3>
	// Statements
`else
	// Statements
`endif

         条件编译可以通过Verilog的  `ifdef 和 `ifndef 关键字来实现。 这些关键字可以出现在设计中的任何地方,并且可以相互嵌套。  它通常和预编译指令`define配套使用。 如果使用 `define定义了 称为`FLAG`的宏,那么关键字`ifdef会告诉编译器包含这段代码,直到下一个`else或`endif。
        关键字`ifndef只是告诉编译器,如果给定的名为FLAG的宏没有使用`define指令定义,则将这段代码包含在下一个`else "或`endif之前。

引入`define定义有两种方法:

方法1:直接在.v文件中使用`define定义
首先使用`define flag定义了flag,然后用下一段代码定义不同的parameter参数值,这时period的值为5.
        `ifdef flag 
                   parameter period =5;
          `else
                  parameter period =10;
         `endif

`timescale 1ns / 1ps

`define flag

module tb;

`ifdef flag 
       parameter period =5;
  `else
      parameter period =10;
`endif
      
reg clk;
reg rst;
reg [7:0] in;
wire out;

initial 
 begin
 clk=0;
 rst=0;
 
 #100 rst=1;
  @(posedge clk);
    in=8'b10101010;
  repeat(10) @(posedge clk);
    in=8'b11100110;
 end

always #period clk=~clk;

top inst(
.clk(clk),
.rst(rst),
.in(in),
.out(out)  );

endmodule

方法二:在.vh文件中使用`define定义,然后在.v文件中使用#include引用宏定义
步骤一:先在vivado中添加一个.vh头文件,文件名为inc.vh,在该文件中定义如下:

`define flagg

步骤二:在需要引用宏定义的.v文件开始,使用`include "xxx.vh",这样就可以访问.vh的宏定义了

`include "inc.vh"
`timescale 1ns / 1ps

module tb;

`ifdef flag 
       parameter period =5;
 `else
       parameter period =10;
 `endif
      
reg clk;
reg rst;
reg [7:0] in;
wire out;

initial 
 begin
 clk=0;
 rst=0;
 
 #100 rst=1;
  @(posedge clk);
    in=8'b10101010;
  repeat(10) @(posedge clk);
    in=8'b11100110;
 end

always #period clk=~clk;

  注意:`define   macro_name   参数    之后不能加任何东西!

补充:

  `define 与localparam和parameter最大的区别就是`define 可以跨文件传递参数;parameter只能在模块间传递参数;而localparam只能在其所在的module中起作用,不能参与参数传递。




 文章来源地址https://www.toymoban.com/news/detail-563807.html

到了这里,关于Verilog中的`define与`if的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python合并PDF文件并添加自定义目录及页脚

    在处理文档时,我们经常遇到需要合并多个PDF文件并添加目录及页脚的情况。本文将介绍如何使用Python,特别是 PyPDF2 和 reportlab 库来实现这一功能。我们将通过一个实用的示例来演示整个过程,包括如何动态创建目录页和在每页底部添加页码。 首先,确保你的环境中安装了

    2024年03月13日
    浏览(59)
  • 【C语言】#define 宏定义初步使用

    使用宏定义可以防止出错,提高可移植性,可读性,方便性等。 下面列举了一些成熟软件中常用的宏定义。 重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植: typedef unsigned char boolean; /* Boolean value type. / typedef unsigned long int uint32;

    2024年02月10日
    浏览(37)
  • 【0基础学会Verilog】004. 学会使用Vivado自带仿真器

    编写好实现指定功能的Verilog模块后,需要对其进行仿真来验证 模块 的正确性,这需要用到EDA开发工具的仿真器,我们选择Xilinx公司的Vivado自带的仿真工具进行仿真。 在前面的章节已经学习了为Verilog模块编写基本的测试模块,即testbench的基本步骤和方法。本文不再赘述,直

    2024年02月04日
    浏览(43)
  • 使用Python脚本添加新的相关节点到arxml文件中的指定位置

    1 背景 随着汽车软件开发的复杂度越来越高,链路越来越长,很多手动配置的工具链所需要的时间就会被拉长,显然这对于项目的开发进度有了一定影响,根据需求自动化生成arxml文件其实很有必要。同时越来越多的测试开始内卷,需要将一些自己的DBG模块添加到软件模型中

    2024年02月11日
    浏览(40)
  • Vivado中的COE文件:FPGA开发指南

    COE文件是Vivado软件中用于初始化存储器内容的一种常见文件格式。在FPGA开发过程中,我们经常需要对存储器进行初始化,以存储初始数据或者程序代码。COE文件提供了一种简单而灵活的方式来定义存储器的初始内容。本文将介绍COE文件的使用方法,并提供相应的示例代码。

    2024年02月06日
    浏览(53)
  • 嵌入式C语言-预编译命令(#define、#if、#ifdef、#ifndef、#undef)

    宏定义 #define机制包含了一个规定,允许把参数替换到文本中,这种实现通常称为宏定义。下面是宏的声明方式: 其中,parameter-list(参数列表)是由逗号分割的符号列表,它们可能出现在stuff中。name必须与左括号紧邻。比如下面的例子: 提示 : 所有用于数值表达式进行求

    2024年02月07日
    浏览(32)
  • MySQL中的IF语句使用

    在 MySQL 数据库中,IF 语句是一种常见的条件控制语句。它可以根据指定的条件返回不同的结果。在本文中,我们将介绍 IF 语句的基本用法以及实际应用场景。 MySQL 提供了 IF 函数来实现 IF 语句。IF 函数的语法如下: IF(condition, true_value, false_value) 其中, condition 是要测试的表

    2024年02月10日
    浏览(33)
  • Tcl在Vivado中的使用

    Vivado是Xilinx最新的FPGA设计工具,支持7系列以后的FPGA及Zynq 7000的开发。与之前的ISE设计套件相比,Vivado可以说是全新设计的。无论从界面、设置、算法,还是从对使用者思路的要求,都是全新的。看了大家很多的博文,基本上都是用GUI创建工程,那我就简单介绍一下Vivado的脚

    2024年02月08日
    浏览(38)
  • C语言系列-预定义符号&#define定义宏&#define定义宏

     🌈个人主页:  会编辑的果子君 💫个人格言:“成为自己未来的主人~”    目录 预定义符号 #define定义常量 #define定义宏 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。 举个例子:   基本语法: 举个例子:    思考:在define定义标识符

    2024年02月21日
    浏览(43)
  • mybatis使用xml中的if-else/choose

    最近需要使用 xml 文件来实现一些增删改查,此文对 其中的 if-else 加以说明 背景: 有一个引用类,假设叫 Student 现在我们查询条件也被封装成一个引用类,例如: 那么使用 xml 怎么来使用和接收呢? 首先肯定是在 mapper 里面有一个方法 然后在 xml 文件中写这个方法的具体实

    2024年04月23日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包