芯片验证
weixin_40773862
这个作者很懒,什么都没留下…
展开
-
生成块(generate)
生成语句可以动态的生成Verilog代码,这一声明语句方便了参数化模块的生成。当对矢量中的多个为进行重复操作时,或者当进行多个模块实例引用的重复操作时,或者根据参数的定义来确定城西中是否应该包括某段verilog代码的时候,使用生成语句能够大大简化程序编写的过程。生成的声明和生成的实例能够在设计中被有条件的条用(实例引用)。在设计中可以多次调用(实例引用)生成的实例和生成的变量声明。此外,究竟是按照次序或者参数名赋值的参数重新定义,还是只用defparam声明的参数重新定义,都可以在生成范围中定义。原创 2024-06-25 16:09:44 · 223 阅读 · 0 评论 -
sv中的虚方法与多态
简而言之,当类中的方法声明为虚方法的时候,调用时候取决于句柄指向的对象,如果对象是父类对象,则调用的是父类中的方法,如果对象是子类对象,则调用的是子类中的方法。如果不声明为虚方法,调用的时候取决于句柄是父句柄还是子句柄来决定调用的方法是父类中的方法还是子类中的方法。类的继承有继承变量和方法两个方面,类的多态使得实现类时不需要担心句柄指向的是父类还是子类,只要通过虚方法就可以实现动态绑定,或者sv中称为动态方法查找。原创 2024-05-22 14:49:23 · 330 阅读 · 1 评论 -
SV仿真的调度机制
充分理解sv的不同结构体在仿真中的执行的先后顺序,有利于理解testbench中对DUT的驱动和采样的顺序,进而避免不合理的驱动和采样方式。· 设计调度区域执行完后,会通过observed区域,最后至reactive区域,而program会在reactive区域执行,所以program会采用之前已经被阻塞/非阻塞赋值后稳定值进行计算。inactive区域:所有被进行零延时操作的线程在inactive区域被激活,在被执行之前迁往active区域,因此,零延时的操作会延缓线程的执行时间。原创 2024-05-22 10:17:48 · 317 阅读 · 0 评论 -
UVM学习(2)uvm_sequence
uvm sequence机制是通过控制和产生一系列的事物,并通过某种方法将事物发送给driver的机制。(1)Sequence:当sequence的start的函数启动,sequence会执行body方法,产生事物,并将事物发送给sequencer放入FIFO中储存。Sequence会等待一个driver的完成响应,得到之后会退出该次事物的产生(2)Sequencer: 当sequencer启动时,首先会检查自身的default_sequence是否配置,如果配置了就会创建实体,设置该sequenc原创 2021-03-23 22:35:09 · 245 阅读 · 0 评论 -
UVM学习(1)uvm_test
UVM学习(1)uvm_test这个例子主要是在平台中使用run_test启动uvm_testuvm_test.sv如下:package test_package;import uvm_pkg::*;`include "uvm_macros.svh" class test_base extends uvm_test; `uvm_component_utils(test_base) function new(string name="test_base",uvm_component原创 2021-03-20 17:44:11 · 1903 阅读 · 0 评论 -
UVM学习(0)hello world
UVM学习(0)学习UVM首先需要在电脑上安装仿真软件,我这里安装的是questasim,然后新建一个project hello_world在这个project中新建两个文件hello.sv和sim.dohello.sv如下:`timescale 1ns/1ps`include "uvm_pkg.sv"import uvm_pkg::*;module hello; initial begin int a; `uvm_info("info","hello world!...原创 2021-03-20 16:55:55 · 228 阅读 · 0 评论