本文主要介紹了一種使用 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\nios2eds
的 Nios II Command Shell.bat
和 nios2_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進行文件下載,等價於如下圖形界面下的紅框中操作。
nios2-download
表示elf在線下載,等價於等價於如下圖形界面下的紅框中操作。
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