概要
通过DC综合获得.v形式的门级网表,以及对应的延时文件 .sdf以后,编写testbench,查看电路存在延时下的波形情况。
不过这里的延时不太准确,只能作为参考,在布局布线后的延时与实际情况较为相符。
前置准备
verdi的环境配置
在.bashrc文件中进行配置,这里主要定义的用户变量,如果是在安装时工具时就已经配置好了对应的环境变量,则可以略过,对应的配置如下:
目录文件
新建一个工作目录,把需要的文件都放在这个目录下,具体如下:
- filelist.fw文件存放所有的RTL代码文件路径
- makefile文件存放对应的脚本命令
- rtl目录下存放所有的RTL文件,这里我还存在了对应的.sdf时序约束文件
- tb目录下存放testbench文件
编写测试文件
首先在编写的tb中加入相应的系统函数,因为verid不能产生波形文件,所以需要先利用VSC先生成对应的波形文件
initial begin
$fsdbDumpfile("自定义.fsdb");
$fsdbDumpvars(0);
end
然后继续添加如下代码,表示添加对应的延迟文件。
initial begin
`ifdef NET_SIM
$sdf_annotate(".sdf存放路径",
例化名,,,
"TYPICAL",
"1:1:1",
"FROM_MTM");
`endif
end
sdf_annotate函数用法:
$sdf_annotate ('sdf_file'[, module_instance] [,'sdf_configfile'][,'sdf_logfile'][,'mtm_spec'] [,'scale_factors'][,'scale_type']);
- sdf_file: SDF 文件名字,包含路径信息。
- module_instance: 例化的设计模块名字,一般为 testbench 中所例化的数字设计模块名称,注意和 SDF 文件内容中的声明保持层次的一致。
- log_file: 编译时关于 SDF 的日志,方便查阅。
- mtm_spec: 指定使用的延迟类型,选项包括 MAXIMUM、MINIMUM、TYPICAL,分别表示使用 SDF 文件中标注的最大值、最小值或典型值。当然上述 SDF 文件例子中没有给出典型值。
创建makefile脚本
这里直接附上参考up主的思维导图和我修改得到的makefile脚本
OUTPUT = adder
CM = -cm line+cond+fsm+branch+tgl
CM_NAME = -cm_name ${OUTPUT}
CM_DIR = -cm_dir ./${OUTPUT}.vdb
LIB_FILE = -v ../lib/tcbn65lpbwp12thvt.v
all: clean listfile com sim verdi
listfile:
find -name "*.v" > filelist.f
com:
vcs -full64 -LDFLAGS -Wl,--no-as-needed \
-sverilog -debug_access -timescale=1ns/1ps \
-f filelist.f -l com.log -kdb -lca +define+NET_SIM +neg_tchk \
${CM} ${CM_NAME} ${CM_DIR} ${LIB_FILE}
sim:
./simv -l sim.log ${CM} ${CM_NAME} ${CM_DIR}
cov:
dve -full64 -covdir *.vdb &
urg:
urg -dir *.vdb
verdi:
verdi -f filelist.f -ssf *.fsdb &
clean:
rm -rf csrc *.log *.key *simv* *.vpd *DVE*
rm -rf verdiLog *.fsdb *.bak *.conf *.rc *.f *.vdb
verdi的波形查看
打开terminal,运行 make all 也就是运行makefile文件中的第一条命令,Verdi中的波形查看操作这里主要还是学习视频中的操作,也不复杂,故不在赘述。