Nios程序燒寫到EPCS方法 - 第1頁 - asus119's Blog - EDN China電子設計技術ios
這裏主要是針對EP3C系列FPGA的Nios程序固化到EPCS中的方法作簡要說明。
硬件SOPC
一、要固化程序到EPCS,在SOPC Builder中首先須要添加EPCS_Controller核,此外,CPU的reset vector設置爲EPCS_Co
ntroller,Exception Vector通常設置爲SDRAM便可。
二、生成該nios_cpu。對於EP3C系列的FPGA來講,在生成cpu後,會出現與EPCS_Controller相關的4根引線(如圖),ui
這在以前的EP2C等早期系列的FPGA中是沒有的,由於系統已經默認完成了相應的設置,而EP3C是須要本身來對這些引腳設置的,這一點尤其要注意,下面就來具體說明一下。
這4根信號線分別爲(EP3C10F256):
EPCS_DATA0 -> H2
ASDO -> C1
nCS0,(Flash_nCE) -> D2
DCLK -> H1
在對這4根引線進行引腳分配的時候,要在Device中將這些雙功能引腳功能都設置爲regular I/O Pin,
不然會出現錯誤:
好比:Error:Can't place multiple pins assigned to pin location PIN_H2
......
對這些引腳作完這些設置後,便可進行編譯、下載了(引腳分配以下圖)。設計
另外,在使用Quartus II 10.0高版本編譯Cyclone IV器件的時候,可能在Device->Dual Purpose裏面的DCLK等引腳沒有USE AS Regular I/O選項,用戶就沒法給DCLK這些引腳指定Pin Assignment。
這時的解決辦法是:
打開工程的.qsf文件,加上如下幾句(若存在對這4個引腳的其它相似配置信息時,先刪除):
set_global_assignment -name RESERVED_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVED_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVED_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVED_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO"
保存並編譯,就能夠正確讀寫EPCS了。
軟件Nios
一、在nios中創建相應工程,並編譯。
二、編譯完成以後,打開FLASH Programmer。
勾上Program FPGA configuration data into hardware-image region of flash memory(將FPGA的配置文件寫入Flash(EPCS)),
並設置對應的.sof文件Hardware Image設置爲Custom,Memory設置爲EPCS_Controller,offset爲0x0,
不勾選Program a file into flash memory(可將二進制文件寫入Flash)。
完成後如圖所示:ip
以上全部設置完成後,Apply,而後Program Flash便可。燒寫成功後,會有以下信息:get
#!/bin/sh
#
# This file was automatically generated by the Nios II IDE Flash Programmer.
#
# It will be overwritten when the flash programmer options change.
#input
cd D:/MySoftwares/QuartusII/Mywork/sopc_project/led_test/software/led_test/Debugflash
# Creating .flash file for the FPGA configuration
"$SOPC_KIT_NIOS2/bin/sof2flash" --epcs --input="D:/MySoftwares/QuartusII/Mywork/
sopc_project/led_test/led_test.sof" --output="led_test.flash"
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert --device=EPCS128 --option=led_t
est.opt D:/MySoftwares/QuartusII/Mywork/sopc_project/led_test/led_test.sof led_t
est.pof
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
Info: Peak virtual memory: 70 megabytes
Info: Processing ended: Wed Mar 30 12:34:48 2011
Info: Elapsed time: 00:00:02
Info: Total CPU time (on all processors): 00:00:02
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert led_test.pof led_test.rpd
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
Info: Peak virtual memory: 68 megabytes
Info: Processing ended: Wed Mar 30 12:34:51 2011
Info: Elapsed time: 00:00:03
Info: Total CPU time (on all processors): 00:00:02it
# Programming flash with the FPGA configuration
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x01001800 --sidp=0x0
1002018 --id=1794073991 --timestamp=1301451768 --instance=0 "led_test.flash"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: OK
Reading System ID at address 0x01002018: verifiedio
: Checksumming existing contents 編譯
00000000 : Verifying existing contents
00010000 : Verifying existing contents
00020000 : Verifying existing contents
00000000 : Reading existing contents
00010000 : Reading existing contents
00020000 : Reading existing contents
Checksummed/read 54kB in 1.4s
00000000 ( 0%): Erasing
00010000 (33%): Erasing
00020000 (66%): Erasing
Erased 192kB in 1.9s (101.0kB/s)
00000000 ( 0%): Programming
00010000 (33%): Programming
00020000 (66%): Programming
Programmed 139KB +53KB in 3.3s (58.1KB/s)
Did not attempt to verify device contents
Leaving target processor paused
# Creating .flash file for the project
"$SOPC_KIT_NIOS2/bin/elf2flash" --epcs --after="led_test.flash" --input="led_tes
t.elf" --output="epcs_controller.flash"
# Programming flash with the project
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x01001800 --sidp=0x0
1002018 --id=1794073991 --timestamp=1301451768 --instance=0 "epcs_controller.fla
sh"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: OK
Reading System ID at address 0x01002018: verified
: Checksumming existing contents
00020000 : Verifying existing contents
00020000 : Reading existing contents
Checksummed/read 42kB in 1.1s
00020000 ( 0%): Erasing
Erased 64kB in 0.6s (106.6kB/s)
00020000 ( 0%): Programming
Programmed 23KB +41KB in 0.7s (91.4KB/s)
Did not attempt to verify device contents
Leaving target processor paused
燒寫完成,Reset或者斷電重啓,燒寫在EPCS中的程序即開始運行了。