- 博客(14)
- 收藏
- 关注
原创 UVM的寄存器模型
概述寄存器我们知道寄存器是模块之间交谈的窗口,一方面可以通过读出寄存器的状态,获取硬件当前状态,另一方面可以配置寄存器,使寄存器工作在一定的模式之下,验证寄存器,即保证了硬件之间通信的正确性。通常来说,DUT中会有一组控制端口,通过控制端口,可以配置DUT中的寄存器,DUT可以通过寄存器的值来改变其行为。这组控制端口就是寄存器的配置总线。寄存器模型作用UVM的寄存器模型是一组高级抽象的类,用来对DUT中具有地址映射的寄存器和存储器进行建模。它非常贴切的反映DUT中寄存器的各种特性,可以产生激
2022-01-08 16:44:42
1620
翻译 功能覆盖率
概述覆盖率是用来衡量设计验证完备性的一个通用词语,随着逐步覆盖各种合理的组合,仿真会慢慢勾画你的设计情况。覆盖率工具会在仿真过程之中收集信息,进行后续处理并且得到覆盖率报告。通过这个报告找出覆盖之外的盲区,然后修改现有的测试或者创建新的测试来填补这些盲区。通过分析覆盖率数据来决定如何修改测试集。如果覆盖率稳步增长,那你只需要添加新的随机种子继续运行,或者加长测试的运行时间。如果覆盖率增速放缓,那你需要添加额外的约束来产生更有用的激励。当覆盖率稳定下来,而设计的某些部分尚未被测试过,那你需要创建更多新
2021-11-11 12:04:38
3674
翻译 线程的同步
很多情况之下,由信箱连接的两个线程运行时步调应该是一致的,这样生产方才不会跑到消费方的前面。这种方法的好处是,它能使生成激励的整个链条运行时步调一致。最高层的发生器需要等到底层的最后一个事务发出以后才能结束。如果要想生产方和消费方两个线程步调是一致的,那就需要额外的握手信号。如下所示,生产方和消费方是两个类,使用信箱交换整数但两者之间没有明显的同步信号。生产方直到结束,消费方都还没有启动。program automatic unsynchronized; mailbox mbx;
2021-11-08 13:16:29
181
原创 线程和线程间的通信
介绍Verilog的寄存器传输级上通过initial和always块语句,实例化,连续赋值语句来模拟并发的活动。为了模拟和检验这些语句块,测试平台使用许多并发执行的线程。如果按照软件的思维理解硬件仿真,仿真各个模块是独立运行的线程(thread),模块(线程)在仿真一开始便并行执行,除了每个线程会按照内部产生事件来触发过程语句块之外,同时还依靠相邻模块间的信号变化来完成模块之间线程的同步。这个过程需要借助线程之间的通信(IPC)来完成。如Verilog事件,事件控制,wait语句,SV信箱和旗语。什
2021-11-08 10:44:32
598
原创 SV随机化知识点整理
随机化介绍为什么需要随机化?(1)随着设计逐渐增大,定向测试已经无法满足验证的需求(2)定向测试能找到你认为可能存在的缺陷,随机测试还可以找到你没想到的缺陷(3)虽然随机测试环境要求比较复杂,但是相对于定向测试,可以减少相当多的代码量什么需要随机化?(1)器件配置:大多数测试仅仅使用刚刚退出复位状态的设计,这像是PC机刚安装完操作系统之后还没安装任何程序就对操作系统进行测试,所得到的性能普遍是非常好的,但在现实里,DUT的配置越来越随机。(2)环境配置:通常你设计的器件在一个包含
2021-11-03 15:12:58
5633
原创 SV中面向对象编程基础
验证为什么需要OOP(面向对象编程)?验证环境不同组件及其功能和所需要处理的数据内容是不相同的,但是不同环境的同一类型的组件所具备的功能和数据内容是相似的,所以验证世界的各个组件角色明确,功能分立,使用面向对象编程与验证世界的构建原则十分符合。激励生成器:生成激励内容驱动器:将激励以时序形式发送到DUT监测器:监测信号并记录数据比较器:比较数据OOP术语(1)类(class):是软件盒子,包含变量和子程序的基本构建块。Verilog中对应的是模块(module),是硬件盒子...
2021-10-30 17:24:28
1179
原创 程序块(Program Block)和时序区域(Timing Region)
设计和测试平台都用module封装后,它们之间可能会出现竞争状态。这个问题的根源在于设计和测试平台的事件混合在同一个时间片内,我们希望存在一种方法可以在时间轴上分开这些事件,就像分开代码那样。那System Verilog如何将测试平台的事件和设计的事件分开调度的呢?在SV中,将测试平台的代码封装在程序块(Program Block)之中,值得注意的是,程序块不能有任何的层次级别,例如模块的实例,接口等等。SV主要调度区域 区域名 ...
2021-10-29 22:33:51
1601
原创 接口知识点整理
真实的设计往往含有数百个端口信号,在verilog中需要数页代码来声明信号和端口,这些连接都很容易出错的,因为一个信号可能流经几个设计层次,它必须一遍一遍地被声明和连接。更糟糕的是如果想添加一个新的信号,它必须在多个文件中定义和连接。SV中引入接口可以解决此问题。interface arb_if(input bit clk); logic [1:0]grant,request; logic rst;endinterface //仲裁器的简单接口 module arb(a
2021-10-27 19:20:57
297
原创 systemverilog数据类型整理
内建数据类型Verilog将变量类型(reg,wire)区分得如此清楚是因为它作为硬件描述语言,倾向于设计人员自身懂得所描述的电路哪一些变量应实现为寄存器,哪一些变量被实现为线网类型。然而SV作为侧重于验证的语言,可以使用logic变量进行单纯的赋值操作,而这些变量只属于软件环境的构建。数据类型有如下的分类:四值逻辑:integer,reg,logic,net-type(wire,tri) 二值逻辑:byte,shortint,int,longint,bit有符号类型:byte,shor..
2021-10-25 15:28:13
450
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人