性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

ZYNQ - 無(wú)DDR固化程序(代碼運(yùn)行在OCM上)

寫在前面

ZYNQ固化時(shí),正常情況下都需要DDR參與,但是有時(shí)硬件設(shè)計(jì)時(shí),可能將DDR去掉或設(shè)計(jì)出錯(cuò),這將導(dǎo)致ZYNQ無(wú)法正常固化,之前有寫過(guò)一個(gè)使用靜態(tài)鏈接庫(kù)進(jìn)行無(wú)DDR固化的文章,當(dāng)時(shí)那個(gè)是壓縮了FSBL的相關(guān)代碼只保留FLASH模式下的功能,對(duì)于其他模式可能無(wú)法正常使用,本文將無(wú)DDR固化的情況進(jìn)一步進(jìn)行介紹,講解如何修改FSBL實(shí)現(xiàn)ZYNQ的程序固化,給出一個(gè)demo進(jìn)行演示測(cè)試。

適用范圍

不論是之前提到的靜態(tài)鏈接庫(kù)的版本還是本文版本(暫且叫做運(yùn)行在OCM版本)。都只適合PS端的輕量級(jí)代碼,PL端無(wú)特殊要求,但是PL PS交互部分如果需要太多驅(qū)動(dòng)可能也會(huì)超出片上RAM的空間。本工程根本思想就是將fsbl分配到較大的ocm0上,其余應(yīng)用工程分配到ocm1上。

建立工程

建立一個(gè)Block design,添加zynq核,然后勾選,F(xiàn)LASH和UART部分。

ZYNQ配置界面

這里為了驗(yàn)證PL端功能正常啟動(dòng),添加了一個(gè)邏輯常數(shù)用于驅(qū)動(dòng)LED燈。

連接界面

創(chuàng)建HDL頂層,生成output products,因?yàn)樯婕暗絇L端部分,所以需要綜合導(dǎo)出生成bitstream,不要忘記加管腳約束。

操作步驟

當(dāng)運(yùn)行生成bitstream后,導(dǎo)出硬件,并且包含bit流文件。

準(zhǔn)備好硬件平臺(tái)后就可以進(jìn)行SDK的FSBL代碼的修改了。

SDK代碼修改

新建應(yīng)用工程建一個(gè)helloworld工程,打開(kāi)lscript.ld文件將helloworld的代碼段映射區(qū)對(duì)應(yīng)到ps7_ram_1,保存編譯。

helloworld工程的lscript.ld文件

新建應(yīng)用工程建一個(gè)fsbl工程,打開(kāi)lscript.ld文件將helloworld的代碼段映射區(qū)對(duì)應(yīng)到ps7_ram_0,保存編譯。

fsbl工程的lscript.ld文件

打開(kāi)fsbl代碼的fsbl_debug.h文件,增加FSBL_DEBUG_INFO的宏定義方便進(jìn)行查看fsbl的調(diào)試信息。

增加FSBL_DEBUG_INFO

打開(kāi)main.c文件,找到main函數(shù),定位到296行附近,在這里可以看到因?yàn)槿鄙賒dr的部分,該部分代碼將不會(huì)正常執(zhí)行,將會(huì)跳轉(zhuǎn)到下面的代碼中。

定位代碼

代碼以下兩行代碼執(zhí)行后FSBL 狀態(tài)打印輸出0XA008,在fsbl.h文件中對(duì)應(yīng)DDR missing 的狀態(tài)。

實(shí)際執(zhí)行代碼

因此要想使得代碼正常運(yùn)行就要將正常存在ddr時(shí)的代碼正常運(yùn)行,僅刪除和DDR強(qiáng)有關(guān)的部分(影響編譯和運(yùn)行的),然后將代碼運(yùn)行地址設(shè)置到OCM上。

所以,取消對(duì)296行的定義改成如下內(nèi)容。

修改內(nèi)容

此時(shí)如果使用當(dāng)前版本的fsbl的可執(zhí)行文件可以正常進(jìn)行燒寫固化了。但是可能此時(shí)還是無(wú)法正常啟動(dòng),下面步驟用于演示并定位具體問(wèn)題。

選中helloworld工程創(chuàng)建鏡像工程。

創(chuàng)建鏡像

BootLoader選中剛剛修改好的fsbl.elf。

BootLoader選擇

打開(kāi)開(kāi)發(fā)板,選擇jtag模式下燒寫,選擇創(chuàng)建好的鏡像和剛剛的fsbl的elf文件。

燒寫配置

正在燒寫....

燒寫

燒寫完成后關(guān)掉開(kāi)發(fā)板,切換到flash模式下打開(kāi)串口觀察應(yīng)用程序能否正常啟動(dòng)。在我的開(kāi)發(fā)板FPGA done的指示燈和PL端的LED等都只是閃爍了一下,不能正常啟動(dòng)。

此時(shí)還在flash模式下去嘗試在線燒寫。從調(diào)試信息可見(jiàn),F(xiàn)LASH正常啟動(dòng),啟動(dòng)初始化后存在失敗,單步調(diào)試后發(fā)現(xiàn)main函數(shù)的在570行的LoadBootImage()運(yùn)行后就會(huì)存在上述問(wèn)題。

定位問(wèn)題代碼

定位到image_mover.c的436行,發(fā)現(xiàn)此處的DDR_END_ADDR的默認(rèn)定義是0X00,無(wú)法正常執(zhí)行下面的程序。

修改定位

所以這里修改DDR_END_ADDR為片上rom的結(jié)束地址。

修改宏定義

再次重復(fù)操作,完成鏡像生成后,jtag模式燒寫,flash模式啟動(dòng),觀察打印調(diào)試信息。從調(diào)試信息中可以看到,PS端正常啟動(dòng),此時(shí)掛在PL端的LED燈也能正常點(diǎn)亮。

打印信息

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺(jué)得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 2
收藏 3
關(guān)注 14
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