調(diào)試代碼對于懂程序的你來說不難,但一定麻煩。尤其在初次接觸一個(gè)程序而又尚未能完全理解時(shí),你可能不清楚要如何才能快速找準(zhǔn)需要調(diào)試之處,全程設(shè)置斷點(diǎn)進(jìn)入Debug模式是一種很糟心的做法。如果你有接觸英特爾?Max 10 開發(fā)套件片上閃存的代碼,會不會想要?jiǎng)邮终{(diào)試一些功能呢?
MAX 10 FPGA開發(fā)電路板
首先,我們需要了解英特爾?MAX 10 FPGA設(shè)備中片上閃存的結(jié)構(gòu)與功能。它分為兩個(gè)部分:
配置閃存:用于存儲硬件配置數(shù)據(jù)
用戶閃存:用于存儲用戶數(shù)據(jù)/軟件應(yīng)用
其中,片上閃存IP是用于訪問UFM的唯一IP。片上閃存IP內(nèi)核在Quartus Prime安裝過程就可以完成安裝,我們可從英特爾?FPGA IP庫選擇這個(gè)IP并為其設(shè)置參數(shù)。UFM內(nèi)存結(jié)構(gòu)根據(jù)f片上閃存IP內(nèi)核參數(shù)編輯器中指定的配置模式而改變。那么它總共有多少種內(nèi)部配置模式呢?請看下圖。
5種內(nèi)部配置模式
Nios II從UFM就地執(zhí)行,能夠最大限度地降低RAM使用率。因此該啟動(dòng)解決方案十分適合需要限制片上內(nèi)存使用率的Nios II處理器應(yīng)用。從UFM就地執(zhí)行時(shí),基于BSP設(shè)置,數(shù)據(jù)段(.radata、.rwdata或.eceptions)將從啟動(dòng)內(nèi)存復(fù)制到RAM中,而只讀代碼段仍存放在片上閃存區(qū)域。
如何調(diào)試存儲在Max 10開發(fā)套件片上閃存中的代碼
Nios II處理器復(fù)位向量指向UFM的基地址,因此系統(tǒng)重置后,代碼會從UFM執(zhí)行,如果您使用源碼級調(diào)試工具調(diào)試應(yīng)用,則需要使用硬件斷點(diǎn)進(jìn)行調(diào)試,因?yàn)閁FM不支持隨機(jī)內(nèi)存存取。
那么具體該如何調(diào)試代碼呢?
我們可以創(chuàng)造一個(gè)從UFM就地執(zhí)行的Nios II應(yīng)用,并使用Nios II軟件構(gòu)建工具中的調(diào)試工具調(diào)試存儲在UFM中的代碼。先創(chuàng)建一個(gè)Quartus項(xiàng)目和Qsys系統(tǒng),如下圖,這是一個(gè)在Platform Designer中創(chuàng)建的設(shè)計(jì)。
如前所述,我們需要使用硬件斷點(diǎn)調(diào)試應(yīng)用。因此,在Qsys設(shè)計(jì)中,我們需要啟用硬件斷點(diǎn)。具體操作步驟詳見視頻。【滑稽】不過一定要將硬件斷點(diǎn)要啟用到位,具體可通過選擇JTAG調(diào)試選項(xiàng)卡查看。同時(shí)要注意,我們最多可以啟用四個(gè)硬件斷點(diǎn)。此外,片上閃存IP一定要添加到設(shè)計(jì)中,這樣能便于訪問UFM閃存。
在上面這個(gè)設(shè)計(jì)中,我們選擇使用的配置模式是單個(gè)未壓縮映像。接下來,可以將Nios II處理器中復(fù)位向量設(shè)置為片上閃存IP內(nèi)核,以通過從UFM就地執(zhí)行啟動(dòng)Nios應(yīng)用。完成這些設(shè)置后,才能夠去生成系統(tǒng)。
接下來,我們可以在Quartus中編譯這個(gè)設(shè)計(jì),創(chuàng)建SOF文件。同時(shí),也可以在Nios II軟件構(gòu)建工具中創(chuàng)建一個(gè)簡單的Nios II應(yīng)用。在創(chuàng)建完硬件設(shè)計(jì)和軟件應(yīng)用后,我們可以使用轉(zhuǎn)換編程文件工具,創(chuàng)建包含UFM數(shù)據(jù)和SOF文件的POF文件。然后,可以使用Quartus編程工具將POF文件編程至Max 10中。
如上圖,已將POF文件編程至Max 10中,并重啟電路板。接下來才是真正開始調(diào)試存儲在片上閃存中的代碼。插入斷點(diǎn)后,想要調(diào)試該應(yīng)用,就得進(jìn)行“應(yīng)用”、“調(diào)試”、“選擇配置”等一系列操作。(如有不明白的,請?jiān)敿?xì)看上面的視頻)在調(diào)試配置中,由于代碼存儲在片上閃存中,所以可能沒有選項(xiàng)“將elf下載到選中的目標(biāo)系統(tǒng)”選擇以啟動(dòng)處理器并重置選中的目標(biāo)系統(tǒng)。
重點(diǎn)來了!
這個(gè)時(shí)候如果選擇“啟動(dòng)停止”,則最多用一個(gè)硬件斷點(diǎn),這也意味著您只能在代碼上設(shè)置另外三個(gè)斷點(diǎn)。而如果插入斷點(diǎn)超過4個(gè),就會在開始調(diào)試代碼時(shí)遇到錯(cuò)誤,因?yàn)橹荒苁褂盟膫€(gè)硬件斷點(diǎn)。
-
處理器
+關(guān)注
關(guān)注
68文章
19407瀏覽量
231186 -
代碼
+關(guān)注
關(guān)注
30文章
4827瀏覽量
69052 -
編輯器
+關(guān)注
關(guān)注
1文章
806瀏覽量
31291
原文標(biāo)題:代碼怎么調(diào)?方法打包在此,拿走不謝~
文章出處:【微信號:FPGAer_Club,微信公眾號:FPGAer俱樂部】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論