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