SystemVerilog测试框架示例
这里是一个完整的SystemVerilog测试框架示例,包括随机化测试和详细注释。
顶层模块 (Top Module)
module top;// 信号声明logic clk;logic rst_n;// 接口实例化dut_if dut_if_inst(.clk(clk), .rst_n(rst_n));// DUT实例化 (假设DUT模块名为'dut')dut u_dut(.clk(dut_if_inst.clk),.rst_n(dut_if_inst.rst_n),.data_in(dut_if_inst.data_in),.data_out(dut_if_inst.data_out),.valid(dut_if_inst.valid),.ready(dut_if_inst.ready));// 时钟生成initial beginclk = 0;forever #5 clk = ~clk;end// 复位逻辑initial beginrst_n = 0;#20 rst_n = 1;end// 实例化并运行测试initial beginTest test_inst = new(dut_if_inst);test_inst.run();#1000 $finish; // 延长仿真时间以观察更多的随机事务end
endmodule
接口 (Interface)
interface dut_if(input logic clk, input logic rst_n);logic [31:0] data_in;logic [31:0] data_out;logic valid;logic ready;
endinterface
事务 (Transaction)
class Transaction;rand logic [31:0] data_in;rand bit valid;function new();endfunction// 添加约束:valid 只能为0或1,data_in 为32位任意值constraint valid_c { valid inside {0, 1}; }constraint data_in_c { data_in inside {[32'h0:32'hFFFFFFFF]}; }// 打印事务内容function void display();$display("Transaction: data_in=%h, valid=%0b", data_in, valid);endfunction
endclass
驱动器 (Driver)
class Driver;virtual dut_if vif;function new(virtual dut_if vif);this.vif = vif;endfunctiontask drive();Transaction tr;forever begin// 生成随机事务tr = new();if (!tr.randomize()) begin$display("Randomization failed!");endtr.display();// 发送事务到DUTvif.data_in <= tr.data_in;vif.valid <= tr.valid;if (tr.valid) beginwait(vif.ready);end@(posedge vif.clk); // 等待下一个时钟周期endendtask
endclass
监视器 (Monitor)
class Monitor;virtual dut_if vif;function new(virtual dut_if vif);this.vif = vif;endfunctiontask monitor();forever begin@(posedge vif.clk);if (vif.valid && vif.ready) begin$display("Data: %h", vif.data_out);endendendtask
endclass
代理 (Agent)
class Agent;virtual dut_if vif;Driver drv;Monitor mon;function new(virtual dut_if vif);this.vif = vif;drv = new(vif);mon = new(vif);endfunctiontask run();forkdrv.drive();mon.monitor();joinendtask
endclass
环境 (Environment)
class Env;virtual dut_if vif;Agent agent;function new(virtual dut_if vif);this.vif = vif;agent = new(vif);endfunctiontask run();agent.run();endtask
endclass
测试用例 (Test Case)
class Test;Env env;function new(virtual dut_if vif);env = new(vif);endfunctiontask run();env.run();endtask
endclass
这个完整的SystemVerilog测试框架包括顶层模块、接口、事务、驱动器、监视器、代理、环境和测试用例,并使用随机化功能生成输入信号。每个模块和类都有详细注释,解释其功能和作用。可以根据具体的DUT和测试需求对代码进行进一步的扩展和修改。
相关文章:
SystemVerilog测试框架示例
这里是一个完整的SystemVerilog测试框架示例,包括随机化测试和详细注释。 顶层模块 (Top Module) module top;// 信号声明logic clk;logic rst_n;// 接口实例化dut_if dut_if_inst(.clk(clk), .rst_n(rst_n));// DUT实例化 (假设DUT模块名为dut)dut u_dut(.clk(du…...
每天一个数据分析题(三百五十六)-图表决策树
图表决策树中将图表分成四类,分别是? A. 比较类 B. 序列类 C. 构成类 D. 描述类 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案...
Prism 入门06,发布订阅(入门完结)
本章节介绍使用 Prism 框架的消息聚合器 IEventAggregator ,实现如何进行消息发布,订阅,取消订阅的功能 继续使用上一章节使用的 Prism WPF 空模板项目 BlankApp1 1.首先,在使用 Prism 框架当中,进行事件消息的发布和订阅之前,需要定义发布事件的事件消息模型。如下所示:…...
2. pytorch环境安装
概述 本文提供基于Anaconda环境Windows11操作系统的Pytorch深度学习环境的配置。深度学习环境分为GPU和CPU两大部分。使用GPU进行环境配置,需要保证电脑配有独立显卡,并且显卡驱动安装正常,详情见前文。 1. 创建新的虚拟环境用来配置Pyt…...
力扣爆刷第148天之贪心算法五连刷(区间合并)
力扣爆刷第148天之贪心算法五连刷(区间合并) 文章目录 力扣爆刷第148天之贪心算法五连刷(区间合并)一、406. 根据身高重建队列二、452. 用最少数量的箭引爆气球三、435. 无重叠区间四、763. 划分字母区间五、56. 合并区间六、738.…...
JSON及Python操作JSON相关
JSON及Python操作JSON相关 Json简介及Python操作Json相关示例。 1. JSON概念及支持的数据类型 1.1 什么是 JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解…...
[ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)
🏡作者主页:点击! 🤖网络通信基础TCP/IP专栏:点击! ⏰️创作时间:2024年6月8日14点23分 🀄️文章质量:94分 前言—— 在现代通信网络中,传输介质是数据传…...
Android 高德地图API(新版)
新版高德地图 前言正文一、创建应用① 获取PackageName② 获取调试版安全码SHA1③ 获取发布版安全码SHA1 二、配置项目① 导入SDK② 配置AndroidManifest.xml 三、获取当前定位信息① ViewBinding使用和导包② 隐私合规设置③ 权限请求④ 初始化定位⑤ 获取定位信息 四、显示地…...
LeetCode---二叉树
144/94/145. 二叉树的前、中、后序的递归遍历 以中序遍历为例,其余类似: 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 代码示例: /*** Definition for a binary tree node.* struct TreeNode {* int val;* Tr…...
从0开发一个Chrome插件:核心功能开发——弹出页面
前言 这是《从0开发一个Chrome插件》系列的第十一篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发Chrome插件的必…...
AIGC笔记--Stable Diffusion源码剖析之UNetModel
1--前言 以论文《High-Resolution Image Synthesis with Latent Diffusion Models》 开源的项目为例,剖析Stable Diffusion经典组成部分,巩固学习加深印象。 2--UNetModel 一个可以debug的小demo:SD_UNet 以文生图为例&#…...
Linux文件系统与日志分析
目录 inode block 链接 文件修复 实验步骤 针对ext文件系统恢复删除文件 针对xfs文件系统恢复删除文件 日志 日志级别 rsyslogd服务 日志目录 messages日志文件(系统日志) 集中管理日志 - 实验 1.环境配置 1.1 1.2 1.3 1.4 1.5 2.远…...
【SkyWalking】使用PostgreSQL做存储K8s部署
拉取镜像 docker pull apache/skywalking-ui:10.0.1 docker tag apache/skywalking-ui:10.0.1 xxx/xxx/skywalking-ui:10.0.1 docker push xxx/xxx/skywalking-ui:10.0.1docker pull apache/skywalking-oap-server:10.0.1 docker tag apache/skywalking-oap-server:10.0.1 xxx…...
详解大模型微调数据集构建方法(持续更新)
大家好,我是herosunly。985院校硕士毕业,现担任算法t研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算…...
自制植物大战僵尸:HTML5与JavaScript实现的简单游戏
引言 在本文中,我们将一起探索如何使用HTML5和JavaScript来创建一个简单的植物大战僵尸游戏。这不仅是一项有趣的编程挑战,也是学习游戏开发基础的绝佳机会。 什么是植物大战僵尸? 植物大战僵尸是一款流行的策略塔防游戏,玩家需…...
Istio_1.17.8安装
项目背景 按照istio官网的命令一路安装下来,安装好的istio版本为目前的最新版本,1.22.0。而我的k8s集群的版本并不支持istio_1.22的版本,导致ingress-gate网关安装不上,再仔细查看istio的发布文档,如果用istio_1.22版本…...
[数据集][目标检测]室内积水检测数据集VOC+YOLO格式761张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):761 标注数量(xml文件个数):761 标注数量(txt文件个数):761 标注类别…...
17_Vue高级监听器生命周期Vue组件组件通信
文章目录 1. 数据监听器watch2. Vue生命周期3. Vue组件4. Vue组件通信Appendix 1. 数据监听器watch 首先watch需要单独引 import {watch} from vuewatch函数监听ref响应式数据 watch(监听的内容,监听行为)监听行为默认为(newValue,oldValue) let firstname ref…...
【ROS使用记录】—— ros使用过程中的rosbag录制播放和ros话题信息相关的指令与操作记录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、rosbag的介绍二、rosbag的在线和离线录制三、rosbag的播放相关的指令四、其他rosbag和ros话题相关的指令总结 前言 rosbag是ROS(机器人操作系统…...
Laravel 富文本内容
Laravel 获取富文本的纯文本内容-CSDN博客 Laravel 富文本内容里面的图片添加前缀URL-CSDN博客 Laravel 富文本图片的style样式删除-CSDN博客. Laravel 获取富文本中的所有图片-CSDN博客 富文本字体font-famly删除 $data preg_replace(/(<[^>])style["\][^"…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
