当cpu过多htop修改不显示cpu的处理+link、lane、expect link width区分+pcie的代码逻辑+uvm打印数据的全部内容+使用===而非使用==进行检查+timescale对仿真的影响+git submodule更新失败+ARM 汇编 .rept 用法+C++中双感叹号!!的含义

当cpu过多htop修改不显示cpu的处理

如果服务器的核心数量远远大于显示的数量,那么将导致核心的信息占据满屏,已经找不到task列表,更难提处理。
因此修改~/.config/htop文件的信息如下,就可以显示了。

left_meters=AllCPUs Memory Swap   # 修改此行为
left_meters=Memory 
right_meters=Tasks LoadAverage Uptime   # 修改此行为
right_meters=Tasks

https://www.cnblogs.com/heyongshen/p/17687066.html

link、lane、expect link width区分

link:一组lane的接口。对于某个pcie接口,为一个link。
lane:信号对数,pcie接口上的差分信号对数为lane,x4 lane表示txp/n的宽度为4.

link number表示的是该pcie端口上使用的某个逻辑号码。是pcie 配置空间中可配置更改的一个数字。
生成的rp ip后,link number为4,但仍然可以有lane width为1,link number最大可以到0xff.
不过,似乎vip在使用期望的link width为1的时候,检查到link number为4,将会重新设置其自身的期望link width为4,但是协商获取到的width又为1,又与期望值不符。
因此保险起见,设定ip的link number为0是一个更佳的选择。而这个值本质只是一个宏定义。直接修改宏定义即可。重复生成的代码也只是改动了该宏定义的数值。

vip在选定lane width的时候,由内部的一个defparam所间接控制。vip内部存在reconfigure_pciesvc_pl的过程。

SVT_PCIE_UI_NUM_PHYSICAL_LANES_P0影响到了SVT_PCIE_UI_NUM_PHYSICAL_LANES,然后影响到了
vip内部的lanes的送出,导致其4个line只有一个送出

因此,如果想要强行修改vip选定的lane width,可以在如下函数的初始化调用重置了lane width后,再次调用set_link_width_values函数实现width的修改。

ep_cfg.set_initial_values_via_unified_vif

pcie的代码逻辑

radm_filter_rc文件中,736提供了ur的判断逻辑;
dwc_pcie_axi_gm_core.sv文件中,提供了u_aximw的送出请求逻辑;

uvm打印数据的全部内容

查阅一下sprint()函数的源码定义,在uvm_object.svh里面,sprint()其实是支持参数输入sprint(uvm_printer printer=null)的、
sprint()函数可以自定义uvm_printer的行为。那么,问题就很好解决了,自己例化一个自定义的uvm_printer,
修改uvm_printer里面的uvm_printer_knobs的对应参数,然后将自定义的uvm_printer作为sprint()函数的输入就可以了。
https://bbs.eetop.cn/thread-333169-1-1.html

  uvm_table_printer local_printer
  local_printer = new();
  local_printer.knobs.begin_elements = -1;
  this.sprint(local_printer);

BTW:你真的需要这个功能吗,或者真的看的过来这些吗。如果需要,但是一直需要滑动鼠标,倒是不如自己写一个文件写入的csv文件,
逐行打印并自定分隔符,然后用wps等打开,其实更美观好用。

使用===而非使用==进行检查

当编写a=xxxx, b=123

if(a !=b) {不进去}
else{进去}
if(a !==b) {进去}
else{不进去}

双等号在对比x态时候,都给不相等的逻辑,容易漏掉对比过程.
上述代码中,如果本来期望a和b不相等的时候报错,那么!=的逻辑将进入else语句,认为二者相等,形成错误。

timescale对仿真的影响

使用1ns作为时间单位,在仿真过程中生成的时钟每1000拍形成一个上升下降沿,导致实际上接口的事务变成了1us变化一次的低频率。
而以1ps作为时间单位,正常是1ns形成一个上升下降沿,相对正常。
因此,当仿真中一旦涉及到#1,不带有单位,那么timescale的影响是致命的。

git submodule更新失败

如下错误:

fatal: remote error: upload-pack: not our ref 16d1b6b94e3245f3a7fb4f43e5b6f44b14027fbb
Fetched in submodule path 'xxx', but it did not contain 16d1b6b94e3245f3a7fb4f43e5b6f44b14027fbb.
Direct fetching of that commit failed.

原因:

用户在父仓库下,错误修改了子模块的内容并上传,而子仓库原始位置并没有上传。
错误修改的内容在父仓库中,只有一个ref的id,真正的子仓库中没有该提交。

处理:
用户应当在错误操作后,重新在父仓库下,进入父仓库的子仓库内容进行回退,然后回到父仓库中,重新提交。
这样,父仓库针对子仓库的ref id就会进行回退,那么子仓库原本的ref id其实可以被父仓库找到,就完整了修正。
https://blog.csdn.net/KNIGH_YUN/article/details/115054370
当然是,也可以将子仓库进行提交,这样父仓库就不需要回退ref id,直接找到了新的子仓库那次提交。

ARM 汇编 .rept 用法

.rept 100
    nop
.endr

C++中双感叹号!!的含义

在进行逻辑运算时,所有非 0 的值都会被认为是 True,而只有 0 值会被认为是 False。所以对变量进行 2 次非运算(!!)就能
将其转化成 1 或者 0,且变量原本的逻辑值保持不变。
https://www.cnblogs.com/ezhar/p/14462935.html

posted @ 2025-06-23 21:40  大浪淘沙、  阅读(106)  评论(0)    收藏  举报