Quartus调用Modelsim SE避免重复编译Altera器件库的方法

来源:互联网 发布:淘宝申请退款流程 编辑:程序博客网 时间:2024/05/17 07:35

最近用Quartus 15.0配合Modelsim SE 10.4的64位版本,简直就是闪电一般的仿真速度。但是众所周知,SE版本最大的问题就是每次由Quartus自动调用时,都要重新编译所使用的器件库,特别是使用Stratix等含有收发器、PCIE硬核等单元时,仿真库编译时间实在太长。为了避免这个问题,一个方法就是采用Modelsim Altera版本,其含有已经编译好的Altera器件库,但是存在软件需要破解和仿真速度慢的问题。最近研究了很久,终于完美地解决了这个问题。

需要的工具:Quartus 15.0、Modelsim SE 10.4 64位版、Modelsim Altera Editon 10.3。

1.先将这三个工具软件都安装好,然后,将Modelsim Altera安装目录下的altera文件夹(我的是D:\Altera\15.0\modelsim_ae\altera)剪切到Modelsim SE安装目录(我的是D:\modeltech64_10.4)下,其作用是将Modelsim Altera编译好的器件库转移至Modelsim SE下。

2.打开Modelsim Altera的Modelsim.ini文件(D:\Altera\15.0\modelsim_ae\modelsim.ini),将其中的以下一段文字拷贝出来:

; Altera Primitive libraries
;
; VHDL Section
;
altera_mf = $MODEL_TECH/../altera/vhdl/altera_mf
altera = $MODEL_TECH/../altera/vhdl/altera
altera_lnsim = $MODEL_TECH/../altera/vhdl/altera_lnsim
lpm = $MODEL_TECH/../altera/vhdl/220model
220model = $MODEL_TECH/../altera/vhdl/220model
maxii = $MODEL_TECH/../altera/vhdl/maxii
maxv = $MODEL_TECH/../altera/vhdl/maxv
fiftyfivenm = $MODEL_TECH/../altera/vhdl/fiftyfivenm
sgate = $MODEL_TECH/../altera/vhdl/sgate
arriaii = $MODEL_TECH/../altera/vhdl/arriaii
arriaii_hssi = $MODEL_TECH/../altera/vhdl/arriaii_hssi
arriaii_pcie_hip = $MODEL_TECH/../altera/vhdl/arriaii_pcie_hip
arriaiigz = $MODEL_TECH/../altera/vhdl/arriaiigz
arriaiigz_hssi = $MODEL_TECH/../altera/vhdl/arriaiigz_hssi
arriaiigz_pcie_hip = $MODEL_TECH/../altera/vhdl/arriaiigz_pcie_hip
stratixiv = $MODEL_TECH/../altera/vhdl/stratixiv
stratixiv_hssi = $MODEL_TECH/../altera/vhdl/stratixiv_hssi
stratixiv_pcie_hip = $MODEL_TECH/../altera/vhdl/stratixiv_pcie_hip
cycloneiv = $MODEL_TECH/../altera/vhdl/cycloneiv
cycloneiv_hssi = $MODEL_TECH/../altera/vhdl/cycloneiv_hssi
cycloneiv_pcie_hip = $MODEL_TECH/../altera/vhdl/cycloneiv_pcie_hip
cycloneive = $MODEL_TECH/../altera/vhdl/cycloneive
stratixv = $MODEL_TECH/../altera/vhdl/stratixv
stratixv_hssi = $MODEL_TECH/../altera/vhdl/stratixv_hssi
stratixv_pcie_hip = $MODEL_TECH/../altera/vhdl/stratixv_pcie_hip
arriavgz = $MODEL_TECH/../altera/vhdl/arriavgz
arriavgz_hssi = $MODEL_TECH/../altera/vhdl/arriavgz_hssi
arriavgz_pcie_hip = $MODEL_TECH/../altera/vhdl/arriavgz_pcie_hip
arriav = $MODEL_TECH/../altera/vhdl/arriav
cyclonev = $MODEL_TECH/../altera/vhdl/cyclonev
twentynm = $MODEL_TECH/../altera/vhdl/twentynm
twentynm_hssi = $MODEL_TECH/../altera/vhdl/twentynm_hssi
twentynm_hip = $MODEL_TECH/../altera/vhdl/twentynm_hip
;
; Verilog Section
;
altera_mf_ver = $MODEL_TECH/../altera/verilog/altera_mf
altera_ver = $MODEL_TECH/../altera/verilog/altera
altera_lnsim_ver = $MODEL_TECH/../altera/verilog/altera_lnsim
lpm_ver = $MODEL_TECH/../altera/verilog/220model
220model_ver = $MODEL_TECH/../altera/verilog/220model
maxii_ver = $MODEL_TECH/../altera/verilog/maxii
maxv_ver = $MODEL_TECH/../altera/verilog/maxv
fiftyfivenm_ver = $MODEL_TECH/../altera/verilog/fiftyfivenm
sgate_ver = $MODEL_TECH/../altera/verilog/sgate
arriaii_ver = $MODEL_TECH/../altera/verilog/arriaii
arriaii_hssi_ver = $MODEL_TECH/../altera/verilog/arriaii_hssi
arriaii_pcie_hip_ver = $MODEL_TECH/../altera/verilog/arriaii_pcie_hip
arriaiigz_ver = $MODEL_TECH/../altera/verilog/arriaiigz
arriaiigz_hssi_ver = $MODEL_TECH/../altera/verilog/arriaiigz_hssi
arriaiigz_pcie_hip_ver = $MODEL_TECH/../altera/verilog/arriaiigz_pcie_hip
stratixiv_ver = $MODEL_TECH/../altera/verilog/stratixiv
stratixiv_hssi_ver = $MODEL_TECH/../altera/verilog/stratixiv_hssi
stratixiv_pcie_hip_ver = $MODEL_TECH/../altera/verilog/stratixiv_pcie_hip
stratixv_ver = $MODEL_TECH/../altera/verilog/stratixv
stratixv_hssi_ver = $MODEL_TECH/../altera/verilog/stratixv_hssi
stratixv_pcie_hip_ver = $MODEL_TECH/../altera/verilog/stratixv_pcie_hip
arriavgz_ver = $MODEL_TECH/../altera/verilog/arriavgz
arriavgz_hssi_ver = $MODEL_TECH/../altera/verilog/arriavgz_hssi
arriavgz_pcie_hip_ver = $MODEL_TECH/../altera/verilog/arriavgz_pcie_hip
arriav_ver = $MODEL_TECH/../altera/verilog/arriav
arriav_hssi_ver = $MODEL_TECH/../altera/verilog/arriav_hssi
arriav_pcie_hip_ver = $MODEL_TECH/../altera/verilog/arriav_pcie_hip
cyclonev_ver = $MODEL_TECH/../altera/verilog/cyclonev
cyclonev_hssi_ver = $MODEL_TECH/../altera/verilog/cyclonev_hssi
cyclonev_pcie_hip_ver = $MODEL_TECH/../altera/verilog/cyclonev_pcie_hip
cycloneiv_ver = $MODEL_TECH/../altera/verilog/cycloneiv
cycloneiv_hssi_ver = $MODEL_TECH/../altera/verilog/cycloneiv_hssi
cycloneiv_pcie_hip_ver = $MODEL_TECH/../altera/verilog/cycloneiv_pcie_hip
cycloneive_ver = $MODEL_TECH/../altera/verilog/cycloneive
twentynm_ver = $MODEL_TECH/../altera/verilog/twentynm
twentynm_hssi_ver = $MODEL_TECH/../altera/verilog/twentynm_hssi
twentynm_hip_ver = $MODEL_TECH/../altera/verilog/twentynm_hip

