verilog2001中关于`define的作用域
时间:10-02
整理:3721RD
点击:
请教各位一个问题,如题:
1.一般我们的宏定义都写在专门的.v中,这个宏定义define的作用域是多大,是全局吗?
2.现在出现这么个问题,用quartus软件,用文本的方式*.qsf去管理工程(可以认为就是quartus settings + filelist),但是发现define.v的作用域并不是全局(define.v的位置必须要在上面),这是怎么回事?
谢谢大家!
1.一般我们的宏定义都写在专门的.v中,这个宏定义define的作用域是多大,是全局吗?
2.现在出现这么个问题,用quartus软件,用文本的方式*.qsf去管理工程(可以认为就是quartus settings + filelist),但是发现define.v的作用域并不是全局(define.v的位置必须要在上面),这是怎么回事?
谢谢大家!
是的,在编译时调用这个变量前就要先定义好,你可以调整下编译列表的位置,或者干脆写在专门的.v文件,放在比较top的位置。
写在模块外面就是全局吧,里面就不是全局吧,我也是菜鸟
内容没人?
这个的作用域一般都是模块内部的!
感觉还是没明白,2楼的回答可能会有点帮助
所谓全局 是指从它的定义位置开始 一直到项目结束 除非遇到 undef
作用于添加include的文件,从定义开始至文件结尾
记得quartus ii 有一个设置可以将define 设置成全局,类似ISE 都有这种设置。
如果你去查verilog的官方文档,上面说的是define是没有范围限制的,一旦被定义,在哪里都可以用。所以,define的作用域就是从编译器编译到该define,直到编译结束或者是遇到`undef或者是被重复define。所以define真实的作用域是由编译的顺序来指定的,vcs的编译顺序是按照-f指定的文件列表从上到下来的,ncsim应该也是这样。
如果你遇到define作用域不对,一定是编译的顺序不对,期望作用域全局的定义,要放在编译的最前面。
