- 在Verilog中不能定义全局的函数,如果多个设计中要用到,只能在每个设计文件中定义。SV中提供了包,可以定义公共或全局的参数(parameter,localparame和const),自定义类型,任务和函数(前面必须要加automatic,个人理解:非共享的,每次例化会单独分配一块电路资源),但是不要在在包中定义变量,因为包中变量为所有导入变量的文件所共享(可以理解为软件里的静态变量)。为了更容易识别出文件的类别,包文件最好以.pkg作为后缀名。定义好之后,在需要使用的module文件中import包就可以了。如果没有import包文件,那么直接在module中使用的时候,需要加上包名(如图2)。
图1:

图2:

- 如果每次引用的时候都需要加上包名太繁琐了,那么就需要在module的前面加上import。但是VCS和Vivado中引用package有一些区别,如果在模块端口列表中使用包中的成员,那么import的位置在两个编译工具中有所区别,请看下面代码。
// 这段代码在VCS中能编译通过,在Vivado中编译不通过
import package_name;
module module_name

本文介绍了Verilog中函数的局限性和SV中的包结构,包括全局参数、类型和任务函数定义,强调了包中变量的共享特性以及VCS和Vivado中包引用的位置差异。讲解了如何通过`include`引入条件编译以解决包导入问题,以及在不同编译域中的优先级规则。
最低0.47元/天 解锁文章
2667

被折叠的 条评论
为什么被折叠?



