vim插件使用python编写+AXI非对齐传输如何发送+verdi配置搜索顺序+verible和verilator介绍

发布时间 2023-09-17 18:40:54作者: 大浪淘沙、

vim插件使用python编写

虽然vim有自己的一套语法格式,但是学习成本放着呢,语言那么多,啥都学哪学的过来嘛。
不过vim确实是支持python的,但是是python2,而不是python3,因此语法上的一些问题要兼容下。

这个是官方手册,正确而可靠的部分。
https://vimdoc.sourceforge.net/htmldoc/if_pyth.html

这个是一些实例,不一定对,但是可以参考。
https://www.jb51.net/article/64350.htm

查看是否支持python

vim --version | grep +python

编写示范

按F5以后,会打印信息,然后会在当前行之后插入文本。vim不是一个通用的包,是只能在vim里面使用的一个包。

:map <F5> :call TestPy()<cr>

function! TestPy()
python << EOF
import time
print(time.time())
import vim
print(vim.current.line)
for b in vim.buffers:
  	print(b)
str_t = []
for line in vim.current.buffer[:10]:
  	print(line)
  	str_t.append(line)
print(vim.current.window.cursor)
row = vim.current.window.cursor[0]
print(row)

print(vim.current.buffer[row:row+2])

vim.current.buffer.append(["123\n", "234\n"], row)

EOF

endfunction

AXI非对齐传输如何发送

AXI协议和AHB一样,有一个地址,有一个数据宽度,有一个起始地址。
那么一个burst传输,本质是burst length 和 burst size,配合得到总共要的数据量。
如果总共数据量和起始地址不是一个整数倍的关系,那么就是非对齐传输。

如何计算和给出总线上该传的值

参考以下博文
https://blog.csdn.net/qiuzhongyu123/article/details/118943373
主要有三个重点:对其地址、下界、上界。

  1. aligned_addr的计算
    aligned_addr = Floor(start_addr/num_of_bytes) * num_of_bytes
    其中,num_of_bytes为单个transfer的字节数,start_addr即master发起transaction的地址,aligned_addr则是对齐地址,如果两者相同代表该transaction是对齐传输,否则就是非对齐传输。
  2. WRAP的上下界地址计算
    lower_bound_addr = Floor(start_addr/ (num_of_bytes * burst_len)) * (num_of_bytes * burst_len)
    即下界要根据transaction的总bytes对齐得到下界。
    upper_bound_addr = lower_bound_addr + (num_of_bytes * burst_len)
    上界则是由下界加上总bytes得到。
    在WRAP transaction中,start_addr依次递增num_of_bytes,达到upper_bound_addr后,下一个transfer地址回到lower_bound_addr。

verdi配置搜索顺序

https://blog.csdn.net/llxxyy507/article/details/121313210

Verdi 提供名叫Configure Rule Set form的配置文件,以.rc为后缀名,verdi按照如下优先级去检索配置信息,找到后将不再向下寻找。
-rcFile 命令行参数 verdi -ssf -rcFile 优先级最高
NOVAS_RC 环境变量
./novas.rc
$HOME/novas.rc
/etc/novas.rc

verible和verilator介绍

  1. verible
    Verible是一套SystemVerilog开发工具,包括解析器、样式检查器、格式化器和语言服务器
    https://chipsalliance.github.io/verible/

可以做端口混淆工具使用。如

verible-verilog-obfuscate --preserve_interface test1.v obf_test.v

--preserve_interface:module的端口不会被混淆

  1. verilator
    verilator是仿真工具,但是也可以做语法检查,而且应该是更严格的,verilator编译的时候默认要求文件名和module名相同。
verilator --lint-only -Wall test.v

--lint-only,只进行lint但是不输出。-Wall开启额外的风格检查。
https://github.com/verilator/verilator