范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SystemVerilogunit编译单元介绍

  SV $unit 编译单元
  SV中增加了编译单元的概念,就是 SV源文件编译的时候,一起编译的所有源文件 当多个源文件一起编译时,**只有一个unit域中的所有子项对这些源文件都是可见的 当多个源文件单独编译时,**会产生多个unit中导入的包对其他$unit是不可见的 1. 编译单元域搜索规则
  编译单元域在搜索顺序中排第三位
  举个栗子 package a_dpk;  //创建一个名为a_dpk的包     function print();         $display("	 This is in a_dpk!");     endfunction endpackage  package b_dpk;  //创建一个名为b_dpk的包     function print();         $display("	 This is in b_dpk!");     endfunction endpackage  import b_dpk:: *; //导入$unit编译单元域  module test_tb;          import a_dpk:: *; //通配符导入      function print();         $display("	 This is in module!");     endfunction      initial begin         $display("	**********************");         print;         $display("	***********End*********");     end endmodule
  这里我们创建了两个包(a_dpk和b_dpk),两个包中的都只有一个打印函数,同时module中也有一个打印函数,(打印函数用于指示所在位置)
  打印结果如下:
  image-20211216201944989
  从打印结果可以看出,当三者都存在时,打印的是module中声明的函数
  那么如果把module中声明的函数注释掉会打印哪个函数呢? package a_dpk;  //创建一个名为a_dpk的包     function print();         $display("	 This is in a_dpk!");     endfunction endpackage  package b_dpk;  //创建一个名为b_dpk的包     function print();         $display("	 This is in b_dpk!");     endfunction endpackage  import b_dpk:: *; //导入$unit编译单元域  module test_tb;          import a_dpk:: *; //通配符导入      //function print();     //    $display("	 This is in module!");     //endfunction      initial begin         $display("	**********************");         print;         $display("	***********End*********");     end endmodule
  运行结果如下:
  可以看到此时打印的是在module中导入的包
  那么接下来我们把在module中导入的包注释掉,即把 import a_dpk::*; 注释掉package a_dpk;  //创建一个名为a_dpk的包     function print();         $display("	 This is in a_dpk!");     endfunction endpackage  package b_dpk;  //创建一个名为b_dpk的包     function print();         $display("	 This is in b_dpk!");     endfunction endpackage  import b_dpk:: *; //导入$unit编译单元域  module test_tb;         // import a_dpk:: *; //通配符导入      //function print();     //    $display("	 This is in module!");     //endfunction      initial begin         $display("	**********************");         print;         $display("	***********End*********");     end endmodule
  下面运行结果:
  此时终于把导入$unit编译单元域的内容打印出来了
  通过这个过程不难发现,在运行过程中, 先从module内部找有没有声明,如果没有声明再从module内部import的包找,如果还是没有才会在module外部import的包中找
  这也就是为什么  编译单元域在搜索规则中排第三
  那么为什么编译单元域叫 $unit 呢?我们可以再把代码更改一下package a_dpk;  //创建一个名为a_dpk的包     function print();         $display("	 This is in a_dpk!");     endfunction endpackage  //package b_dpk;  //创建一个名为b_dpk的包 //    function print(); //        $display("	 This is in b_dpk!"); //    endfunction //endpackage  import b_dpk:: *; //导入$unit编译单元域  module test_tb;         // import a_dpk:: *; //通配符导入      //function print();     //    $display("	 This is in module!");     //endfunction      initial begin         $display("	**********************");         print;         $display("	***********End*********");     end endmodule
  我们把 b_dpk 注释掉,但依旧将其导入,看看运行结果
  这里直接显示错误在  $unit ,或许$unit只是一个名称,就好像上例中module命名为test_tb 一样2. 单独编译将包导入到$unit中(条件编译)
  格式为: `ifndef xxx  `define xxx `endif
  这是C语言中常用的技巧,如果第一次遇到导入语句将其编译到$unit中,再次出现则不会编译
  下面我们将上篇笔记中的包用这种方式仿真一下,先给出上篇笔记中包的内容 package definitions;     parameter version = "1.1";          typedef enum {ADD, SUB, MUL} opcodes_t;      typedef struct {         logic [31:0] a, b;         opcodes_t opcode; //声明的opcode中包含 ADD, SUB和MUL     } instruction_t;          function automatic [31:0] multiplier (input [31:0] a, b);         return a * b;     endfunction endpackage
  我们将文件名命名为 definitions.dpk ,其中后缀.dpk 是随便起的`ifndef PACK  `define PACK  package definitions;         parameter version = "1.1";                  typedef enum {ADD, SUB, MUL} opcodes_t;                  typedef struct {             logic [31:0] a, b;             opcodes_t opcode; //声明的opcode中包含 ADD, SUB和MUL              } instruction_t;                  function automatic [31:0] multiplier (input [31:0] a, b);             return a * b;         endfunction     endpackage   import definitions:: *; //将包导入到$unit中 `endif
  下面是源码和测试文件 `include "definitions.dpk" //编译包文件  module ALU (  input instruction_t IW,     input logic clk,     output logic [31:0] result );     always @ (posedge clk) begin         case(IW.opcode)             ADD : result = IW.a + IW.b;             SUB : result = IW.a - IW.b;             MUL : result = multiplier(IW.a, IW.b);         endcase     end  endmodule `include "definitions.dpk" //编译包文件  module ALUtb;     instruction_t IW;     logic    clk = 1;  logic [31:0] result;          always #10 clk = ~clk; //生成时钟,周期为20ns          initial begin         IW.a = "d10;         IW.b = "d5;         IW.opcode = ADD;          repeat(2)  @(negedge clk);          IW.a = "d3;          IW.b = "d7;          IW.opcode = MUL;              repeat(2) @(negedge clk);          IW.a = "d5;          IW.b = "d1;          IW.opcode = SUB;                  repeat(3) @(negedge clk);          $finish;      end          initial begin         $monitor ($time, ,"a->%d, b->%d, opcode->%s, result->%d",IW.a, IW.b, IW.opcode, result);     end      ALU tb(.IW(IW), .result(result), .clk(clk));    //例化 endmodule
  运行结果如下
  本文主要参考 《SystemVerilog硬件设计及建模》 人人都会用到,但是大部分人不清楚是什么的"神秘空间" (baidu.com)