3.将上述文本拷贝到Modelsim SE的modelsim.ini(D:\modeltech64_10.4\modelsim.ini)中,记得先将文件的只读属性去除,然后保存后再恢复只读,这一步的作用是在Modelsim SE中映射相应的器件库。

4.最关键的一步!也是费了我最多精力才发现的;打开D:\Altera\15.0\quartus\common\tcl\internal\nativelink\modelsim.tcl,这个脚本文件的作用就是生成仿真所需的.do批处理文件,在大约223行处有这样一句语句:

……

 # if its not modelsim-altera
 if {$tool_type != "0" } {
     # Compile libraries for SE version or Questasim

……

这意思很明白了,如果你调用的不是Modelsim的Altera版本,那对不起,所有的器件库都需要重新编译,哼哼,只好欺骗一下Altera的感情了,直接把if {$tool_type != "0" }判断条件改成if {"0"},这样不管你调用什么版本的Modelsim都不再编译器件库,否则,生成的.do文件中就将包含一大堆的vlib和vmap语句,也就要浪费大把时间重新编译。改好之后保存,从Quartus里直接调用Modelsim SE,完全不需要再编译器件库了。

还有,改造完后,Modelsim Altera版本完全没有存在的必要了,可以卸载。如果想让Altera版和SE版共享器件库也很简单,就是不必做第一步的altera目录转移,在修改SE版的modelsim.ini时,将

altera_mf = $MODEL_TECH/../altera/vhdl/altera_mf

之类的语句改成:

altera_mf = D:/Altera/15.0/modelsim_ae/altera/vhdl/altera_mf

即可,其实就是换了一个映射路径而已。

但是有一个问题请注意,就是Modelsim SE的版本号一定要大于或等于和Modelsim Altera的版本号,且最好不要差距太远。否则会出现无法识别器件仿真库的现象。比方说Modelsim SE10.1版就无法识别Modelsim Altera 10.3d的器件库;人既然不能预知未来,那么软件也是一样的道理。

嘿嘿,这个移花接木的方法是不是很拽呢?

1 0
原创粉丝点击