- 博客(69)
- 收藏
- 关注
原创 uvm_mem_mam介绍
主要适用于需要动态管理内存地址DMA 控制器验证(分配源 / 目的缓冲区地址,避免地址冲突);操作系统内核仿真(模拟内存页分配、释放);多外设共享内存验证(多个外设同时访问内存,确保地址不重叠);环形缓冲区(FIFO)验证(支持地址环绕配置,管理环形内存空间)。uvm_mem_mam缺点:不是派生于uvm_object不支持设备对内存地址的访问和检查内存初始化不够灵活地址对齐方式不够灵活(1B/4B/8B/16B等对齐方式)线性搜索地址区域检查重叠,效率低。
2026-01-18 11:01:17
312
原创 shell脚本:有用的语法
在 Shell 脚本中,-d是一个,用于检查指定的 “文件路径” 是否为一个。-d "文件路径"在 Shell 命令中,mkdir -p是用于创建目录的命令,其中-p是一个重要的选项,作用是。当需要创建的目录包含不存在的父目录时,-p会自动创建所有缺失的父目录。
2025-10-15 14:42:31
273
原创 关于代码覆盖率的思考
1)序列模式相关的bug:覆盖率本身只能表示相关命令/tgl/cond/是否执行过,但是不能表征条件之间的组合覆盖问题。比如一个条件里面有三种情况ABC,可能单独条件都没有问题,但是如果出现某一种条件序列就会导致bug:AAABBCCC这种。2)时序相关的bug:还有一种就是内部的被反压持续时间足够长的情况,才会触发的bug,也不容易体现在覆盖率上。(多种流量,一种被反压,一种持续输入,导致内部ram翻转,覆盖了被反压流的数据)3)交叉组合压力场景的bug: 各种配置每一种特殊组合才触发的bug;
2025-08-22 19:26:46
1071
原创 UVM一些不常用的功能
以单例模式存在,确保全局唯一;统一管理工厂、报告服务器、顶级组件等核心服务;提供标准化接口,简化对核心服务的访问和配置。在实际验证代码中,我们很少直接操作本身,更多是通过它管理的服务(如)间接使用其功能。理解它的作用,有助于深入掌握 UVM 框架的底层架构。以单例模式提供全局一致的参数访问接口;支持解析 UVM 标准参数和用户自定义参数;允许验证环境通过命令行动态配置,无需重新编译代码,极大提升了验证的灵活性。
2025-08-22 19:22:22
852
原创 PCIE协议中BME和FLR的差异
BME 是 PCI 配置空间中的一个控制位,位于设备的命令寄存器中。它用于控制设备是否具备总线主控能力。当设备被允许成为总线主控时,它可以主动发起对系统内存或其他设备的读写操作,而不仅仅是被动响应其他设备的请求。FLR 是 PCIe 协议中定义的一种复位机制,用于对单个 PCIe 功能进行复位操作。这里的 “功能” 可以理解为 PCIe 设备中的一个或多个逻辑单元,每个功能都有自己独立的配置空间和操作能力。FLR 允许在不影响其他功能或整个设备的情况下,对特定功能进行复位,以恢复其初始状态。
2025-02-08 16:56:03
1846
原创 一些比较好的组件代码
这样可以实现背对背发包,需要注意的地方就是,如果是最后一个包,DUT rdy一直拉高,TB这里发完最后一个包,要接口的vld信号置为无效。否则vld&rdy都会一直为高,输入大量非预期的包。所以需要在发完一个item后,再去初始化一下接口。这里用了wait,可能会潜在风险;之前遇到过wait会get到毛刺导致环境认为已经达到wait条件,就是不知道这个下降沿能不能规避这个问题;背景:驱动收到rdy才能发起驱动,否则保持。
2024-11-18 09:58:37
496
原创 任务提交:bsub
bsub 常用参数:Linux bsub 命令用法详解-Linux命令大全(手册)LSF作业调度系统 — 中国科大超级计算中心用户使用手册 :2024-05-18版 文档LSF-bsub命令-CSDN博客
2024-09-29 10:45:55
1542
原创 Makefile相关 & vcs(eg:initreg)
通常在执行make时,如果通过命令行定义了一个变量,那么它将替代在Makefile中出现的同名变量的定义。就是说,对于一个在Makefile中使用常规方式(使用“=”、“:=”或者“define”)定义的变量,我们可以在执行make时通过命令行方式重新指定这个变量的值,命令行指定的值将替代出现在Makefile中此变量的值。如果不希望命令行指定的变量值替代在Makefile中的变量定义,那么我们需要在Makefile中使用指示符“override”来对这个变量进行声明。
2024-09-28 09:56:29
429
原创 shell常用记录
linux的系统时间在shell里是可以直接调用系统变量的如: 获取今天时期:`date +%Y%m%d` 或 `date +%F` 或 $(date +%y%m%d)shell中:$():括号里面执行完返回值。命令可以用来显示或设定系统的日期与时间。提示符:显示路径和文件。
2024-07-18 17:00:31
310
原创 module命令
module load/add xx:设置某软件的环境变量只需要使用module load 命令加载相应环境变量即可;module av|grep python :把python的grep出来。module list: 查看已经加载上的软件环境。module purge:清空已经加载的全部模块。目的:提供通过模块文件动态修改用户环境的功能。module unload xx:卸载模块。module avail:查看系统可用软件。
2024-04-26 19:19:34
1477
原创 vcs编译选项--不常用
值得说明的是,glitch 对 design 是非常不好的,需要规避,设计代码中应该具有检查 glitch 的机制”需要添加仿真选项:+fsdb+glitch=0。默认情况是没有expand delta;1)如何查看波形的毛刺(glitch)2)查看仿真的time_slot过程;仿真选项:+fsdb+delta。参考:公众号:IC学社。参考:公众号:IC学社。
2024-03-24 12:55:44
4092
原创 git reset
写完代码后,我们一般这样git add . //添加所有文件git commit -m "本功能全部完成"执行完commit后,想撤回commit,怎么办?这样就成功的撤销了你的commit注意,仅仅是撤回commit操作,您写的代码仍然保留。
2024-03-11 17:15:00
510
1
原创 通过命令行输入参数控制激励
1)在命令行的仿真参数(SIM_OPT)加上:“+var_a=100 +var_b=99”2)在环境中调用:如果命令行存在这个字符,返回1,否则返回0;就可以把命令行var_a的参数100提取出来到tc_var_a变量了$test$plusargs和$value$plusargs作为进行Verilog和SystemVerilog仿真运行时调用的系统函数,可以在仿真命令直接进行赋值,并且不局限于不同仿真器对于参数在仿真命令中定义格式不同的限制,也避免了调换参数带来的频繁编译等问题。
2023-12-09 14:47:22
1173
原创 sv&uvm的踩坑案例
另一个问题是,如果子类加了一个变量,再在test这里对这个变量赋值,会报编译错误,说没有在父类找到这个变量;所以推测,外面在赋值的时候其实是对父类已经声明的变量进行赋值。base_class(父类)和extend_class(子类)内部都有相同的变量int var[$];把子类的var[$]删掉后,子类才能看到这个push进来的00;在test的run_phase阶段,赋值:env.refm.var.(type)后,这个类在env这里被实例化,实例化名refm;父子类不能声明相同名字的变量;
2023-09-21 11:16:46
1174
原创 SV的参数化类
重载的调试(在env里调用:实例名.print_override_info;参数化类的注册虽然看上去没有注册进去,但实际运行结果的确可以重载成功;需求背景:需要重载参数化的predictor;虽然调试这里识别不了,但是实际上已经替换成功;基类:(参数需要有默认值,不然会报编译错误)
2023-08-31 19:34:21
388
原创 git获取远端分支和merge
`` git checkout ``` 其中,``是你要拉取的远程分支的名称。如果这个分支在本地已经存在,Git会自动切换到该分支,并将远程分支的最新代码合并到本地分支。现在,你已经成功将`master`分支的更改合并到了`slave`分支上。``` git fetch origin ``` 这个命令将会将远程仓库`origin`的分支信息下载到本地。这将会将`master`分支的更改合并到当前的`slave`分支上。
2023-08-21 15:48:30
1778
原创 S家的AXI vip使用记录
参考vip的example:/share/tools/eda1/synopsys/vip-2021.09/vip/svt/amba_svt/latest/examples/sverilog/tb_axi_svt_uvm_basic_active_passive_sys/env。set给apb_sys_env:uvm_config_db#(svt_apb_system_configuration)::set(this, "apb_sys_env", "cfg", apb_cfg);他们已经做好了归类了。
2023-03-12 19:16:31
14164
6
原创 芯片前端工程师--常用软件
1、截图:Snipaste是微软应用商店就能直接下载安装的一款强大易用的截图软件。安装:Snipaste的安装直接打开微软应用商店(Microsoft Store),输入软件名字可以直接检索到,也是闭着眼点“获取”-“安装”-“启动”就好了。工作流程是:按下F1快速唤出截图工具进入截图模式;(不过有时候F1可能已经被占用了,可以自己再设置快捷键)2、PointoFix是来自德国的一款屏幕荧光笔软件,也就是打开之后你可以在你的电脑桌面绘图,用来标记重要内容。场景:在日常进行问题讨论或者演讲的时
2022-05-08 20:11:21
162
原创 SV之随机化
1、 约束表达式的求解是由SV的约束求解器完成,满足约束的值是由**伪随机数发生器(PRNG)**从一个初始值(seed)产生,只要改变种子的值,就可改变随机的行为。2 不同仿真工具对于同一个约束类和种子值求解出的数值可能不同3 SV只能随机化2值数据类型,也就是不能随机出X值和Z值,也无法随机化字符串(logic也只能随机出0和1)4 注意定义变量位宽对约束的影响,比如 bit [2:0] month ,只能在0~7中选SV基础知识4----随机化和约束_持续学习_ing的博客-CSDN博客_sv
2022-05-05 19:32:51
1638
原创 XX-工程积累-SS
XSCH的sequence的实现架构:一共是2层;L1层seq的body:create或new L2层的seq; fork join里面调用2个task(get_tr_from_slave_port和send_rsp) get_tr_from_slave_port:主要是在while(1)线程里从slave_port获取DUT发出的req,push_back到一个队列xx_queue里(由L1seq声明的) send_rsp:基于for+fork;会产生多个线程根据req_tr让L2 ...
2022-04-10 15:56:27
771
原创 不同用例名字生成不同波形文件名
Makefile:top_tb:$test$plusargs和$value$plusargs进行解决,该函数的调用发生在仿真运行(run)阶段。$test$plusargs和$value$plusargs作为进行Verilog和SystemVerilog仿真运行时调用的系统函数,可以在仿真命令直接进行赋值,并且不局限于不同仿真器对于参数在仿真命令中定义格式不同的限制,也避免了调换参数带来的频繁编译等问题。...
2022-03-14 14:47:23
66
原创 激励-sequence
模块A与模块B是有来有回的两个模块,典型的场景是调度场景,可能一个request需要多个rsp,可能还有不同通道之间的交织场景等;需要采样模块A的request,发送给与B_agent.seqr挂载的sequence,让它决定发生什么rsp给回模块A;所以需要在B_agent.seqr里面声明一个port,以便sequence能通过这个port得到采样道德request包;对于一些一拍req,一拍rsp,的类型,可以直接agent里面实现,不需要通过slave_sequence这种方式;对于
2022-02-23 21:06:21
370
原创 system verilog之数据结构
1、结构体和联合体(参考黄皮书)联合体:只存储一个元素,这个元素是不同的数据类型;其本质是提供了一种允许多种方式方式来使用同一块存储空间。典型应用:一个值可能是有符号或没符号的,但每次只使用其中一种。typedef union{ // 使用了typedef来定义的这种方式,叫自定义联合体;否则就是匿名联合体 int i ; int unsigned u_i;} data_t每一次读联合体的成员与上一次存储联合体的成员,必须相同,否则会报错。结构
2022-02-16 09:20:23
899
vcs-eda基于-debug-access选项的仿真调试性能优化:选择性启用调试功能以提高仿真效率和可见性介绍了如何使用-debug
2025-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