总结1. Verilog对字符型的定义
总结2. Verilog含有x和z的信号值操作
比较计算
含有x的操作包括,+, -, *, /, %结果都是x
总结3. Verdi后台新进程打开
verdi My_wave.fsdb > &log &
后台打开时产生的日志放在log文件中,后台打开,看设计文件,不用新开terimal
总结4. Verdi保存波形配置
波形窗口的file -> save signal保存为.rc文件
打开波形配置文件,新建一个波形窗口,file->restore signal选择.rc文件
更改设计文件,重新编译仿真,信号改变了,但是上次的波形配置还在
总结5. 保存结果到文件中,我们可以设置某个触发条件
总结6. Vim的代码补全
编辑模式下,ctrl+N或者ctrl+P
总结7. 终端给Makefile传递参数
Makefile的写法
总结8. 改变Verdi的字体大小
https://blog.csdn.net/weixin_42764060/article/details/107100592
总结9. Verdi对信号加上状态机名称
Verdi 中 Waveform -> Set Radix -> Edit Alias,出现一个对话框。
- Alias Table 为对这个信号起别名(alias)表的名字。
- 下面表格中 Alias 填你要显示的字母(用你 parameter的名字即可)
- 下面表格中 Value填对应行中左边 Alias 名字对应的数字(用你 parameter 后赋得值即可)
- 下面表格中 Background Color 为颜色(可填可不填)
- 最上面 Save as 为保存这个 alias file
- 点击最小面的 Apply即可。
来自 http://bbs.eetop.cn/thread-319183-1-1.html
总结10. verdi选择多个信号
Ctrl+ALT
总结11. Verdi打开波形同时打开源文件
编译选项加上 vcs -kdb
当得到了波形文件后(Post-Processing Mode (After getting the FSDB):)
Simply load the FSDB (using -ssf), the KDB will be loaded automatically:
% verdi –ssf my.fsdb
但是该方法如果删了编译时留校的sim.data文件夹,打开fsdb文件就没有源文件了
总结12. warning -debug_all不推荐
使用vcs -debug_acc+all替代
总结13. Vim中高亮所有相同的单词
用vim时,想高亮显示一个单词并查找的方发,将光标移动到所找单词.
1: shift + "*" 向下查找并高亮显示
2: shift + "#" 向上查找并高亮显示
3: "g" + "d" 高亮显示光标所属单词,"n" 查找!
总结14. 跑另一个makefile
make -f Intro_Top.tcl
总结15. 打印输出格式
如果一个变量定义为signed格式,以%d的格式输出的是有符号,如果数字定义是无符号的,但是想打印有符号
$display("%d",$signed(B) );
总结16. 任务和函数的简单比较
task和function举例
task的调用tips
不同的task对同一数据进行操作,解决方法:任务和函数都会被定义为automatic,表示他们的数据是复制后按照迭代执行过程的顺序放到CPU寄存器堆的(Verilog数字VLSI设计教程 p118)
同一task在相同的时间调用:用in_use作为task已被调用的标志符号,从而避免被其他代码段调用
总结17. 综合器对integer的优化
在优化过程中会去掉32bit的integer中没有用到的比特,只剩下一个足够大小的寄存器
总结18. verilog中的disable
类似于break的效果,跳出循环总结19. fork join只有在所有的并发语句执行之后才会接着执行
总结20. 芯片设计中把所有的宏定义放在一个文件里
`include "PLL.inc"
总结21. Mealy和moore FSM
Mealy: output depend on current state and current input
Moore: output depend on current state only
总结22. dc_shell下清除窗口信息
ctrl+L 清屏,相当于 clear 命令
总结23. #0的非阻塞赋值
仿真工具发现#0的非阻塞赋值,会马上安排调度任务,当没有延迟的时间执行后,会执行到有延迟的任务,这可能改变事件的执行顺序总结24. 在设计里面添加延迟小谈
最好不要在过程块或设计的任何一个部分使用#n延迟。如果实在需要,只把#n加在模块的输出上
总结25. Design Compiller的各种库文件格式
总结26. 查看文件夹下文件的大小
du -sh *
总结27. if和case的区别
为了弥补if和case的区别,有了全等符号===和不全等!==
总结28. casez和casex
casex是一定不能用的,因为casex综合出的网表可能和原始设计不一致
casex如果有需要,可以使用
总结29: 使用fork-join的时候一定要保证join会被执行
四个相同并行块,他们都是依赖别的信号,如果这四个并行块不一定执行,那么会不断加到仿真事件队列,会造成内存泄漏
fork join改变了事件的执行顺序