日常记录(53)program、phase、vim
program的使用原因
标准中24.2的overview中有提及,和module不同,主要原因是:
1. 提供tb的入口,
2. reactivate域中执行代码。
phase回顾
灰色为task phase,消耗仿真时间。结束过程分别为:extract、check、report、final。
vim操作
多文件查找替换:
Ex命令中的grep string *.sv(例如)
定位替换结果:
Ex命令中的:cn下一个,cp上一个,cw打开窗口,cl显示匹配结果
执行上次Ex命令:
普通模式下的:@:
之后可以使用:@@
多文件替换:
确定操作的文件:Ex命令的args *.sv(例如)
执行动作:Ex命令的argdo %s/s1/s2/gc (例如替换操作)
设置quickfix的窗口位置:
回退上一个F/f等的查找结果
普通模式下的分号为下一个结果,逗号为上一个结果
关闭其它标签
Ex命令的tabo。
此外还有tabc命令、tabn、gt、gT
map映射关系查看
imap插入模式的映射、
nmap普通模式的映射
vimrc变更的配置
set nu set nohls imap <S-[> <Esc> autocmd CursorMoved * silent! exe printf('match Underlined /\<%s\>/', expand('<cword>')) autocmd CursorHold * silent! exe printf('match Underlined /\<%s\>/', expand('<cword>')) set mouse=a " :set background=light autocmd vimenter * NERDTree autocmd vimenter * wincmd w autocmd tabenter * NERDTree autocmd tabenter * wincmd w autocmd vimenter * VerilogErrorFormat vcs 0 " set nowrap set path+=/tools/uvm/uvm-1.1a/src/ set tags=./.tags;,.tags set tags+=/tools/uvm/uvm-1.1a/src/tags autocmd BufWritePost * call system("ctags -R") map <C-j> :NERDTree %<CR> let g:AutoPairs = {'(':')', '[':']', '{':'}','"':'"'} set autowrite " set quickfix in the bottom of window. autocmd FileType qf wincmd J
非root模式下保存vim
:w ! sudo tee %
VCS中的solver_mode
用在解析约束上。默认为2,为1时增加预处理时间使得后续调用更快。
SV语法补漏
1. SV的随机范围
\$urandom_range(p1, p2)
2.%p格式化打印队列
3. !==、==,!=
对payload进行比较时候使用!==、==,而不使用!=
logic类型下,因为结果为x不会通过if的判断,导致bug出现。
下述代码中,使用!=则跳过if判断,认为二者相等。
if(payload !== pkt2cmp_payload) begin $sformat(msg, "payload not matched! %p, %p", payload, pkt2cmp_payload); return 0; end
4.旗语:
semaphare
5. copy对象
obj1 = new obj2(obj2已经存在)
6.覆盖率
covergroup、endgroup定义功能覆盖率,
其中的coverpoint指定采集点,cross指定交叉覆盖率
定义以后在new中实例化定义,使用sample进行采集。而系统的$get_coverage函数返回当前的覆盖率。
Le vent se lève! . . . il faut tenter de vivre!
Le vent se lève! . . . il faut tenter de vivre!