- 博客(62)
- 收藏
- 关注
原创 PCIE协议中BME和FLR的差异
BME 是 PCI 配置空间中的一个控制位,位于设备的命令寄存器中。它用于控制设备是否具备总线主控能力。当设备被允许成为总线主控时,它可以主动发起对系统内存或其他设备的读写操作,而不仅仅是被动响应其他设备的请求。FLR 是 PCIe 协议中定义的一种复位机制,用于对单个 PCIe 功能进行复位操作。这里的 “功能” 可以理解为 PCIe 设备中的一个或多个逻辑单元,每个功能都有自己独立的配置空间和操作能力。FLR 允许在不影响其他功能或整个设备的情况下,对特定功能进行复位,以恢复其初始状态。
2025-02-08 16:56:03
1116
原创 一些比较好的组件代码
这样可以实现背对背发包,需要注意的地方就是,如果是最后一个包,DUT rdy一直拉高,TB这里发完最后一个包,要接口的vld信号置为无效。否则vld&rdy都会一直为高,输入大量非预期的包。所以需要在发完一个item后,再去初始化一下接口。这里用了wait,可能会潜在风险;之前遇到过wait会get到毛刺导致环境认为已经达到wait条件,就是不知道这个下降沿能不能规避这个问题;背景:驱动收到rdy才能发起驱动,否则保持。
2024-11-18 09:58:37
316
原创 任务提交:bsub
bsub 常用参数:Linux bsub 命令用法详解-Linux命令大全(手册)LSF作业调度系统 — 中国科大超级计算中心用户使用手册 :2024-05-18版 文档LSF-bsub命令-优快云博客
2024-09-29 10:45:55
736
原创 Makefile相关 & vcs(eg:initreg)
通常在执行make时,如果通过命令行定义了一个变量,那么它将替代在Makefile中出现的同名变量的定义。就是说,对于一个在Makefile中使用常规方式(使用“=”、“:=”或者“define”)定义的变量,我们可以在执行make时通过命令行方式重新指定这个变量的值,命令行指定的值将替代出现在Makefile中此变量的值。如果不希望命令行指定的变量值替代在Makefile中的变量定义,那么我们需要在Makefile中使用指示符“override”来对这个变量进行声明。
2024-09-28 09:56:29
253
原创 shell常用记录
linux的系统时间在shell里是可以直接调用系统变量的如: 获取今天时期:`date +%Y%m%d` 或 `date +%F` 或 $(date +%y%m%d)shell中:$():括号里面执行完返回值。命令可以用来显示或设定系统的日期与时间。提示符:显示路径和文件。
2024-07-18 17:00:31
233
原创 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
736
原创 vcs编译选项--不常用
值得说明的是,glitch 对 design 是非常不好的,需要规避,设计代码中应该具有检查 glitch 的机制”需要添加仿真选项:+fsdb+glitch=0。默认情况是没有expand delta;1)如何查看波形的毛刺(glitch)2)查看仿真的time_slot过程;仿真选项:+fsdb+delta。参考:公众号:IC学社。参考:公众号:IC学社。
2024-03-24 12:55:44
1890
原创 git reset
写完代码后,我们一般这样git add . //添加所有文件git commit -m "本功能全部完成"执行完commit后,想撤回commit,怎么办?这样就成功的撤销了你的commit注意,仅仅是撤回commit操作,您写的代码仍然保留。
2024-03-11 17:15:00
430
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
217
原创 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
655
原创 SV的参数化类
重载的调试(在env里调用:实例名.print_override_info;参数化类的注册虽然看上去没有注册进去,但实际运行结果的确可以重载成功;需求背景:需要重载参数化的predictor;虽然调试这里识别不了,但是实际上已经替换成功;基类:(参数需要有默认值,不然会报编译错误)
2023-08-31 19:34:21
101
原创 git获取远端分支和merge
`` git checkout ``` 其中,``是你要拉取的远程分支的名称。如果这个分支在本地已经存在,Git会自动切换到该分支,并将远程分支的最新代码合并到本地分支。现在,你已经成功将`master`分支的更改合并到了`slave`分支上。``` git fetch origin ``` 这个命令将会将远程仓库`origin`的分支信息下载到本地。这将会将`master`分支的更改合并到当前的`slave`分支上。
2023-08-21 15:48:30
1272
原创 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
9073
5
原创 SV之随机化
1、 约束表达式的求解是由SV的约束求解器完成,满足约束的值是由**伪随机数发生器(PRNG)**从一个初始值(seed)产生,只要改变种子的值,就可改变随机的行为。2 不同仿真工具对于同一个约束类和种子值求解出的数值可能不同3 SV只能随机化2值数据类型,也就是不能随机出X值和Z值,也无法随机化字符串(logic也只能随机出0和1)4 注意定义变量位宽对约束的影响,比如 bit [2:0] month ,只能在0~7中选SV基础知识4----随机化和约束_持续学习_ing的博客-优快云博客_sv
2022-05-05 19:32:51
1386
原创 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
497
原创 激励-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
281
原创 system verilog之数据结构
1、结构体和联合体(参考黄皮书)联合体:只存储一个元素,这个元素是不同的数据类型;其本质是提供了一种允许多种方式方式来使用同一块存储空间。典型应用:一个值可能是有符号或没符号的,但每次只使用其中一种。typedef union{ // 使用了typedef来定义的这种方式,叫自定义联合体;否则就是匿名联合体 int i ; int unsigned u_i;} data_t每一次读联合体的成员与上一次存储联合体的成员,必须相同,否则会报错。结构
2022-02-16 09:20:23
743
原创 system verilog 宏
1、在双引号里面不能直接使用宏;“`xx_define”:这种是会被视为文本,不会把宏的文本替换过来?`“`xx_define ` ”:要采用这种形式;(参考黄皮书P30)
2022-02-11 08:52:28
2763
原创 APB3和APB4
内容参考:APB协议详解_Ky-优快云博客_apb协议https://blog.youkuaiyun.com/burningCky/article/details/109630018APB2协议的特点:低成本 低功耗 低带宽 无流水线 所有信号都是时钟上升沿有效 进行一次数据传输至少需要两个周期 APB3: 信号 描述 P_clk APB2 时钟。所有信号都是时钟上升沿有效。 P_rese
2022-02-10 09:37:30
7376
原创 .vim插件
autocomplpop自动打开弹出菜单,以便于文字或单词补全。使用本插件后,vim会自动打开弹出菜单并显示相应补全项,它在输入字符或插入模式下移动光标时完成, 不会阻止继续输入字符。autocomplpop插件是以vim脚本的形式存在,因此只需要将其下载下来放到相应的目录即可。具体安装方法如下:1)从下面网址下载taglist的安装包,并解压,得到doc/acp.txt、 autoload/acp.vim和plugin/acp.vim文件;Vim online https://vim.sou
2022-01-25 10:21:12
129
原创 UVM降龙十八掌
第一手:sequence内的方法调用(sequence或item的启动或发送)下面的parent是指父节点。(以下内容参考uvm源码src/seq/uvm_sequence_base)pre_body/start和post_body/start是只用于sequence方面的任务采用start启动sequence会调用以下方法:(可以在test_case和sequence这两层使用start)//| sub_seq.randomize(...); // optional//| sub_
2022-01-11 19:21:38
835
原创 system verilog(降龙十八掌)
第一式:开启多个线程initial begin 语句1; #10; fork 语句2; 语句3; join_none 语句4; 语句5;end// #0 语句1// #10 语句2,语句3,语句4并发执行// #10 语句4执行完之后才执行语句5。4执行完之后,即使2,3没执行完,也会接着执行5,因为fork块内语句与之后的语句是并行的,不会阻塞之后的语句// 来源:https://www.dazhuanlan.com/ida
2022-01-09 10:44:50
864
原创 linux 工程使用杂记
1、在xx_filename.sv文件的末尾加入 xxx hello world;12334 hello;cat >> xx_filename.sv <<EOFxxx hello world12334 helloEOF>>:输出附加定向符( >> )的作用是把命令/程序的输出附加到指定文件的末尾;这种方式叫 Heredoc。csh、bash 和 zsh 都支持这种语法,是用于给某个指令(示例中就是cat)传递多行参数的,然后 c....
2021-12-30 09:10:04
835
2
原创 VCS和UVM常用编译选项
VCS编译选项 -full64 在64bit模式下编译、仿真,用于64位操作系统 -j8 指定编译器可以并行编译的进程数为8 -timescale=1ns/1ps 指定仿真时间和精度 +libext+.v+.V+.sv+.svh 识别.v、.sv、.svh等多种格式文件 -sverilog 支持system verilog 编译 -f xxx.lisf 指定包含所有设计文件列表的文件名 -top test 设置顶层模块为test。(指包含.
2021-12-26 20:15:48
8321
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人