- 博客(55)
- 收藏
- 关注
原创 RISCV基础知识
ISA 命名格式:RV [###] [abc…xyz]RV:用于标识 RISC-V体系架构的前缀,既 RISC-V 的缩写。[###] :{32, 64, 128} 用于标识处理器的字宽,也就是处理器的寄存器的宽度(单位为bit)。[abc…xyz] :标识该处理器支持的指令集模块集合。例子:RV32IMA,RV64GC增量化:即下一代兼容上一代处理器的ISA模块化:指令集的构成由1个基本整数指令集加上多个可选的扩展指令集组成,基础指令集是固定的,永远不会改变。
2025-02-08 20:29:40
763
原创 IC验证面试常问问题
UVM通过一系列复杂的机制,在验证环境中构建了一个和DUT侧寄存器组完全等价的寄存器模型寄存器是硬件与硬件之间交互的窗口uvm_reg_filed: 寄存器模型中的最小单位。uvm_reg: 一个reg里面至少包含一个filed。uvm_block: 模拟一个功能模块的寄存器模型,可以容纳多个uvm_reg和uvm_mem。一个寄存器模型中至少包含一个blockmap: 表示寄存器的偏移地址,一个reg_block可以包含多个map。
2024-12-31 21:15:07
1213
原创 DDR的基本原理
全称是第双倍速率同步动态随机访问存储器。同步指的是其时钟频率和对应的FPGA/CPU控制器的系统时钟频率相同,随机指的是读取可以随机指定地址,无需按照严格的线性次序变化。DDR DDR2 DDR3 DDR4 DDR5电压等级逐渐降低,读取速率更快二、主要特点掉电时无法保存数据,需要周期性刷新;时钟的上升沿和下降沿都可以读取数据,因此一个时钟周期可以读取两笔数据;突发传输,突发长度burst length一般为8.为了读写稳定采用差分时钟线。三、一些基本概念。
2024-10-30 22:51:14
1392
原创 存储器(RAM、ROM和Cache)
EEPROM电擦除,可以指定擦除某一个信息),可以进行多次重写;SRAM使用双稳态触发器存储信息,是非破坏性读写,读出数据后无需重写,因此访问速度快,但结构复杂,制作成本高,集成度低,功耗高,用于cache。DRAM使用栅极电容存储信息,是破坏性读出,读出以后需要重写,每隔两秒需要刷新一下因此访问速度慢,但结构简单,制造成本低,功耗低,集成度高,用于主存;假设存取周期为T,存取时间为r,为了实现流水线式的并行存取,则模块数m=T/r,这样连续存取n个存储字耗时T+(n-1)r,存取效率最高。
2024-10-30 22:44:17
1100
原创 AHB协议解读
AHB或者ASB系统总线在需要做大量数据传送的模块之间提供了高带宽的接口。同时,外围总线APB在AHB或者ASB和低带宽的外围设备之间提供了通信的桥梁。所以APB是AHB或者ASB的二级扩展总线。
2024-08-13 15:49:32
1660
转载 DW_ahb_databook学习及部分AHB知识回顾
一次只允许一个master发起数据传输,同时可以选择slave通过解码系统地址总线为AHB上的从机生成外设选择。每个slave都可以指定一个起始和结束地址,该地址必须与1kb边界对齐。当选择此选项时,不包括内部解码器master的地址和控制信号是多路复用的,这取决于哪个master拥有系统数据总线。每个slave的所有数据都是多路复用的,这取决于哪个slave在前一个周期中被寻址。
2024-08-12 21:32:32
1556
原创 【IC验证】UVM实验lab05
定义单个uvm_reg,各个域的确定,并利用configure函数来配置属性;继承于uvm_object类build()函数。field_name.configure( .parent ( this ), // 参数一是此域的父辈,也就是此域位于哪个寄存器中,即是this;.size ( 1 ), // 参数二是此域的宽度;
2024-06-29 22:44:54
920
原创 【IC验证】UVM实验lab04
一般在driver中利用get方法来得到req。如果需要发送返回值,则通过以下语句实现:注意第一个语句是为了确保当有多个sequence通过sequencer向driver时,driver返回的rsp必须与其sequence一一对应此时在sequence语句里面应该要有对应的接受rsp的语句,get_response(rsp)
2024-06-22 19:20:33
350
原创 【IC验证】UVM实验lab03
在mcdf_base_test里面调用cb_mcdf_base的cb_do_reg方法。相当于是在这里预留了一个修改入口,方便后续继承该类,并对callback里面的方法进行修改。对于后续继承于mcdf_base_test的所有子类,例如cb_mcdf_data_consistence_basic_test都不需要再做这个绑定了。
2024-06-22 12:12:21
522
原创 【IC验证】一文速通多通道数据整型器(MCDF)
设计模块的全称叫做multi-channel data formatter,他可以将上行多个数据通道的数据通过内部的SLAVE, FIFO给到仲裁器Arbiter, Arbiter选择从不同的FIFO中读取数据,给到下端的Formatter, 对数据进行整形,以数据包的形式送给下行的数据接收端。bit(5:3):数据包长度,解码对应表为, 0对应长度4,1对应长度8,2对应长度16,3对应长度32,其它数值(4-7)均暂时对应长度32。CHx_VALID(0):通道数据有效标志信号,高位有效。
2024-06-02 21:19:09
2130
原创 【IC验证】随机约束相关问题
类中的结构体变量为非组合型时(默认为此),需要对该结构体变量及其内部成员分别添加rand,结构体变量为组合型时,仅需要对改结构体变量添加rand修饰符(并且不支持对内部变量添加rand修饰符)当子类约束和父类约束同名时,是覆盖,以子类的约束为准。当子类约束和父类约束不同名,是继承,约束里面的相同变量要同同时满足子类和父类的约束。换句话说,它生成的随机值不会与上一个生成的随机值相同。随机化解决软约束冲突,遵循后置约束覆盖前置约束,子类约束覆盖父类约束,内嵌约束覆盖类内部约束。但是这样仿真速度太低了。
2024-04-18 18:29:03
477
原创 【IC验证】SV中语句的执行顺序
在begin-end语句块中,begin-end和fork-join块可以相互嵌套,也可以自我嵌套。当遇到disable时,或者时间延迟最长的语句执行完时,跳出该语句块。多个initial块之间是并行执行的,initial块内部是按照顺序执行的。包内的各个类的执行顺序是动态确定的,取决于代码中的实际使用情况和依赖关系。多个begin...end块之间是并行执行的,内部是顺序执行的。直到最后一条语句执行完,程序流程控制才跳出该语句块。
2024-04-14 19:14:44
701
原创 【IC验证】fork...join
这是由于fork...join_none块后面没有任何阻塞语句,而join_none不会阻塞下一条阻塞语句之前的所有进程。由于三个线程的print中都添加了延时,所以第三行和第九行被首先打印,然后才轮到三个线程print的输出。如果任何一个子线程完成,则程序允许执行fork...join_any块外面接下来的语句,而fok...join_any剩余的子线程将在后台继续执行。各线程并行执行,当耗时最长的线程执行完后,跳出该语句块。如果任何一个子线程无法结束,则整个fork...join将被挂起。
2024-04-14 19:13:05
216
原创 【IC验证】类的一些问题
因为类的对象是动态的,当没有任何一个句柄指向该对象时,该对象所占据的空间就被回收了(自动回收)43行虽然还没有例化c1,c2两个对象,但是可以找到data的值,因为data是静态变量,他的空间开辟在类下面,而不是某个变量下面。子类句柄复制给父类句柄,经过复制后父类的句柄指向子类的对象,但是其能够访问的范围只有父类的范围。但是,类里面的对象,成员变量和方法默认都是动态的,例化的模块(module)是静态的。子类既继承父类的变量,也继承父类的方法,所以下属程序运行结果,p.i和 lp.i都是2。
2024-04-10 10:41:27
524
原创 【IC验证】接口、采样、驱动、测试、调试
关于数据采样中的竞争问题,在波形窗口看到的数据是在t时刻一个delta-cycle以后的数据。但实际上在t时刻数据为。
2024-03-31 22:45:27
158
原创 【IC验证】数组
队列类似于一个一维的非压缩数组,它可以自动地增长和缩减。0 代表第一个 元素,$代表最后一个元素对于处理成员数目会动态改变的连续变量集合而言,动态数组非常有用。然而,当集合的尺寸是未知的或者数据存储空间比较有限的时候,联合数组则是更好的选择。联合数组在使用之前不会分配任何存储空间,并且索引表达式不再被限制成 integral 表达式,而是可以具有任何数据类型。在对一个非常大的地址空间进行寻址时,SV只为实际写入的元素分配空间。
2024-03-12 19:19:17
1024
原创 GVIM常见命令
在有些时候,只希望一些字符串被替换,而一些字符串不需要被替换,这时可以在命令最后加一个c,去confirm一下这个字符串是否要替换。替换单个的字符,在命令模式下敲r, 替换光标所在的字符串,shift+r,然后输入要替换的内容,如果要退出替换模式,按esc键。方法二:在命令模式下输入”/需要查找的内容“即可进行查找。若要如果查找下⼀个,按“n”即可。方法一:在命令模式下将光标移动到需要查找的那个字符串的任一个字母上,然后按shift和*取消查找:输入:nohl或者直接查找一个不存在的东西,也可以退出查找。
2024-03-03 09:55:10
1902
原创 【IC验证】数据类型
字符串的结尾不带空标识符null,\0。是动态存储方式,因此不用担心存储空间被用完。编辑.SV文件使用gvim 文件名运行仿真使用如果是字符串,则从低位开始赋值。测试代码测试结果:可以看到strl[0]="pan"是把pan的低位n给到了strl的高位。
2024-02-29 20:53:26
334
原创 git命令整理
Git 是为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。分布式管理系统,可以快速的查看文件各个版本的改动。比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥是不知道的Git 本地数据管理,大概可以分为三个区:工作区、暂存区和版本库。
2024-02-26 14:30:45
730
1
原创 Linux基本命令
rm 是强大的删除命令,它可以永久性地删除文件系统中指定的文件或目录。命令后面加目录名称即可,但命令执行成功与否,取决于要删除目录是否是空目录,因为 rmdir 命令。#代表切换到 vbird 这个用户的主目录,亦即 /home/vbird。#表示回到自己的主目录,对于 root 用户,其主目录为 /root。#没有加上任何路径,也代表回到当前登录用户的主目录。相对路径:相对路径是从当前所在的工作目录开始的。目录,亦即是 /root 的上一级目录的意思;#表示回到刚刚的那个目录。
2024-02-24 14:57:04
396
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人