当前位置: 首页 > news >正文

辽阳市城市建设委员会网站google收录提交入口

辽阳市城市建设委员会网站,google收录提交入口,网页打包app,网页设计与制作教程图文混排field_automation机制是域的自动化的机制,这个机制的最大的优点是可以对一些变量进行批量的处理,比如对象拷贝、克隆、打印之类的变量。 一、 成员变量的注册 使用field_automation机制首先要用uvm_field 系列宏完成变量的注册,类中的成员变…

field_automation机制是域的自动化的机制,这个机制的最大的优点是可以对一些变量进行批量的处理,比如对象拷贝、克隆、打印之类的变量。

一、 成员变量的注册

使用field_automation机制首先要用`uvm_field 系列宏完成变量的注册,类中的成员变量类型决定了要使用什么样的 `uvm_field 宏:如int型变量,使用`uvm_field_int(ARG,FLGA)宏,其中ARG为定义的成员变量,FLAG表示为当前成员变量的操作打开或关闭。

1,标量类型

最简单的uvm_field系列宏有如下几种:

`define uvm_field_int(ARG,FLAG)

`define uvm_field_real(ARG,FLAG)

`define uvm_field_enum(T,ARG,FLAG)

`define uvm_field_object(ARG,FLAG)

`define uvm_field_event(ARG,FLAG)

`define uvm_field_string(ARG,FLAG)

特别指出:这里的define除了枚举类型外,都是两个参数,对于枚举类型来说,`define uvm_field_enum(T,ARG,FLAG) 需要有三个参数,这里的T就是枚举的类型名称。

2,静态数组类型

与静态数组相关的uvm_field系列宏有:

`define uvm_field_sarray_int(ARG,FLAG)

`define uvm_field_sarray_enum(ARG,FLAG)

`define uvm_field_sarray_object(ARG,FLAG)

`define uvm_field_sarray_string(ARG,FLAG)

特别说明:这里都是一维数组类型,enum类型的数组里参数只有两个。

3,动态数组类型

`define uvm_field_array_enum(ARG,FLAG)

`define uvm_field_array_int(ARG,FLAG)

