verilog always语法_Verilog初级教程(20)Verilog中的`ifdef 条件编译语句

前言`ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免。 应该在什么情况下使用呢?例如:一部分代码可能有时候用,有时候不用,为

16b8c4eb3e2e075e26f33a68a40b8944.png

前言

`ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免。 应该在什么情况下使用呢?

例如:一部分代码可能有时候用,有时候不用,为了避免全部编译占用资源,可以使用条件编译语句。 下面正式介绍其语法。

正文

语法

// Style #1: Only single `ifdef

示例

module 

Testbench文件

module 

请注意, 默认情况下, rstn 不会在编译设计时被包含, 因此它不会出现在 port 列表中。但是, 如果在任何属于编译文件列表的 Verilog 文件中定义了名为 INCLUDE_RSTN 的宏, 或者通过命令行传递给编译器, rstn 就会在编译过程中被包括在内, 设计也将拥有它。

下面我们通过vivado平台编译看下: 默认情况下:

dfb6c83c7439f18b4ba47db041ce3f23.png

定了了宏INCLUDE_RSTN的情况下:

d122f7eafb9f1c10b95433330d1937a9.png

进一步证明了其用途。

仿真看下:

在默认情况下,没有定义宏INCLUDE_RSTN ,也就没有复位。

444798128dc38e0aacccb6c089ebfcdd.png

可以看到由于没有复位,所以q在初始阶段为X。

往期回顾

Verilog初级教程(19)Verilog中的参数

Verilog初级教程(18)Verilog中的函数与任务

Verilog初级教程(17)Verilog中的case语句

Verilog初级教程(16)Verilog中的控制块

Verilog初级教程(15)Verilog中的阻塞与非阻塞语句

Verilog初级教程(14)Verilog中的赋值语句

Verilog初级教程(13)Verilog中的块语句

Verilog初级教程(12)Verilog中的generate块

Verilog初级教程(11)Verilog中的initial块

Verilog初级教程(10)Verilog的always块

Verilog初级教程(9)Verilog的运算符

Verilog初级教程(8)Verilog中的assign语句

Verilog初级教程(7)Verilog模块例化以及悬空端口的处理

Verilog初级教程(6)Verilog模块与端口

Verilog初级教程(5)Verilog中的多维数组和存储器

Verilog初级教程(4)Verilog中的标量与向量

Verilog初级教程(3)Verilog 数据类型

Verilog初级教程(2)Verilog HDL的初级语法

Verilog初级教程(1)认识 Verilog HDL

芯片设计抽象层及其设计风格

Verilog以及VHDL所倡导的的代码准则

FPGA/ASIC初学者应该学习Verilog还是VHDL?

参考资料及推荐关注

Verilog `ifdef Conditional Compilation

个人微信公众号: FPGA LAB

交个朋友