[原創]利用 bat 腳本進行 QuartusII 和 NiosII 程序的下載


本文主要介紹了一種使用 bat 批處理調用腳本對 Altera 系列 FPGA 外掛 EPCS 芯片進行 SOF(QuartusII)和 ELF(NiosII) 程序的下載方法。

事出必有因

當前固件程序存在 NIOS 軟核部分,所以在調試測試以及生產的時候經常需要同時打開 QuartusII 和 NiosII 進行程序的更替下載,操作繁瑣費時,於是就想到使用 Quartus 中的 Command-Line 來進行程序的下載。

軟件環境:QuartusII & NiosII 15.1.0.185。

知其然

完成后的bat在雙擊后運行如下圖所示,有 3 個選項可供選擇。

下載選項界面

[0] 運行Altera Nios2 Command Shell

  • 選擇此項后將會正常進入到 Altera Nios2 Command Shell 命令行界面

[1] 執行在線下載功能

  • 選擇此項后將會進行程序的在線下載(並不會固化),而后進入調試模式運行,可以輸出可能有的反饋信息

[2] 執行程序固化功能

  • 選擇此項后將會進行程序的固化操作,並在固化完成后讓程序從基地址開始運行

知其所以然

能這么做完全是因為 Quartus 留出了相應的命令行接口,其實我們所使用的圖形界面在后台也是轉化為一個個的命令依次執行的。當前完成的工作也只是初步的完成了腳本實現,且需要一定的先決配置條件,后期仍有很大的改善空間,好好的學習一下 shell 腳本后應該可以使得步驟更為簡化。

Step 1 : 編寫程序下載腳本文件(*.sh)
Step 2 : 編寫 bat 文件調用 Nios2 Command Shell 並執行步驟1中的腳本文件

為了最快的完成此部分功能的開發,在 shell 腳本基礎較少的情況下以上兩個步驟通過更改 Quartus 安裝路徑下 altera\15.1\nios2edsNios II Command Shell.batnios2_command_shell.sh 文件來完成。強烈建議對原文件進行備份后操作,下文中步驟也是對備份文件的更改。

其中,
nios2_command_shell.sh 為 Nios II Command Shell 的運行腳本文件。

Nios II Command Shell.bat 為 bat 腳本運行文件,windows 環境下雙擊運行后即可調用 nios2_command_shell.sh 后進入 Nios II Command Shell。

另外,在以下內容中,設定 Example.sof 和 Example.elf 為演示下載用 SOF 和 ELF 文件名。

sh腳本的更改

注意:此文件應在路徑 altera\15.1\nios2eds 下。

  • 將備份的 nios2_command_shell.sh 更改為方便自己使用的文件名,這里更改為 example_sh.sh
  • 找到以下區域
if [ -n "$*" ]; then
    exec $@
else
    echo ""
    echo "Altera Nios2 Command Shell [GCC 4]"
    echo
    echo "Version 15.1, Build 185"
    echo ""

    # Use bash --norc to get a clean shell
    # Use bash --rcfile <bashrc> to for a user rcfile
    # Default to using ~/.bashrc
    bash
fi
  • # Use bash --norc to get a clean shell這一行前,也就是 bash 命令前添加以下內容。
########################################################
# 選擇窗口 											   #
########################################################
echo " "
echo "[0] Run Nios2 Bash"
echo "[1] Run Test Program"
echo "[2] Download Normal Program"
echo " "

read -p "Please select : " SelNum
echo ""
echo " "

