- 博客(111)
- 收藏
- 关注
原创 uvm_reg_bit_bash_seq 源码分析
文章目录1.源码解析2. 知识点补充有关 uvm_reg_hw_reset_seq 源码请看: uvm_reg_hw_reset_seq 源码 。uvm_reg_bit_bash_seq 会对reg_model 中每个可以读写的寄存器域分别写入 0 、1,然后再读回,用于检查寄存器的每个bit的读写功能是否正常。1.源码解析1.先将reg_model 复位。2.通过搜索 resource_db,判断哪些 reg_block 和 reg 不需要测试。然后对每个需要进行测试的reg 进行 sin
2022-01-10 15:36:03
6321
9
原创 uvm_reg_hw_reset_seq 源码分析
文章目录1.代码解析2.知识点补充设置reg不测试关于resource_dbuvm_reg_hw_reset_seq用于初期检查DUT中的寄存器硬件值是否与reg_model 中的复位值一致,防止设计在实现时弄错复位值。1.代码解析1.先reset reg_modle 。将reg_modle中的镜像值和期望值复位。2.判断是否在外部设置了哪些 reg_block 不需要进行 reset 测试 。3.判断是否有哪些 reg 不需要测试。4.对所有需要进行测试的 reg 通过前门的方式读回DU
2022-01-10 15:21:54
3131
原创 Arbiter的仲裁方案 — 数字IC验证
最近在做一个对同一个RAM访问的 Aribiter,由此想到了一些有关arbiter仲裁方案的思考。下面介绍几种方案,并分析其中的优劣。方案一:固定优先级 比如我有8个 port 同时向 Aribiter 发送请求,Arbiter的总裁波形有两种情况,如下:情况一:情况二:考虑最 worse 的情况,根据上面冲裁方案(情况一),由于port8的优先级最低,最worse情况如下:当前port1、…port7 同时request,进入仲裁后,下一拍 port8 request
2021-12-24 19:09:06
5596
原创 正则表达式
????通过perl来介绍正则表达式。快速入门 先写一个最简单的正则表达式,查到是否有匹配的字符串,如下:$_ = "little verifier";if(/little/){ # 查找 little 字符 print "find it!\n";}else{ print "cannot find it!\n";} 如上,我们可以用 / 斜杠符号作为开始匹配正则。用/ … /的方式,在其中写正则表达式。其实/ … / 的方式是 m 匹配的简写,你可以用m{ }、m( )、
2021-12-23 10:57:11
983
1
原创 Perl脚本 — 数字IC验证
文章目录一、基本语法1.1 标量1.1.1 数字1.1.2 字符串1.1.3 标量的定义1.1.4 标量的赋值1.2 列表与数组1.2.1 定义列表与数组1.2.2 数组的索引1.2.3 关于 qw 的使用1.2.4 关于$_的使用1.2.5 数组的存取1.3 上下文1.4 子程序1.4.1 定义子程序1.4.2 传递参数1.4.3 静态变量二、输出2.1 读取文件2.2 输出文件三、哈希一、基本语法1.1 标量 Perl中两个最基本的变量,即标量和列表。标量可以是数字和字符串。1.1.1 数
2021-12-22 18:10:33
3882
2
原创 typedef class 的使用 — SystemVerilog,sv
在同一个文件中有好多的类,如果两个类之间都需要另一个类的句柄。,当编译器在处理第一类声明的过程中,编译器遇到对第二个类C2的句柄声明,此时对第二个类的引用还未定义,编译器这时会一个未定义的错误。如下所示: 这时我们就可以使用typedef class的方式,将第二个类提前声明。此外,诸如 sequencer 中我们一般不做特别的处理,所以我们可以使用如下的方式,可以避免去再写一个sequencer 的类。typedef uvm_sequencer#(my_transaction) my_
2021-12-21 11:33:09
5694
2
原创 VCS的ralgen命令产生UVM寄存器模型
文章目录前言一、寄存器描述表格二、生成 .ralf 寄存器文件2.1 field2.2 register2.3 register block2.4 system三、产生UVM寄存器模型前言 在验证时,寄存器模型是必不可少的一个环境,且在项目中可能面临着需要不断更新迭代的需求。那么如何快速建立 UVM寄存器模型 呢?采用VCS ralgen脚本的主要步骤如下:中心化的寄存器描述文件,如 ods、CSV、XML等;根据寄存器描述文件产生ralgen需要的 .ralf 格式的寄存器文件;vcs的
2021-12-16 17:05:06
6246
6
原创 以太网交换机的通识
前言在介绍交换机之前,首先要了解的 OSI 七层网络模型。1.OSI 七层网络模型序号名称描述一层物理层(PHY)负责驱动网络上信号的收发器,发送和接受位 。二层数据链路层(MAC)负责创建在网络上传送的帧,包含mac地址的帧。三层网络层(IP)负责创建在网络上传送的包,包含IP地址的包。四层传输层层(TCP/UDP)负责不同主机上的应用程序之间建立连接。五层会话层六层表示层七层应用层应用层是一组需要网络通信的应用程
2021-12-14 16:53:40
4006
原创 计算机网络笔记
文章目录一、基本概念1.1 计算机网络的分类1.2 计算机网络的性能指标1.3 OSI参考模型一、基本概念 计算机网络是互联的、自治的计算机集合,是为了实现数据通信、资源共享、分布式处理等功能,其主要由硬件(光纤、路由器、交换机等)、软件(QQ、微信等)、协议组成。1.1 计算机网络的分类按照不同角度分,如下:按照分布范围分:广域网WAN(使用交换技术)、城域网MAN、局域网WNA(使用广播技术)、个人局域网PAN ;按使用者分:公用网(如电信、移动)、专用网(如军队银行、铁路系统网路)
2021-12-13 11:44:16
2757
原创 减少仿真时的内存占用-- systemverilog,UVM
????此篇文章会随着工作年限的增加,持续更新…文章目录1. transaction 的例化方案一方案二方案二小结1. transaction 的例化你是不是习惯性的在 monitor 的 forever 循环中不停的例化 transaction 对象,如下:my_transaction trans;task my_monitor::main_phase(); forever begin ... // wait sample condition trans = new("trans");
2021-12-08 17:55:09
1654
原创 UVM寄存器模型的作用和优势?
文章目录一、对寄存器模型的配置怎么反映到总线上?二、怎么保证寄存器模型与寄存器保持一致 ?三、寄存器模型的优势?????寄存器模型的基础知识可以看:UVM寄存器模型寄存器模型是根据寄存器描述文档所建立,是真实硬件寄存器在软件世界的模型。在验证的过程中,只有先保证寄存器的功能正确,才能使寄存器模型能够准确反映硬件的状态。那么怎么通过寄存器模型完成对寄存器的访问?寄存器模型又具有什么样的优势呢?一、对寄存器模型的配置怎么反映到总线上?这其中关键的一环就是adapter的事务级转换 和 map 提供寄
2021-11-30 10:55:50
3677
1
原创 UVM仿真时@事件无效
这两天出现了一个很让我费解的bug,暂时还没有找到具体的原因。如下:BUG: @(vif.mon_cb) 时钟事件没有等待一个clk。source:有可能相邻的时钟事件被合并。 代码如下: 仿真log如下:solution:方案一:不要用 clocking 的方式方案二:如果非要用 clocking ,可以加一个很小的 delay。...
2021-11-22 16:57:21
960
1
原创 UVM中sequence的启动方式
你是否在面试或笔试中被问到了sequence有哪些启动的方式?今天就来梳理一下sequence的启动到底有哪些。
2021-11-22 16:48:13
2649
1
原创 域的自动化—UVM
????最近在写代码时,常常忽略了field automation机制带来的便利性,这里做一个全面的总结。下面我将分为 object 和 component 类型的对象中做域的自动化。首先,常用的宏包括:uvm_field_int(arg,FLAG) ,需要传递:变量+ 标志位uvm_field_enum(T,arg,FLAG) ,需要传递:类型+ 变量+ 标志位uvm_field_object(arg,FLAG)uvm_field_string(arg,FLAG)uvm_field_arr
2021-11-18 13:44:09
4468
原创 dump fsdb波形文件
前言dump fsdb文件主要有两种方法:在Verilog的TB中调用系统函数;使用 ucli / tcl的命令行;一、调用系统函数在TB里面直接调用系统函数,操作是比较简单,但是受限比较明显,其实不推荐使用。1.tb调用系统函数可以直接在TB中加入这样一段Verilog代码,initial begin if($test$plusargs("DUMP_FSDB")) begin #仿真时添加条件判断是否需要dump fsdb $fsdbDumpfile("TEST.fsdb");
2021-11-09 10:40:12
7522
1
原创 Makefile脚本启动VCS+Verdi
文章目录一、快速入门二、Makefile的语法1.语法格式2.命令执行3.变量三、VCS仿真1.VCS常用命令注:主要侧重于VCS仿真时的Makefile入门介绍。一、快速入门Makefile带来的好处就是自动化编译和仿真,只需要一个 make 命令。make是Linux下的二进制程序,在shell命令行键入make命令时,将自动寻找名称为“Makefile”的文件作为编译文件。格式:make [option] [target] …二、Makefile的语法1.语法格式形式一:tar
2021-11-08 19:36:56
14002
3
原创 Python的脚本(二)
下面关于一些Python处理文件的脚本。一、解析CSV文件产生Systemverilog代码csv库中常用的方法,包括:方法描述reader( )返回一个列表对象,逐行读csv文件。默认每一行读取一个字符串组成的列表csv.DictReader( )返回一个字典对象,逐行读取文件。以第一行为每一列的key值,对象.write( )向文件中写入从一个最简单的解析csv文件的脚本开始。import csv #导入Python标准库sourceFile =
2021-11-04 17:58:38
1236
原创 Python学习(一)
快速入门1.Linux系统中是可以直接使用Python进行编程,具体如下:进入Python:在linux的Terminal中输入 Python ,进入Python的命令行;退出Python:在linux的Terminal中输入quit() 或 exit() 或 ctrl +d ,再回车,退出Python的命令行。2.python的源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发。3.Python程序的文件扩展名通常都是 .py。4.执行Python程序的方式:在
2021-11-04 17:27:52
1047
原创 从材料到芯片验证,是逃难还是人生的机遇?
大家好,我是小小verifier。22届秋招进入尾声,一直想写这一篇转行经验贴,分享我的转行历程,并给即将要转行IC验证的同学一点小小的建议。 我是材料双非本、211硕,因为遇到神仙课题组,彻底地断了我想读博的念头。近三四年来,课题组每届超过70%以上延期拿学位甚至拿不到学位。本来就身处四大天坑,外加没有学位,找工作的时候连乞丐都不如。无能狂怒之后的无奈,心里着实咽不下这口气,我开始尝试各种转行的可能。2020年2月份,疫情爆发让我有幸在家自学了4个月的java,然后因为种种原因放弃了转Java的打
2021-10-17 21:18:02
5997
39
原创 AXI协议
前言AXI是一个并行总线,其主要特点包括:读写通道分离;支持多次对数据操作的请求(multiple outstanding address),一般支持8、16、32个outstanding;写地址和数据之间不是严格的先地址再数据,有些可能是先数据再地址;支持不对齐的数据传输;支持乱序访问;burst传输时不需要像AHB那样每笔传输都指定它的burst类型和地址,只需要指定首地址和对应的属性;channel signalsAXI 有5个通道,包括Write Address Channel
2021-09-13 23:08:07
4358
原创 接口interface的定义和使用(SystemVerilog)
文章目录概念一、特点二、modport三、clocking时钟块四、参数传递五、SVA断言和断言覆盖率六、产生时钟和复位信号概念随着设计的日益复杂,设计中的不同功能的设计会被切割成不同的模块,模块与模块之间通信端口随着设计的复杂程度增加而变得很多,测试平台与不同模块和子模块DUT之间的端口连接也就变得更加复杂。这时,如果我们仍然采用对每个端口一一连接的方式,显然是有很承重的负担,日后代码的维护工作也变得很困难。接口就起到一根很粗电缆线的作用,连接着设计与验证环境。如下,当两个模块module之间不采用
2021-09-05 23:35:42
7423
原创 function和task的定义(systemverilog)
文章目录一、function1.1 function的特点1.1 function的定义① 参数方向② 返回值③ 静态和动态function二、task2.1 task的特点2.2 task 的定义① 参数方向② ref的使用③ 静态和动态task三、function 和 task 的区别在sv的class中定义的方法分为两种:.function 和 task。下面将介绍它们的特点和声明方式,以及它们之间的异同。一、function1.1 function的特点function中不可以内置耗时语句
2021-09-04 00:43:43
5004
2
原创 类的封装、继承和多态(systemverilog)
文章目录OOP的概念1. 创建对象2. 对象的销毁3. 类的成员3.1 成员的访问权限3.2 this 和 super的区别3.2 类与的差异4. 类的继承OOP的概念面向对象的编程语言有三大核心特征:封装、继承和多态。类是抽象出事物的一个共性。首先"男人"和"女人"都是人,那么"人"就是一个人类,男人类和女人类分别是继承于这个人类。男人和女人都要吃饭,都具有年龄和姓名,所以人类中就有两个成员变量年龄和姓名,有一个成员方法吃饭这个动作,把这些属性和行为封装在一个类中,就是封装。当男人类创建一个男
2021-09-03 22:26:19
2904
6
原创 深拷贝和浅拷贝(systemverilog)
拷贝的含义首先深拷贝和浅拷贝都是指拷贝一个对象,而不是句柄。当只拷贝对象中的成员变量和声明的句柄时,称为浅拷贝。而深拷贝会复制对象中的所有成员变量以及对象中嵌套的其他类的实例的内容。举个例子,比如下面这个套娃(类的嵌套),当拷贝A的对象时:class A ; int [31:0]data_b; B b; //声明句柄b,初始值为null function new(); b = new(); //句柄b 指向一个对象 endfunctionendclassclass B
2021-09-02 21:47:24
2055
2
原创 static 和 automatic 修饰(systemverilog)
静态变量和动态变量变量可以分为动态(automatic)和静态(static),静态变量的特点:该变量将被这个类的所有实例所共享,并且使用范围仅限这个类。静态变量在声明时就应该对其初始化,它只初始化一次,也就是在仿真0时刻就存在。可以认为声明在类中的静态成员变量,它是保存在类中,而不是在对象中,它会一直存在的,不会因为对象被销毁而消失。可不用实例化这个类,通过 class::static_variable 的方式获取静态变量。动态变量的特点:动态变量是类在实例化时,即调用构造函数new(
2021-09-02 17:12:39
4951
2
原创 I2C的RTL代码设计
文章目录一、简介二、设计架构三、I2C的PAD设计四、寄存器的配置1. Prescale 寄存器( PRElo、PREhi )2. 控制寄存器(CTR)3. Transmit寄存器(TXR)4. Recieve寄存器(RXR)5. 状态寄存器(SR)五、RTL代码实现????:I2C协议介绍请看:I2C协议一、简介I2C是一个低速、多master多slave的单端串行数据总线,有两根线(SCL串行时钟线和SDA串行数据线)构成,高速模式可达到3.4MHz的传输速率,最高支持5MHz传输(utra-
2021-09-01 18:28:09
4707
3
原创 AHB2APB 同步桥的设计代码(Verilog)
????关于AHB2APB的设计请看:AHB2APB设计????关于AHB2APB的验证请看:AHB2APB验证????关于AHB2APB的验证请看:AHB2APB验证数据是否需要寄存一拍的控制信号的产生,如下代码: //------数据寄存------- wire rdata_reg_param; // REGISTER_RDATA,寄存读数据 wire wdata_reg_param; // REGISTER_WD
2021-08-25 00:14:36
11457
15
原创 设计AHB2APB同步桥
设计注意事项1.HREADYOUT信号从下图我们可以看到,master和slave都会有一个HREADY信号输入,slave产生HREADYOUT信号经过MUX后形成HREADY信号,如果刚开始HREADYOUT信号均为低,系统就会处在等待状态。要求:HREADYOUT信号在复位后必须为高。2.Memory Map的边界地址对齐当AHB总线上的master对slave进行读写时,发出的地址经过AHB总线的译码器(通过内存映射表) 产生该地址所对应slave的选择信号,选中对应的slave;这样就
2021-08-21 00:40:21
17750
6
原创 questasim编译报error: Declarations must precede statements. Look for stray semicolons.
error原因当我们把变量声明在这里时:编译会报下面的error:** at /home/verifier/project/ahb2apb/dv/vip/user_ahb_mst/ahb_transfer.sv(93): Illegal declaration after the statement near line ‘90’. Declarations must precede statements. Look for stray semicolons.解决方法将变量声明放在funct
2021-08-20 02:38:08
1707
原创 异步FIFO代码及仿真结果(Verilog)
文章目录1.代码截图2.仿真结果3.代码注:代码附于文末注:因为CSDN不支持Verilog高亮,先用截图的代码便于阅读。1.代码截图2.仿真结果仿真结果如下:空满标志生成正常读写地址指针计数器正常数据存取正常格雷码逻辑正常指针跨时钟域同步正常3.代码代码如下:module asy_fifo#( parameter WIDTH=8,//FIFO的位宽 parameter DEEPTH=32,//FIFO的深度 parameter POINTER_WIDTH=
2021-08-17 17:40:04
3120
8
原创 `ifndef 、`define和`endif的理解
你可能与我一样苦恼为什么别人写的代码每个文件中都用`ifndef 、define 和endif宏来定义,不知道为什么需要这几句话。下面将详述这几个的用法。目的使用 ifndef 、define 和endif的目的:为了防止同一个文件在编译时被重复编译,引起多重定义的问题。如下:在文件开头和结尾定义`ifndef APB_MASTER_DRIVER_SV`define APB_MASTER_DRIVER_SVclass apb_master_driver extends uvm_driver#(
2021-08-16 21:18:08
9914
7
原创 芯片验证时常用的Linux命令
文章目录快速入门一、修改、移动、复制和删除文件与文件夹1.1 创建文件和文件夹1.2 批量修改文件名和文件内容1.3 移动、复制文件和文件夹1.4 删除文件夹和文件二、搜索文件和文件内容2.1 搜索文件夹和文件2.3 搜索文件中的内容三、打开文件????本文思想是按实际需求给出例子。快速入门linux 的文件以文件树的形式保存,所以 linux 入门需要会切换目录,并查看目录的内容。 如下:命令描述示例cd切换目录,注意绝对路径和相对路径1)cd ~/shares/pr
2021-08-05 23:22:28
1878
原创 验证AHB2APB同步桥
文章目录项目SPEC相关协议测试点分解设计测试用例项目SPEC相关协议中文协议可以看:AHB5协议和APB4协议ARM英文原版协议:ARM官方文档网址测试点分解❔分解角度:SPEC文档、AHB协议、APB协议序号测试项目预期结果1APB协议(APB2 APB3 APB4)中的信号2APB clock频率 <= AHB clock 的频率,频率范围3AHB的不同BURST类型数据的读写访问BURST类型和数据位宽的各种排列组合,包括: 8
2021-08-04 00:08:09
13565
6
原创 I2C中START BYTE?为什么需要START BYTE?
什么是START BYTE?START BYTE会将开始条件的过程延长,就是在I2C生成START 条件之后,继续发送1个byte字节信号(0000_0001),master持续的将SDA线拉低7个周期。为什么需要START BYTE?如果微控制器具有片上硬件I2C总线接口,那它可以被编程为只能被总线的请求中断。当微控制没有这样的接口时,它必须不断地通过软件来监控总线,不断地轮询或监视总线的行为,这势必影响了数据传送的安全性,也增加了功耗。在这种情况下,如果采取正常情况下的start条件(在SCL为
2021-07-31 22:13:20
3509
2
原创 IC验证面试-如何发送错误异常激励?
文章目录如何发送错误激励前言方法1 - 关闭约束方法2 - SV中约束重载方法3 - UVM工厂覆盖如何发送错误激励前言本文均以产生异常的CRC校验位为例。首先错误的激励是异常情况,而大多数的情况都是发送正常的激励。如果直接在transaction中添加一个错误激励的标致位,如下:class my_transaction extends uvm_sequence_item; rand bit[7:0] addr rand bit[31:0] data; rand bit[31:0] c
2021-07-31 14:23:01
2611
原创 I2C虚拟项目笔记(一)-virtual sequence
文章目录1. rkv_i2c_master_abrt_10b_rd_norstrt_virt_seq2. rkv_i2c_master_abrt_7b_addr_noack_virt_seq1. rkv_i2c_master_abrt_10b_rd_norstrt_virt_seq测试的目的:这个造的测试环境是 产生TX_ABRT_SORTCE中的ABRT_10B_RD_NORSTRT中断。ABRT_10B_RD_NORSTRT中断:master尝试在10bit地址下read数据,但是此时RESTAR
2021-07-30 22:42:10
13581
37
原创 DRAM和SRAM的区别
文章目录一、RAM介绍DRAM和SRAM区别1. 内部结构不同2. 寻址方式不同二、ROM一、RAM介绍RAM,即随机存储器或者易失性存储器,因为断电后就失去保存的数据。分为SRAM和DRAM:DRAM,即动态随机存储器,一般用于内存,需要不断地刷新电路,否则数据就消失了。SRAM,即静态随机存储器,一般用于CPU中的cache(高速缓冲存储器),不需要不停地刷新电路来保存数据。特点如下:下面详细阐述一下区别:DRAM和SRAM区别1. 内部结构不同SRAM是依靠触发器
2021-07-29 23:32:03
45288
8
原创 存储器的结构
存储器芯片的基本结构控制逻辑给出读写操作信号:读操作时,控制逻辑会给出信号,读出相应的存储器单元的数据,然后交给数据寄存器。写操作时,数据寄存器会先寄存数据,然后通知控制逻辑给出写信号,写入到相应的存储器元。如下图所示,一个存储体是由很多个存储元所组成,通过一条控制线(红色线)并行控制多个存储元,称为一个存储单元。然后通过一条数据线读出或写入数据到这一列的存储元,这些同一时间存取的"10100011"数据称为存储字,这个存储字长为 1 Byte。为了确保一次只能存取一个存储单元(一行存储
2021-07-29 23:19:47
3796
原创 tcl脚本(二)- 实际用于仿真
声明:以下代码均出自《路科验证》。仅以学习参考为目的,不可作为其他商业用途。因为CSDN没有tcl语法高亮的缘故,我就以截屏图作为解析了:无注释版代码放在文末。PS:啰嗦一句,如果是初学,要注意以下这里相对路径的写法。不用看的可以直接往下拉。所以脚本中setenv DUT_SRC …/mcdf/v0 路径就是:当前 lab5 目录下,…/ 向上一级,到 SVlab 目录,然后 SVlab 目录目录下的mcdf/v0 文件夹就是设计文件所在处。无注释版代码:#======.
2021-07-28 14:45:07
1992
2
原创 解决Linux下Questasim中代码字体非常小
Questasim的source窗口里代码字体非常小你是不是也遇到这样的问题,在使用Vmware时,Questasim的代码字体非常小,小到完全看不见,连断点都没办法标记。下面我给出我摸索好久的解决办法,分享给大家。1.首先,版本是Questasim 10.7c,在Vmware16中打开,情况如下:不多逼逼,直接上图开搞:给textFontV2设置值:monospace 12 normal roman这里一定要注意啦,点完apply之后,不要点ok,直接关闭窗口。...
2021-07-27 22:33:16
6148
18
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人