目录

fmt_pkg.sv 代码分析

fmt_pkg.sv 中的 fmt_driver

do_consume() 的代码解析 ​

do_receive()  的代码解析

do_config() 的代码解析


fmt_pkg.sv 代码分析

fmt_pkg.sv 中的 fmt_driver

driver 分为 inititator 和 responder, 之前的 chnl_driver 和 reg_driver 都是 initiator 发送数据或者指令, 而 formatter 的 driver 是一个 接收数据的 从端 slave, 所以我们的 driver 类似要模仿一个 fifo 缓冲数据,而且 fifo 的位宽可大可小。

我们 fifo 接收来自 formatter 的数据,并把它按照我们 fifo 的位宽发送出去,实现缓冲,我们的 fifo 在接收数据时 , 只要按照 formatter的时序, 控制 fmt_grant 和接收数据即可。

对于收到 来自 formatter 的 req 请求, 我们给出 grant=1 同意发送数据,而 formatter 的 位宽,深度和 我们的 fifo 不一致 ,当上大下小, 我们的 grant 发送的就慢一些,可能要经过好几拍, 当上小下大, 我们的 grant 就发送的快一些,只有当上小下大时,才可以在 req 拉高之后的 下一拍 把 grant 拉高 。这样可以在下一步继续实现对formatter 的功能验证。

其中, driver 中的 do_receive() 和 do_consume() 如下图所示:

do_consume() 的代码解析

do_consume() 也就是按照 我们给 fifo 的带宽  不断地往下流出数据

do_receive()  的代码解析

do_receive() 也就是按照formatter 的时序,不断(forever)的接收数据,当grant=1,代表我们同意接收来自formatter的数据,按照数据包的长度往fifo里放数据。

给 formatter 发送 grant = 1 的 条件是 fifo 内部的余量 大于 来自formatter的 数据 (我理解的也就是 fifo 的深度余量 和 来自formatter数据包的长度)

也就是 ( this.fifo_bound - this.fifo.num() ) >=   intf.fmt_length

提醒一下自己: fifo 是个 mailbox, 回顾mailbox的 相关函数, fifo.new() 创建一个信箱实例,fifo.put() 往信箱里放数据, fifo.get()/fifo.peek() 从信箱里拿数据,get()/peek() 是阻塞的拿, 拿不到会一直等着, fifo.try_put() fifo.try_get()/fifo.try_peek()都是非阻塞, 放不进去或者拿不到都返回0,

fifo.num() 返回信箱里的数据的数量。

do_config() 的代码解析

do_config 里面对 fifo 进行了 new() ,  为什么还要在 driver 的 构造函数里 再进行一次 new?有必要吗?

答: 引用这个博主写的很详细路科验证MCDF_svlab4笔记_Hardworking_IC_boy的博客-CSDN博客_路科验证

  • 这个问题有个假设,就是do_config需要存在,也就是你需要一开始就进行配置。但是这个假设并不是一直成立的。有时候是没有do_config的,比如有一些组件是作为slave,他不可能每次接收master的数据都事先配置。
  • 这种情况下,你就没有办法通过req_mb得到req,也就不知道req.fifo,没法得到fifo_bound,因此也就无法根据fifo_bound的大小来对fifo进行new,那么fmt_pkg也就不工作了,没法模拟下行。
  • 事先例化fifo,其实就相当于一个初始值,让fmt_pkg在没有配置的时候也能工作。
  • 此处fifo_bound设置为4096,以及data_consum_peroid设置为1,只是为了让FIFO的空间比较大,消化数据比较快,那么当fmt发送req时,fmt_pkg模拟的下行能够更快地让grant拉高。
  • 也就是说,这里将fifo_bound设置成4096并不是一个硬性的要求,也可以是其他的数值,比如64、256等等,目的都是为了更快地让grant拉高。
  • 不探究fifo_bound和data_consum_peroid的影响时,就选一个最好的值就行了。等需要探究了,再特地改变他们的值。(比如下行从端低带宽测试就是探究低带宽带来的影响)

