uvm_primer ch3 BFM

  • uvm_primer ch3 BFM
    • ch3.1补充一个sv的知识点, interface
    • ch3.2传递接口
    • ch3.3task和function区别

uvm_primer ch3 BFM

把不同功能的code写到一个文件,随着工程增加 代码修改维护复用将来都是难题;
好的代码应该是解耦合的,弹性的, 可复用的

ch3.1补充一个sv的知识点, interface

这个是一个类似java的概念,java中也有interface;
主要在其中定义接口相关的一个信号;还可以在其中使用iniitial block;
interface在其中定义和接口强相关的一些task,把信号和方法封装起来; 这个时候interface就类似class了;
下边的task reset_alu();一个是驱动reset_n的task;
一个是驱动 A B op的task;
interface 可以在面向对象(OO) 中类似做一个声明,然后直接把接口传递到其他module;

interface tinyalu_bfm;import tinyalu_pkg::*;byte         unsigned        A;byte         unsigned        B;bit          clk;bit          reset_n;wire [2:0]   op;bit          start;wire         done;wire [15:0]  result;operation_t  op_set;assign op = op_set;initial beginclk = 0;forever begin#10;clk = ~clk;endendtask reset_alu();reset_n = 1'b0;@(negedge clk);@(negedge clk);reset_n = 1'b1;start = 1'b0;endtask : reset_alutask send_op(input byte iA, input byte iB, input operation_t iop, output shortint alu_result);....endtask
endinterface

ch3.2传递接口

module top;tinyalu_bfm    bfm();  //interfacetester     tester_i    (bfm);coverage   coverage_i  (bfm);scoreboard scoreboard_i(bfm);tinyalu DUT (.A(bfm.A), .B(bfm.B), .op(bfm.op), .clk(bfm.clk), .reset_n(bfm.reset_n), .start(bfm.start), .done(bfm.done), .result(bfm.result));
endmodule : top
module tester(tinyalu_bfm bfm);  //接口传进来import tinyalu_pkg::*;function operation_t get_op();bit [2:0] op_choice;op_choice = $random;case (op_choice)3'b000 : return no_op;3'b001 : return add_op;3'b010 : return and_op;3'b011 : return xor_op;3'b100 : return mul_op;3'b101 : return no_op;3'b110 : return rst_op;3'b111 : return rst_op;endcase // case (op_choice)endfunction : get_opfunction byte get_data();bit [1:0] zero_ones;zero_ones = $random;if (zero_ones == 2'b00)return 8'h00;else if (zero_ones == 2'b11)return 8'hFF;elsereturn $random;endfunction : get_datainitial beginbyte         unsigned        iA;byte         unsigned        iB;operation_t                  op_set;shortint     result;bfm.reset_alu();   //调用接口中定义的函数repeat (1000) begin : random_loopop_set = get_op();iA = get_data();iB = get_data();bfm.send_op(iA, iB, op_set, result);  //调用接口中定义的函数end : random_loop$stop;end // initial begin
endmodule : tester

把ch2 中在一个文件中的按照功能 ,写成几个文件

  • scoreboard.sv 检查结果
  • tester.sv 产生激励
  • coverage.sv 检查覆盖率

ch3.3task和function区别

  1. task是消耗仿真时间的,function不能消耗仿真时间
  2. funciton中不能用类似#5 ;@(negdge clk) 这种消耗仿真时间的语句
  3. task中可以调用其他function, function中不能调用task

