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
主要有三个重点:对其地址、下界、上界。
- aligned_addr的计算
aligned_addr = Floor(start_addr/num_of_bytes) * num_of_bytes
其中,num_of_bytes为单个transfer的字节数,start_addr即master发起transaction的地址,aligned_addr则是对齐地址,如果两者相同代表该transaction是对齐传输,否则就是非对齐传输。 - 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
NOVAS_RC 环境变量
./novas.rc
$HOME/novas.rc
/etc/novas.rc
verible和verilator介绍
- verible
Verible是一套SystemVerilog开发工具,包括解析器、样式检查器、格式化器和语言服务器
https://chipsalliance.github.io/verible/
可以做端口混淆工具使用。如
verible-verilog-obfuscate --preserve_interface test1.v obf_test.v
--preserve_interface:module的端口不会被混淆
- verilator
verilator是仿真工具,但是也可以做语法检查,而且应该是更严格的,verilator编译的时候默认要求文件名和module名相同。
verilator --lint-only -Wall test.v
--lint-only,只进行lint但是不输出。-Wall开启额外的风格检查。
https://github.com/verilator/verilator