Verilog系列【5】`ifdef和generate的差异
1. `ifdef-`endif 和`ifndef-`endif
因为`ifdef和`ifndef作用类似,只是成立条件相反,以下仅对`ifdef进行说明。
格式一:
`ifdef 宏名标识符
...... // 程序段s1
`else
...... // 程序段s2
格式二:
`ifdef 宏名标识符
...... // 程序段s1
格式三:
格式一与格式二的各种嵌套组合,嵌套方式和结构类似于C语言等其他语言中“if-else”。。
这里需要注意以下几点:
-
宏名标识符指定方式:仿真器的编译命令;编译命令“`define 宏名标识符”;
-
被忽略的代码也要符合Verilog语法规范;
-
条件同时只能有一个成立,其结构类似于一般“if-else”结构,即分支选择是互相排斥的,但是其中内容可以类似等;
-
条件编译一般在预编译阶段完成,就是在进行编译的第一遍词法扫描和语法分析之前进行的工作;
【示例】
2. `ifdef与generate区别
| `ifdef | generate |
| 应用范围:可应用于“module-endmodule”之内或者之外。 | 应用范围:只能应用于“module-endmodule”之内。 |
| 宏名标识符可来自于“`define”或者“编译命令+define+宏名标识符”等。 | generate结构中使用的变量需要通过genvar进行声明。 |
| 该结构仅在编译时对设计结构进行确认,即一次仿真中不会多次进行结构选择。 | generate结构可以多次循环执行。 |
| 执行阶段:预编译阶段 | 执行阶段:仿真阶段 |
| 合理使用两种结构均可以优化代码结构,特别是在特定条件下生成特定设计结构。 | |
小天才公司福利 1289人发布
