在以前發(fā)布的玩轉(zhuǎn)MicroZed系列博客中,我們建立了一個(gè)基于Zynq的系統(tǒng),通過使用雙端口RAMS和BRAM(塊RAM)控制器將兩個(gè)PicoBlaze處理器核連接到Zynq的PS部分,現(xiàn)在我們將學(xué)習(xí)一下怎樣實(shí)現(xiàn)更新存儲(chǔ)在雙端口RAM中的PicoBlaze處理器的程序。
首先在執(zhí)行程序的控制下,我們?cè)鯓訉?shí)現(xiàn)自由的存儲(chǔ)PicoBlaze程序包括軟件應(yīng)用程序然后將他們下載到CPU中執(zhí)行。
當(dāng)我們定義Zynq系統(tǒng)時(shí),一個(gè)關(guān)鍵點(diǎn)就是使用Zynq SoC’s PS部分的倆個(gè)EMIO 端口控制PicoBlaze內(nèi)核的復(fù)位輸入信號(hào)。(我們要為每個(gè)PicoBlaze都提供一個(gè)復(fù)位輸入來實(shí)現(xiàn)倆個(gè)內(nèi)核的獨(dú)立復(fù)位),當(dāng)我們更新處理器的程序存儲(chǔ)RAM的時(shí)候,兩個(gè)復(fù)位管腳允許我們能夠獨(dú)立復(fù)位每一個(gè)PicoBlaze處理器模塊。當(dāng)處理器的程序存儲(chǔ)空間處在一個(gè)不確定或者混合的狀態(tài)時(shí),這個(gè)處理器就不能夠繼續(xù)執(zhí)行程序了。
在一個(gè)實(shí)例化的處理器內(nèi)更新PicoBlaze程序代碼的基本算法如下:
1.為將要更新處理器聲明復(fù)位管腳
2.通過從Zynq PS到BRAM控制器的寫操作更新處理器的塊RAM空間
3.一旦完成BRAM的寫操作,取消處理器的復(fù)位,允許處理器重啟并執(zhí)行新的程序代碼
盡管上面的步驟很簡(jiǎn)單,但是首先我們必須以正確的格式生成新的PicoBlaze程序,并且也能夠包含到Zynq SoC PS部分的ARM Cortex-A9 MPCore處理器的程序代碼中。解決這個(gè)問題的最簡(jiǎn)單方式就是將新程序以數(shù)組的形式寫入到ARM處理器的C程序代碼中。 為了實(shí)現(xiàn)這個(gè)功能,我們必須處理一下由PicoBlaze匯編器生成的hex格式的文件,我們可以手動(dòng)處理但是對(duì)于大型程序就顯得比較笨拙了,因此我編寫了一個(gè)簡(jiǎn)單的TCL腳本,將hex格式的文件轉(zhuǎn)化為C的頭文件,這個(gè)頭文件可以加入到你的編譯環(huán)境中。(這個(gè)腳本和所有程序我已經(jīng)上傳到Github中了,會(huì)在本篇博客的結(jié)尾備注的)

?
準(zhǔn)備好了正確格式的文件,并且包含到了ARM Cortex-A9 MPCore的程序當(dāng)中,我們就可以輕松的讀取這個(gè)數(shù)組內(nèi)容,將它寫入到合適的BRAM當(dāng)中。因?yàn)槲覀兪褂玫氖?2位的地址,每四個(gè)字節(jié)都是獨(dú)立可編址的,并且每四個(gè)字節(jié)都是一個(gè)獨(dú)立的地址空間。例如第一個(gè)32位的地址是0,第二個(gè)地址是4,第三個(gè)地址是8,這樣一直進(jìn)行下去。
我們可以使用下面這個(gè)函數(shù)將內(nèi)容寫入到BRAM當(dāng)中:
XBram_WriteReg(PICO_0_BASE, ram_addr, test2[read_out]);
我們可以使用for循環(huán)遍歷整個(gè)數(shù)組,如下圖所示:
以我們以前創(chuàng)建的系統(tǒng)示例為基礎(chǔ),使用這些結(jié)構(gòu),我們就能夠簡(jiǎn)單快速的編寫一個(gè)簡(jiǎn)單的程序,允許我們更新任意一個(gè)PicoBlaze內(nèi)核的程序存儲(chǔ)空間,本博客的程序?qū)崿F(xiàn)的功能是每個(gè)PicoBlaze處理器控制他們各自的LED燈,以或快或慢的頻率閃爍。

?
當(dāng)然這并不意味著在處理器執(zhí)行期間我們能夠下載新的鏡像文件到PicoBlaze處理器中, 如果要實(shí)現(xiàn)這樣的功能,我們必須編寫一個(gè)稍有不同的程序和TCL腳本,我們將在下一篇博客當(dāng)中介紹。
快要有60篇博客了,我覺得如果有一個(gè)Git Hub存儲(chǔ)空間將是一個(gè)非常好的想法,所以我已經(jīng)創(chuàng)建了一個(gè),地址是“ https://github.com/ATaylorCEngFIET/MicroZed-Chronicles ”,我會(huì)將以前博客的代碼上傳,但是現(xiàn)在這個(gè)存儲(chǔ)空間中只有本次博客的程序源代碼。
電子發(fā)燒友App


























評(píng)論