Verilog语法之条件编译`ifdef, `ifndef,`else, `elsif, `endif

概要

主要分享条件编译语句的用法

整体架构流程

C语言中的每一行代码都要参加编译。但有时候出于对程序代码优化的考虑,希望只对其中一部分内容进行编译,此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是条件编译(conditional compile)。

到FPGA的开发,其条件编译可以通俗的理解为,根据条件选择性地将指定部分综合为电路,而未被指定部分则不综合成电路,这可以有效地减少电路面积和提高代码的复用性和灵活性

技术名词解释

Verilog支持一些编译器指令,这些指令本质上指导编译器以某种方式处理代码。例如,代码的一部分可以表示某个功能的实现,如果不使用该功能,则应该有某种方法不将代码包括在设计中。

这可以通过条件编译来解决,在条件编译中,设计器可以将代码包装在编译器指令中,编译器指令告诉编译器在设置给定的命名标志时包含或排除要编译的代码。

技术细节

1:情况1:
  #ifdef _XXXX
  ...程序段1...
  #else
  ...程序段2...
  #endif
   这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
  例:
  #define NUM

情况2:
  #ifndef _XXXX
  ...程序段1...
  #else
  ...程序段2...
  #endif
   这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况

情况3:
  #if 常量
  ...程序段1...
  #else
  ...程序段2...
  #endif
   这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。

以上是举例说明这几个条件编译的用法。

代码示例“:

module tb;
 initial begin
 `ifndef FLAG
 display("FLAG is Defined");
 `ifdef NEST1_A
 display("FLAG and NEST1_A are Defined");
 `ifdef NEST2
 display("FLAG,NEST1_A and NEST2 are Defined"); 
 `endif
 `ifdef NEST1_B
 display("FLAG and NEST1_B are Defined");
 `ifndef WHITE
 display("FLAG and NEST1_B are Defined but WHITH is not"); 
 `else
 display("FLAG,NEST1_B and WHITH are Defined"); 
 `endif 
 `else 
 display("Only FLAG Defined"); 
 `endif 
 `else 
 display("FLAG is not Defined");
 `endif
 end
endmodule

小结

条件编译可以使用Verilog中的`ifdef`ifndef关键字来实现。这些关键字可以出现在设计中的任何位置,也可以嵌套在另一个关键字中。

关键字`ifdef只是告诉编译器在下一个`else或者`endif之前包含这段代码,或者如果给定的名为FLAG的宏是使用`define指令定义的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第二层皮-合肥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值