在FPGA開(kāi)發(fā)板上都有幾種不同的存儲(chǔ)器,比如SDRAM,F(xiàn)LASH,EPCS,還有內(nèi)部onchip memory,這幾種存儲(chǔ)器間是如何通信或者構(gòu)建一個(gè)系統(tǒng)該如何搭配他們呢,不少人都問(wèn)到這個(gè)問(wèn)題。在這里我做個(gè)總結(jié)以方便初學(xué)者的學(xué)習(xí)。
首先看看在sopc builder中reset address
該如何搭配他們呢,不少人都問(wèn)到這個(gè)問(wèn)題。在這里我做個(gè)總結(jié)以方便初學(xué)者的學(xué)習(xí)。
首先看看在sopc builder中reset address和nios IDE中System Library中的program memory(.text)、read-only data memory(.rodata)等這幾個(gè)地址的關(guān)系和作用根據(jù)altera 的文檔解釋如下:
.text :代碼執(zhí)行區(qū)
.rodata:只讀數(shù)據(jù)區(qū),存放靜態(tài)全局變量
.rwdata:可讀寫(xiě)數(shù)據(jù)區(qū),存放可讀寫(xiě)變量和指針變量
.bss:未初始化變量區(qū)
.text-the actual executable code
.rodata-where read only data used in the execution of the code
.rwdata-where read/write variables and pointers are stored
heap-where dynamically allocated memory is located
stack-where function call parameters and other temporary data
SOPC builder 在Nios II more "cpu_0" setting 標(biāo)簽中的
reset address 決定了flash programmer 的下載存儲(chǔ)器(一般是選EPCS controller 或者CFI
flash),并且決定了程序從此處開(kāi)始啟動(dòng)。exception address 指定的是異常處理地址。當(dāng)然,程序在運(yùn)行前所有的數(shù)據(jù)都是存放在flash(EPCS 或者CFI FLASH)中如果你設(shè)計(jì)的系統(tǒng)resetaddress 與其它地址的設(shè)置不相同,比如reset address 和exceprion address,reset address和IDE 中的program memory(.text)設(shè)成不同的存儲(chǔ)器,那么系統(tǒng)從reset address 啟動(dòng)時(shí)都會(huì)從flash 中把相關(guān)數(shù)據(jù)自動(dòng)下載到相應(yīng)的地址或者初始化相應(yīng)地址。通過(guò)上面的認(rèn)識(shí),我們就比較清楚了各存儲(chǔ)器間可進(jìn)行哪些搭配了,reset address 的選擇可選EPCS controllor 或者CFI flash;program memory(.text) 可選擇onchipmemory,SDRAM,CFI flash 等。如果reset address 為EPCS 則在使用flash progrrammer時(shí)程序是下載到EPCS 芯片中。如果reset address 選擇CFI flash,則flash progrrammer時(shí)程序是下載到CFI flash 芯片中。需要注意的是這里有個(gè)特殊情況。例如在開(kāi)發(fā)板上經(jīng)常有這么一個(gè)簡(jiǎn)單的系統(tǒng),CPU+
onchip memory+LED_PIO,reset address 選擇onchip memory;感覺(jué)整個(gè)系統(tǒng)都沒(méi)有用到flash。而且onchip memory 在系統(tǒng)斷電后數(shù)據(jù)就會(huì)消失,那么程序代碼是存在哪,系統(tǒng)如何從onchip memory 啟動(dòng)聽(tīng)呢?先來(lái)看看onchip memory 模塊的描述信息:在onchip_memory.v 中有這么一段the_altsyncram.init_file = "onchip_memory.hex",很明顯onchip memory 的初始數(shù)據(jù)來(lái)自"onchip_memory.hex",而"onchip_memory.hex"是在NiosIDE 的System Library 中存儲(chǔ)器有選擇onchip_memory( 至少有一項(xiàng)是選擇onchip_memory,如果都不選,就不會(huì)生成)時(shí),在build 結(jié)束的時(shí)候生成的。于是當(dāng)我們把System Library 中存儲(chǔ)器的選擇都選擇onchip_memory 時(shí),在IDE 中build 結(jié)束后所有的程序代碼都生成在"onchip_memory.hex"中,再在QII 中全編譯一次時(shí),系統(tǒng)通過(guò)onchip_memory.v 調(diào)用"onchip_memory.hex"從而把所有的程序代碼以及配制信息都生成在POF 和SOF 文件中,使用QII 的programmer 直接下載到EPCS 芯片或者FPGA 芯片內(nèi)程序都會(huì)立即執(zhí)行。因?yàn)檫@里的特殊性就有很多網(wǎng)友詢問(wèn)了,reset address 選擇onchipmemory,而IDE 中把代碼區(qū)都選擇SDRAM 調(diào)試的時(shí)候程序正常運(yùn)行,再在QII 全編譯后下載POF 文件就運(yùn)行不了呢?問(wèn)題就是出在這了,在這里可以總結(jié)出一點(diǎn),要讓程序在onchip memory 之外的存儲(chǔ)器中運(yùn)行,那么reset address 就必然選EPCS 或者CFI flash,并且要通過(guò)flash programmer 把程序下載到flash 中。
責(zé)任編輯:YYX
-
FPGA
+關(guān)注
關(guān)注
1645文章
22012瀏覽量
616679 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7643瀏覽量
166882
發(fā)布評(píng)論請(qǐng)先 登錄
有ARM,NPU,FPGA三種核心的開(kāi)發(fā)板 — 米爾安路飛龍派開(kāi)發(fā)板

發(fā)布|CAE1200+FPGA開(kāi)發(fā)板

藍(lán)橋杯物聯(lián)網(wǎng)開(kāi)發(fā)板硬件組成

評(píng)論