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