axi4-lite信号去掉的部分+git真正的merge合并+git diff的顺序+出现uvm_fatal的时候顺便打印调用栈+使用for配合fork-join_none触发多个线程的数据隔离+宏值变成字符串插入内嵌汇编+apb的narrow传输+c和汇编的label覆盖+忽略 A文件夹但又要保留的A下的B 目录+C程序特定地址做访存
axi4-lite信号去掉的部分
axi4-lite相对于axi而言,其burst length 直接为1,burst size直接和总线宽度相同,而且建议是32或者64位的位宽
aix4-lite没有原子操作,主要用在设备侧的访存,无cache存储。
因此,axi-lite没有aw/ar len、size、burst、lock、cache、w/r last信号;
git真正的merge合并
https://blog.csdn.net/Tencent_TEG/article/details/106345612
merge合并一般是3相合并,存在一个base作为基准,根据另外两处的结果和base的对比,判断是否另外两处存在修改,以及哪个修改是有效的。
merge的策略本可以自行选择。
那么当需要进行大规模的代码回退时候,使用了以下命令:
git checkout -b for_revert
git reset --soft HEAD~10
git add -A
git commit -m "revert"
git checkout master
git merge for_revert
merge之后,发现一些文件未使用for_revert分支的结果,因为for_revert分支和master分支与base相比,
for_revert分支的该文件标记为是没有修改,而master分支标记为已经修改。那么master分支保留了修改的结果。
解决方式是使用theirs的merge策略:
git checkout for_revert --theirs .
git add -A
git commit -m "use theirs"
git diff的顺序
这样的结果中,-号是过去的,+号是当前的
git diff 过去分支 未来分支
出现uvm_fatal的时候顺便打印调用栈
直接通过null pointer异常触发即可
uvm_sequence null_seq;
null_seq.send_request(null);
使用for配合fork-join_none触发多个线程的数据隔离
https://blog.csdn.net/gsjthxy/article/details/129947779
for循环配合fork-join_none可以循环触发多个线程,但如果这些线程之间有数据公用的情况,那么实现的场景可能不是我们期望的。
为了避免在并行线程之间出现数据公用的情况,就要考虑将调用方法(function、task)及传入的参数都声明为automatic属性。
给方法添加automatic描述,仅在module、interface、package中需要这么做,对于class的方法则是不需要额外添加的。
对于避免变量公用的情况,for循环无论在module、interface、package还是class中都是需要在其内部使用automatic变量来暂存外部变量,
在将该automatic变量作为参数传入fork-join_none触发线程。
宏值变成字符串插入内嵌汇编
让它把宏值变成字符串插进去(两层宏展开是关键):
#define STR(x) #x
#define XSTR(x) STR(x) // 展开再字符串化vvvvvvvvvvvvvvvv
__asm__ volatile ("csrr %0, " XSTR(csr_imm) : "=r"(result))
apb的narrow传输
分为对其和非对齐两种方式:
非对齐:
如地址是'h101, pstrb必须为'h1110,那么'h100的地址上没有值被写入(VIP中的例子)
对其:
如地址是'h100, pstrb为'h1110,那么'h100的地址上没有值被写入(RTL的一种实现)
c和汇编的label覆盖
汇编覆盖掉c的label
使用global关键词,否则汇编函数头即便增加了weak属性,仍然无法实现覆盖,反而是两个相同的函数名,不同的属性的形式出现在反汇编文件中
# 显式指定全局符号
.globl label_x
label_x:
addi t0, t0, 1
跨文件的汇编label相互覆盖
文件A和文件B,一个声明weak,一个声明globl
# file a.S
.globl foo
foo:
ret
# file b.S
.weak foo
foo:
ret
# 最终链接后,a.S 的 foo 会覆盖 b.S 的 foo。
忽略 A文件夹但又要保留的A下的B 目录
# 忽略 A 下的所有文件和目录
A/*
# 但不忽略 sanity/cov 目录及其所有内容
!A/B/
!A/B/**
# A/ 会让 A 整个目录“消失”,Git 不会再检查子目录规则,
# 所以要用 A/* 只忽略它里面的内容,而不是目录本身。
C程序特定地址做访存
# define ADDR 0x1234
*((unsigned long int *) (ADDR)) = 0x2345;
Le vent se lève! . . . il faut tenter de vivre!
Le vent se lève! . . . il faut tenter de vivre!

浙公网安备 33010602011771号