前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >说说SystemVerilog的Package

说说SystemVerilog的Package

作者头像
Lauren的FPGA
发布2023-10-07 11:23:46
3670
发布2023-10-07 11:23:46
举报
文章被收录于专栏:Lauren的FPGA

谈到package,用过VHDL的工程师并不陌生。实际上,SystemVerilog中的package正是从VHDL引入的,以进一步增强其在系统级的描述能力。我们来看一下SystemVerilog中package的使用方法与注意事项。

SystemVerilog中的package需要在关键字package和endpackage之间进行定义,其包含的内容可以是parameter,localparam,const,typedef,task,function,import,export和time unit。当然,package中也可以包含一些不可综合的用于验证的内容如class。

我们来看一个具体的例子,如下图所示代码片段。代码第2行通过关键字package表明其描述类别,package之后的top_pkg是package的名字。代码第5行至第11行以条件编译的方式结合typedef定义了数据类型。代码第13行通过typedef enum定义了枚举类型。代码第15行到第18行通过typedef struct定义了结构体。代码第20行至第22行定义了function。代码第23行以endpackage确定package结束。

从可综合的SystemVerilog代码风格角度而言,需要注意:对于需要定义在package中的常数,应采用localparam或const定义,而不要使用parameter定义。此外,结构体应定义在package中,而不是以独立的.sv文件存在。

当需要使用package中的对象时,就需要导入package,如下图所示代码片段。代码第2行通过import导入package。“*”表示导入top_pkg中的所有内容。也可以只导入需要使用的package中的某个具体内容,例如

import top_pkg::word_t;

如果使用此方法导入用户定义的枚举类型时,需要明确导入使用到的枚举标签,如下所示:

import top_pkg::ADD;

import top_pkg::SUB;

import top_pkg::ABS;

import top_pkg::DIV2;

import package可以放在module声明之前,如上图所示代码第2行的位置,也可以放在端口声明之前,如下图所示代码片段的第4行。两者的效果是一样的,即:端口声明部分和module内的语句均可使用导入的package内容。

尽管可以使用如下图所示代码片段第6行所示方式,但实际工程中并不建议这么使用,这会导致代码变得冗长。工程实践表明,采用类似于“import top_pkg::*;”的方式更为方便,也更为明了。

Vivado是支持package的。只需将package单独定义在一个后缀为.sv的文件中即可。Vivado会自动将package放在首位进行编译,如下图所示。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-05 08:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA技术驿站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档