VerilogHDL编译预处理

航天科技 1

编译预处理语句

编译预处理是VerilogHDL编译系统的一个部分,指编译系统会对有例外命令进行先期处理,然后拿先期处理结果和源程序一起在进展日常的编译处理。以”`”
(反引号)开始之某些标识符是编译预处理语句。在Verilog
HDL语言编译时,特定的编译指令以全路编译过程中中(编译过程只是超多个公文),直到遇见其他不同的编译程序指令。常用之编译预处理语句如下:

(1)`define,`undef

(2)`include

(3)`timescale

(4)`ifdef,`else.`endif

(5)`default_nettype;

(6)`resetall

(7)`unconnect_drive,`nounconnected-drive;

(8)`celldefine,`endcelldefine


宏定义

`define指令是一个宏定义命令,通过一个点名的标识符来代表一个字符串,可以增加Veirlog
HDL代码的可读性和可维护性,找有参数或函数不得法或未允的地方。

`define指令类似C语言中之#define指令,可以当模块的里还是外部定义,编译器在编译过程被相遇该语句以将宏文本替换为宏的名。`define的声明语法格式如下:
`define,<macro_name><Text>

对此已经扬言的讲话,在代码中之采用格式如下(不要漏掉宏前面的”`”):

`macro-name

例如:define  MAX-BUS-SIZE  32

Reg[`MAX-BUS-SIZE-1:0]AddReg;

一旦`define指令被编译,其在所有编译过程遭到还使得。例如,通过其它一个文书被的`define指令,MAX-BUS-SIZE能让多个公文使用。

`undef指令用于取消前面定义之巨大。例如:

`undef  WORD16

Wire [`WORD:1]Bus;

`undef  WORD

宏定义指令的注意事项:

(1)    宏定义的名目可以是大写,也可是稍微写,但万一注意不要跟变量名又。

(2)    和装有编译器伪指令一样,宏定义在跳单个文件边界时按照有效(对工程的外源文件),除非叫后的`define、`undef或`resetall伪指令覆盖,否则`define不完范围限制。

(3)    当用变量定义宏时,变量可以于宏正文中使用,并且在使用宏的时刻可以就此实际的变量表达式代替。

(4)    通过用反斜杠”\”转义中间换行符,宏定义可以跨几乎执,新的履是宏正文的一致局部。

(5)    宏定义行末不需添加分号表示了。

(6)    宏正文不克分别的言语符号包括注释、数字、字符串、保留的基本点字、运算符。

(7)    编译器伪指令不允许作为特大的讳。

(8)    宏定义着的文本也可是一个表达式,并不仅用于变量名称的替换。


define和parameter

`define和parameter是发分别的。`define和parameter都好用来完成文本替换,但那个设有本质上的不等,前者是编译之前便先行处理,而后人是在常规编译过程被得替换的。此外,`define和parameter存在下列两沾不同之处:
   
(1)作用域航天科技不同。Parameter作用于声明的杀文件;`define从编译器读到这漫长指令开始至编译结束还有效,除非遇到`undef命令使之失效,可以用叫所有工程。如果如吃parameter作用于一体项目,可以用宣示语句写于独立文件被,并为此)`include让每个文件还包含声明文件。

`define可以形容在代码的另位置,而Parameter则须于使用之前定义。通常编译器都可定义编译顺序,或者从极度底部模块开始编译,因此写于最好底部就得了。
   
(2)传递功能差。Parameter可以看作模块例化时之参数传递,实现参数化调用;`define语句则没这个打算。`define语句可以定义表达式,而Parameter只能定义变量。

航天科技 2


 版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处
 

 作者:杭州卿萃科技ALIFPGA 

 原文地址:杭州卿萃科技FPGA极客空间
微信公众号


  

 
  航天科技 3

**

**


 

发表评论

电子邮件地址不会被公开。 必填项已用*标注