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

网站建设公司石家庄全国加盟网站建设

网站建设公司石家庄,全国加盟网站建设,网页版梦幻西游踏青寻柳攻略,做脚本网站transaction是一个抽象的概念。一般来说#xff0c;物理协议中的数据交换都是以帧或者包为单位的#xff0c;通常在一帧或者一个包中要定义 好各项参数#xff0c;每个包的大小不一样。很少会有协议是以bit或者byte为单位来进行数据交换的。transaction就是用于模拟这种实际…        transaction是一个抽象的概念。一般来说物理协议中的数据交换都是以帧或者包为单位的通常在一帧或者一个包中要定义 好各项参数每个包的大小不一样。很少会有协议是以bit或者byte为单位来进行数据交换的。transaction就是用于模拟这种实际情况一 笔transaction就是一个包。在不同的验证平台中会有不同的transaction。一个简单的transaction的定义如下 class my_transaction extends uvm_sequence_item;rand bit[47:0] dmac;rand bit[47:0] smac;rand bit[15:0] ether_type;rand byte pload[];rand bit[31:0] crc;constraint pload_cons{pload.size 46;pload.size 1500;}function bit[31:0] calc_crc();return 32h0;endfunctionfunction void post_randomize();crc calc_crc;endfunctionuvm_object_utils(my_transaction)function new(string name my_transaction);super.new();endfunction endclass post_randomize是SystemVerilog中提供的一个函数当某个类的实例的randomize函数被调用后post_randomize会紧随其后无条件 地被调用。         在transaction定义中有两点值得引起注意一是my_transaction的基类是uvm_sequence_item。在UVM中所有的transaction都 要从uvm_sequence_item派生只有从uvm_sequence_item派生的transaction才可以使用UVM中强大的sequence机制。二是这里没有使用uvm_component_utils宏来实现factory机制而是使用了uvm_object_utils。从本质上来说my_transaction与 my_driver是有区别的在整个仿真期间my_driver是一直存在的my_transaction不同它有生命周期。它在仿真的某一时间产 生经过driver驱动再经过reference model处理最终由scoreboard比较完成后其生命周期就结束了。一般来说这种类都是派 生自uvm_object或者uvm_object的派生类uvm_sequence_item的祖先就是uvm_object。UVM中具有这种特征的类都要使用 uvm_object_utils宏来实现。         当完成transaction的定义后就可以在my_driver中实现基于transaction的驱动 class my_driver extends uvm_driver;virtual my_if vif;uvm_component_utils(my_driver)function new(string name my_driver, uvm_component parent null);super.new(name, parent);endfunctionvirtual function void build_phase(uvm_phase phase);super.build_phase(phase);if(!uvm_config_db#(virtual my_if)::get(this, , vif, vif))uvm_fatal(my_driver, virtual interface must be set for vif!!!)endfunctionextern task main_phase(uvm_phase phase);extern task drive_one_pkt(my_transaction tr); endclasstask my_driver::main_phase(uvm_phase phase);my_transaction tr;phase.raise_objection(this);vif.data 8b0;vif.valid 1b0;while(!vif.rst_n)(posedge vif.clk);for(int i 0; i 2; i) begin tr new(tr);assert(tr.randomize() with {pload.size 200;});drive_one_pkt(tr);endrepeat(5) (posedge vif.clk);phase.drop_objection(this); endtasktask my_driver::drive_one_pkt(my_transaction tr);bit [47:0] tmp_data;bit [7:0] data_q[$]; //push dmac to data_qtmp_data tr.dmac;for(int i 0; i 6; i) begindata_q.push_back(tmp_data[7:0]);tmp_data (tmp_data 8);end//push smac to data_qtmp_data tr.smac;for(int i 0; i 6; i) begindata_q.push_back(tmp_data[7:0]);tmp_data (tmp_data 8);end//push ether_type to data_qtmp_data tr.ether_type;for(int i 0; i 2; i) begindata_q.push_back(tmp_data[7:0]);tmp_data (tmp_data 8);end//push payload to data_qfor(int i 0; i tr.pload.size; i) begindata_q.push_back(tr.pload[i]);end//push crc to data_qtmp_data tr.crc;for(int i 0; i 4; i) begindata_q.push_back(tmp_data[7:0]);tmp_data (tmp_data 8);enduvm_info(my_driver, begin to drive one pkt, UVM_LOW);repeat(3) (posedge vif.clk);while(data_q.size() 0) begin(posedge vif.clk);vif.valid 1b1;vif.data data_q.pop_front(); end(posedge vif.clk);vif.valid 1b0;uvm_info(my_driver, end drive one pkt, UVM_LOW); endtask
http://wiki.neutronadmin.com/news/352758/

相关文章:

  • 怎么免费网上做公司网站石狮网站建设费用
  • wordpress网站语言商业广告
  • 电商类网站建设需要多少钱互联网做什么行业前景好
  • 织梦网站漏洞修复哔哩哔哩免费网站观看
  • 网站开发的论文题目网站检测工具
  • 手机怎么制作网站金昌大型网站建设费用
  • 湛江城乡建设网站学做网站有多难
  • 一级做a视频在线观看网站旅游网站系统源码
  • 如何创建旅游网站济宁网站建设流程
  • 天津网站制作的公司哪家好wordpress 短信认证
  • 温州建站方案电商网站开发思路模版
  • 网站建设 前后台目录结构马上飞做的一些网站
  • 不备案怎么做淘宝客网站做网站推广的方法有哪些
  • app网站设计制作营销网站型建设多少钱
  • 金坛网站建设报价网上营销的方式
  • 眼睛网站开发什么是精准营销
  • 就业网站建设总结phpcms 图片网站
  • 专门做餐饮运营的网站做网站维护学什么编程语言
  • 私人网站建设方案书框架栏目建设银行江苏分行网站
  • 网站备案抽查通过通过php安装wordpress
  • wordpress建好后安全网站seo置顶
  • 大地保险网站深圳龙岗好玩的地方
  • 中国住房和城乡建设部查询网站6国外域名拍卖网站
  • 手机网站引导页今天最新新闻摘抄
  • 大连建设工业产品网站企业建设网站哪家好
  • 做网站代理网站怎么谈微信微商城开发
  • 上海网站建设的wordpress 附件重命名
  • 佛山做外贸网站特色涪城移动网站建设
  • 网站建站网站80s隐秘而伟大网页制作源代码免费的
  • 红色ppt模板免费下载网站wordpress视频文件大小设置