雙MicroBlaze軟核處理器的SOPC系統(tǒng)設(shè)計(jì)(二)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
相關(guān)資料:
雙MicroBlaze軟核處理器的SOPC系統(tǒng)設(shè)計(jì)(一)
1.3 軟件設(shè)計(jì)
1.3.1 存儲(chǔ)器映像
為了保證每個(gè)處理器在執(zhí)行軟件部分時(shí)不發(fā)生沖突,必須對其存儲(chǔ)器進(jìn)行存儲(chǔ)器映像。圖2是存儲(chǔ)器映像圖。
圖2 處理器的存儲(chǔ)器映像圖
從圖2中可以看出,用戶可以靈活地為兩個(gè)ELF文件分配適當(dāng)大小的存儲(chǔ)器空間作為ELF文件的映射地址范圍。由于boot(引導(dǎo))存儲(chǔ)器不可以共享,所以ELF文件的boot部分(。vectors*)被映射到私有存儲(chǔ)器中,它可以實(shí)現(xiàn)MicroBlaze處理器隨時(shí)調(diào)用,也可以引導(dǎo)ELF文件加載到DDR中。Heap和stack的范圍表示ELF文件在DDR中映像的存儲(chǔ)器大小。boot存儲(chǔ)器的大小表示boot部分所能引導(dǎo)的DDR的范圍。ELF文件的位置和輸出鏈接腳本的位置可以根據(jù)用戶的需求選擇。每個(gè)可執(zhí)行文件的存儲(chǔ)器映像地址都是通過編譯器來實(shí)現(xiàn)的,實(shí)現(xiàn)以后被傳到鏈接器,生成鏈接腳本。
1.3.2 通信與同步
利用Shared Memory模塊通信是處理器之間最常用的通信方式。其通信接口函數(shù)如下:
SHM_WRITEAREA();/*向Shared Memory中寫數(shù)據(jù)*/SHM_READAREA(); /*從Shared Memory中讀數(shù)據(jù)*/利用Mailbox模塊可以實(shí)現(xiàn)處理器之間的信息傳遞和中斷。這在軟件設(shè)計(jì)中主要體現(xiàn)在以下代碼行中:
XMbox_WriteBlocking();/*向Mailbox中寫數(shù)據(jù)*/XMbox_ReadBlocking();/*從Mailbox中讀數(shù)據(jù)*/在軟件應(yīng)用設(shè)計(jì)中,兩個(gè)處理器之間的同步是通過Mutex Locks實(shí)現(xiàn)的,它的狀態(tài)有LOCK和UNLOCK之分。Mutex狀態(tài)的操作主要體現(xiàn)在以下命令行中:
MLOCK(); /*使用之前LOCK*/MUNLOCK();/*使用之后UNLOCK*/軟件的調(diào)試(debug)需要手工地選擇處理器,兩個(gè)處理器不可以同時(shí)調(diào)試。在XMD Console中的調(diào)試命令主要有:
debugconfig–reset_on_run disable /*下載時(shí)避免復(fù)位*/dow executable.elf /*下載ELF文件*/run /*運(yùn)行*/2 實(shí)驗(yàn)結(jié)果
本設(shè)計(jì)采用調(diào)試模塊分別對兩個(gè)處理器進(jìn)行調(diào)試,通過超級(jí)終端輸出測試結(jié)果。
2.1 Mailbox的測試結(jié)果
通過Mailbox可以實(shí)現(xiàn)處理器之間的中斷和通信。
兩處理器首先通過交換字符串“helo BOY”的形式匯合(rendezvous),以此來證明兩個(gè)處理器的連接情況。在這里,每次發(fā)送的數(shù)據(jù)包為2044字節(jié),共發(fā)送了3個(gè)數(shù)據(jù)包,都能成功地發(fā)送。經(jīng)驗(yàn)證,每次發(fā)送的信息量最大為4096字節(jié),可以重復(fù)發(fā)送。