自动化仿真模型的搭建---基于lattice DO文件和modelsim脚本

首先,我并不喜欢半自动的联合仿真,宁愿花一些时间写简单的脚本。

1.先建立自己的仿真文件夹sim,用于存放tb和相应的脚本以及仿真生成的垃圾,如下图。

2.编译库是必须的,如下以latticeECP3为例,其中添加了DDRFrame_bufferpllIP

为了可移植性的方便,我将相应的库拷贝到了自己指定的文件夹sim/lib下,将ECP3的器件库放到里面,如下图。

 

3.接下来就是写脚本(因IP存放相对位置不一样,脚本则不一样),先将写好的脚本贴出来,然后一一解释,如下图ddr3_frame_buffer.doddr3_frame_buffer.bat

 

图ddr3_frame_buffer.bat

图ddr3_frame_buffer.bat中可以看到整个核心部件的当前文件夹是sim(这个做仿真文件关联的时候一定要注意),图ddr3_frame_buffer.bat的脚本很简单,不啰嗦。

图ddr3_frame_buffer.do,因为当前文件夹是simtb.v又在sim下,所以vlog     ./tb.v编译当前文件夹下的tb.v,如下图所示。

 

lattice的库在libecp3pmi下,所以vlog     ./lib/ecp3/*.v./lib/pmi/*.v也很显然了

接下来编译自己写的.Vvlog  ./../scr/*.v。

然后编译IP的实体,调用了DDRFrame_bufferpll,所以他们仿真模型的实体也得编译。

vlog  ./../pll/pll.v

vlog  ./../frame_buffer/frame_buffer_beh.v

这两句就是编译Frame_bufferpll的仿真模型的实体。

 

DDR就没有这么简单了,因为DDR实体里面还包含了很多东西

 

vlog  ./../ecp3_ddr3/ecp3_ddr3_beh.v

 

vlog     ./../ecp3_ddr3/ddr_p_eval/ecp3_ddr3/src/rtl/top/ecp3/*.v

 

vlog     ./../ecp3_ddr3/ddr_p_eval/models/ecp3/*.v

 

看到工程的顶层包含了`include "ddr3_sdram_mem_params.v",他是指工程的相对src作为当前路径,即指的是src文件夹为当前文件夹,如下图src下有"ddr3_sdram_mem_params.v"所以在工程编译的时候没有报错。

 

但是我们在编译仿真DDR仿真模型实体ecp3_ddr3_beh.v

的时候,里面没有去包含参数宏定义的文件ddr3_sdram_mem_params.v,如下图

 

这样必然会报错的解决的办法有两个第一将ddr3_sdram_mem_params.v包含在ecp3_ddr3_beh.v下面但是包含的时候关联路径一定要注意仿真指定的当前文件夹是sim,所以关联路径应该是,如下图。

`include "./../ecp3_ddr3/ddr_p_eval/ecp3_ddr3/src/params/ddr3_sdram_mem_params.v"

 

还没有完事,ecp3_ddr3_beh.v下面还包含了其他仿真实体也要编译

vlog     ./../ecp3_ddr3/ddr_p_eval/ecp3_ddr3/src/rtl/top/ecp3/*.v

要编译哪些东西,东西从哪里来???看看自己的工程就知道(首先自己要保证自己的工程在diamond下能够编译通过),看着自己工程架构写脚本是最快的,以上脚本的所有步骤都是根据工程架构写的,工程架构如下图

根据上图加上脚本

vlog     ./../ecp3_ddr3/ddr_p_eval/ecp3_ddr3/src/rtl/top/ecp3/*.v

vlog     ./../ecp3_ddr3/ddr_p_eval/models/ecp3/*.v

还有一种办法就是根据给出生成IP目录下给出的.do脚本来修改,这种办法相对繁琐,但是也值得参考,如下图是自动生成的脚本。

 

至此整个工程所需要的东西就全了可以开心的让工程仿真跑起来了。

 

如有疑问请联系QQ:825972925

 

posted on 2017-02-25 16:32  小诸葛叶  阅读(630)  评论(0编辑  收藏  举报