MCDF 实验4 (1)相关推荐

  1. MCDF实验4(4)

    目录 引言:接着上篇的MCDF实验4(3),解释一下添加的检查 1)通道 en=0 时的检查 2)arbiter 的仲裁功能的检查 在tb.sv 中 连接信号 引言:接着上篇的MCDF实验4(3),解 ...

  2. MCDF实验——Lab4

    在之前的Lab3中,通过一个初具规模的MCDT的验证环境,学习到: 验证环境按照隔离的观念,应分为硬件DUT,软件验证环境,和处于信号媒介的接口interface. 对于软件验证环境,需要经历建立阶段 ...

  3. MCDF实验_lab0(0)

    目录 一.MCDF功能描述[^1] MCDF结构 slave端口时序 formater端口时序 寄存器时序 二.代码分析 时间单位 信号 例化 产生时钟 产生复位 发送激励 三.Questasim的M ...

  4. MCDF实验_lab1(1)

    目录 一.问题 二.实验要求 三.代码分析 时间单位 信号 例化 产生时钟 产生复位 发送激励模块 产生数据 实例化slave模块 发送激励 三.Questasim的Makefile[^2] 四.波形 ...

  5. MCDF实验——Lab5

    Lab5主要完成如何定义覆盖率,如何从验证计划到测试用例的实现,最后再到覆盖率的量化.验证量化分为代码覆盖率和功能覆盖率. 一.编译 在编译过程中,需要对于设计相关的文件设置额外的覆盖率编译选项. 只 ...

  6. MCDF实验_lab4(4)

    目录 一.框架图 二.代码分析 reg_chnl reg_trans,传输的数据包 reg_generator reg_driver reg_monitor reg_agent fmt_pkg fmt ...

  7. 路科验证MCDF_svlab3笔记

    实验3和实验2的区别(以实验2的tb4和实验3的chnl_pkg和tb为例) 1. chnl_trans变复杂了. 1.1 填充更多的数据. lab2的是实验代码很简单,也没有随机化,只是通过gene ...

  8. IC验证学习笔记(MCDF)实验0-MCDT

    实验0:目标是写出MCDT的程序,也就是slave+fifo+arbiter的部分 最终目标是实现MCDF:MCDF为多通道数据整形器(multi-channel data formatter),它可 ...

  9. 电力电子转战数字IC——路科MCDF全览(持续更新)

    经过两次面试后,对MCDF做一次全面的深入总结. 目前进度:硬件部分的node,fifo,寄存器,formatter,MCDF顶层,APB接口,TB接口 软件部分的chnl_pkg,fmt_pkg,a ...

最新文章

  1. 【优秀作业】粒子群算法(Python)
  2. android 7.0 短信监控,Android 7.0 监听网络变化的示例代码
  3. ios相机黑边_黑边很碍眼很难看 苹果iPhone6黑边有什么用呢?
  4. python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
  5. jQuery使用总结 - Core jQuery Selectors 选择器一2/4
  6. Unity4.6.2发布 支持64位iOS
  7. idea maven 出现:Try-with-resources are not supported at language level ‘5‘
  8. java development kie_java – 直接从存储库加载Drools/KIE Workbench工件
  9. vue全选和取消全选(无bug)
  10. jQuery常用的查找Dom元素方法
  11. Windows XP 所提供的键盘快捷键
  12. 突发 , 谷歌官宣安卓改名了!
  13. Bing翻译和Google翻译的比较
  14. JSch连接SFTP Exception:Algorithm negotiation fail问题解决
  15. 运营支持是干什么_运营|你们运营到底是干什么的?
  16. 计算机语言收入排名,全球人均收入排名美元_计算机语言收入排名
  17. python win32gui模块详解_pythonwin-win32gui 窗口查找和遍历
  18. 卸载神器——IObit Uninstaller
  19. part-4 运放噪声快速计算
  20. 码元速率估计-速率信号法

热门文章

  1. Oracle数据库练习题及答案大全(包含数据库脚本)
  2. 苏嵌//毛丽媛//2018.7.11
  3. 矩阵分解 (乘法篇)
  4. apple 的 app id
  5. rsync - 客户端常用参数
  6. Linux初学运维5
  7. easyexcel获取所有sheet页名称_【EXCEL】如何快速获取所有表格名称
  8. python如何截长图_selenium定时爬取长截图
  9. 深度 | 实景三维与CIM,谁才是时空数据第一底板 三维视频融合 三维投影融合 时空克隆 点卯-魔镜系列
  10. 抽象工厂和工厂方法模式