uvm_primer ch3 BFM笔记相关推荐

  1. 视觉SLAM十四讲 ch3 Ubuntu18.04 KDevelop的使用及Eigen实践 入门笔记

    视觉SLAM十四讲 ch3 Ubuntu18.04 KDevelop的使用及Eigen实践 入门笔记 一.创建KDevelop项目 二.编写程序 一.创建KDevelop项目 你的电脑上如果还没有安装 ...

  2. 《图解机器学习-杉山将著》读书笔记---CH3

    CH3 最小二乘学习法 重点提炼 提出最小二乘学习法的缘故: 最小二乘学习法公式 对不同模型进行最小二乘法学习,得到最小二乘公式中的参数theta: 1.线性模型   代入3.1公式,对参数求偏导,偏 ...

  3. 边缘分布律_概率论笔记-Ch3随机向量及其分布

    本节包括: 随机向量的基础定义 多元正态分布 随机向量函数的分布 条件分布和条件密度 基础定义 随机向量 设 为定义在概率空间 的随机变量,则 为 上的 n维随机向量 为 的 联合分布 为 的 边缘分 ...

  4. 【学习笔记】《数据挖掘:理论与算法》CH3 从贝叶斯到决策树

    分类问题 分类是一种有监督的学习 贝叶斯定理:头痛和流感的关系 朴素贝叶斯分类 为何朴素? 需要假设条件独立 何为条件独立? 肺癌和性别的关系,不能简单说男性得肺癌的概率大于女性,需要考虑得肺癌的条件 ...

  5. 视觉SLAM十四讲 ch3 (三维空间刚体运动)笔记

    本讲目标 ●理解三维空间的刚体运动描述方式:旋转矩阵.变换矩阵.四元数和欧拉角. ●学握Eigen库的矩阵.几何模块使用方法. 旋转矩阵.变换矩阵 向量外积 向量外积(又称叉积或向量积)是一种重要的向 ...

  6. 视觉SLAM十四讲(高翔版本),ch3章节部分笔记

    目标:理解slam的框架以及它的理论知识.供以后自己查阅. 第三章:主要讲一些基本的数学知识,包括点,向量,旋转矩阵三大类,高翔老师图文并用的方式讲的非常清晰. 第一部分 点 点需要在某个坐标系下的表 ...

  7. 软件质量保证与测试笔记——江湖救急版

    软件质量保证与测试笔记--江湖救急版 Powered by DZY 以下部分图片来源于老师课件,仅供学习交流使用,侵权致删! Ch1 软件质量与测试概念 软件质量的定义 软件质量是"反映实体 ...

  8. c语言字母表关键字,读书笔记-C语言关键字

    001 关键字 C语言一共32个关键字 1. 声明和定义 在开始认识关键字前,必须要明白什么是声明,什么事定义: 定义:(编译器)创建一个对象,为这个对象分配一段内存并给他取上一个名字.在一个作用域内 ...

  9. 2018.8.14-C++复习笔记总

    2018.8.14-C++复习笔记总 // CPPTEST.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iost ...

  10. 【Python-pywt】 小波变化库—Pywavelets 学习笔记

    (转载) [Python ]小波变化库--Pywavelets 学习笔记_nanbei2463776506的博客-CSDN博客 https://blog.csdn.net/nanbei24637765 ...

最新文章

  1. php gzipstream,c# – 在WebRequest中发送gzip数据?
  2. 一个云服务器可以部署多个项目吗,云服务器可以部署多个项目
  3. 计算机视觉与深度学习 | 相机抖动下的目标提取(Faster R-CNN+粒子群优化+图像配准)
  4. 2018年第九届蓝桥杯 - 省赛 - Java大学A组 - A.复数幂
  5. Win7无线网络和有线网络网络负载选择
  6. Community Server专题八:MemberRole之Membership深入篇 [转]
  7. 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图
  8. 当集合a为空集时a的取值范围_1.2 集合间的基本关系20202021学年高一数学新教材配套学案(人教A版必修第一册)...
  9. 开课吧:MySQL索引的使用知识有哪些?
  10. Axure基础教程:产品流程图的制作方法详解
  11. 基于广度优先搜索的哈密顿图的判断算法
  12. PHP 网页支付支付宝支付接口对接
  13. R语言非度量多维标尺排序NMDS及一般加性模型GAM映射教程
  14. CF1071C. Triple Flips
  15. Blender建模基础(二):建模篇
  16. 前端杂烩——在工作,在思考,在沉淀
  17. 【Android Test】糟心的“Empty test suite ”异常
  18. 八字神煞合婚算法,看看自己中了几枪
  19. Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要
  20. 聋人大学生终于开通了CNSD博客,CNSD在这里记录自己成长

热门文章

  1. 安卓入门教程(十五)- Fragment,Service,WAMP下载
  2. git lab提交记录中有 merge branch ‘xxx‘ of of http:xxx into xxx
  3. 信号与系统之(二)傅里叶级数和傅里叶变换
  4. Win系统使用WSL子系统Linux启动vGPU增强图形性能加速OpenGL
  5. 中产需要盒马,盒马想要下沉
  6. win10 启用.net 3.5 iis错误0x800f081f
  7. python禅语_但行好事,莫问前程,如何理解?
  8. element-ui el-table 表格疯狂抖动
  9. 分清cols和rows,x与y,以及width和height的关系
  10. 笛卡尔空间力反馈的关节速度控制之机器人运动学库KDL安装及使用