学习笔记4

总结1. Verilog对字符型的定义

image.png

总结2. Verilog含有x和z的信号值操作

比较
image.png

计算
含有x的操作包括,+, -, *, /, %结果都是x

总结3. Verdi后台新进程打开

verdi My_wave.fsdb > &log &
后台打开时产生的日志放在log文件中,后台打开,看设计文件,不用新开terimal

总结4. Verdi保存波形配置

波形窗口的file -> save signal保存为.rc文件
打开波形配置文件,新建一个波形窗口,file->restore signal选择.rc文件
更改设计文件,重新编译仿真,信号改变了,但是上次的波形配置还在

总结5. 保存结果到文件中,我们可以设置某个触发条件

image.png

总结6. Vim的代码补全

编辑模式下,ctrl+N或者ctrl+P

总结7. 终端给Makefile传递参数

image.png

Makefile的写法
image.png

总结8. 改变Verdi的字体大小

https://blog.csdn.net/weixin_42764060/article/details/107100592

总结9. Verdi对信号加上状态机名称

Verdi 中 Waveform -> Set Radix -> Edit Alias,出现一个对话框。

  1. Alias Table 为对这个信号起别名(alias)表的名字。
  2. 下面表格中 Alias 填你要显示的字母(用你 parameter的名字即可)
  3. 下面表格中 Value填对应行中左边 Alias 名字对应的数字(用你 parameter 后赋得值即可)
  4. 下面表格中 Background Color 为颜色(可填可不填)
  5. 最上面 Save as 为保存这个 alias file
  6. 点击最小面的 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. 打印输出格式

image.png

如果一个变量定义为signed格式,以%d的格式输出的是有符号,如果数字定义是无符号的,但是想打印有符号

$display("%d",$signed(B) );

总结16. 任务和函数的简单比较

image.png
函数只是一个复杂的表达式(0时间执行,并立即返回),而任务是仿真(或者设计的一部分)
task和function举例
image.png

task的调用tips
不同的task对同一数据进行操作,解决方法:任务和函数都会被定义为automatic,表示他们的数据是复制后按照迭代执行过程的顺序放到CPU寄存器堆的(Verilog数字VLSI设计教程 p118)
同一task在相同的时间调用:用in_use作为task已被调用的标志符号,从而避免被其他代码段调用

总结17. 综合器对integer的优化

在优化过程中会去掉32bit的integer中没有用到的比特,只剩下一个足够大小的寄存器

总结18. verilog中的disable

类似于break的效果,跳出循环
image.png

总结19. fork join只有在所有的并发语句执行之后才会接着执行

image.png

总结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的非阻塞赋值,会马上安排调度任务,当没有延迟的时间执行后,会执行到有延迟的任务,这可能改变事件的执行顺序
image.png

总结24. 在设计里面添加延迟小谈

最好不要在过程块或设计的任何一个部分使用#n延迟。如果实在需要,只把#n加在模块的输出上

总结25. Design Compiller的各种库文件格式

image.png

总结26. 查看文件夹下文件的大小

du -sh *

总结27. if和case的区别

image.png

为了弥补if和case的区别,有了全等符号===和不全等!==

总结28. casez和casex

casex是一定不能用的,因为casex综合出的网表可能和原始设计不一致
casex如果有需要,可以使用

总结29: 使用fork-join的时候一定要保证join会被执行

四个相同并行块,他们都是依赖别的信号,如果这四个并行块不一定执行,那么会不断加到仿真事件队列,会造成内存泄漏
fork join改变了事件的执行顺序


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。