自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 What is the super keyword? What is the need of calling super.build() and super.connect()?

super。

2025-03-13 23:36:02 235

原创 uvm_transaction, uvm_seq_item, uvm_object, uvm_component的关系

支持工厂(factory)机制,实现对象的动态创建。非sequence交互的通用事务(如日志记录)。支持事务记录和分析(如覆盖率收集、调试打印)。扩展了事务的通用属性(如时间戳、事务ID)。所有动态对象(如事务、配置对象)的基类。,生命周期由用户管理(显式创建和销毁)。生命周期与仿真相同(自动创建和销毁)。处理事务后返回响应(如读操作的数据)。,用于描述验证场景中的数据流。提供事务的请求-响应机制(替代(因其功能更专一)。支持事务的父子关系(通过。提供基础的对象操作(如。验证环境中的组件(如。

2025-03-13 00:12:19 314

原创 组合逻辑和时序逻辑

时序逻辑电路的输出不仅取决于当前的输入值,还与电路过去的状态有关。也就是说,时序逻辑电路具有记忆功能,能够存储之前的输入信息,并在后续的操作中使用这些信息。

2025-03-05 23:49:18 233

原创 systemverilog的栈区-堆区-全局静态区-文字常量区-程序代码区

在 SystemVerilog 中,不同类型的数据会被存储在不同的内存区域,主要包括栈区、堆区、全局静态区、文字常量区和程序代码区:通过new关键字创建的类实例。:动态数组(int arr[])、队列(queue)、关联数组(显式分配(new),通过垃圾回收(仿真器自动或手动释放)或对象销毁释放。:例如模块(module)内声明的regwirelogic等变量。:通过static关键字声明的变量(如类静态成员、函数内的静态变量)。从仿真开始(time=0)到仿真结束始终存在。内存由仿真器在编译时静态分配。

2025-03-01 20:31:07 690

原创 同步fifo和异步fifo

使用双触发器同步器(2-FF Synchronizer)确保指针同步安全。:使用格雷码(Gray Code)减少同步时的亚稳态风险。仅适用于深度为2的幂的FIFO(如16、32、64等)。:写指针比读指针多一圈(需同步后的读指针判断)。:写指针比读指针多一圈(需额外位判断,如。:读写指针需同步到对方时钟域,避免亚稳态。:读写指针转换为格雷码后再跨时钟域传递。:同步指针时使用两级触发器消除亚稳态。空/满标志需使用同步后的指针进行比较。异步复位需同步到各自的时钟域。:同步后的写指针等于读指针。

2025-02-27 23:49:32 335

原创 driver中为什么要使用非阻塞赋值

许多硬件接口(如AXI、APB)要求信号在时钟边沿后保持稳定。若Driver使用非阻塞赋值,输入信号会在时钟边沿后更新,确保DUT采样到的是稳定值。:当Driver在同一时钟周期内驱动多个信号时,若使用阻塞赋值,可能导致信号更新的。Driver需要确保信号的更新与时钟同步,而非阻塞赋值的。会立即更新,可能导致DUT在同一时钟周期内采样到中间值。(在时间步结束时统一生效)能够准确模拟寄存器的行为。可能在时钟边沿前变化,导致DUT采样到中间值。,避免因赋值顺序不同导致的仿真结果差异。,赋值操作统一生效。

2025-02-27 23:40:45 478

原创 阻塞赋值和非阻塞赋值

正确使用两种赋值方式是避免Verilog代码出现竞争条件和功能错误的关键!块中,后续代码仍使用赋值前的旧值。:用于组合逻辑或测试平台的顺序操作。:在测试平台中按顺序生成激励信号。:实际交换(因为并行记录旧值)。:用于描述触发器或寄存器(如。:确保多个寄存器的值同步更新。后续代码,直到当前赋值完成。:实际交换(因为立即生效)。:用于时序逻辑的寄存器更新。:代码逐行执行,赋值操作会。:用于描述组合逻辑(如。),需要即时更新信号。

2025-02-27 23:36:00 549

原创 验证环境中为什么要用virtual interface

而 UVM 组件通常封装在包(package)中,包无法直接访问模块中的接口。

2025-02-27 22:57:48 546

原创 uvm中的激励是如何发送出去的

若Sequencer的队列为空,Driver会在此处挂起,直到Sequence产生新事务。:通知Sequencer当前事务已处理完毕,允许Sequencer释放资源并继续后续操作。:Sequencer根据配置的仲裁算法(如优先级、公平性)选择下一个发送的事务。:将事务提交到Sequencer队列,等待Driver处理完成(:请求发送权限,若Sequencer未授权则阻塞。的阻塞,使Sequence能继续发送下一个事务。的阻塞,允许Sequence继续发送下一个事务。:从Sequencer的请求队列中。

2025-02-21 00:04:03 773

原创 systemverilog约束中的unique

约束对一组变量进行约束,以便在随机化后,该组中任意两个成员的值都不相同。

2025-02-13 23:19:38 133

原创 systemverilog的genvar

在 SystemVerilog 中,genvar是一个非常重要的关键字,主要用于生成块(generate block)的循环结构中当需要创建多个相同或相似的模块实例时,可以使用genvar配合生成块的循环结构来实现批量实例化,避免手动重复编写大量相似的实例化代码,提高代码的可维护性和可读性。genvar用于声明一个整数类型的变量,这个变量专门在生成块的循环中作为索引使用。生成块允许在编译时(elaboration)根据条件或者循环来实例化模块、接口、连续赋值语句等硬件结构,而genvar。

2025-02-07 23:40:35 309

原创 systemverilog的program和module的区别

用于描述数字电路的结构和行为(如组合逻辑、时序逻辑、连线等)。:专为测试平台(Testbench)设计,用于验证。中的代码执行完毕后,仿真会自动终止,无需手动调用。中,采样和驱动的时序可能与设计代码冲突。:支持模块化设计,可嵌套其他模块或接口(块和时钟同步),减少与设计的时序竞争。块为主,按顺序执行,与设计的时序解耦。块执行完毕后,自动结束并触发仿真终止。)、事务级建模(TLM)等高级验证结构。随着验证方法学(如 UVM)的普及,块(但通常仅用于简单测试)。:通过隐式的时序控制(如。

2025-02-07 00:10:13 591

原创 buffer和cache的区别

Cache 是把最常用的工具放在手边,Buffer 是你家的垃圾桶,你平时的垃圾先扔在垃圾桶里,等垃圾桶满了再扔垃圾。简单的讲Buffer侧重于写,Cache侧重于读。

2025-02-06 21:55:41 278

原创 systemverilog中的force,release和assign

assign语句用于为wire类型的信号提供连续赋值。它建立了一个驱动源,根据右侧表达式的值持续驱动wire信号。

2025-01-21 23:02:46 604

原创 systemverilog中type typedef的区别

作用域type主要用于类内部,将类型定义限定在类的范围内,增强类的封装性;而typedef通常具有更广泛的作用域,一般为全局,除非被明确限制在某个局部范围(如模块或包)内。使用场景type适合在类中创建仅该类需要的类型成员,而typedef更适用于在代码中广泛使用的类型别名,以提高代码的可读性和简洁性,尤其是对于复杂或常用的数据类型。灵活性type提供了一种将类型定义与类紧密结合的方式,适合面向对象编程中的类封装;typedef。

2025-01-17 00:00:58 457

原创 uvm的m_sequencer和p_sequencer

【代码】uvm的m_sequencer和p_sequencer。

2025-01-10 00:05:27 401

原创 systemverilog中作用域解析运算符(Scope Resolution Operator)的用途是什么?

class ABC;int data;

2025-01-08 00:18:49 162

原创 如何检查X态

【代码】如何检查X态。

2025-01-06 23:15:57 97

原创 建立时间和保持时间

建立时间在时钟有效沿到来之前,数据必须维持一段时间保持不变,这段时间就是建立时间 Tsetup。

2025-01-06 22:45:53 671

原创 systemverilog中的priority if

在 SystemVerilog 中,是一种条件判断结构。它和普通的if - else语句类似,但在条件评估和错误检查方面有自己的特点,主要用于按顺序评估多个条件,并且对不符合预期的情况进行报错。报错如下两点当所有条件都不为真时,或者如果最后一个 “if” 结构没有 “else” 子句时。

2024-12-25 00:17:28 267

原创 systemverilog中的unique if

在 SystemVerilog 中,unique if是一种条件判断结构。它用于检查多个互斥的条件,以确保在给定的情况下只有一个条件分支被执行。这有助于提高代码的可读性和可维护性,同时也能帮助发现潜在的逻辑错误当所有的 “if” 条件都不匹配时且无else语句,会报错。当在 “if-else” 条件中发现有不止一个条件匹配时,会报错。

2024-12-25 00:08:18 224

原创 systemverilog中task的disable用法

在 SystemVerilog 中,disable语句可以用于停止正在执行的task。

2024-12-24 00:00:30 529

原创 systemverilog中的循环(loop)

什么是循环?循环是一段会反复执行的代码。循环中通常包含一个条件语句,以便在条件变为真时能够终止循环。如果循环一直运行下去,那么仿真就会无限期地停滞。SystemVerilog中不同类型的循环结构如下表所示。

2024-12-15 23:44:04 578

原创 Systemverilog 中randcase的使用

【代码】Systemverilog 中randcase的使用。

2024-12-15 22:54:29 140

原创 systemverilog中的事件 event

在 SystemVerilog 中,事件是一种用于线程同步的机制。它就像是一个信号旗,不同的线程(如 initial 块、always 块等产生的进程)可以等待这个信号,当信号被触发(就像旗帜被升起)时,等待这个事件的线程就可以继续执行。事件主要用于协调不同的并发进程之间的操作顺序,确保某些操作在其他操作完成之后才开始。event是一个静态对象句柄,用于在两个或多个并发活动进程之间进行同步。一个进程将触发event,另一个thread的等待event。eventnull:事件的声明非常简单,使用。

2024-12-01 19:06:14 611

原创 systemverilog中的virtual

虚类中的方法通常使用关键字 " pure virtual " 纯虚方法。同时OOP规定,只要class中存在一个没有被实现的pure function,就不允许例化这个class。虚类一般用来定义类的格式,、类的成员、类的参数等,虚类不能被实例化,只能被扩展(重载)后实例化,用于在项目中定义一些标准的类。

2024-11-30 22:23:03 281

原创 systemverilog约束中:=和:/的区别

意味着其值等于100或101或102或200或300其中之一,意味着等于100,101,102或200,或300其中之一。其权重比例为1/3,1/3,1/3,2,5。其权重比例为1:1:1:2:5。

2024-11-29 00:13:57 260

原创 systemverilog中的this和super

在类的方法(包括构造函数)中,如果成员变量和方法参数或者局部变量同名,必须使用。限定的情况下,编译器会优先使用最内层作用域中的变量。就明确表示要访问的是类的成员变量。

2024-11-24 21:08:50 263

原创 systemverilog的packed array和unpack array

unpacked数组和packed数组的主要区别unpacked数组在物理存储时不能保证连续,packed数组则能保证在物理上连续存储。另一种看待unpacked数组和packed数组差异点的角度是,packed数组可以看成一个整体,一个单一向量。

2024-11-24 16:09:23 786

原创 fork join和fork join none区别

【代码】fork join和fork join none区别。

2024-11-24 15:01:59 222

原创 systemverilog中automatic和static的区别

变量的存储空间是在函数或任务被调用时动态分配的。这意味着它只在函数或任务执行期间占用内存空间,当函数或任务执行结束后,该存储空间会被释放。变量则可以根据函数或任务的调用情况动态地使用内存,更有效地利用资源。变量只有在函数或任务执行期间占用内存。在资源有限的情况下,大量使用。变量在整个仿真过程中一直占用内存空间,而。变量在每次函数或任务调用时初始化,而。变量可能会导致内存占用过高,而。

2024-11-22 00:07:08 278

原创 systemverilog中typedef的使用

在 SystemVerilog 中,typedef是一种用于创建用户自定义类型的关键字。它允许你为已有的数据类型定义一个新的名称,这在代码复用和提高代码可读性方面非常有用。

2024-11-10 21:13:14 488

原创 systemverilog的break continue return

【代码】systemverilog的break continue return。

2024-10-27 23:48:24 212

原创 systemverilog三元运算符(条件赋值符)

1)?等价于if (fwd!

2024-09-23 00:23:02 156

原创 systemverilog的乱序shuffle

在 SystemVerilog 中,shuffle是一个系统函数,用于对动态数组或队列进行随机打乱(洗牌)操作。以下是一些关于shuffle。

2024-08-27 23:02:24 1456 1

原创 判断地址是否对齐的方法

【代码】判断地址是否对齐的方法。

2024-08-18 16:51:43 263

原创 systemverilog有符号无符号数的转换

【代码】systemverilog有符号无符号数的转换。

2024-08-18 16:45:10 595

原创 systemverilog的约束inside

【代码】systemverilog的约束inside。

2024-08-11 22:55:47 255

原创 uvm中sprint的用法详解

【代码】uvm中sprint的用法详解。

2024-08-11 22:01:07 1442

原创 systemverilog的$sformatf和$sformat

通常与其他输出任务结合使用来控制输出格式。主要用于生成格式化字符串,而。

2024-08-11 02:01:27 502

断言学习文档,如何使用

断言学习文档,如何使用

2024-12-02

agent中interface方向的声明依据(input output)时钟采样

时钟采样

2024-12-02

异或及注错的使用方法及案例

异或及注错的使用方法及案例

2024-11-10

interface连接clk和interface的两种方法(复位用例)

复位

2024-08-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除