- 博客(76)
- 资源 (3)
- 收藏
- 关注
原创 17. 示例:用assert property检查FIFO空满标志冲突
基于 SystemVerilog 的 FIFO 空满标志冲突检查(概念+实现+仿真全解)断言价值:通过可高效捕捉 FIFO 设计漏洞,减少调试时间。跨域扩展:结合覆盖率(如)可验证边界场景,形式验证可深度分析时序逻辑。避坑指南:关注复位、信号稳定性、跨时钟域同步等细节。
2025-03-07 10:45:06
947
原创 16. 断言(SVA):立即断言/并发断言
立即断言适用于组合逻辑的即时检查,并发断言擅长时序协议监控。关键技巧为并发断言显式指定时钟使用|->(重叠蕴含)和|=>(非重叠蕴含)区分时序关系结合覆盖率分析断言触发场景通过合理使用SVA,可显著提高验证效率和设计可靠性。
2025-03-05 17:39:12
724
原创 15. 示例:创建AXI-Lite事务类(addr/data/rw)
/ 定义事务类(继承uvm_sequence_item)// 字段定义// 32位地址(对齐到4字节):ml-citation{ref="2,4" data="citationList"}// 32位数据:ml-citation{ref="2,4" data="citationList"}// 读写方向:ml-citation{ref="2,4" data="citationList"}// 约束条件。
2025-03-05 15:46:18
789
原创 14. 事务级建模(Transaction):定义事务字段和方法
SystemVerilog 事务级建模 (Transaction-Level Modeling)字段 (Fields):描述事务属性(地址、数据、命令等)。方法 (Methods):操作事务(随机化、打印、打包等)。示例代码:定义一个简单的内存读写事务类// 字段定义// 随机化地址// 随机化数据bit rw;// 读/写标志:0=读,1=写// 约束:限制地址和数据范围// 方法:打印事务内容endclass// 事务字段// 约束条件// 预处理方法。
2025-03-05 11:12:24
954
原创 verilog练习:HRPWM 模块设计
需要考虑如何用SystemVerilog实现这些功能。首先,模块的输入输出端口应包括时钟、复位、占空比设置、使能信号,以及PWM输出。内部可能需要计数器、比较寄存器、MEP控制逻辑。MEP的实现可能需要一个微边沿计数器,在每个主时钟周期内生成多个细分步长。然后,需要处理占空比的精度问题。假设系统时钟为100MHz(周期10ns),若MEP步长为250ps,则每个主时钟周期可以分成40个MEP步长。这样,占空比的分辨率可以提高40倍。因此,比较寄存器的值需要包括主计数器的高位和MEP步长的低位。
2025-03-05 09:29:56
1023
原创 HRPWM学习总结
HRPWM(High Resolution Pulse Width Modulation)是一种高分辨率脉宽调制技术,通过在传统PWM的基础上引入更高精度的时钟细分技术(如MEP技术),显著提升PWM信号的占空比和频率控制精度。其核心目标是在高频、高精度场景下实现更精细的功率控制。微边沿定位(Micro Edge Positioner, MEP)是HRPWM的核心技术,通过将系统时钟周期细分为更小的步长(如150ps),在传统PWM的上升/下降沿基础上实现亚纳秒级的调整。
2025-03-04 17:38:36
897
原创 13. 验证计划编写:DUT特性提取→测试点分解
将Spec内容按 接口、功能、性能、架构、错误处理 五大类拆分。将大Feature拆分为3级子项,避免粒度不均。建立可测量指标:吞吐量:通过事务生成器统计单位时间处理量(如10Gbps数据流)。延迟:使用时间戳记录从请求发起至响应完成的时间差。
2025-02-28 09:17:01
865
原创 12. 示例:实现一个石头剪刀布仲裁器
定义接口,包括时钟、复位、玩家和计算机的选择、结果等信号。创建事务类(rps_transaction),包含玩家和计算机的选择、结果、时间戳等字段,并添加必要的方法和约束。设计序列(rps_sequence),生成随机化的激励,包括正常和异常测试用例。实现driver,负责将事务驱动到DUT。创建monitor,监测DUT的输入和输出,发送到scoreboard进行分析。构建scoreboard,检查结果是否正确,并记录分数和覆盖率。
2025-02-26 16:04:05
723
原创 11. 示例:实现一个带随机化和覆盖率的简单ALU验证环境
使用SystemVerilog编写的完整ALU验证环境示例,包括随机化和覆盖率,并且能够用xrun或者sv进行仿真。// 核心信号组:ml-citation{ref="1,2" data="citationList"}// 32位操作数// 扩展操作码(支持更多运算)// 运算结果// 进位标志logic zero;// 零标志// 断言检查加法正确性:ml-citation{ref="1,3" data="citationList"}// ...endgroup动态采样。
2025-02-26 13:51:37
937
原创 10. 示例:设计APB总线接口并驱动时钟信号
APB是AMBA总线的一部分,主要用于低带宽的外设连接,比如UART、SPI等。需要设计一个APB接口,包含必要的信号,比如PCLK(时钟)、PRESETn(复位)、PADDR(地址)、PWRITE(读写控制)、PWDATA(写数据)、PRDATA(读数据)、PSELx(选择信号)、PENABLE(使能信号)和PREADY(传输完成)。APB接口应该包括modport定义,区分Master和Slave的端口方向。时钟块用于同步Master和Slave的信号,比如在时钟上升沿驱动和采样。
2025-02-26 10:29:27
1394
原创 9. 接口(Interface)与时钟块(Clocking Block)
关于SystemVerilog中接口(Interface)和时钟块(Clocking Block)的详细解释,包括概念、实现方式、应用场景、常见误区、练习任务以及一个完整的仿真示例。应用场景部分,常见的如总线协议、跨时钟域、模块化验证环境。每个场景需要通俗解释和示例,比如AXI总线使用接口封装信号,时钟块处理同步。常见误区部分,用户可能错误地在接口内部实例化模块,或者时钟块信号方向错误。需要指出这些错误并提供正确示例,比如避免在接口中使用非连接性代码,正确使用input/output。目标。
2025-02-26 09:31:24
1179
原创 8. 示例:对32位数据总线实现位宽和值域覆盖
针对32位数据总线实现位宽和值域的覆盖,并且能够用xrun运行,查看日志和波形。coverpoint需要覆盖32位的各个位宽,可能包括每一位的独立覆盖。值域覆盖可能需要不同的范围,比如全0、全1、边界值等。
2025-02-25 17:33:35
888
原创 7. 覆盖率:covergroup/coverpoint/cross
covergroup是收集覆盖率的容器,coverpoint是具体的覆盖点,cross是交叉覆盖。用生活中的例子来通俗解释,比如将covergroup比作调查问卷,coverpoint是问题,cross则是问题之间的关联分析。
2025-02-25 16:50:44
921
原创 6. 示例:用mailbox实现生产者-消费者模型
以下是一个完整的SystemVerilog示例,使用mailbox实现生产者-消费者模型,包含详细注释、仿真步骤及预期结果。代码兼容主流仿真工具(如Cadence Xcelium的xrun)。
2025-02-25 14:56:27
975
原创 5. 线程通信:mailbox/semaphore/event
SystemVerilog线程通信详解。以下按概念、实现、场景、误区、练习、仿真六部分结构化解析,使用xrun仿真工具验证。
2025-02-25 13:37:15
1065
原创 4. 示例:创建带约束的随机地址生成器(范围0x1000-0xFFFF)
以下是一个完整的SystemVerilog测试平台示例,包含约束随机地址生成、日志输出和波形生成功能:运行方法:使用Synopsys VCS:使用Cadence Xcelium:查看结果:日志输出示例:查看波形(以VCS为例):关键功能说明:随机约束类 :测试平台特性:波形生成:验证机制:这个示例可以:添加覆盖率收集:在类中实例化覆盖率对象多约束组合:
2025-02-24 17:50:41
530
原创 3. 随机化与约束:rand/randc/constraint
rand概念:普通随机变量,每次随机独立生成值(可能重复)通俗理解:像摇骰子,每次都可能出现相同数字示例class Dice;// 每次随机生成1-6的数字(可能连续出3个6) endclassrandc概念:循环随机变量,遍历所有可能值后才重复通俗理解:像发扑克牌,必须发完所有牌才会重新洗牌示例// 0-51循环出现,保证不重复发牌 endclassconstraint概念:给随机变量设置规则通俗理解:像交通规则,限制车辆只能在特定车道行驶示例} // 红灯时间30-90秒。
2025-02-21 16:52:34
655
原创 2. 示例:实现一个animal基类,派生出dog/cat子类
int age;// 初始化波形记录// 创建对象// 仿真过程#10;end#10;end$finish;endendmodule/bin/bash # 使用Synopsys VCS vcs -full64 -sverilog animal.sv。
2025-02-21 16:38:12
363
原创 1. 面向对象编程:类(class)/对象/继承/多态
以下是针对您提出的问题的详细解答,涵盖概念解析、实现方式、应用场景、常见误区及练习任务。// 必须声明virtualendclass。
2025-02-20 16:18:20
672
原创 4.7 学习UVM中的阶段机制,应用到具体示例分为几步?
UVM 阶段按照严格的顺序执行,确保验证环境的正确初始化、运行和结果分析。以下是主要阶段的执行顺序:依赖关系:Build 阶段必须在 Connect 阶段之前完成,因为需要先实例化组件才能连接它们。Run 阶段依赖于 Connect 阶段,确保所有通信通道已建立。Extract 和 Check 阶段依赖于 Run 阶段,因为它们需要仿真结果进行分析。Report 阶段是最后一个阶段,依赖于所有其他阶段的结果。
2025-02-19 16:42:16
1724
原创 4.6 学习UVM中的“report_phase“,将其应用到具体案例分为几步?
以下是对UVM 验证环境中的详细解析场景:在通信协议验证中,汇总发送和接收的事务数量。// 发送事务计数器// 接收事务计数器endendclass。
2025-02-19 16:24:18
830
原创 4.4 学习UVM中的“extract_phase“,将其应用到具体案例分为几步?
在 UVM 验证环境中,是用于提取仿真结果并进行后处理的关键阶段。以下是如何在具体验证项目中应用。
2025-02-19 11:04:36
290
原创 4.3 学习UVM中的“run_phase“,将其应用到具体案例分为几步?
在具体的验证项目中,run_phase是 UVM 仿真执行的核心阶段,负责驱动数据、监控信号、执行检查等动态行为。以下是如何在项目中应用run_phasei<10;endendtaskendclass通过合理设计run_phase,验证环境能够高效执行动态仿真任务,确保 DUT 功能正确性,并支持复杂场景下的多线程同步与数据交互。
2025-02-17 18:05:29
1320
原创 4.2 学习UVM中的“connect_phase“,将其应用到具体案例分为几步?
在 UVM 验证环境中,是组件间通信链路构建的核心阶段,用于连接 TLM 端口、分析端口等通信接口。
2025-02-17 16:59:45
463
原创 4.1 学习UVM中的“build_phase“,将其应用到具体案例分为几步?
在具体的验证项目中,是 UVM 验证环境初始化的核心阶段,用于构建组件树形结构和配置参数传递。Test:顶层测试用例,配置全局参数。Env:验证环境容器,集成所有子组件(Agent、Scoreboard 等)。Agent:代理组件,管理 Driver、Monitor 和 Sequencer。:具体功能组件,与 DUT 交互。:数据检查和覆盖率收集组件。
2025-02-17 13:25:50
1000
原创 4. 学习UVM中的阶段机制分为几步?
UVM(Universal Verification Methodology)的阶段机制是验证环境运行的核心框架,它定义了验证平台从构建到结果报告的全生命周期。UVM 阶段分为多个步骤,每个步骤都有特定的功能,且按照严格的顺序执行。这种机制确保了验证环境的可预测性和可重用性。UVM 的阶段机制是验证环境的核心框架,它通过明确的阶段划分和严格的执行顺序,确保了验证流程的可靠性和可维护性。理解每个阶段的功能、顺序和实现原理,对于构建高效、可重用的验证环境至关重要。
2025-02-13 15:02:55
776
原创 3.10 学习UVM中的uvm_test类分为几步?
以下是关于 UVM 中uvm_testuvm_test是 UVM(Universal Verification Methodology)中的一个基类,继承自,用于表示验证环境中的测试用例。构建验证环境(如实例化uvm_env配置测试环境(如设置虚拟接口、调整参数)。控制测试流程(如启动测试序列、管理仿真时间)。每个具体的测试用例都通过派生uvm_test的子类来实现,使得不同的测试可以复用相同的验证环境结构。从uvm_test派生一个子类,并注册到 UVM 工厂。
2025-02-13 10:41:38
686
原创 3.2.2 具体的案例展示uvm_object在实际验证中的应用?
以下为你详细介绍一个基于 UVM(Universal Verification Methodology)验证平台的简单案例,该案例将充分展示uvm_object在实际验证中的具体应用,此案例主要针对一个简单的总线接口进行验证。uvm_object// 定义序列类,派生自 uvm_sequence// 工厂注册// 构造函数// 序列主体任务,用于生成事务并发送// 创建事务对象// 随机化事务// 发送事务endendtaskendclass解释类派生自。
2025-02-13 09:32:32
667
原创 3.2.1 如何将uvm_object应用到实际的验证项目中?
在实际的验证项目中,uvm_object是 UVM(Universal Verification Methodology)中最基础的类,很多其他类都派生自它,其应用贯穿于验证平台的各个部分。以下是将uvm_objectuvm_objectuvm_objectmy_config。
2025-02-13 09:30:45
937
原创 3.9 学习UVM中的uvm_env类分为几步?
以下是关于 UVM 中uvm_envuvm_env是 UVM(Universal Verification Methodology)中的一个重要组件类,用于封装验证环境的顶层结构。它是一个容器类,用于组织和管理验证环境中的其他组件(如uvm_agent等)。uvm_env是验证环境的最高层次,通常包含多个uvm_agent和其他功能组件。uvm_env是验证环境的顶层容器。封装了验证环境中的所有组件。支持层次化结构,可以嵌套其他uvm_env。
2025-02-12 17:02:22
778
原创 3.8 学习UVM中的uvm_scoreboard类分为几步?
以下是关于 UVM 中是 UVM(Universal Verification Methodology)中的一个重要组件类,用于检查 DUT(Design Under Test)的功能正确性。它通过比较 DUT 的实际输出与预期输出来验证设计的正确性。通常与配合使用,接收来自监视器的事务并进行比较。用于功能验证,检查 DUT 的正确性。支持事务的比较和错误报告。通常通过接收事务。// 定义一个从 uvm_sequence_item 派生的事务类bit valid;
2025-02-12 15:23:34
957
原创 3.7 学习UVM中的uvm_sequence_item类分为几步?
以下是关于 UVM 中是 UVM(Universal Verification Methodology)中的一个基类,用于表示验证环境中的事务(transaction)。事务是验证平台中传递的基本数据单元,通常用于描述 DUT(Design Under Test)的输入或输出行为。是 UVM 中所有事务类的基类。支持事务的复制(copy)、比较(compare)、打印(print)等操作。通常与和配合使用,生成和传递事务。// 定义一个从 uvm_sequence_item 派生的事务类。
2025-02-12 14:47:22
840
原创 3.6 学习UVM中的uvm_sequencer类分为几步?
以下是关于 UVM 中是 UVM(Universal Verification Methodology)中的一个关键组件类,用于管理事务(transaction)的生成和调度。它与uvm_driver配合使用,负责将事务从序列(sequence)传递到uvm_driver,从而驱动 DUT(Design Under Test)的接口。管理事务的生成和调度。与uvm_driver通过 TLM(Transaction Level Modeling)接口通信。支持多个序列的并行执行和优先级控制。
2025-02-12 14:34:31
615
原创 3.5 学习UVM中的uvm_agent类分为几步?
以下是关于 UVM 中uvm_agentuvm_agent是 UVM(Universal Verification Methodology)中的一个重要组件类,用于封装验证环境中与 DUT(Design Under Test)接口相关的组件(如uvm_driver和它是一个容器类,用于组织和管理这些组件,并根据需要配置其行为(主动或被动模式)。uvm_agent封装了uvm_driver和。支持主动模式(active)和被动模式(passive)。是 UVM 测试平台中用于接口验证的核心组件。
2025-02-12 14:03:41
673
原创 3.4 学习UVM中的uvm_monitor类分为几步?
以下是关于 UVM 中是 UVM(Universal Verification Methodology)中的一个重要组件类,用于监控 DUT(Design Under Test)的接口行为。它负责采集 DUT 的信号活动并将其转换为高层次的事务(transaction),然后将这些事务发送给其他组件(如或)进行分析和检查。被动组件,不驱动信号,仅监控信号。将信号活动转换为事务。是 UVM 测试平台中用于数据采集和分析的关键组件。// 定义一个从 uvm_sequence_item 派生的事务类。
2025-02-11 18:05:11
617
原创 3.3 学习UVM中的uvm_driver 类分为几步?
以下是关于 UVM 中uvm_driveruvm_driver是 UVM(Universal Verification Methodology)中的一个重要组件类,用于驱动事务(transaction)到设计(DUT)的接口。它通常与配合使用,从获取事务并将其转换为信号级别的激励,施加到 DUT 的接口上。uvm_driver从获取事务。将事务转换为信号级别的激励。是 UVM 测试平台中与 DUT 交互的关键组件。// 定义一个从 uvm_sequence_item 派生的事务类。
2025-02-11 17:46:34
1776
原创 3.2 学习UVM中的uvm_object类分为几步?
以下是关于 UVM 中uvm_objectuvm_object是 UVM(Universal Verification Methodology)中的一个基类,用于表示验证环境中可配置、可复制、可比较和可打印的对象。它是 UVM 中大多数类的基类(如等),提供了对象的基本操作功能。uvm_object支持对象的复制(copy)、比较(compare)、打印(print)等操作。提供了对象的配置和随机化功能。是 UVM 中所有事务(transaction)和数据结构的基础类。uvm_object。
2025-02-11 15:51:33
1101
原创 3.1 学习UVM中的uvm_component类分为几步?
联想到UVM的组件化思想,uvm_component作为基类,肯定承载着构建组件树和管理组件生命周期的重要职责。意识到uvm_component的树形结构和phase自动执行特性是其独特之处。一些常用的方法,如get_full_name、get_parent等,这些方法在组件操作和调试中经常用到。需要通过继承uvm_component来创建自定义组件,并在测试平台中实例化这些组件。
2025-02-08 17:06:14
627
数字IC测试机架构与测试理论详述
2025-02-13
硬件验证中的高效Bug发现与定位:关键技能、最佳实践及人员协作策略
2025-02-13
Linux命令详解与实战:掌握Linux系统运维关键技术与应用场景
2025-02-13
Cadence数字仿真工具Xcelium(xrun)操作指南与高级功能应用
2025-02-13
Vim编辑器用户手册:深入理解和高效应用技巧(文本编辑、程序开发、文件管理)
2025-02-13
IC数字电路设计基础教程PDF:初学者指南,涵盖Verilog HDL与Linux基础命令
2025-02-12
集成电路 反向 分析 技术 指导书
2024-03-13
Memory bist测试方法.docx
2020-09-02
verilog教程.pdf
2020-06-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人