case ${SelNum} in
    0)
        echo "You select [0] Run Nios2 Bash"
        echo "Nios2 Command Line Is Running Now..."
        ;;
    1)
        ################################################
        # 在線下載
        ################################################
        echo "You select [1] Run Test Program"
        ################################################
        # 設置文件存儲路徑及SOF & ELF文件名
        PGM_PATH="C:/Users/Admin/Desktop/Program"
        SOF_FILE="Example.sof"
        ELF_FILE="Example.elf"
        ################################################
        echo " "
        echo "Program Information"
        echo ""
        echo "Program File Path	: ${PGM_PATH}"
        echo "SOF File		: ${SOF_FILE}"
        echo "ELF File		: ${ELF_FILE}"
        echo ""
        echo " "

        read -n 1 -p "Press any key to continue..."
        echo " "

        cd ${PGM_PATH}
        echo "Running Now..."

        # 執行在線下載命令,DEBUG模式
        nios2-configure-sof ${SOF_FILE}
        nios2-download ${ELF_FILE} -c USB-Blaster[USB-0] -r -g
        nios2-terminal -c USB-Blaster[USB-0]
        ;;
    2)
        ################################################
        # 程序固化
        ################################################
        echo "You select [2] Download Normal Program"
        ################################################
        # 設置文件存儲路徑及SOF & ELF文件名
        PGM_PATH="C:/Users/Admin/Desktop/Program"
        SOF_FILE="Example.sof"
        ELF_FILE="Example.elf"
        ################################################
        echo " "
        echo "Program Information"
        echo ""
        echo "Program File Path	: ${PGM_PATH}"
        echo "SOF File		: ${SOF_FILE}"
        echo "ELF File		: ${ELF_FILE}"
        echo ""
        echo " "

        read -n 1 -p "Press any key to continue..."
        echo " "

        cd ${PGM_PATH}
        echo "Running Now..."

        # SOF & ELF --> FLASH
        sof2flash --input=${SOF_FILE} --output="sw.flash" --epcs
        echo "sof2flash successfully!"
        elf2flash --input=${ELF_FILE} --output="hw.flash" --epcs --after="sw.flash"
        echo "elf2flash successfully!"
        echo " "

        # -b/--base <address>         Base address of FLASH/EPCS to operate on
        # -s/--sidp <address>         Base-address of System ID peripheral on target
        # -I/--id <system-id-value>   Unique ID code for target system
        ################################################
        # 設置下載使用的一些變量(僅限工程師進行修改)
        C_BASE=0x0
        C_SIDP=0x2A40
        C_ID=0x0
        ################################################

        nios2-configure-sof ${SOF_FILE}
        nios2-flash-programmer "sw.flash" --base=${C_BASE} --epcs --sidp=${C_SIDP} --id=${C_ID} --accept-bad-sysid --device=1 --instance=0 '--cable=USB-Blaster on localhost [USB-0]' --program 

        nios2-configure-sof ${SOF_FILE}
        nios2-flash-programmer "hw.flash" --base=${C_BASE} --epcs --sidp=${C_SIDP} --id=${C_ID} --accept-bad-sysid --device=1 --instance=0 '--cable=USB-Blaster on localhost [USB-0]' --program --go 

        echo " "
        echo "Program download successfully!"
        read -n 1 -p "Press any key to close this window..."
        exit
        ;;
    *)
        echo "Nios2 Command Line Is Running Now..."
        ;;

bat文件的更改

注意:此文件應在路徑 altera\15.1\nios2eds 下。

  • 將備份的 Nios II Command Shell.bat 更改為方便自己使用的文件名,這里更改為 example_bat.bat
  • 找到以下兩行
:run_nios2_command_shell
@ "%_QUARTUS_BIN%\cygwin\bin\bash.exe" -c '%_NIOS2EDS_ROOT%nios2_command_shell.sh %*'
  • 將其中的 nios2_command_shell.sh 更改為你自己的sh文件,此處更改為 example_sh.sh

簡單說明

備注:有關命令的一些功能介紹,大部分可以在 command line 中在命令后跟上 --help 進行查閱.如下所示。

nios2-configure-sof --help
  • nios2-configure-sof表示sof下載,其后台調用quartus_pgm將sof進行文件下載,等價於如下圖形界面下的紅框中操作。
    quartus_pgm等效
  • nios2-download表示elf在線下載,等價於等價於如下圖形界面下的紅框中操作。
    nios2-download等效
  • nios2-terminal表示進入調試模式,此時下載進去的程序才會運行,同時命令行窗口還將會顯示和NiosII軟件中一致的信息。
  • sof2flash表示將sof文件轉換成S-Record格式的flash文件,方便下載。
  • elf2flash表示將sof文件轉換成S-Record格式的flash文件,這里需要注意生成時需要加上--after sw.flash,表示elf程序的地址信息從sof之后開始。
  • nios2-flash-programmer表示固化程序,其后可以接的參數代表含義可--help查看。這里只介紹下上面腳本中所用到的。
    • --base表示Qsys中EPCS模塊的起始地址
    • --epcs表示下載的操作對象為EPCS系列芯片
    • --sidp表示Qsys中SystemID模塊的起始地址
    • --accept-bad-sysid表示忽略System ID和System Timestamp
    • --program表示下載操作
    • --go表示從起始地址開始運行

下學而上達,循序漸進

[1] Quartus II Scripting Reference Manual
[2] Nios II Flash Programmer User Guide
[3] Nios II Command-Line Tools
[4] Command Line Scripting 2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM