MCDF实验2(下)

在实验3 tb3.sv 中, 已经把 chnl_initiator 和 chnl_generator 改造为了类 class 改造好的内容chnl_intiator 在模块中和在类中的对比如下:

chnl_generator 在类中和在模块中的对比如下:

新添加的 class chnl_trans 如下:

到了 tb4 把这三个类都封装在一个包 package chnl_pkg 中,

另外还添加了以下的类:

 层次关系是: 

chnl_agent 类 具体代码如下:

 chnl_root_test 具体代码如下:

 chnl_basic_test 和 chnl_burst_test  和 chnl_fifo_full_test 如下:

他们的区别在于: idle_cycles 不同

class chnl_basic_test extends chnl_root_test;  // 类 chnl_basic_test
    function new(int ntrans = 200, string name = "chnl_basic_test");
      super.new(ntrans, name);
      foreach(agent[i]) begin
        this.agent[i].init.set_idle_cycles($urandom_range(1, 3)); //basic的idle_cycles=1或2或3
      end
      $display("%s configured objects", this.name);
    endfunction
endclass: chnl_basic_test

class chnl_burst_test extends chnl_root_test; // 类 chnl_burst_test
    function new(int ntrans = 500, string name = "chnl_burst_test");
      super.new(ntrans, name);
      foreach(agent[i]) begin
        this.agent[i].init.set_idle_cycles(0); // burst 的 idle_cycles=0
      end
      $display("%s configured objects", this.name);
    endfunction
endclass: chnl_burst_test

class chnl_fifo_full_test extends chnl_root_test; // 类 chnl_fifo_full_test 
    function new(int ntrans = 1_000_000, string name = "chnl_fifo_test");
      super.new(ntrans, name);
      foreach(agent[i]) begin
        this.agent[i].init.set_idle_cycles(0); // fifo 的idle_cycles=0
      end
      $display("%s configured objects", this.name);
    endfunction
    task run();
      $display("%s started testing DUT", this.name);
      fork: fork_all_run
        agent[0].run();
        agent[1].run();
        agent[2].run();
      join_none
      $display("%s: 3 agents running now", this.name);

      $display("%s: waiting 3 channel fifos to be full", this.name);
      fork
        wait(agent[0].vif.ch_margin == 0);
        wait(agent[1].vif.ch_margin == 0);
        wait(agent[2].vif.ch_margin == 0);
      join
      $display("%s: 3 channel fifos have reached full", this.name);

      $display("%s: stop 3 agents running", this.name);
      disable fork_all_run;
      $display("%s: set and ensure all agents' initiator are idle state", this.name);
      fork
        agent[0].init.chnl_idle();
        agent[1].init.chnl_idle();
        agent[2].init.chnl_idle();
      join

      $display("%s waiting DUT transfering all of data", this.name);
      fork
        wait(agent[0].vif.ch_margin == 'h20);
        wait(agent[1].vif.ch_margin == 'h20);
        wait(agent[2].vif.ch_margin == 'h20);
      join
      $display("%s: 3 channel fifos have transferred all data", this.name);

      $display("%s finished testing DUT", this.name);
    endtask
endclass: chnl_fifo_full_test

接口的连接是通过 chnl_initiator, chnl_agent, chnl_root_test  连接的,接口函数如下:

总结:

实例化是从顶层开始,从上到下

整个实验结构是:

 

MCDT 实验代码 (验证入门基础)
08-06
实验代码的主要目标是帮助学生了解什么是设计功能描述文档,并且在理解设计描述的同时,能够结合设计文件(Verilog 实现),在展开实验之前,可以一方面回顾 Verilog 的知识,另外一方面认识 MCDF 的结构。...
MCDF-实验2
changshengqiu的博客
02-17 1278
结构建立:注意一定要有接口,否则无法发送激励和监测激励 验证环境建立的三个步骤 1.结构 2.接口传递、组件连接 3.运行 在类里面,声明接口的指针一定要用virtual关键词 没有延迟 上升沿后1ns驱动 fork join相关知识。首先forkjoin内部语句时并行执行。 1.forkjoin:当forkjoin内部全部执行完之后,才会继续往下顺序执行; 2.forkjoin_none:forkjoin_none...
MCDF实验2:冰雨的风暴(从verilog到SV的入门lab2)
jackack的博客
10-20 1210
实验1,通过A产生动态数组并赋值给B,B再传给c,完成了激励的发送。总体来说很容易上手。而在实验2产生数据的方式、赋值的方式变为了抽象的概念,对于初学者可能不是很好理解,但你看完这篇文章,不会都难。
【SV练习】MCDF实验2
托马斯的博客
06-21 875
MCDF实验2练习
MCDF实验——Lab2
qq_39794062的博客
02-07 9477
Lab2主要是使用之前学习的接口、仿真开始和结束、类以及包的使用,来优化Lab1的验证结构。将逐渐从使用硬件盒子过渡到使用接口和软件盒子(class)来验证设计
MCDF实验2
Ethan567的博客
08-18 616
MCDF实验2
mcdf sv_lab5代码
08-16
mcdf sv_lab5代码
路科V2实验四分析与详解(内看代码和思路)
06-14
内置选做和必做的的实验, 层层递进,逐步了解验证的结构,通俗易懂。 逐步实现了sv向uvm结构的过渡。 适合刚入门的小白, 作为System Verilog的学习值得推荐, 动手能力迅速提升。 注明: 本实验所用软件Questa ...
路科mcdf_svlab4代码(更新轮询仲裁机制以及大多数测试)
05-05
已经更新了完整性测试、寄存器读写测试、寄存器稳定性测试、数据通道开关检查、优先级测试、下行从端低带宽测试等。 其中,设计代码更新了arbiter,添加了轮询仲裁机制。 注意,这个代码是在svlab5的基础上更新的,...
apb mcdf验证环境代码
最新发布
09-11
2. **MCDF模型**:这是核心设计的抽象,它反映了MCDF系统如何处理APB总线上的数据和控制信号。这个模型可以是功能模型,用于检查逻辑正确性,也可以是性能模型,用于评估带宽和延迟。 3. **激励生成器(Testbench)...
MCDF.zip_MCDF verilog_forgotten87z_mcdf_mcdf设计_verilog hdl
07-14
设计一个多动能选择器,完整verilog代码
电力电子转战数字IC20220818day63——uvm入门实验5
weixin_39668316的博客
08-17 1474
寄存器模型忘了个光,重新看看。
【数集项目之 MCDF】(二) 从输入端 slave_FIFO
SuperiorEE的博客
12-12 920
代码主体通过两个always实现,分别是读always和写always,不同于控制寄存器,FIFO是可以同时读写的。但是,上一章也提到,由于位宽限制,除了64之外的余量都按照其本身表示,而64表示为63.综合以上逻辑,代码如下所示。的作用是跟外界(即发送数据的模块,这个不再我们设计的范围内)通信,告诉它这个数据并没有接收,让其重新发送。由于除了从端的输入复位之外,还有通道使能和复位有关,因此FIFO的复位信号应该是以上两个信号相与。注意读写的条件,除了读写有使能之外,还要满足读的时候非空,写的时候非满。
MCDF实验_lab0(0)
baidu_36202094的博客
06-21 1220
SV实验0
MCDF——基于uvm入门与进阶实验2的总结
IC小白的成长之路
07-09 1462
前言:在MCDF—uvm入门进阶实验2中,从SV验证平台转化为UVM时,接口的传递与各个组件的运行是如何展开的,SV与UVM的不同之处。
MCDF实验_lab2(2)
baidu_36202094的博客
06-21 1078
MCDF实验
SystemVerlg : wait fork和disable fork的作用范围
热门推荐
xuan的博客
03-16 1万+
https://www.chipverify.com/systemverilog/systemverilog-wait-fork wait fork会阻塞调用它的进程,直到该父进程的所有子进程结束。 能够建立进程的只有initial块,always块,fork语句, begin块不能创建进程 即使该wait fork语句是在父进程的调用的任务中,若是该任务不是由fork, always, init...
mcdf实验
qq_28541715的博客
01-29 1385
MCDF实验 一、MCDF功能描述 二、设计结构 三、接口描述 1、系统信号接口 2、通道从端接口 3、整形器接口 4、控制寄存器接口 四、接口时序 1、通道从端接口时序 2、整形器接口时序 3、控制寄存器接口时序 五、寄存器描述 1、地址0x00 通道1控制寄存器 32bits 读写寄存器 2、地址0x04 通道2控制寄存器 32bits 读写寄存器 3、地址0x08 通道3控制寄存器 32bits 读写寄存器 4、地址0x10 通道1状态寄存器 32bits 只读寄存器 5、地址0x14 通道2状态寄存
#systemverilog# 进程控制问题#(四)关于disable fork 陷阱篇2
那么菜的博客
05-27 1325
​加上fork begin - end join后,task fork_join_any_test()中有三个线程,分别是thread_parent, thread-1和thread-2, 而 thread-1和thread-2属于thread_parrent的子线程,这样task tick()中的线程则和thread_parrent同组,当杀死 thread-1和thread-2时,tick()则不会受到影响。如下例,第一个进程结束,其他进程则不执行,跳出fork,执行下面的语句。
MCDF入门实验:安装与Verilog验证基础
2. **Verilog设计与模块交互**:通过阅读MCDF的Verilog实现,你需要理解各个模块的功能、连接方式以及它们之间的交互,这对于模块级的测试和验证至关重要。 3. **仿真工具实践**:在Questasim环境中编写和运行代码...
写文章

热门文章

  • 计数器—verilog 22142
  • 同步复位,异步复位同步释放——含verilog代码 6281
  • AMBA总线协议的总结 - APB 4087
  • MCDF实验1 3288
  • 路科验证V0实验lab1总结 2244

分类专栏

  • Verilog手撕代码 1篇
  • 脚本语言 2篇
  • Systemverilog —— UVM 实验项目 12篇
  • 总线协议 1篇
  • systemverilog基础 8篇
  • UVM基础 3篇
  • 数电基础 1篇
  • verilog基础 1篇

最新评论

  • 计数器—verilog

    IC天然居士: 我这能看到啊

  • 计数器—verilog

    哇哇哇咔咔咔咔: 为什么第一个波形显示不出来啊

  • MCDF实验3

    太阳0108: chnl_generator搬出 agent 搬到 test 中,更好的实现test中对generator的配置

  • MCDF实验4(3)

    闰土icer: 为什么没有reg_pkg的?

  • MCDF 实验4 (1)

    闰土icer: 我请问一下,就是为什么是fifo的深度余量大于数据包个数,fifo不是有自己的宽度吗?不应该是宽度乘深度大于数据包32位乘数据包个数嘛。

大家在看

  • 【网络基础知识】详解HTTP协议
  • vue如何挂载路由 288
  • 示波器使用基础
  • Python 虚拟环境安装使用(Anaconda 完整实操版) 1119
  • Scrapy爬取链家数据(二):爬取小区详细信息

最新文章

  • Feko 求解半空间遇到的问题
  • Linux命令操作
  • 正则表达式
2023年1篇
2022年31篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

天下网标王潍城区网站推广优化金利搜索引擎网站优化公司深圳网站排名优化软件湘乡网站优化SEO推广网络排名嵊州网站优化公司排名网站优化重要方向网站优化标题重要吗要如何写西双版纳搜索引擎优化网站邯郸家居行业网站优化推广可靠吗温州行业网站优化收费情况三亚网站优化多少钱蚌埠网站长尾关键词优化网站自然排名优化一竹科技网站建设优化保定网站优化托管怎么收费云浮网站优化案例网站搜索优化选择兴田德润深圳网站优化靠谱的网站优化师工资待遇上城区网站优化加盟宜昌本地网站优化公司网站SEO优化和百度竞价昆山网站优化哪家强深圳网站的优化台州网站优化地址淮北网站优化哪家效果好广州代办排名优化网站哪家效果好天津网站制作推广优化优化网站排名靠谱吗伦敦网站优化广告香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化