import package 查看内容_SystemVerilog 概念浅析之package(import&include)

SystemVerilog中的package提供了保存和共享数据、参数和方法的机制,可以在多个module、class、program和interface中重用。

 82c051a46c85760dd8d0b47cb7f94c7d.gif

package中声明的内容都属于这个package作用域(scope)。在使用这些内容时,需要先import这个package,然后通过package引用。

SystemVerilog中的package通过package和endpackage声明

package my_pkg;  typedefenumbit [1:0] { RED,YELLOW, GREEN, RSVD } e_signal;  typedefstruct { bit [3:0]signal_id;                     bit       active;                     bit [1:0] timeout;                   } e_sig_param;   function common ();      $display ("Calledfrom somewhere");     endfunctionendpackage 

然后通过import :: 指定需要导入的内容。如果需要导入所有内容,就需要输入

import my_pkg::* ;

// Import the package defined above to use e_signal package my_pkg;  typedef enum bit [1:0] { RED,YELLOW, GREEN, RSVD } e_signal;  typedef struct { bit [3:0]signal_id;                     bit       active;                     bit [1:0]timeout;                   } e_sig_param;   function common ();      $display ("Called fromsomewhere");    endfunctionendpackage program test_case;   import my_pkg::* ;  class myClass;    e_signal   my_sig;  endclass    myClass cls;   initial begin    cls = new ();    cls.my_sig = GREEN;    $display ("my_sig =%s", cls.my_sig.name());    common ();  end endprogram

使用Questasim仿真

run# my_sig = GREEN# Called from somewhere# 1# Simulation stop requested.

因为我们输入了import my_pkg::* ;所以仿真器才认识e_signal

我们将import my_pkg::*删掉再仿真,仿真器会报出编译错误

** Error: **.sv(23): Invalid type'e_signal'. Please check the type of the variable 'my_sig'.** Error: **.sv(30): (vlog-2730) Undefinedvariable: 'GREEN'.

package变量作用域

假设在顶层和package中具有同名的变量READ

package my_pkg;  typedef enum bit { READ, WRITE }e_rd_wr;endpackage  program test_case; import my_pkg::* ; typedef enum bit { WRITE, READ } e_wr_rd;   initial begin        automatic e_wr_rd    opc1 = READ;        automatic e_rd_wr    opc2 = READ;      $display ("READ1 = %0dREAD2 = %0d ", opc1, opc2);  end endprogram 

此时会发生编译错误:

** Error: (vlog-8386) **.sv(13): An enumvariable 'opc2' of type 'e_rd_wr' may only be assigned the same enum typedvariable or one of its values. Variable 'READ' of type 'e_wr_rd' is not valid.

 这时候需要使用赋值方式

opc2 = my_pkg::READ;

仿真器输出log:

run# READ1 = 1 READ2 = 0# 1# Simulation stop requested.

那么import和include有什么区别呢?

`include将文件中所有文本原样插入包含的文件中。这是一个预处理语句,`include在import之前执行。

import不会复制文本内容。但是import可package中内容引入import语句所在的作用域。

总结下就是

include is equivalent to copy/paste or insertion of whatever is present in that file to wherever you include.

import is used to make all/select variables from a package visible. 

往期精彩

Systemverilog概念浅析之Callback

SystemVerilog概念浅析之Factory Pattern

SystemVerilog概念浅析之virtual class

SystemVerilog概念浅析之virtual method

SystemVerilog概念浅析之virtual interface

SystemVerilog概念浅析之Covergroup

SystemVerilog概念浅析之code coverage

世界地图矢量数据可以通过多种网站进行下载。以下是一些提供免费下载世界地图矢量数据的网站: 1. Open Street Map (https://www.openstreetmap.org/): 这个网站可以根据输入的经纬度或手动选定范围来导出目标区域的矢量图。导出的数据格式为osm格式,但只支持矩形范围的地图下载。 2. Geofabrik (http://download.geofabrik.de/): Geofabrik提供按洲际和国家快速下载全国范围的地图数据数据格式支持shape文件格式,包含多个独立图层,如道路、建筑、水域、交通、土地利用分类、自然景观等。数据每天更新一次。 3. bbbike (https://download.bbbike.org/osm/): bbbike提供全球主要的200多个城市的地图数据下载,也可以按照bbox进行下载。该网站还提供全球数据数据格式种类齐全,包括geojson、shp等。 4. GADM (https://gadm.org/index.html): GADM提供按国家或全球下载地图数据的服务。该网站提供多种格式的数据下载。 5. L7 AntV (https://l7.antv.antgroup.com/custom/tools/worldmap): L7 AntV是一个提供标准世界地图矢量数据免费下载的网站。支持多种数据格式下载,包括GeoJSON、KML、JSON、TopJSON、CSV和高清SVG格式等。可以下载中国省、市、县的矢量边界和世界各个国家的矢量边界数据。 以上这些网站都提供了世界地图矢量数据免费下载服务,你可以根据自己的需求选择合适的网站进行下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值