打印
[Verilog HDL]

编译预处理

[复制链接]
3310|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaochy1126|  楼主 | 2024-9-28 16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
①编译预处理是Verilog编译系统的一个组成部分,指编译系统会对一些特殊命令进行预处理,然后将预处理结果和源程序一起在进行通常的编译处理。编译预处理是可以综合的。

②在Verilog语言编译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到遇到其他的不同的编译程序指令。

③常用的编译预处理语句有:`define、`undef   ;   `ifdef、`elsif 、`else、`endif   ;   `include  ;  `timescale。
(1)`define,`undef

格式:`define 宏的名称 宏的正文

①宏定义的名称可以是大写,也可以是小写,但是主要不要和变量名重复,此外宏定义的使用要注意带上`。

②和所有的编译器伪指令一样,宏定义在超过单个文件边界时仍然有效(对工程中的其他源文件),除非被后面的`define或者`undef伪指令覆盖,否则`define不受范围的限制。

③当用变量定义宏时,变量可以在宏正文中使用,并且在使用宏时可以用实际的变量表达式代替。

④通过用反斜杠\转移中间的换行符,宏定义可以跨越几行,新的行是宏正文的一部分。

⑤宏定义的行末不需要添加分号或者逗号表示结束。

⑥宏正文不能分离的语言记号包括注释、数字、字符串、保留的关键字、运算符。

⑦编译器伪指令不允许作为宏的名字,此外红的正文可以是一个表达式,并不仅英语变量名的替换。

⑧`define和parameter的区别:
        区别点
      `define
      parameter
作用域
①`define从编译器读到这条指令开始到编译结束都有效(除非遇到上面的提到的情况),可以应用于整个工程。
②`define可以写在代码的任何位置。
①parameter作用于声明的当前文件,如果要让它作用与整个项目,可以将这些声明单独列在一个文件中,然后用`include进行包含。
②parameter必须放在应用之前,也就是你要用到某个parameter参数了,你必须先parameter它。
传递功能
`define不能实现参数传递,但是不局限与定义变量,还可以定义
Parameter可以用作模块例化时的参数传递,实现参数化调用,但是仅局限于定义变量,而不能定义表达式。
(2)条件编译命令`if语句

①条件编译指令包括`ifdef 、`else 、`endif,其中`ifdef 、`endif必不可少,`else可选,且条件编译语句可以放在程序的任何地方调用。

②举例:
`ifdef  AAAA
     Parameter X1 = 1;
`elsif BBBB
     Parameter X2 = 1;
`elsif CCCC
    Parameter X3 = 1;
`else
    Parameter X4 = 1;
`endif
意思是:如果用`define 定义的ABCD,那么就会执行第一个模块(Parameter X1 = 1);否则执行第二个模块( Parameter X2 = 1)。
(3)文件包含`include语句

①当某个模块需要调用某一个文件时,但是这个文件不在当前目录下,那么就需要使用`include语句进行包含,这样调用才不会出现错误。如 `include  “../../xxxx.v”。

②一个`include指令只能指定一个被包含的文件。如果要完成N个文件的包含,需要N个`include指令。

③可以将多个`include指令写在同一行,在`include命令行只能出现空格和注释
④如果文件A同时包含了文件B和C,那么文件C可以直接利用B的内容,而不需要在对B文件进行包括,同理,B也可以直接利用C的内容。
(4)时间尺度`timescale语句

①`timescale用于定义延时的单位和延时的精度,如`timescale  1ns/100ps那么时间单位就是1ns,精度就是100ps。

②时间单位,表示了仿真时测量的单位,比如延时1,1ns;精度则表示仿真器只识别的范围,比如精度是100ps,那么如果你1.3ns,编译器是识别,但是如果写1.32,那么由于精度达不到那么细,所以0.02被四舍五入掉。

③`timescale影响着全部模块,知道遇到另外的`timescale。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1061

主题

11320

帖子

26

粉丝