学习笔记3

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

image.png

总结2. Verilog对含有x和z的信号进行计算

比较
image.png

总结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

image.png

总结6. 仿真结果保存结果到文件中

image.png

我们可以设置某个触发条件,上面还可以通过判断写入的值是否是我们需要的

总结7. Vim的代码补全

编辑模式下,ctrl+N

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

image.png

对应的Makefile的头写法
image.png

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

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

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

Verdi 中 Waveform -> Signal Value 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

总结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. 任务和函数的简单比较

image.png

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

image.png

总结18. task的调用tips

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

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

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

总结20. verilog中的disable

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

总结21. fork join只有在所有的并发语句执行之后才会得到结果

image.png

image.png

对应的fork join的仿真为


image.png

image.png

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


image.png

总结26. 在设计里面添加延迟

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

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

image.png

总结28. 一个设计的流程

先写design spec, AMBA/AHB协议,SRAM的端口协议
然后是architecture design。电路结构,时序图

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

du -sh *

总结30 if和case的区别

image.png

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

总结31 casez和casex

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

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

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


image.png

你可能感兴趣的:(学习笔记3)