95,Verilog-2005标准篇:`ifdef, `else, `elsif, `endif, `ifndef条件编译指令介绍

条件编译指令用于在编译过程中选择性地包含 Verilog HDL代码,这些指令可以出现在源代码描述的任何地方。

`ifdef指令检查 text_macro_name的定义。如果定义了 text_macro_name,则包含 `ifdef 指令后面的行。如果未定义 text_macro_name,且存在 `else 指令,则编译`else指令后面的源代码。`ifndef 编译器指令检查 text_macro_name 的定义。如果 text_macro_name 未定义,则包含 `ifndef 指令后面的行。如果 text_macro_name 已定义且存在 `else 指令,则编译`else指令后面的源代码。

如果存在 `elsif 指令(而不是 `else),编译器会检查 text_macro_name 的定义。如果该名称存在,则会包含 `elsif 指令后面的行。`elsif指令等同于编译器指令序列 `else `ifdef ... `endif. 该指令不需要相应的 `endif 指令,在该指令之前应包含 `ifdef`ifndef 指令。

`ifdef、`else、`elsif、`endif`ifndef指令可能会在以下情况下发挥作用:

- 选择模块的不同表示形式,如行为级、结构级或开关级

- 选择不同的时序或结构信息

- 为特定仿真运行选择不同的激励

`ifdef、`else、`elsif、`endif`ifndef指令的标准语法结构如下:

`ifdef、`else、`elsif、`endif指令以如下方式协同工作:

- 当遇到 `ifdef 时,编译器会测试 `ifdef 文本宏标识符,看它是否被 Verilog HDL 源代码描述中的 `define 定义为文本宏名称。

- 如果定义了 `ifdef 文本宏标识符,则将 `ifdef 行组作为描述的一部分进行编译;如果存在 `else`elsif 编译器指令,则忽略这些编译器指令和相应的行组。

- 如果未定义 `ifdef 文本宏标识符,则忽略 `ifdef 行组。

- 如果有 `elsif 编译器指令,则测试 `elsif 文本宏标识符是否在 Verilog HDL 源代码描述中使用 `define 定义为文本宏名称--如果定义了 `elsif 文本宏标识符,则将 `elsif 行组作为描述的一部分进行编译;如果有其他 `elsif`else 编译器指令,则忽略其他 `elsif`else 指令和相应的行组。

- 如果未定义第一个 `elsif 文本宏标识符,则忽略第一个 `elsif 行组。

- 如果有多个 `elsif 编译器指令,则按照 Verilog HDL 源代码描述中的编写顺序,像第一个 `elsif 编译器指令一样对它们进行评估。

- 如果有 `else 编译器指令,则 `else 行组将作为描述的一部分进行编译。

`ifndef、`else、`elsif、`endif指令以如下方式协同工作:

- 当遇到 `ifndef 时,会测试 `ifndef 文本宏标识符,看它是否在 Verilog HDL 源代码描述中使用 `define 定义为文本宏名称。

- 如果未定义 `ifndef 文本宏标识符,则将 `ifndef 行组作为描述的一部分进行编译;如果存在 `else`elsif 编译器指令,则忽略这些编译器指令和相应的行组。

- 如果定义了 `ifndef 文本宏标识符,则忽略 `ifndef 行组。

- 如果有 `elsif 编译器指令,则测试 `elsif 文本宏标识符是否在 Verilog HDL 源代码描述中使用 `define 定义为文本宏名称。

- 如果定义了 `elsif 文本宏标识符,`elsif 行组将作为描述的一部分进行编译;如果存在其他 `elsif`else 编译器指令,其他 `elsif`else 指令和相应的行组将被忽略。

- 如果未定义第一个 `elsif 文本宏标识符,则忽略第一个 `elsif 行组。

- 如果有多个 `elsif 编译器指令,则按照 Verilog HDL 源代码描述中的编写顺序,像第一个 `elsif 编译器指令一样对它们进行评估。

- 如果有 `else 编译器指令,则 `else 行组将作为描述的一部分进行编译。

下面举例说明条件编译指令的用法:

例 1-下面的示例展示了 `ifdef 指令在条件编译中的简单用法。如果定义了标识符 “behavioral”,将编译一个连续net赋值;否则,将实例化一个与门。

例 2-下面的示例展示了嵌套条件编译指令的用法:

例 3-下面的示例展示了链式嵌套条件编译指令的用法:

点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值