DE2-115 開發紀錄: 在 Linux 下使用 ModelSim

撰寫完 Verilog 程式後,除了下載到 FPGA 開發板上,我們也可以透過 ModelSim 來對我們的程式進行波型的模擬。

由於 Altera 的 ModelSim 在 Linux 下運作可能會遇到一些問題導致不能執行,本篇將整理我自己遇到的情況。

執行 RTL Simulation 出錯

我遇到的第一個錯誤在執行 Tools -> Run Simulation Tool -> RTL Simulation , 它就這樣給我跑出一個不相干的錯誤視窗…

而在 console 下則可以看到這樣的錯誤訊息 (紅字部份):

後來查證一下,我目前使用的 Quartus 為 18.0 ,其中 ModelSim 相關程式我安裝到 /opt/Altera/18.0/modelsim_ase/ 去,由於整個 ModelSim 都是 32bit 的程式,在 64bit Linux 系統上需要安裝 32bit 版本的 ncurses.

Gentoo Linux 使用者可以透過以下命令去安裝:

coldnew@gentoo ~ $ sudo echo "sys-libs/ncurses abi_x86_32" >> /etc/portage/package.use/sys-libs
coldnew@gentoo ~ $ sudo emerge -v sys-libs/ncurses:5

安裝完成後會多出 /usr/lib32/libncurses.so.5 這個檔案,這樣執行就不會出錯。

修改 vco 腳本

我安裝的 ModelSim 在 /opt/Altera/18.0/modelsim_ase/ ,而其中有一個 vco 腳本需要做這樣的修改,不然會找不到對應的 vsim 執行檔

vco 檔案做以下修正:

--- vco.ori   2018-06-06 23:59:44.560036932 +0800
+++ vco       2018-06-07 00:00:01.430036918 +0800
@@ -207,7 +207,7 @@
           2.[5-9]*)         vco="linux" ;;
           2.[1-9][0-9]*)    vco="linux" ;;
           3.[0-9]*)                  vco="linux" ;;
-          *)                vco="linux_rh60" ;;
+          *)                vco="linux" ;;
         esac
         if [ ! -x "$dir/$vco/vsim" ]; then
           if [ -x "$dir/linuxle/vsim" ]; then

Initialization problem, exiting.

除了上面的問題以外,如果直接執行 /opt/Altera/18.0/modelsim_ase/linux/vsim ,也就是直接呼叫 ModelSim 程式的話,還會遇到像是這樣的錯誤訊息:

Error in startup script:
Initialization problem, exiting.

Initialization problem, exiting.

Initialization problem, exiting.

    while executing
"Transcript::action_log "PROPREAD \"$key\" \"$value\"""
    (procedure "VsimProperties::Init" line 59)
    invoked from within
"VsimProperties::Init $MTIKeypath"
    (procedure "PropertiesInit" line 18)
    invoked from within
"PropertiesInit"
    invoked from within
"ncFyP12 -+"
    (file "/mtitcl/vsim/vsim" line 1)
** Fatal: Read failure in vlm process (0,0)

老實說這個問題真的困擾我好一下子,後來在 Making ModelSim ALTERA STARTER EDITION vsim 10.1d work on Ubuntu 14.04 一文看到了原因,ModelSim 需要使用 32bit 並且版本不能太新的 libfreetype, 根據我的測試, 2.5.2 的 libfreetype 是可以用的。

由於我懶的編譯這些缺的函式庫,因此我去 Debian 的套件庫撈了以下兩個函式庫來滿足依賴:

如果你不知道如何解開 .deb 的檔案的話,也可以用我已經包好的 lib32.tar.gz 檔案。

/opt/Altera/18.0/ 建立一個名為 lib32 的資料夾,裡面放入剛剛解開的函式庫:

coldnew@gentoo /opt/Altera/18.0/lib32 $ tree  .
. <b>
├── libfreetype.so.6 -> libfreetype.so.6.11.1 <lw>
├── libfreetype.so.6.11.1
├── libpng12.so.0 -> libpng12.so.0.50.0 <lw>
└── libpng12.so.0.50.0

0 directories, 4 files

接下來我們需要修改 /opt/Altera/18.0/quartus/bin/quartus 這個檔案,這樣執行 Quartus 的時候就可以呼叫出 ModelSim 了

--- quartus.ori      2018-06-07 00:28:01.370035538 +0800
+++ quartus  2018-06-07 00:28:27.100035516 +0800
@@ -19,6 +19,10 @@
 # included scripts to support use of path with spaces.
 IFS=

+# hack to make modelsim load lib32's library
+dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+export LD_LIBRARY_PATH=${dir}/../../lib32
+
 # Ignore external setting of QUARTUS_ROOTDIR, but allow
 # user to force a location using QUARTUS_ROOTDIR_VERRIDE
 if test "${QUARTUS_ROOTDIR_OVERRIDE-UNSET}" != UNSET ; then

執行結果

我目前遇到就上面這些問題,解決以後就可以呼叫 ModelSim 囉 ~