仿真,vcs和ncverilog 用户接口
仿真工具
1. vcs
调用方式
simv -ucli -do xxx.tcl
tcl脚本内容
# pin相关操作
# 查找某个pin, 返回{top_tb.chip.vcss}, 如果不存在则返回空.
ucli% search top_tb.chip.vss
# force时钟
ucli% force top_tb.chip.SYS_CLK 0 0ns, 1 10ns -repeat 20ns
# force bus, 中括号需要转义
ucli% force top_tb.chip.data\[7:0\] 8'hFF
# 获取某个pin的值, 得到的是'b0, 'b1, 'bz这种值
ucli% get top_tb.chip.trstn
# dump波形操作
ucli% call {$fsdbDumpfile "./test.fsdb"}
ucli% call {$fsdbDumpvars (0, top_tb.chip)}
ucli% call {$fsdbDumpon}
ucli% call {$fsdbDumpMDA} ;# dump二维数组的波形
ucli% run 100ns
ucli% call {$fsdbDumpflush}
# dump波形, 波形名称带变量
ucli% fsdbDumpfile ./wave/vcs_$env(PATT).fsdb
ucli% fsdbDumpvars 0 TB
ucli% fsdbDumpon
ucli% $fsdbDumpMDA ;# dump二维数组的波形
ucli% run 100ns
ucli% fsdbDumpflush
#获得当前仿真时间, 单位是fs
ucli% set a $now
ucli% run 100ns
ucli% puts "time=$now"; # 163100000000
ucli% puts "a=$a" ; # 163000000000
2. ncverilog
2.1 ncsim接口
调用方式
忘了
tcl脚本内容
# pin相关操作
ncsim% find -scope top_tb.chip vss # 查找某个pin, 返回chip.vss
ncsim% force top_tb.chip.SYS_CLK 0 -after 0ns 1 -after 10ns -repeat 20ns # force时钟
ncsim% value top_tb.chip.trstn # 获取某个pin的值
ncsim% deposit top_tb.chip.xx_reg.Q 1'b0 # 给寄存器赋初值
# dump波形操作
ncsim% set fsdbfile "./test.fsdb"
ncsim% call {$fsdbAutoSwitchDumpfile} 5000 $fsdbfile 20}
ncsim% call {$fsdbDumpvars} {0} {top_tb.chip}
ncsim% call {$fsdbDumpon}
ncsim% run 100ns
ncsim% run -absolute 200ns
ncsim% call {$fsdbDumpflush}
2.2 指定某几个inst为blackbox
不需要指定top_tb.chip层次, 在nc的仿真选项中添加:
-ncargs "-bbinst U_A/U_xx -bbinst U_B/U_yy" # 直接指定inst
-ncargs "-bblist ip0.txt -bblist ip1.txt" # 指定通过filelist指定inst
其中ip0.txt, ip1.txt是文本文件, 每行列出一个inst.
ip0.txt:
U_A/U_SDS0
U_A/U_SDS1
ip1.txt:
U_B/U_DDR0
U_B/U_DDR1
3. cell只dump端口信号, 不dump单元内部信号
+fsdb+skip_cell_instance=2