- 博客(82)
- 收藏
- 关注
原创 Verdi 覆盖率文件的打开、merge、存储
1、 打开Verdi,在图形化界面选中,打开数据库文件,选中要merge的.vdb文件,choose后可以在test name框中看到所有提交的用例,全选点开始OK,就开始merge,无尽的等待。2、在终端,进入regress_xxx目录下输入命令merge。当一次回归任务结束,会看到【xxx.vdb】文件夹的生成,之后,弹出verdi界面,也是无尽的等待。覆盖率合并中出现下面的,永远选wait。
2022-10-20 15:19:27
10902
1
原创 SV 有关覆盖率学习
覆盖率是衡量验证精度和完备性的数据指标;只有满足以下三个条件,才可以在仿真中实现高质量的验证:测试平台必须产生合适的激励来触发一个设计错误;测试平台仍然需要产生合适的激励使得被触发的错误可以进一步传导到输出端口;测试平台需要包含一个监测器(monitor)用来检测被激活的设计错误,以及在它传播的某个节点(内部或者外部)可以捕捉到她;没有任何一种单一的覆盖率可以完备地去衡量验证过程;即使可以达到100%的代码覆盖率,也不意味着100%地功能覆盖率。
2022-10-12 15:22:35
2315
1
原创 UVM——多向通信
多向通信(multi_directional communication),这种方式服务的仍然是两个组件之间的通信,但是是由多个通信端口来构成的,而不是多个组件之间的通信,毕竟多个组件的通信仍然可以由基础的两个组件的通信方式来构建;多向通信指的是,如果initiator与target之间的相同TLM端口数目超过一个时的处理解决办法;comp1有两个,而comp2有两个端口,对于端口的例化可以给出不同名字,连接也可以通过不同名字来索引,但问题在于comp2中需要实现两个,又因为。
2022-09-15 22:31:56
554
原创 VCS(DVE)仿真波形的存储和打开.vpd
点击【Save Current View(Wave.1)】,提示保存【.vpd.tcl】文件,这个并不是波形数据,而是波形的信号列表。
2022-09-05 18:51:01
7416
2
原创 interface中的clocking
重新写一下之前的例子,以前记录的,好多细节不太清楚,重新复习,还是一位加法器代码如下:2.2. 激励的产生2.3. 加法器3.4. 监测器3.5. 顶层文件3. 分析仿真结果上述代码直接仿真,可以看到监测器实在时钟下降沿触发打印的,也就是下面这段代码;在实际电路中,组合逻辑都会有延迟,但是我们的仿真器不能够直接在波形上看到这个延迟时间,所有的信号都会在@(posedge clk)的时间变化,真是电路信号的变化都会在@(posedge clk)的前一点或者后一点;vld是我
2022-09-04 22:59:14
2220
原创 Property使用
结合sequence(序列)对时序和逻辑的描述,property(属性)可以用来描述合计的确切行为;property可以在验证中用来做assumption,checker或者coverage;当使用assert关键词时,可以用作checker来检查设计是否遵循property的描述;当使用assum关键词时,可以作为环境的假设条件,对于仿真环境和形式验证均起到对激励进行假设的作用;当使用cover关键词时,可以将property是否真正通过作为断言覆盖率来衡量;
2022-09-02 22:08:27
433
原创 Sequence定义
例如,执行了一次burst read操作,期望读的数据和ack信号在接下来的4个周期内返回,但又不需要连续的4个周期,即可以使用[=4]来表示;t1序列可以用来匹配te1 ##2 te2,te1 ##3 te2,te1 ##4 te2,或者te1 ##5 te2;用来表示周期延迟符号,例如##n表示在n个时钟周期后,##0表示在当前周期,即交叠周期;,用来表示在连续两个采样周期内,表达式的值保持不变,如果满足,返回1,否则,返回0;用来表示一个事件的连续性,需要重复发生m次,但是并不需要在连续周期内发生;
2022-08-21 18:51:00
757
原创 Assertion介绍
用来与设计功能和时序作比较的属性描述检查设计的内容提高设计的可视度和调试能力检查设计特性在验证中是否被覆盖可读性好,可以用来服务于设计文档;用来检查算法模型的断言在形式验证(formal verification)中可以穷尽计算,找出可能的违例(violation);可以自由地打开或者关闭;一小部分子集甚至可以用来综合或者移植到emulation中,用来完成跨平台地移植;
2022-08-21 15:47:43
1212
原创 线程的控制与同步
线程即独立运行的程序;线程需要被触发,可以结束或者不结束;在module中的initial和always,都可以看做独立的线程,它们会在仿真0时刻开始,而选择结束或者不结束;硬件模型中由于都是always语句块,所以可以看成是多个独立运行的线程,而这些线程会一直占用仿真资源,因为他们并不会结束;软件测试平台中的验证环境都需要有initial语句块去创建,而在仿真过程中,验证环境中的对象可以创建和销毁,因此在软件测试端的资源占用是动态的;选择题1:下面关于仿真时程序和模块的说法哪些是正确的?.........
2022-08-07 00:38:26
390
原创 SV 类的虚方法 多态
类的成员方法可以加修饰词virtual(虚方法)虚方法是一种基本的多态结构一个虚方法可以覆盖基类的同名方法在父类和子类中声明虚方法,其方法名、参数名、参数方向都应该保持一致在调用虚方法时,它将调用句柄指向对象的方法,而不受句柄类型的影响endclassendclassmodule tb;// 子类句柄赋值给父类,父类句柄指向子类的对象 P1 . printA;endmodule。............
2022-08-04 21:00:11
2379
2
原创 MCDF顶层验证方案
多通道数据整形器(MCDF,multi-channeldataformatter),可以将上行(uplink)多个通道数据经过内部的FIFO,最终以数据包(datapacket)的形式送出。各个模块的验证环境是独立封装的,对外不需要保留数据端口,因此便于环境的进一步集成复用由于UVM自身的phase机制,在顶层协调各个子环境时,无需考虑由于子环境之间的例化顺序而导致的对象句柄引用悬空的问题httpshttpshttpshttpshttpshttpshttps。......
2022-07-24 16:34:17
407
原创 如何在qsim查看软件对象的实例?
先在qsim界面【view】打开【Locals】,然后在下面的地方点右键,选择【显示Processes】,层次结构里就会出现Designunittype为Process的#initial#选项,点击它,就能在Locals里面看见软件层次。在qsim中,下图显示的都是硬件层次hierarchy,并不能看到软件对象的层次。...
2022-07-24 14:01:32
301
原创 UVM——双向通信
UVM——双向通信1. 概述2. 分类3. transport1. 概述与单向通信相同的是,双向通信(bidirectional communication)的两端也分为initiator和targer,但是数据流向在端对端之间是双向的;双向通信中的两端同时扮演着producer和consumer的角色,而initiator作为request发起方,在发起request之后,还会等待response返回;UVM双向端口分为一下类型:uvm_blocking_transport_PORTu
2022-07-18 21:21:59
301
原创 UVM——单向通信
UVM——单向通信1. 概述2. 类型3. 方法4. 示例1. 概述单向通信(unidirectional communication)指的是从initiator到target之间的数据流向是单一方向的,或者说initiator和target只能扮演producer和consumer中的一个角色在UVM中,单一数据流向的TLM端口有很多类型:uvm_blocking_put_PORTuvm_nonblocking_put_PORTuvm_put_PORTuvm_blocking_get_P
2022-05-30 18:56:38
321
原创 UVM——TLM通信
UVM——TLM通信1. 概述2. 基本概念3. 分类4. 端口的使用1. 概述在芯片开发流程中,系统原型和芯片验证对项目的助推起到了关键作用系统原型,一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确到硬件比特级别、按照地址段访问、不依赖时钟周期的模型,该模型通常基于SystemC,而系统原型中各个模型通过TLM可以实现宽松时间范围内的数据包传输芯片验证,是在RTL模型初步建成之后,通过验证语言和方法学来构建验证平台。该平台的特点是验证环境整体基于面向
2022-05-17 21:48:10
571
原创 UVM入门实验2
UVM入门实验21. 一些注意点说明1.0. 从SV环境移植到UVM环境1.1. clone()函数的调用需要类型转换1.2. 端口类1.3. 创建对象放在new()中还是build_phase()1.4. mcdf_pkg里对象的创建和连接1.5. test中添加virtual interface1.6. tb中不能用set_interface()1.7. 组件的phase自动执行2. 代码2.1. chnl_pkg2.2. arb_pkg2.3. fmt_pkg2.4. reg_pkg2.5. mcdf
2022-04-20 22:12:35
1622
5
原创 线程间同步和通信,event semaphore mailbox
线程间同步和通信,event semaphore mailbox1. 概述2. 事件event3. wait_order()4. 旗语(semaphore)5. semaphore::get();6. semaphore::try_get()7. 信箱mailbox7.1. 信箱的内建方法7.2. mailbox::new()7.3. mailbox::num()7.4. 参数化信箱1. 概述测试平台中的所有线程都需要同步并交换数据一个线程等待另外一个,例如验证环境需要等待所有激励结束、比较结束才可
2022-04-16 22:39:17
1103
1
原创 线程控制 fork
线程控制、同步与通信1. 线程控制1.1. 并行线程1.2. 一些代码示例1.2.1. 多个initial并行执行1.2.2. 单个initial内串行执行1.2.3. fork...join内并行执行1.2.4. join_any和join_none1.2.5. wait fork1.2.6. disable fork1.2. 时序控制1. 线程控制1.1. 并行线程fork...join需要所有的并行的线程都结束以后才会继续执行fork...join_any则会等到任何一个线程结束以后就继续执
2022-04-16 20:06:50
1013
1
原创 SV学习(9)——随机函数、数组约束、随机控制
SV学习(9)——随机函数、数组约束、随机控制1. 随机函数2. 数组约束3. 随即控制1. 随机函数2. 数组约束3. 随即控制
2022-03-21 20:32:38
5178
2
原创 SV学习(8)——随机约束和分布、约束块控制
SV学习(8)——随机约束和分布1. 随即约束和分布1.1. 为什么需要随机?1.2. 要随机做什么?1.3. 声明随机变量的类1.4. 什么是约束1.5. 权重分布1.6. 集合成员和inside运算符1.7. 条件约束1.8. 双向约束2. 约束块控制2.1. 打开或关闭约束2.2. 内嵌约束1. 随即约束和分布1.1. 为什么需要随机?芯片体积增大,复杂度日渐提高,传统定向测试已经无法满足验证的需求,而随机测试的比例逐渐提高;定向测试能找到你认为可能存在缺陷,而随机测试可以找到连你都没想想到
2022-03-20 18:41:50
7392
4
原创 SV学习(6)——类的继承、句柄的使用
1. 类的成员访问类型public:如果没有指明访问类型,默认是public,子类和外部均可以访问成员protected:只有该类或者子类可以访问成员,外部不可访问local:只有该类可以访问成员,子类和外部均无法访问2. 类的继承 extendsclass cat; protected color_t color; // 类和子类可以访问 local bit is_good; // 类可以访问 function set_good(bit s); this.is_good =
2022-03-12 16:59:10
5093
1
原创 SV学习(5)——类和对象、类的成员
1. 类和对象概述class类:包含成员变量和方法,是软件盒子object对象:类的实例handle句柄(指针):用来指向对象的指针property属性(变量):在类中声明的存储数据的变量method方法:类中使用task或function定义方法,处理自身或外部传入的数据2. 声明类并创建对象class Transaction; bit [31: 0] addr, crc, data[8]; function void display; $display ("Transact
2022-03-12 10:33:19
2106
2
原创 Windows下Perl环境安装和使用
第一步,配置Perl环境strawberry-perl,官网下载https://strawberryperl.com/第二步,来一个文本编辑器Textpad,官网下载https://www.textpad.com/download第三步,完成代码print "Hello, Perl!\n";第四步,Windows Power Shell跑她补充:为啥用Textpad?想用notepad++、UE编辑器打开,但还不知道怎么用命令打开,给我报错...
2022-03-11 21:45:16
2667
原创 Vim编辑器常用命令
Vim编辑器常用命令Vim三种工作模式(命令模式、输入模式和编辑模式)Vim打开文件Vim快捷方向键和以单词为单位移动Vim插入文本Vim查找文本Vim替换文本Vim删除文本vim复制和粘贴文本Vim保存退出文本Vim光标移动Vim三种工作模式(命令模式、输入模式和编辑模式)使用Vim编辑文件时,默认处于命令模式。此模式下,可使用方向键(上、下、左、右)或k、j、h、i移动光标位置,还可以对文件内容进行复制、粘贴、替换、删除等操作;在输入模式下,Vim可以对文件执行写操作,类似于在Windows系统
2022-03-08 15:14:16
24476
2
原创 SV数组的方法——缩减、定位、排序
数组定位方法:min、max、uniquemin和max可以返回数组中的最小值和最大值,返回的是一个队列而非标量,这些方法也适用于关联数组。方法unique返回的是数组中具有唯一值的队列,即排除掉重复的数值,顺带排序;module min_max_unique ; int f[6] = '{1, 6, 8, 6, 2, 6}; // 定宽数组 int d[ ] = '{2, 4, 6, 8, 10}; // 动态数组 int q[$] = {1, 3, 5, 7}; // 队
2022-02-21 15:29:09
10050
1
原创 SV学习(4)——数据作用域和类型转换 $cast()
SV学习(4)1. 数据作用域2. 数据类型转换2.1. 静态类型转换2.2. 动态类型转换1. 数据作用域在一个静态任务、函数或者块内声明的变量默认情况下具有静态的生命周期并具有本地的作用范围。Verilog允许将函数和任务声明成自动的(automatic),这使得任务或函数内的所有存储空间都是自动的。SV允许一个静态的任务或函数内的特定数据被显式地声明成自动地(automatic)。声明成自动的变量具有调用块内的生命周期,并且在每次进入调用或者块内的时候i女性初始化。SV也允许变量被显式地声明
2022-01-23 20:31:36
5284
原创 SV学习(3)——接口interface、modport、时钟块clocking
接口interface、modport、时钟块clocking
2022-01-23 16:14:09
17813
8
原创 SV学习(2)——过程语句、函数和任务、变量声明周期
4. 字符串SV引入了一个字符串类型(string),他是一个大小可变、动态分配的字节数组。在Verilog中,字符串文本为一个具有宽度为8的整数倍的压缩数组。当一个字符串文本被赋值到一个大小不同、整型压缩数组变量的时候,它或者被截短到变量的大小或者在左侧填补0.SV中,字符串文本的表现行为与Verilog相同,但是SV还支持字符串类型,可以将一个字符串文本赋值到这种数据类型。当使用字符串元类型来代替一个整型变量的时候,字符串可以具有任意的长度并且不会发生截短现象。当字符串文本赋值到一个字符串类型或者在
2022-01-20 17:08:48
6070
原创 SV学习(1)——数据类型
SV语法(1)——数据类型1. 两态数据类型2. 枚举类型和用户自定义类型2.1. 枚举类型2.2. 用户自定义3. 数组与队列3.1. 静态数组与压缩数组3.2. 动态数组3.3. 关联数组3.4. 队列4. 字符串5. 结构体和联合体6. 常量7. 文本表示8. 操作符和表达式1. 两态数据类型SV引入了两态的数据类型(1/ 0 )来减少仿真器对内存的使用和提高仿真的运行效率,其中bit是无符号数,其他四个是有符号数:shortint、int、longint、byte bit a ;
2022-01-14 22:20:03
7805
1
原创 基于Sobel算法的边沿检测设计与实现
基于Sobel算法的边沿检测设计与实现1. 边缘检测2. 实战演练2.1. matlab进行灰度图像生成2.2. sobel_ctrl控制模块1. 边缘检测边缘检测,针对的是灰度图像,顾名思义,检测图像的边缘,是针对图像像素点的一种计算,目的是标识数据图像中灰度变化明显的点,图像的边缘检测,在保留了图像的重要结构信息的同时,剔除了可以认为不相关的信息,大幅度减少了数据量,便于图像的传输和处理边缘检测的实现方式:基于查找的方式、零穿越Sobel算法属于基于查找的方式2. 实战演练将图像用软件转
2021-10-14 18:49:23
1710
1
原创 FPGA 乒乓操作
FPGA 乒乓操作乒乓操作是一个主要用于数据流控制的处理技巧,典型的乒乓操作如下图所示外部输入数据流通过“输入数据选择控制”模块送入两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(Dual RAM)、SRAM、SDRAM、FIFO等在第一个数据缓冲周期,写“数据缓冲1”模块在第二个数据缓冲周期,读“数据缓冲1”模块,写“数据缓冲2”模块在第三个数据缓冲周期,写“数据缓冲1”模块,读“数据缓冲2”模块. . . . .这里就用到了乒乓操作完成数据的无缝缓冲和处理
2021-09-17 12:15:33
4549
原创 基于RS232的VGA图像显示
基于RS232的VGA图像显示1. matlab工具使用2. 实验目标3. 代码实现4. 遇到的问题基于ROM的VGA图像显示方式,需要提前将图片数据转换成.coe文件,然后初始化ROM-IP,其实还是占用FPGA内部的RAM存储资源,能够显示的图像数据大小是有限的,并且每次只能显示一张图片,想要显示不同的图片就得重新用.coe文件初始化ROM-IP改进一下,把串口RS232也加上,通过串口发送图像数据到FPGA内部,然后再用VGA显示出来,想要显示不同的图片,就只需要通过串口发送不同的图像数据就可以了
2021-09-09 14:24:27
1613
1
原创 串口RS485
串口RS485串口简介实验目的串口简介RS232属于UART串口的一种常用的通信协议,RS485也是RS485是双向、半双工通信协议,信号采用差分传输方式,允许多个驱动器和接收器挂在总线上,其中每个驱动器都能够脱离总线差分信号,赋值相同,相位相反根据电压差值的大小判断逻辑1/0差分信号有更好的抗干扰能力,如果碰到了干扰信号,对两路差分信号的影响是相同的,根据电位差,判断干扰部分的逻辑值为0RS232支持全双工,RS485支持半双工RS485和232使用相同的通信协议,数据帧结构相同(起始位
2021-09-05 19:32:24
2124
原创 基于ROM的VGA图像显示
前面已经实现了VGA等宽颜色彩条、VGA字符显示,显示的色彩信息都是通过代码生成的,这一篇博客实现显示已存在的图片VGA显示器驱动设计与验证VGA显示器字符显示基于ROM的VGA图像显示1. 实验目的2. 代码实现锁相环IPvga控制模块vga图像数据生成模块rom_picvga_pic顶层模块测试验证1. 实验目的在等宽彩条背景上,显示存储在ROM中100*100大小的图显示在VGA显示640 * 480 @60最中间位置ROM其实用的还是FPGA内部的RAM存储资源2. 代码实现锁相环
2021-09-04 17:47:35
5738
2
原创 串口RS232
串口RS2321. 串口简介2. 串口RS232接口3. 代码实现UART接收模块UART发送模块顶层模块1. 串口简介通用异步收发传输器,英文全称Universal Asynchronous Receiver/Transmitter,简称UARTUARTUART是一种通用的数据通信协议,也是异步串行通信口(串口)的总称,它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的数据转换成并行数据UART是异步串行通信口,SPI是同步的,双方约定好使用频率一致的时钟,主机发送时钟UAR
2021-09-01 19:36:55
5148
原创 FIFO深度计算
FIFO有多大??case1:fA > fB 读写之间没有空闲周期solcase2:fA > fB 读写之间存在周期延迟solcase3:fA > fB 读写之间存在空闲周期solcase4:fA > fB 给定wr_enb和rd_enb占空比solcase5:fA < fB 读写之间没有空闲周期solcase6:fA < fB 给定wr_enb和rd_enb占空比solcase7:fA = fB 读写之间没有空闲周期solcase8:fA = fB 给定wr_enb和r
2021-08-24 21:05:02
1455
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人