- 博客(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
原创 uvm中的激励是如何发送出去的
若Sequencer的队列为空,Driver会在此处挂起,直到Sequence产生新事务。:通知Sequencer当前事务已处理完毕,允许Sequencer释放资源并继续后续操作。:Sequencer根据配置的仲裁算法(如优先级、公平性)选择下一个发送的事务。:将事务提交到Sequencer队列,等待Driver处理完成(:请求发送权限,若Sequencer未授权则阻塞。的阻塞,使Sequence能继续发送下一个事务。的阻塞,允许Sequence继续发送下一个事务。:从Sequencer的请求队列中。
2025-02-21 00:04:03
773
原创 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
原创 systemverilog中作用域解析运算符(Scope Resolution Operator)的用途是什么?
class ABC;int data;
2025-01-08 00:18:49
162
原创 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中的循环(loop)
什么是循环?循环是一段会反复执行的代码。循环中通常包含一个条件语句,以便在条件变为真时能够终止循环。如果循环一直运行下去,那么仿真就会无限期地停滞。SystemVerilog中不同类型的循环结构如下表所示。
2024-12-15 23:44:04
578
原创 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
原创 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的乱序shuffle
在 SystemVerilog 中,shuffle是一个系统函数,用于对动态数组或队列进行随机打乱(洗牌)操作。以下是一些关于shuffle。
2024-08-27 23:02:24
1456
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人