Makefile 结构与VCS仿真启动方式
Makefile结构
-
理解成变量和命令部分
-
$TB :由第1行的 TB 替换
comp
-
vlogan : 对 verilog 文件做一个分析
-
-kdb : 为了便于编译的内容, 既能用 VCS(2018版本,默认能 dve ( dve -full64 & ) 界面打开 , VCS是总工具的统称 , dve 是鉴于为了表达 VCS 编译的内容、结果 的一个前段界面。 2019版本之后 dve界面 优先级下降, 2019之后的VCS 默认打开 verfi。 用dve跑仿真速度快,占内存小) 窗口
-
-full64 : 机器是64位
-
-sverilog : 编译的文件按 sv 类型编译
-
-timecsale=1ps/1ps : 任何的时序都需要添加时间单位,用来标定仿真时间 。 在SV中 可以不用再模块外定义 timecsale ,可以在编译的时候统一指定 timecsale
-
-nc : no check ,不检查设计的一部分内容
-
-l : 编译的时候,不但把编译的日志、内容、结果 在窗口打印出来 , 而且写入 comp.log 文件中
elab:comp
-
在2016版本之前,做elabration 时 , comp 是把每个模块独立编译到库里面, elab 要把所有模块、目标链接起来 生成一个目标可执行文件,后缀名 .simv ,只有生成一个可执行文件才能跑仿真。 这个命令需要 vcs 才能达成
-
elab:comp 依赖关系,执行 elab 之前会先做 comp
-
-top : 编译哪个顶层
-
-o :生成可执行文件
-
-debug_all : 不但要把仿真跑起来,在跑仿真的过程中 希望看到更多变量的内容(类, 对象的变量,数组,队列里面的内容,如果不添加 -debug_all 这个选项就看不到 ,默认为了性能不会添加)
- -debug_access+all :在 2018 版本之后 它更建议用这个选项
有几种方式可以把 .simv调用起来? 一共 2种方式
-
- run (后台模式 batch) 和 rung (前段模式) 都是用dve界面 。
-
- runvd :verdi 启动
-
run 的替换 ./$(TB).simv -l run.log -sml +ntb_random_seed= $ (SEED),
-
运行 ,simv 文件 生成 run.log文件
-
-sml : smart log 到 verdi 就了解了,有一些帮助
-
ntb_random_seed:随机种子
make run
不会自动结束仿真, 要 ctrl + c 退出 ,会出现 ucli% :命令界面,输入 run 会继续跑仿真
make rung &
- 加了一个 gui 选项 ,默认 dve 界面跑 。 后面会讲结构大概什么样 ,看一些什么东西来完成
make runvd &
&:当前的终端窗口不在被程序占用,程序后台运行,可以继续敲命令
Makefile.mti :启动questa 仿真器
git pull : 抓最新文件夹,
VCS 编译可以分成2种情况:
- 3 步编译仿真法:先做 comp (把文件逐一给它),在做 elab , 再做 run
- 2 步编译仿真法:把 comp , elab, 放到一个仿真步骤里面
第一行是tb4, 如果想编译tb1.sv,不想在 makefile 文本里修改 TB = tb1,那么在命令行输入 make comp TB=tb1
如果想编译 tb1.v 那么要将makefile 中的 $(TB).sv 更改为 $(TB).v
VCS 在仿真中需要关注的波形和数据流
执行: make comp TB=tb1 ,生成 tb1.simv 。 因为 elab 的时候 执行了 : -o $(TB).simv 。 接着 make rung TB=tb1 & (还要替换 TB=tb1 )
- -top:编译哪个顶层 , tb1.sv 里面 module 名是 tb1,
- 顶层
首先把 dut 的波形加进来,可以保存波形文件
- dve 命令行输入 :dump -add /* (保存所有波形)
- run 1us
红色是 x 信号, x信号是输入的,为什么输入的时候有 x 信号 ,tb 里面为什么有 x 信号,这些信号是怎么变成确定信号的? 由于激励的修改造成的。
设计的输出也有 x ,为什么有 x ,设计输出的确定信号是怎么变化进来的 , 为什么遇到 clk 变成稳定了 。 ch0_margin_o 表示 fifo 的余量, 将数据送到了 mcdt_data_o 的输出。
输入信号能不能改成连续的? 并行的? 可以通过 SV 的特性并行发送数据
波形文件里将 tb2_ref 改成 tb4_ref
:1,$s;tb2_ref;tb4_ref;gc
lab1 讲的是怎样把仿真调起来,要看的是什么,关注设计的边界,边界激励怎么来,输出是由哪些输入信号得来的