`define uvm_field_array_object(ARG,FLAG)

`define uvm_field_array_string(ARG,FLAG

特别说明:这里都是一维数组类型,enum类型的数组里参数只有两个。

4, 队列类型

`define uvm_field_queue_enum(ARG,FLAG)

`define uvm_field_queue_int(ARG,FLAG)

`define uvm_field_queue_object(ARG,FLAG)

`define uvm_field_queue_string(ARG,FLAG)

特别说明:enum类型的数组里参数只有两个。

5,联合数组

`define uvm_field_aa_int_string(ARG, FLAG)

`define uvm_field_aa_string_string(ARG, FLAG)

`define uvm_field_aa_object_string(ARG, FLAG)

`define uvm_field_aa_int_int(ARG, FLAG)

`define uvm_field_aa_int_int_unsigned(ARG, FLAG)

`define uvm_field_aa_int_integer(ARG, FLAG)

`define uvm_field_aa_int_integer_unsigned(ARG, FLAG)

`define uvm_field_aa_int_byte(ARG, FLAG)

`define uvm_field_aa_int_byte_unsigned(ARG, FLAG)

`define uvm_field_aa_int_shortint(ARG, FLAG)

`define uvm_field_aa_int_shortint_unsigned(ARG, FLAG)

`define uvm_field_aa_int_longint(ARG, FLAG)

`define uvm_field_aa_int_longint_unsigned(ARG, FLAG)

`define uvm_field_aa_string_int(ARG, FLAG)

`define uvm_field_aa_object_int(ARG, FLAG)

特别说明:这里联合数组有两大识别标志,一是索引的类型,二是存储数据的类型。在这一系列uvm_field系列宏中,出现的第一个类型是存储数据类型,第二个类型是索引类型,如uvm_field_aa_int_string用于声明那些存储的数据是int,而其索引是string类型的联合数组。

二、 field automation机制函数

field automation功能非常强大,它主要提供了如下函数。

1,copy函数用于实例的复制,其原型为:

extern function void copy (uvm_object rhs);

如果要把某个A实例复制到B实例中,那么应该使用B.copy(A)。在使用此函数前,B实例必须已经使用new函数分配好了内存空间。

2,compare函数用于比较两个实例是否一样,其原型为:

extern function bit compare (uvm_object rhs, uvm_comparer comparer=null);

如果要比较A与B是否一样,可以使用A.compare(B),也可以使用B.compare(A)。当两者一致时,返回1;否则为0。

3,pack_bytes函数用于将所有的字段打包成byte流,其原型为:

extern function int pack_bytes (ref byte unsigned bytestream[],input uvm_packer packer=null);

4,unpack_bytes函数用于将一个byte流逐一恢复到某个类的实例中,其原型为:

extern function int unpack_bytes (ref byte unsigned bytestream[],input uvm_packer packer=null);

5,pack函数用于将所有的字段打包成bit流,其原型为:

extern function int pack (ref bit bitstream[],input uvm_packer packer=null);

pack函数的使用与pack_bytes类似。

6,unpack函数用于将一个bit流逐一恢复到某个类的实例中,其原型为:

extern function int unpack (ref bit bitstream[], input uvm_packer packer=null);

7,pack_ints函数用于将所有的字段打包成int(4个byte,或者dword)流,其原型为:

extern function int pack_ints (ref int unsigned intstream[],input uvm_packer packer=null);

8,unpack_ints函数用于将一个int流逐一恢复到某个类的实例中,其原型为:

extern function int unpack_ints (ref int unsigned intstream[],input uvm_packer packer=null);

9,print函数用于打印所有的字段。

function void print (uvm_printer printer = null)

10,clone函数,原型是:

virtual function uvm_object clone ()

三、 field_automation使用方法

1, object类型域的自动化

part1/field_automation是UVM field_automation机制的实验,首先注册在`uvm_object_utils_begin(sequence_item),`       uvm_object_utils_end之间。

`uvm_object_utils_begin(squence_item)

      `uvm_field_int(data,UVM_ALL_ON)

       …

 `uvm_object_utils_end

注册之后就可以在验证环境中使用field_automation函数。

在dadd_item对data,addr进行了注册。

File:dadd_item.svClass:dadd_itemclass dadd_item extends uvm_sequence_item;`uvm_object_utils_begin(dadd_item)`uvm_field_int(data,UVM_ALL_ON)`uvm_field_int(addr,UVM_ALL_ON)`uvm_object_utils_endrand bit        data_en;rand bit [31:0] data;rand bit [31:0] addr;extern function new(string name ="dadd_item");endclass: dadd_item

代码3.41 field_automation机制对item中参数注册代码

在dadd_scoreboard中对DUT的数据包和参考模型的数据包对比时用到了compare函数,这样对比的就是data和addr变量。

File:dadd_scoreboard.svClass:dadd_scoreboardtask          dadd_scoreboard :: main_phase(uvm_phase phase);dadd_item dadd_exp_item, dadd_act_item, tmp_dadd_exp_item;forkwhile(1)beginexp_port.get(dadd_exp_item);dadd_exp_queue.push_front(dadd_exp_item);endwhile(1)beginact_port.get(dadd_act_item);beginwait(dadd_exp_queue.size()>0);tmp_dadd_exp_item = dadd_exp_queue.pop_back();if(!tmp_dadd_exp_item.compare(dadd_act_item))begin`uvm_error("dadd_scoreboard",$sformatf("Transaction miss match!\nExpect_addr:%h,Expect_data:%h\nActual_addr:%h,Expect_data:%h\n", tmp_dadd_exp_item.addr,tmp_dadd_exp_item.data,dadd_act_item.addr,dadd_act_item.data));endelsebegin`uvm_info("dadd_scoreboard","DADD_PASS",UVM_LOW);endendendjoinendtask: main_phase

代码3.42 field_automation机制实验中的dadd_scoreboard的代码

2,component类型域的自动化

首先注册在`uvm_component_utils_begin(component),`     uvm_component_utils_end之间。

`uvm_component_utils_begin(squence_item)

     `uvm_field_int(data,UVM_ALL_ON)

       …

 `uvm_component_utils_end

注册之后在也可在环境中使用一些相关的函数。

前面config_db机制讲过config_db::get时可以不用写也能得到相应的值,这就用到了field_automation机制。

在component通过field_automation机制注册的变量可以省略config_db::get,但是要注意config_db::get的第三个参数,也就是标志位一定要和得到这个值的变量名一致。

在part1/field_automation实验中,在dadd_environment中向dadd_driver发送一个字符串:

File:dadd_environment.svClass:dadd_environmentfunction void dadd_environment :: build_phase(uvm_phase phase);iagt = dadd_iagent :: type_id :: create("iagt",this);oagt = dadd_oagent :: type_id :: create("oagt",this);refmdl = dadd_refmodel :: type_id :: create("refmdl",this);scb =  dadd_scoreboard :: type_id :: create("scb",this);dadd_iagt_to_refmdl_fifo = new("dadd_iagt_to_refmdl_fifo",this);dadd_oagt_to_scb_fifo = new("dadd_oagt_to_scb_fifo",this);dadd_refmdl_to_scb_fifo = new("dadd_refmdl_to_scb_fifo",this);if(!uvm_config_db #(virtual dadd_interface) :: get(this,"","vif",vif))`uvm_fatal("dadd_environment","The interface is not get !!!");iagt.vif = vif;oagt.vif = vif;uvm_config_db#(string) :: set(this,"iagt.drv","field_automation_config_db","This is no need config_db::get by use field_automation in component.");endfunction : build_phase

代码3.43 field_automation机制component类型域的自动化实验中dadd_environment的代码

在dadd_driver中声明了一个变量

string field_automation_config_db;

在main_phase中直接打印出field_automation_config_db,这个变量名字和dadd_environment中config_db::set的值是相同的。

File:dadd_driver.svClass:dadd_driverclass dadd_driver extends uvm_driver #(dadd_item);string field_automation_config_db;`uvm_component_utils_begin(dadd_driver)`uvm_field_string(field_automation_config_db,UVM_ALL_ON)`uvm_component_utils_end

代码3.44 field_automation机制component类型域的自动化实验中dadd_driver的代码

执行Makefile脚本:

make all

执行仿真,打印的结果为:

图3.24 component类型域的自动化实验的仿真log截图

本书(《UVM实验教程-从平台、脚本到方法学全代码解析-王建利》)及其实验代码已上传至GitHub 访问网址为: https://github.com/brentwang-lab/uvm_tb_gen

http://www.hkea.cn/news/66124/

相关文章:

  • 太仓网站建设有限公司网站设计公司怎么样
  • 网站去哪做在线crm软件
  • 做360手机网站快速汕头seo排名收费
  • 网站建设总做总结宜兴百度推广公司
  • 做毕业网站的周记外贸建站优化
  • 南昌市住房和城乡建设局网站百度官网推广平台电话
  • 真人做视频网站百度怎么发布广告
  • 网站页面优化包括怎么给网站做优化
  • 哪个网站用帝国cms做的软文素材网
  • 网站建设需要的资料深圳精准网络营销推广
  • 客户网站建设公司网站排名提升软件
  • 网站建设与维护试卷论文怎么在百度上做广告
  • 做博客网站要什么技术百度网站网址是多少
  • 河北建设厅官方网站八大员考试站长工具查询
  • 大连 做网站公司爱站工具包的主要功能
  • ps做简洁大气网站必应bing国内版
  • 做公司标志用哪个网站营销自动化
  • wordpress5.0.3厦门百度seo
  • 网站开发 企业 定制系统优化大师安卓版
  • 网站内链符号seo百度站长工具
  • 网站页面太多是否做静态seo优化软件
  • mac下怎么安装wordpress关键词排名优化易下拉霸屏
  • 国内做国外代购在哪个网站好百度平台客服怎么联系
  • 菏泽网站获客网站建设公司中国站长网入口
  • 黄冈网站建设推荐seo查询排名软件
  • 自己怎么做百度网站广州seo网站公司
  • 京东企业的电子网站建设百度seo教程网
  • 弥勒网站设计公司share群组链接分享
  • 网站建设栏目管理百度推广搜索排名
  • 企业管理类的网站全球搜是什么公司