Verilog中条件编译命令`ifdef、`else、`endif详解(用途、用法、仿真)

本文详细介绍了Verilog中的条件编译命令`ifdef、`else、`endif,包括它们的概念、用途、用法,并通过具体的仿真案例,验证了这些条件编译指令在选择不同代码段、适配不同EDA工具时的有效性。

条件编译在针对不同EDA工具,选择不同激励、根据选择才执行一些功能等场合非常有用,本文对常见条件编译指令进行介绍:介绍了条件编译指令的用途、具体用法,并在此基础上进行必要仿真,验证了分析的正确性;

目录

一、概念与用途

条件编译:

用途:

二、用法

三、仿真

四、参考文献


一、概念与用途

条件编译:

显而易见,即只有在条件满足的时候才对这部分代码进行编译,也就是对一部分内容指定了编译的条件:

                  当满足条件时对一组语句进行编译,

                  当条件不满足时则对另外一组语句进行编译。

用途:

1、选择一个模板的不同代表部分。

2、选择不同的时序或结构信息。

3、对不同的EDA工具,选择不同的激励。(如:Verilog代码中的一部分可能因编译环境不同而不同,为避免在不同环境需要替换不同版本的Verilog 设计,条件编译就是一个很好的解决方案)

二、用法

'ifdef 宏名(标识符)
    程序段1...
'else
    程序段2...
'endif

当宏名被定义过了,就编译程序段1;反之,当宏名未被定义过,就编译程序段2;

其中,else部分可以省略。即:当宏名被定义过了,就编译程序段1;反之,不编译程序段1;

额外的,还有‘ifndef语句,与’ifdef功能相反:

即当宏名没被定义过,就编译程序段1;反之,当宏名未被定义过了,就编译程序段2;

'ifndef 宏名(标识符)
    程序段1...
'else
    程序段2...
'endif

三、仿真

为验证对条件编译的理解,以一个简单的可控与/或逻辑处理电路为例,验证条件编译语法:

实现代码:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: CLL guoliang
// 
// Create Date: 2020/03/21 10:54:03
// Design Name: 
// Module Name: c_logic
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////

module c_logic(
    input [3:0]din1,
    input [3:0]din2,
    output reg[3:0]dout
    );
`define OR 1'b1
`ifdef OR
    always@(*)
        dout = din1 & din2;
`else
    always@(*)
        dout = din1 | din2;
`endif
endmodule

编译结果(RTL电路):

第一次编译,宏定义为与逻辑,对应RTL电路如下:

第二次编译,不再进行宏定义(或者宏定义或逻辑),对应RTL电路如下: 

可以看出,实际编译结果与代码中条件编译指令的设置一致,表明之前分析中对条件编译指令的理解与介绍正确;

四、参考文献

FPGA基础知识23(Verilog中条件编译命令_`ifdef、`else、`endif_用法)

Verilog中的条件编译语句 `ifdef、`else、`endif 等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值