uvm_primer ch3 BFM笔记
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区别
- task是消耗仿真时间的,function不能消耗仿真时间
- funciton中不能用类似#5 ;@(negdge clk) 这种消耗仿真时间的语句
- task中可以调用其他function, function中不能调用task
uvm_primer ch3 BFM笔记相关推荐
- 视觉SLAM十四讲 ch3 Ubuntu18.04 KDevelop的使用及Eigen实践 入门笔记
视觉SLAM十四讲 ch3 Ubuntu18.04 KDevelop的使用及Eigen实践 入门笔记 一.创建KDevelop项目 二.编写程序 一.创建KDevelop项目 你的电脑上如果还没有安装 ...
- 《图解机器学习-杉山将著》读书笔记---CH3
CH3 最小二乘学习法 重点提炼 提出最小二乘学习法的缘故: 最小二乘学习法公式 对不同模型进行最小二乘法学习,得到最小二乘公式中的参数theta: 1.线性模型 代入3.1公式,对参数求偏导,偏 ...
- 边缘分布律_概率论笔记-Ch3随机向量及其分布
本节包括: 随机向量的基础定义 多元正态分布 随机向量函数的分布 条件分布和条件密度 基础定义 随机向量 设 为定义在概率空间 的随机变量,则 为 上的 n维随机向量 为 的 联合分布 为 的 边缘分 ...
- 【学习笔记】《数据挖掘:理论与算法》CH3 从贝叶斯到决策树
分类问题 分类是一种有监督的学习 贝叶斯定理:头痛和流感的关系 朴素贝叶斯分类 为何朴素? 需要假设条件独立 何为条件独立? 肺癌和性别的关系,不能简单说男性得肺癌的概率大于女性,需要考虑得肺癌的条件 ...
- 视觉SLAM十四讲 ch3 (三维空间刚体运动)笔记
本讲目标 ●理解三维空间的刚体运动描述方式:旋转矩阵.变换矩阵.四元数和欧拉角. ●学握Eigen库的矩阵.几何模块使用方法. 旋转矩阵.变换矩阵 向量外积 向量外积(又称叉积或向量积)是一种重要的向 ...
- 视觉SLAM十四讲(高翔版本),ch3章节部分笔记
目标:理解slam的框架以及它的理论知识.供以后自己查阅. 第三章:主要讲一些基本的数学知识,包括点,向量,旋转矩阵三大类,高翔老师图文并用的方式讲的非常清晰. 第一部分 点 点需要在某个坐标系下的表 ...
- 软件质量保证与测试笔记——江湖救急版
软件质量保证与测试笔记--江湖救急版 Powered by DZY 以下部分图片来源于老师课件,仅供学习交流使用,侵权致删! Ch1 软件质量与测试概念 软件质量的定义 软件质量是"反映实体 ...
- c语言字母表关键字,读书笔记-C语言关键字
001 关键字 C语言一共32个关键字 1. 声明和定义 在开始认识关键字前,必须要明白什么是声明,什么事定义: 定义:(编译器)创建一个对象,为这个对象分配一段内存并给他取上一个名字.在一个作用域内 ...
- 2018.8.14-C++复习笔记总
2018.8.14-C++复习笔记总 // CPPTEST.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iost ...
- 【Python-pywt】 小波变化库—Pywavelets 学习笔记
(转载) [Python ]小波变化库--Pywavelets 学习笔记_nanbei2463776506的博客-CSDN博客 https://blog.csdn.net/nanbei24637765 ...
最新文章
- php gzipstream,c# – 在WebRequest中发送gzip数据?
- 一个云服务器可以部署多个项目吗,云服务器可以部署多个项目
- 计算机视觉与深度学习 | 相机抖动下的目标提取(Faster R-CNN+粒子群优化+图像配准)
- 2018年第九届蓝桥杯 - 省赛 - Java大学A组 - A.复数幂
- Win7无线网络和有线网络网络负载选择
- Community Server专题八:MemberRole之Membership深入篇 [转]
- 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图
- 当集合a为空集时a的取值范围_1.2 集合间的基本关系20202021学年高一数学新教材配套学案(人教A版必修第一册)...
- 开课吧:MySQL索引的使用知识有哪些?
- Axure基础教程:产品流程图的制作方法详解
- 基于广度优先搜索的哈密顿图的判断算法
- PHP 网页支付支付宝支付接口对接
- R语言非度量多维标尺排序NMDS及一般加性模型GAM映射教程
- CF1071C. Triple Flips
- Blender建模基础(二):建模篇
- 前端杂烩——在工作,在思考,在沉淀
- 【Android Test】糟心的“Empty test suite ”异常
- 八字神煞合婚算法,看看自己中了几枪
- Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要
- 聋人大学生终于开通了CNSD博客,CNSD在这里记录自己成长
热门文章
- 安卓入门教程(十五)- Fragment,Service,WAMP下载
- git lab提交记录中有 merge branch ‘xxx‘ of of http:xxx into xxx
- 信号与系统之(二)傅里叶级数和傅里叶变换
- Win系统使用WSL子系统Linux启动vGPU增强图形性能加速OpenGL
- 中产需要盒马,盒马想要下沉
- win10 启用.net 3.5 iis错误0x800f081f
- python禅语_但行好事,莫问前程,如何理解?
- element-ui el-table 表格疯狂抖动
- 分清cols和rows,x与y,以及width和height的关系
- 笛卡尔空间力反馈的关节速度控制之机器人运动学库KDL安装及使用