- 博客(58)
- 收藏
- 关注
原创 PCIe(三)TLP数据包格式
在PCIe协议中,有三类数据包。分别是事务层的TLP(Transaction Layer Packet)、数据链路层的DLLP(Data Link Layer Packet)和 物理层的Ordered Set(有序集)。简单介绍一下Ordered Set, 不同于TLP/DLLP,他没有起始/结束字符,直接由物理层解析,不通过事务层或数据链路层,仅在相邻设备的物理层之间传输,主要用于链路初始化、训练和电源管理等关键功能等。
2025-06-18 00:19:50
2260
原创 PCIe(二)协议层/流量控制
注意,DLLP并不是对TLP的封装或者附加,两者是独立的。上游给到一笔数据,先是事务层给他加上header和ECRC校验信息,构成TLP,给到数据链路层后又加一个包序列号和校验,然后传到物理层,加上start和end,最后把这些数据给到各个lane上加扰码,最终通过总线传输出去。主要参与TLP的编码和解码,每个TLP都有一个唯一的标识符,支持四种基本的事务类型,内存读写的memory,输入输出操作I/O,配置空间访问configuration,消息事务message,同时也对应这四种地址空间。
2025-06-14 11:22:10
1049
原创 PCIe(一)概述/拓扑/空间配置
PCI总线和PCIe总线都是属于局部总线,连接外部设备。由于PCI/PCIe上挂了多个设备,而这些设备的资源(地址,IO,中断等)都必须统一管理以避免冲突,因此PCI规定,每个设备都必须有一个地址空间(PCI为256字节,PCIe为4KB)来存储设备信息、资源需求和系统分配的资源地址等。每个端点连接的PCI设备通过唯一的16位BDF(Bus:Device:Function)标识,Bus为8位,因此一个PCIe总线拓扑结构中,最多支持256级总线,Device为5位,因此每条总线最多挂载32个PCI设备。
2025-06-13 10:41:38
1130
2
原创 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
1260
原创 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
1788
原创 DDR的基本原理
全称是第双倍速率同步动态随机访问存储器。同步指的是其时钟频率和对应的FPGA/CPU控制器的系统时钟频率相同,随机指的是读取可以随机指定地址,无需按照严格的线性次序变化。DDR DDR2 DDR3 DDR4 DDR5电压等级逐渐降低,读取速率更快二、主要特点掉电时无法保存数据,需要周期性刷新;时钟的上升沿和下降沿都可以读取数据,因此一个时钟周期可以读取两笔数据;突发传输,突发长度burst length一般为8.为了读写稳定采用差分时钟线。三、一些基本概念。
2024-10-30 22:51:14
1928
原创 存储器(RAM、ROM和Cache)
EEPROM电擦除,可以指定擦除某一个信息),可以进行多次重写;SRAM使用双稳态触发器存储信息,是非破坏性读写,读出数据后无需重写,因此访问速度快,但结构复杂,制作成本高,集成度低,功耗高,用于cache。DRAM使用栅极电容存储信息,是破坏性读出,读出以后需要重写,每隔两秒需要刷新一下因此访问速度慢,但结构简单,制造成本低,功耗低,集成度高,用于主存;假设存取周期为T,存取时间为r,为了实现流水线式的并行存取,则模块数m=T/r,这样连续存取n个存储字耗时T+(n-1)r,存取效率最高。
2024-10-30 22:44:17
1461
原创 AHB协议解读
AHB或者ASB系统总线在需要做大量数据传送的模块之间提供了高带宽的接口。同时,外围总线APB在AHB或者ASB和低带宽的外围设备之间提供了通信的桥梁。所以APB是AHB或者ASB的二级扩展总线。
2024-08-13 15:49:32
2309
原创 DW_ahb_databook学习及部分AHB知识回顾
一次只允许一个master发起数据传输,同时可以选择slave通过解码系统地址总线为AHB上的从机生成外设选择。每个slave都可以指定一个起始和结束地址,该地址必须与1kb边界对齐。当选择此选项时,不包括内部解码器master的地址和控制信号是多路复用的,这取决于哪个master拥有系统数据总线。每个slave的所有数据都是多路复用的,这取决于哪个slave在前一个周期中被寻址。
2024-08-12 21:32:32
2114
原创 【IC验证】UVM实验lab05
定义单个uvm_reg,各个域的确定,并利用configure函数来配置属性;继承于uvm_object类build()函数。field_name.configure( .parent ( this ), // 参数一是此域的父辈,也就是此域位于哪个寄存器中,即是this;.size ( 1 ), // 参数二是此域的宽度;
2024-06-29 22:44:54
1035
原创 【IC验证】UVM实验lab04
一般在driver中利用get方法来得到req。如果需要发送返回值,则通过以下语句实现:注意第一个语句是为了确保当有多个sequence通过sequencer向driver时,driver返回的rsp必须与其sequence一一对应此时在sequence语句里面应该要有对应的接受rsp的语句,get_response(rsp)
2024-06-22 19:20:33
409
原创 【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
577
原创 【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
2999
原创 【IC验证】随机约束相关问题
类中的结构体变量为非组合型时(默认为此),需要对该结构体变量及其内部成员分别添加rand,结构体变量为组合型时,仅需要对改结构体变量添加rand修饰符(并且不支持对内部变量添加rand修饰符)当子类约束和父类约束同名时,是覆盖,以子类的约束为准。当子类约束和父类约束不同名,是继承,约束里面的相同变量要同同时满足子类和父类的约束。换句话说,它生成的随机值不会与上一个生成的随机值相同。随机化解决软约束冲突,遵循后置约束覆盖前置约束,子类约束覆盖父类约束,内嵌约束覆盖类内部约束。但是这样仿真速度太低了。
2024-04-18 18:29:03
577
原创 【IC验证】SV中语句的执行顺序
在begin-end语句块中,begin-end和fork-join块可以相互嵌套,也可以自我嵌套。当遇到disable时,或者时间延迟最长的语句执行完时,跳出该语句块。多个initial块之间是并行执行的,initial块内部是按照顺序执行的。包内的各个类的执行顺序是动态确定的,取决于代码中的实际使用情况和依赖关系。多个begin...end块之间是并行执行的,内部是顺序执行的。直到最后一条语句执行完,程序流程控制才跳出该语句块。
2024-04-14 19:14:44
913
原创 【IC验证】fork...join
这是由于fork...join_none块后面没有任何阻塞语句,而join_none不会阻塞下一条阻塞语句之前的所有进程。由于三个线程的print中都添加了延时,所以第三行和第九行被首先打印,然后才轮到三个线程print的输出。如果任何一个子线程完成,则程序允许执行fork...join_any块外面接下来的语句,而fok...join_any剩余的子线程将在后台继续执行。各线程并行执行,当耗时最长的线程执行完后,跳出该语句块。如果任何一个子线程无法结束,则整个fork...join将被挂起。
2024-04-14 19:13:05
254
原创 【IC验证】类的一些问题
因为类的对象是动态的,当没有任何一个句柄指向该对象时,该对象所占据的空间就被回收了(自动回收)43行虽然还没有例化c1,c2两个对象,但是可以找到data的值,因为data是静态变量,他的空间开辟在类下面,而不是某个变量下面。子类句柄复制给父类句柄,经过复制后父类的句柄指向子类的对象,但是其能够访问的范围只有父类的范围。但是,类里面的对象,成员变量和方法默认都是动态的,例化的模块(module)是静态的。子类既继承父类的变量,也继承父类的方法,所以下属程序运行结果,p.i和 lp.i都是2。
2024-04-10 10:41:27
558
原创 【IC验证】接口、采样、驱动、测试、调试
关于数据采样中的竞争问题,在波形窗口看到的数据是在t时刻一个delta-cycle以后的数据。但实际上在t时刻数据为。
2024-03-31 22:45:27
203
原创 【IC验证】数组
队列类似于一个一维的非压缩数组,它可以自动地增长和缩减。0 代表第一个 元素,$代表最后一个元素对于处理成员数目会动态改变的连续变量集合而言,动态数组非常有用。然而,当集合的尺寸是未知的或者数据存储空间比较有限的时候,联合数组则是更好的选择。联合数组在使用之前不会分配任何存储空间,并且索引表达式不再被限制成 integral 表达式,而是可以具有任何数据类型。在对一个非常大的地址空间进行寻址时,SV只为实际写入的元素分配空间。
2024-03-12 19:19:17
1194
原创 GVIM常见命令
在有些时候,只希望一些字符串被替换,而一些字符串不需要被替换,这时可以在命令最后加一个c,去confirm一下这个字符串是否要替换。替换单个的字符,在命令模式下敲r, 替换光标所在的字符串,shift+r,然后输入要替换的内容,如果要退出替换模式,按esc键。方法二:在命令模式下输入”/需要查找的内容“即可进行查找。若要如果查找下⼀个,按“n”即可。方法一:在命令模式下将光标移动到需要查找的那个字符串的任一个字母上,然后按shift和*取消查找:输入:nohl或者直接查找一个不存在的东西,也可以退出查找。
2024-03-03 09:55:10
2635
原创 【IC验证】数据类型
字符串的结尾不带空标识符null,\0。是动态存储方式,因此不用担心存储空间被用完。编辑.SV文件使用gvim 文件名运行仿真使用如果是字符串,则从低位开始赋值。测试代码测试结果:可以看到strl[0]="pan"是把pan的低位n给到了strl的高位。
2024-02-29 20:53:26
376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