第一步:建立Makefile仿真命令
其内容如下:
one:
ncverilog +access+rwc +nc64bit +loadvpi=finesim.so:finesim_startup -f run.f
注:
run.f文件里调模块的数字控制.v文件以及仿真环境的testbench.v文件。
第二步:仿真环境基本框架搭建
环境框架:
所需文件:
1、顶层文件:top.v以及top_ana.v
2、数字:verilog源代码
3、模拟:xxx模块的 "xxx.cdl" 网表
其中,在top_ana.v里需添加 $finesim_module ,且top_ana.v里的多bit信号的输出需用wire scalared 进行声明。除此之外,最重要的一点是top_ana.v的端口信号顺序一定要和"xxx.cdl"里网表的端口顺序一致。
第三步:数模接口finesim.cfg定义
其内容如下:
.a2d default vl=0.5 vh=4.5
.d2a default vl=0 vh=5 vx=2.5 tr=1n tf=1n
.finesim -auto -np 8 finesim.sp
注:
(1).a2d表示模拟到数字的电压阈,.d2a表示数字到模拟的电压阈。
(2)finesim -auto -np 6 finesim.sp 调用finesim多核仿真(支持1~16)。
(3)该文件需要在testbench.v里添加 initial $finesim_confg("finesim_cfg");。
第四步:激励文件finesim.sp撰写
其内容如下:
.inc './finemix.sp'
.inc './xxx.cdl'
.option finesim_speed = 1
.option finesim_mode = promd
.option post probe
.probe v(*) level = 3
.probe i(*) level = 2
.lprobe level = 4 v(*) high = 1.0 low = 0.4
.tran 1n 1m
.end
注:
(1)finemix.sp为工具自动生成的文件,里面包含数模接口信号的层次信息,必须调用。
(2)利用probe可打印信号的模拟电压和电流,当前cdl网表为第一层,若想打印内部模块的信号,则增加level的层数即可。
(3)利用lprobe可打印信号的数字电平,打印层数以及打印门限都可自主定义。上图中表示高于1.0V波形打印为1,低于0.4V则波形打印为0。
第五步:运行脚本生成波形
在仿真目录下运行 make one 会启动finesim工具,仿真结束后会生成两个“.fsdb”的波形文件,其中finesim.fsdb为模拟波形(该波形文件的名称取决于激励文件的命名)
另外一个波形为数字波形,可在testbench.v里自主定义名称。
写到最后:
本文当前只讲述了以数字为顶层的混合仿真环境的搭建,后续会更新以模拟为顶层的混合仿真环境的搭建。