- 博客(16)
- 收藏
- 关注
原创 002 UVM的结构层次丨UVM Component
此外,在大型验证环境中,有许多用于配置的变量,也可以定义在一个data item的类中,通常继承自uvm_object。UVM也为UVCs (UVM Component) 提供了许多子类,如:uvm_sequencer, uvm_driver, uvm_monitor等。UVM为这些验证组件提供了相应的类,它们继承自uvm_component。这些类库涵盖了从基本的对象管理、序列化、随机化到高级的验证组件和功能,如代理、驱动器、监视器、覆盖率和报告机制等。
2024-07-14 16:16:19
337
原创 001 认识UVM
UVM(Universal Verification Methodology)是一种用于验证集成电路的方法学。UVM建立在SystemVerilog语言基础之上,并且提供了一个标准化的,可重用的验证组件和验证环境,以提高验证效率和质量。验证组件,即UVC(UVM Component),在验证环境中模拟DUT上下游的IP的功能,从而使得DUT的功能能够被完全测试。图中DUT是一个3:1的多路复用器,它有一组输入端口和三组输出端口。
2024-07-14 14:22:04
492
1
原创 (一) SystemVerilog 二状态数据类型丨logic类型丨赋值规则
在Verilog中除real以外的数据类型有四种状态值(0,1,Z,X)。在Systemverilog中加入了二状态值变量(0,1)。四值类型用于门级建模,而二值类型提供了更高抽象层次的仿真能力。
2023-09-24 17:10:58
712
原创 SystemVerilog中Tasks and Functions 1—Verilog Task and Function回顾 | begin/end可忽略 | Function中Output类型参数
在这个例子中,modifyInOutOutput函数接受一个inout类型的整数变量a和一个output类型的整数变量b作为参数。在initial块中,我们声明了一个整数变量x和y,并将它们的初始值分别设置为5。在函数调用之前和之后,使用$display语句输出x和y的值,以观察函数对这些变量的修改。在SystemVerilog中,一个Function可以有input,output和inout类型的参数。可以看到,函数修改了x的值,并通过b参数返回了计算结果给y。
2023-07-09 15:20:02
444
原创 Systemverilog中always_comb / always_latch / always_ff用法
在Verilog HDL中,always块会根据敏感列表和编码综合出组合逻辑,锁存器,时序逻辑。仿真器无法验证综合出的电路是否与你的目标一致。Systemverilog增加了特别实现过程块alway_comb, always_latch和always_ff。这些过程块减少了设计的模糊性,使得仿真器能够检查,并实现特定的硬件电路。(三种always_块均用于RTL设计。
2023-07-08 17:12:00
998
原创 Perl 默认变量$_
需要注意的是,`$_` 是一个隐式变量,它的值可以被修改。为了提高代码的可读性和可维护性,通常建议在使用 `$_` 时加上适当的注释或使用具有描述性的变量名。虽然 `$_` 是 Perl 的默认变量,但它并不是必须使用的,你可以通过明确指定变量来替代 `$_`,以提高代码的清晰度和可读性。3. 内置函数操作:许多 Perl 内置函数默认操作 `$_`,这样可以省略参数并对 `$_` 进行操作。1. 循环操作:在循环语句中,如果没有明确指定循环变量,`$_` 将被默认使用。
2023-07-02 17:28:45
2132
原创 CRC循环冗余校验 (Cyclic Redundancy Check) 原理/电路实现/Verilog实现
多项式表示:把所有二进制位字符串视为变量 (x) 的多项式方程;多项式除法:使用“多项式除法” (模2算术运算) 进行校验;在检测单bit和多bit错误时极其可靠;可以简单地通过反馈移位寄存器和XOR门高效地实现。
2023-06-25 14:59:17
8223
1
原创 SystemVerilog进程间通信——旗语Semaphore/信箱Mailbox
信箱是一种允许不同的线程之间互相交换数据的方式。它类似于一个真实的邮箱,信件可以被放入其中,之后也可以被取出。
2023-06-24 17:05:05
3727
原创 SystemVerilog线程 fork join块
一个线程是指一段被当作独立的实体执行的代码。在Verilog中,每一个initial或always块在在时间0刻触发一个并发运行的线程。一个fork join 可以创建并发运行的多个线程。
2023-06-22 13:41:25
601
原创 数字IC基础知识
电平敏感由以上代码可知,在enable有效的时间内,q完全跟踪d的值,比如在这个时间d变化了,q跟着变化,当enable失效的时候,q存储d最后的值。:边沿敏感。(输出只在时钟某个时刻变化):在实际的数字系统中,通常把能够用来存储一组二进制代码的同步时序逻辑电路称为寄存器。
2023-06-21 00:11:29
595
原创 Systemverilog类
1 什么是类(Class)类封装了数据和操作这些数据的子程序。2 在哪里定义类在SystemVerilog中,可以把类定义在program、module、package中,或者在这些块之外的任何地方。类可以在程序和模块中使用。3 OOP术语。
2023-06-20 13:29:57
607
2
原创 SystemVerilog枚举
枚举值缺省为从0开始递增的整数。可以自己定义枚举值。下例中使用INIT代表缺省值0,DECODE代表2,IDLE代表3.注意:常量名称列表中的枚举常量名(如INIT)作用范围规则和变量是一样的。因此,若将INIT用于不同的状态机中,那么必须在不同的作用域里声明它们,例如模块、程序块、函数和类。如果没有特别,枚举类型会被当成int类型存储。由于int类型的缺省值是0,所以在给枚举常量赋值时务必小心。在下例中,position会被初始化为0,这并不是一个合法的ordinal_e变量。
2023-06-18 17:36:05
519
原创 SVA断言
2.2 并发断言描述的是时序的,与设计模块并行执行(只做观察不应影响设计的行为)。表示需要重复n次,但这n次不用连续,只要发生了n次即可,如a[=5]表示a要拉高5次,但不用是连续拉高5拍,可以不连续。(表示这个信号情况不发生),在信号后使用如@(posedge clk)a## 3 b[2],即表示在时钟上升沿时a信号拉高且再过3个周期后b。它可以检测待测设计的信号值和测试平台的信号值,并且在存在问题时采取相应的行动。表示周期延迟,##0表示当前周期,##n表示n个周期后,只计一次,条件满足后重新判断。
2023-06-17 15:13:50
283
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人