卢伟冰又不当人,红米Note10配置封神,千元市场压力山大盼星星盼月亮终于是盼来了红米Note系列的新机的到来,距离红米Note10这款手机的发布时间仅剩一天了,很多人都在怀疑这款手机能否像之前的红米Note8与Note9一样优秀。从官微iOS15爆料信息汇总,或将更新以下四个功能苹果iOS15新爆料iOS14系统发布于2020年9月17日,到目前为止已经更新到了第七个子版本,稳定性各方面已经趋于稳定苹果下一代系统也即将到来iOS15iOS15系统即将在6月理想ONE豪华电动SUV,全新上市讲新车,聊好车。大家好,我是车评小怪兽,今天给大家分享一款新车理想ONE。理想汽车是一个豪华智能电动车品牌,首款产品理想ONE于2018年10月18日推出,这款车定位于智能电动大型1299元的IQOOZ3或许是VIVO手机最值得入手的高性能5G拍照手机随着6月份临近,各大手机品牌似乎都想接着618的热度来进行大幅度的降价,这其中作为VIVO手机旗下子品牌的IQOO手机,说起子品牌,小编更愿意将其称之为VIVO手机旗下的一个系列,一加官方确认存在Nord2新中端手机最快或于6月海外上市以前一加在全球市场基本只做旗舰手机,而在去年一加改变了策略,在海外市场推出了一加Nord中端手机,今后一加是否继续会在全球市场旗舰机和中端机产品路线上双管其下呢?答案是肯定的,近期6。18手机购买推荐指南(千元篇)大家好,我是毛小毛。今年的6。18比以往的时间拉得更长一些,还没进入到6月,各大电商平台的活动就都已经开启了。今天就趁着活动的第一天,给大家推荐一下本次6。18值得购买的千元以下机手机好评榜出炉,苹果三星并非第一,华为的名次意料之外随着近几年来消费者对于智能手机越来越苛刻,现在在消费者的眼中几乎没有一款堪称完美的手机,不管是屏幕性能发热拍照,甚至是外放震动等方面,都能给不同的机型挑出不同的问题和缺点。所以说现为什么极氪001双电机长续航版续航里程只有606km写在前面l车身重量上升约10(200kg)l电机工作效率的下降l前电机的附加阻力l冷却系统的功耗上升,共同导致在增加前电机(及其他配置)后,极氪001的续航,从712km下降到60告别正则表达式,这个Python库可以快M倍FlashText算法是由VikashSingh于2017年发表的大规模关键词替换算法,这个算法的时间复杂度仅由文本长度(N)决定,算法时间复杂度为O(N)。而对于正则表达式的替换RedmiNote10外观确定,背面取旗舰精华,正面LCD挖孔屏RedmiNote10在预热屏幕后,这款手机的外观基本可以确定。背面镜头处设计用到了小米10Ultra,银色易拉罐环设计,背板玻璃用到了小米11雷军签名版的立体光栅设计,这个设计要竟然还有那么多人不知道,这些网贷不用上征信随着网贷的兴起,越来越多人开始用网贷,于是很多人开始关心,是不是所有网贷都上征信?其实呢,并不是所有网贷都会上征信,能够上征信的网贷目前来说还都是少数,但是网贷内部会有类似征信的黑
中兴新机官方预热5月9日见,全新屏下摄像头屏幕设计成为今年手机行业中的硬骨头,所以不少品牌仍是坚持发布打孔屏设计,原本以为一年一更,比如2017年的刘海屏2018年升降屏2019年水滴屏2020年打孔屏。到了2021年虽然IP属地上线社交平台拆穿人在美国,刚下飞机谎言中国新闻网近日,微博全量上线IP属地功能,即国内显示到省份地区,国外显示到国家,用户无法关闭该功能。一时间,各种人在美国人在日本的网红无处遁形原来他们都在国内。IP属地来了,究竟谁会赚钱的库克为何没有雷军聪明?原因有三,得了便宜别卖乖如果要问全世界最会赚钱的人是谁,相信很多人第一个想到的就是库克,毕竟苹果是全世界最赚钱的公司,没有之一。苹果公司2021年净利润高达946。8亿美元,约合6309。76亿元。对比之山东出现奥密克戎进化分支BA。2。3,系国内首次发现,更危险吗?4月25日,山东烟台市召开疫情防控新闻发布会,介绍疫情防控最新情况,山东烟台病例基因分型为奥密克戎BA。2。3进化分支,此前国内尚未发现。根据意大利安莎通讯引述的那不勒斯大学疾病工戴尔工作站Precision3260小型工作站评测戴尔新上市的超小型工作站Precision3260全面升级12代产品,到底表现怎么样今天给大家测看看。配置CPUi912900内存DDR532G4800Mhz(单根)硬盘双512G巅峰时以90亿把孩子卖给阿里,自己则成打工人,张旭豪图啥有句话说懒人是推动人类进步的原动力。这话猛一听有点离谱,但是细细想来,好像还真是这么个道理。事实上,有很多发明和创造,都是懒人为了省心省事想出来的解决办法。懒得走路,于是发明了自行115页PPT带您详细了解智慧工地怎么建设?5G智慧工地整体解决方案版权声明本资料来源网络,仅用于行业知识分享,供个人学习参考,不得作商业用途。侵删致歉如有侵权请联系小编,将在收到信息后第一时间进行删除!方案目录智慧工地产品应用5G智慧工地产品应用青春风暴来袭!vivoS15系列将携多款新品正式亮相vivo在近年来深耕手机产业,推出了许多实力派产品。近日,vivo官方发布了包含vivoS15系列在内的众多新品海报,海报内新款耳机平板设备的外观设计都充满青春气息,与如今的夏日氛夫妻相真的存在吗?研究结果这样解释你们真有夫妻相。这大概是夫妻在一起经常能听到的恭维。很多人都有这样的看法,长期生活在一起的伴侣看上去无论是样貌还是性格,都很相似。但夫妻在一起生活越久,他们的言行举止真的会越来越像盘点那些一千多的高通骁龙870手机随着高通骁龙888和8Gen1发热问题严重,性能良好,功耗均衡的870成为了这两年的香饽饽。870的机型在主攻性价比的品牌上1000多就能入手了,下面我们一起盘点一下。1红米K40鸿蒙3。0支持机型确定?盘点618值得入的3款华为手机,买对不买贵鸿蒙2。0系统更新已经快一年了,而鸿蒙3。0系统预计67月份就要发布了,很多小伙伴都对鸿蒙3。0支持机型名单十分关注,这也直接影响了消费者是否换新机的计划。近日,网上出现了一份鸿蒙