【【简单systyem verilog 语言学习使用三--- 新新adder加法器-覆盖率测试】】

顶层文件 adder.v

module  adder (input                    clk      ,input                    rst_n    ,input         [3 : 0]    in_0     ,input         [3 : 0]    in_1     ,input                    sel      ,   // 判断信号 output        [4 : 0]    out0     ,output        [4 : 0]    out1     ,output   reg  [4 : 0]    out2);always@(posedge clk or negedge rst_n )beginif(rst_n == 0)beginout2  <=  0    ;endelsebeginout2  <=  in_0 + in_1 ;endendassign  out1   = sel?  in_1 : 0  ;  assign  out0   = sel?  in_0 : 0  ; endmodule  

tb文件

// 输入 常规class的定�? -- 仅仅为了好玩
class play;static int count = 0;int id;logic [2:0] ina;logic [5:0] func_a;int arr[6] = '{0, 1, 2, 3, 4, 5};// 构�?�函�?function new();this.id = count++;endfunction// 打印数组�?task showk();foreach (arr[i])beginint k = arr[i];$write("%d\n", k);endendtask// 功能函数function int shown_a(int a);func_a = a + a;$display("function shown_a number is %d", func_a);return func_a;endfunction
endclass//------------------------------------------------
// Transaction 类定�?
class Transaction;rand bit [3:0] ina; // 输入信号arand bit [3:0] inb; // 输入信号brand bit sel;       // 选择信号function new();ina = 0;inb = 0;sel = 0;endfunction
endclass// 定义覆盖�?
covergroup CovPort(ref Transaction tr, input logic [3:0] in_0, input logic [3:0] in_1);coverpoint tr.ina; // �?�? inacoverpoint tr.inb; // �?�? inbcoverpoint tr.sel; // �?�? selcoverpoint in_0  ;coverpoint in_1  ;
endgroup// 定义基类
virtual class driver_back;virtual task post_tx(ref Transaction tr, input logic [3:0] in_0, input logic [3:0] in_1);endtaskendclass// 扩展 driver_back,添加覆盖组逻辑class CoverageCallback extends driver_back;CovPort cov;// 构造函数,初始化覆盖组function void init_cov(ref Transaction tr, input logic [3:0] in_0, input logic [3:0] in_1);cov = new(tr,in_0,in_1);endfunction// 回调任务:触发采样virtual task post_tx(ref Transaction tr, input logic [3:0] in_0, input logic [3:0] in_1);cov.sample();  // 触发覆盖组采样$display("Coverage sampled: ina=%0d, inb=%0d, sel=%0d", tr.ina, tr.inb, tr.sel);endtask// 打印单个点的覆盖率function void report_coverage();real coverage_in_0, coverage_in_1;// 获取整个覆盖组的覆盖率coverage_in_0 = cov.get_coverage();  // 获取整个CovPort的覆盖率coverage_in_1 = cov.get_coverage();  // 可以重复同样的方式获取每个coverpoint的覆盖// 打印覆盖率$display("Coverage for in_0: %0.2f%%", coverage_in_0 );$display("Coverage for in_1: %0.2f%%", coverage_in_1 );endfunctionendclass// 定义模块module test();// 端口定义logic clk;logic rst_n;logic [3:0] in_0;logic [3:0] in_1;logic sel;         // 判断信号logic [4:0] out0;logic [4:0] out1;logic [4:0] out2;logic [5 : 0] result_b ;logic [5 : 0] result_a ;// 类定义Transaction tr;CoverageCallback cb;play inst_a, inst_b;// 时钟生成initialbeginclk = 0;forever#5 clk = ~clk;end// DUT(设备模块)adder u_adder (.clk(clk),.rst_n(rst_n),.in_0(in_0),.in_1(in_1),.sel(sel),.out0(out0),.out1(out1),.out2(out2));// 驱动 Transaction 信号到 DUTalways @(posedge clk or negedge rst_n)beginif (!rst_n)beginin_0 <= 0;in_1 <= 0;sel  <= 0;endelsebeginin_0 <= tr.ina;in_1 <= tr.inb;sel  <= tr.sel;endend// 测试逻辑initialbeginrst_n = 0;inst_a = new();inst_b = new();$display("inst_a id = %d", inst_a.id);$display("inst_b id = %d", inst_b.id);// 调用 showk 打印数组inst_a.showk();inst_b.showk();// 调用 shown_a 进行测试result_a = inst_a.shown_a(5); // 示例输入值为 5$display("inst_a.shown_a(5) result = %d", result_a);result_b = inst_b.shown_a(10); // 示例输入值为 10$display("inst_b.shown_a(10) result = %d", result_b);#20 rst_n = 1;// 实例化 Transaction 和 CoverageCallbacktr = new();cb = new();cb.init_cov(tr,in_0,in_1);// 随机化并进行覆盖率采样repeat (10)beginassert(tr.randomize());cb.post_tx(tr,in_0,in_1);  // 触发采样#20;  // 增加延迟以等待 DUT 输出稳定$display("DUT Outputs: out0=%0d, out1=%0d, out2=%0d", out0, out1, out2);end// 打印覆盖率报告cb.report_coverage();endendmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20478.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

PHP开发全新UI多语言多商户跨境商城源码、支持一键铺货、一键下单

商家可在平台产品库选品&#xff0c;一键铺货到自己商店&#xff0c;用户下单后&#xff0c;商家提交订单给平台&#xff0c;扣除商家供货价所需余额&#xff0c;提交后由平台发货&#xff0c;收货后订单金额结算给商家. 源码开源完整&#xff0c;一切能跑通的逻辑流程都可以二…

Matlab实现北方苍鹰优化算法优化随机森林算法模型 (NGO-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 北方苍鹰优化算法&#xff08;Northern Goshawk Optimization, NGO&#xff09;是一种新颖的群智能优化算法&#xff0c;灵感源自北方苍鹰捕食时的策略。该算法通过模拟苍鹰的搜寻、接近和捕捉猎物的行为模式&am…

【TQ2440】01 ADS1.2 安装

TQ2440是一款基于Samsung S3C2440处理器的ARM9开发板&#xff0c;广泛应用于嵌入式系统学习和开发 TQ2440 开发配套资料 https://pan.baidu.com/s/1cMMK9HQdq1Ou8-K9fnw-DA?pwd5y5r ADS1.2安装包链接&#xff1a;https://pan.baidu.com/s/1BBJb4jYKLOYXIMD86WCycA?pwdf7zr 1、…

不完全微分PID控制算法

不完全微分PID控制算法是一种改进的PID控制方法&#xff0c;主要针对PID控制中的微分环节对高频噪声敏感的问题。通过对微分项进行优化和改造&#xff0c;减少其对噪声的放大作用&#xff0c;同时保留对系统动态变化的响应能力。 不完全微分PID控制原理 不完全微分的核心思想是…

IntelliJ IDEA常用快捷键

文章目录 环境快捷键外观编辑移动光标提示查找Live Templates列操作调试运行 环境 Ubuntu 24.04.1IntelliJ IDEA 2024.1.6 快捷键 外观 Alt 1&#xff1a;打开/关闭“项目”窗口&#xff08;即左边的导航窗口&#xff09; Alt 4&#xff1a;打开/关闭“运行”窗口 Alt …

标题gitLab如何打标签

标题gitLab打标签 1、首先进入到项目里面&#xff0c;找到Repository下的Tages&#xff0c;点击进入 如果是还没有创建过标签&#xff0c;会提示如何用命令创建 git tag -a v1.4 -m "version 1.4"2、也可以直接在界面创建&#xff0c;点击new Tag按钮 3、填写标签…

C++AVL平衡树

1.AVL平衡树节点定义 每一个节点都配左右孩子和父节点&#xff0c;以及平衡因子和其所对应的值。 template<class K, class V> struct AVLTreeNode {// 需要parent指针&#xff0c;后续更新平衡因子可以看到pair<K, V> _kv;AVLTreeNode<K, V>* _left;AVLTr…

Java进阶四-异常,File

异常 概念&#xff1a;代表程序出现的问题。 目的&#xff1a;程序出现了异常我们应该如何处理。 最高父类&#xff1a;Exception 异常分为两类 编译时异常&#xff1a;没有继承RuntimeException的异常,直接继承与Exception,编译阶段就会错误提示。运行时异常:RuntimeExc…

向量数据库FAISS之四:向量检索和 FAISS

来自 YouTube 1.相似度搜索的传统方法(Jaccard, w-shingling, Levenshtein) 1.Jaccard 距离 公式 Jaccard ( A , B ) 1 − ∣ A ∩ B ∣ ∣ A ∪ B ∣ \text{Jaccard}(A, B) 1 - \frac{|A \cap B|}{|A \cup B|} Jaccard(A,B)1−∣A∪B∣∣A∩B∣​ 其中&#xff0c; A 和 …

Stata17最新保姆级安装教程【附安装包】

文章目录 Stata介绍 Stata下载 Stata安装步骤 Stata介绍 Stata 是一套提供其使用者数据分析、数据管理以及绘制专业图表的完整及整合性统计软件。它提供许许多多功能&#xff0c;包含线性混合模型、均衡重复反复及多项式普罗比模式等。 Stata下载 Stata 64位下载链接&…

jenkins离线安装插件

Jenkins 在线安装插件失败 报错&#xff1a; Caused: java.io.IOException: Failed to load https://updates.jenkins.io/download/plugins/login-theme/244.vd67c77f0c4c8/login-theme.hpi to /var/jenkins_home/plugins/login-theme.jpi.tmpat hudson.model.UpdateCenter$Up…

人工智能学习——前言

一、概论理解 首先何为人工智能&#xff1f;简单一句人话就是&#xff1a;人工操纵搭建出来的智能学习模型 那我们要用它干什么&#xff1f;简单一句话就是&#xff1a;我们给出指令 ——> 得到想要的结果 最简单的生活例子来看&#xff1a;就好比小狗&#xff0c;我们让它…

C++11——异常

1.异常概念 异常是一种处理错误的方式&#xff0c;当一个函数发现自己无法处理的错误时就会抛出异常&#xff0c;让函数的调用者处理这个错误 throw&#xff1a;当出现问题时&#xff0c;程序会抛出一个异常&#xff0c;通过 throw 来完成catch&#xff1a;catch 关键字捕获异…

腾讯:将LLM排序能力迁移至BERT

&#x1f4d6;标题&#xff1a;Best Practices for Distilling Large Language Models into BERT for Web Search Ranking &#x1f310;来源&#xff1a;arXiv, 2411.04539 &#x1f31f;摘要 &#x1f538;最近的研究强调了大型语言模型&#xff08;LLM&#xff09;作为零样…

unity 打包WebGL打开后Input无法输入中文,在手机端无法调用输入法(使用WebGLInput)

成果展示 1、只是在电脑上运行时 使用TexMeshPro-InputField组件就可以输入中文了 2.不仅在电脑上运行&#xff0c;还需要在移动端运行 这个时候就需要使用WebGLInput插件&#xff0c;连接里有测试demo 1、下载后把WebGLSupport.unitypackage 导入到工程里 2、给input添加两…

服务器上部署并启动 Go 语言框架 **GoZero** 的项目

要在服务器上部署并启动 Go 语言框架 **GoZero** 的项目&#xff0c;下面是一步步的操作指南&#xff1a; ### 1. 安装 Go 语言环境 首先&#xff0c;确保你的服务器上已安装 Go 语言。如果还没有安装&#xff0c;可以通过以下步骤进行安装&#xff1a; #### 1.1 安装 Go 语…

如何通过统一权限管理打破异构系统的安全屏障

企业在运营过程中面临着众多异构系统的整合挑战&#xff0c;这些异构系统由于其不同的技术架构、数据格式和安全机制等&#xff0c;给信息管理带来了诸多挑战。其中&#xff0c;“信息孤岛”问题尤为突出&#xff0c;而异构环境下的统一授权管理系统则成为解决这一问题的关键。…

【IDEA】插件篇(JClassLib)

一、JClassLib 1、概述 jclasslib 字节码编辑器是一个可视化已编译Java类文件和包含的字节码的工具。 项目地址&#xff1a;https://github.com/ingokegel/jclasslib 其他反编译工具&#xff1a;javap、arthas 2、安装 IntelliJ IDEA -> Preferences -> Plugins&am…

机器学习阶段学习Day31

KNN分类算法 KNN算法原理 根据K个邻居样本来判断当前样本属于哪个类别&#xff1a;K个最相似邻居中大多数所属类别即为当前样本的类别。但是对于数据量巨大或者高纬度的数据样本不太合适&#xff0c;数据量大的数据样本需要进行大量计算&#xff0c;而高纬度数据计算距离不具…

深入理解前端路由

目录 前言1. 什么是路由2. Vue Router 的基础2.1 安装 Vue Router2.2 创建路由器2.3 在应用中使用 Vue Router 3. 路由切换与编程式导航3.1 声明式导航3.2 编程式导航 4. 子路由&#xff1a;结构化的路由管理4.1 子路由的定义4.2 子路由的渲染 5. 高级用法&#xff1a;路由守卫…