MicroBlaze如何與Zynq SoC和平共存
賽靈思 Zynq-7000 All Programmable SoC已具有很強(qiáng)的板載處理能力。但是Zynq應(yīng)用處理單元(APU)中強(qiáng)大的雙Cortex-A9處理器和相關(guān)外設(shè)的存在并不妨礙您在同一封裝中添加一個(gè)或多個(gè)MicroBlaze?處理器,只要能讓?xiě)?yīng)用受益就好。
本文引用地址:http://2s4d.com/article/201610/308380.htm為什么要給處理功能已經(jīng)很強(qiáng)大的解決方案添加MicroBlaze呢?首先就是可靠性的問(wèn)題。單線(xiàn)程會(huì)大幅提高可靠性。您可以針對(duì)計(jì)算密集型任務(wù)為每個(gè)Cortex-A9都布置一個(gè)線(xiàn)程,而且能根據(jù)需要為其它線(xiàn)程實(shí)例化任何數(shù)量的MicroBlaze處理器。其次,您可將任何雜務(wù)交給MicroBlaze去完成,讓處理功能強(qiáng)大的Cortex-A9去執(zhí)行最需要它的工作,充分發(fā)揮其用武之地,從而節(jié)省數(shù)個(gè)關(guān)鍵的工作周期。
下面這個(gè)例子能反映以上兩種情況。設(shè)想一下,一個(gè)任務(wù)需要長(zhǎng)期高強(qiáng)度計(jì)算,同時(shí)還要監(jiān)控用戶(hù)輸入。這里,MicroBlaze可管理用戶(hù)輸入(頻率較低、計(jì)算強(qiáng)度不高),并寫(xiě)入APU存儲(chǔ)器空間,這樣APU閑置時(shí)(也就是完成了處理任務(wù)時(shí))就能看看接下來(lái)需要處理什么信息。
一旦您決定在基于Zynq的設(shè)計(jì)中添加一個(gè)MicroBlaze處理器,馬上就會(huì)發(fā)現(xiàn)一些問(wèn)題。首要問(wèn)題就是APU如何與MicroBlaze通信,哪些處理器系統(tǒng)(PS)資源可供MicroBlaze使用。包括ZC702和Zedboard等在內(nèi)的許多開(kāi)發(fā)板將許多外設(shè)直接映射到與處理系統(tǒng)相連的引腳。可編程邏輯(PL)中,這些引腳不能直接訪(fǎng)問(wèn)MicroBlaze。處理系統(tǒng)還包含多種不同定時(shí)器和中斷資源。有什么辦法能從MicroBlaze領(lǐng)域訪(fǎng)問(wèn)這些資源嗎?
PS與PL之間的接口
處理器系統(tǒng)和可編程邏輯緊密結(jié)合,這意味著Cortex-A9、窺探控制單元(SCU)、PS外設(shè)、時(shí)鐘管理及其它功能與可編程邏輯之間存在多個(gè)緊密的集成連接。事實(shí)上,PS和PL之間共有6種不同類(lèi)型的互聯(lián),您可將這些互聯(lián)類(lèi)型彼此結(jié)合使用。此外,許多路徑是對(duì)稱(chēng)的,也就是說(shuō)PC能啟動(dòng)到PL的連接,而PL也能啟動(dòng)到PS的連接。
圖1:PL中PS和MicroBlaze的邊界是一片雷區(qū)嗎?二者能否共享資源?
賽靈思公司目前提供的應(yīng)用指南、用戶(hù)指南和白皮書(shū)等大量資料均介紹了作為設(shè)計(jì)“核心”的Zynq-7000 APU如何利用可編程邏輯來(lái)訪(fǎng)問(wèn)存儲(chǔ)器、基于PL的外設(shè)和硬芯片外設(shè)(如PCIe模塊、BRAM、DSP48和千兆位級(jí)收發(fā)器等)。要分析MicroBlaze如何成為其自身領(lǐng)域的主導(dǎo),邏輯上的第一步就是看看6個(gè)接口變量,首先從通用、高性能和加速器一致性端口這三類(lèi)AXI接口入手。
PS有兩個(gè)連接到PL的主AXI通道和兩個(gè)由PL啟動(dòng)的從通道(圖2)。這里的“主”是指AXI通道為發(fā)起方,能啟動(dòng)數(shù)據(jù)交換,而“從”在只能用于響應(yīng)到達(dá)的數(shù)據(jù)。主AXI通道通常用來(lái)與PL中的外設(shè)通信。從AXI通道負(fù)責(zé)響應(yīng)PL的請(qǐng)求,其中可能包括MicroBlaze處理器所執(zhí)行的事務(wù)處理。這些AXI通道連接到PS的中央互聯(lián),可路由到許多資源。
此外,還有4個(gè)高性能(64位寬)AXI通道連接點(diǎn)。從PS角度來(lái)說(shuō),所有這4個(gè)通道均為從通道,連接至PS中的存儲(chǔ)器接口子系統(tǒng)(圖3)。這4個(gè)通道的目的就是讓PS中的主設(shè)備啟動(dòng)DDR存儲(chǔ)器事務(wù)處理。
這種存儲(chǔ)器互聯(lián)和DDR存儲(chǔ)器控制器是所有資源到DDR存儲(chǔ)器的門(mén)戶(hù)。雖然Cortex-A9處理器的優(yōu)先級(jí)通常高于從AXI連接,但4個(gè)AXI連接中每個(gè)都有一個(gè)“現(xiàn)在為我服務(wù)”信號(hào),能讓發(fā)出該請(qǐng)求的通道獲得優(yōu)先級(jí)。未斷言該信號(hào)時(shí),架構(gòu)、采用循環(huán)機(jī)制確定哪個(gè)請(qǐng)求方有權(quán)訪(fǎng)問(wèn)特定類(lèi)型存儲(chǔ)器。
加速器一致性端口(ACP)是另一種PL的32位AXI PS從連接。ACP的獨(dú)特之處在于它直接連接到SCU中。SCU的任務(wù)就是確保L1、L2和DDR存儲(chǔ)器之間的一致性。采用ACP,您能訪(fǎng)問(wèn)PS中的每個(gè)Cortex- A9處理器的高速緩存存儲(chǔ)器,而不必?fù)?dān)心與主存儲(chǔ)器中的數(shù)據(jù)同步問(wèn)題(硬件會(huì)自動(dòng)處理好這個(gè)問(wèn)題)。該功能不僅可大幅降低設(shè)計(jì)負(fù)擔(dān),而且還能顯著加速處理器與PL之間的數(shù)據(jù)傳輸。
圖2:到處理系統(tǒng)中央互聯(lián)的簡(jiǎn)化連接。
圖3:到DDR存儲(chǔ)器控制器和片上存儲(chǔ)器(OCM)的簡(jiǎn)化連接。
除了AXI鏈接之外,可擴(kuò)展多路輸入輸出(EMIO)信號(hào)也可用于路由許多PS的硬外設(shè)直至PL,以便訪(fǎng)問(wèn)封裝引腳。只有54個(gè)封裝引腳直接連接到PS,不過(guò)PS的硬外設(shè)可使用的引腳數(shù)量大大超過(guò)54個(gè)。EMIO是PS硬外設(shè)和PL之間的通道。這些I/O信號(hào)可直接路由到PL可用的封裝引腳,而您也可利用這些引腳與PL中兼容的外設(shè)進(jìn)行通信。
PS和PL之間另外的各種雜項(xiàng)信號(hào)可以分為5個(gè)基本類(lèi):時(shí)鐘與復(fù)位、中斷信號(hào)、事件信號(hào)、空閑AXI與DDR存儲(chǔ)器信號(hào),以及DMA信號(hào)。
* 時(shí)鐘與復(fù)位:PS為PL提供4個(gè)獨(dú)立的可編程頻率。通常這些時(shí)鐘之一用于AXI連接。每個(gè)時(shí)鐘域都有自己的域復(fù)位信號(hào),可重設(shè)與該域關(guān)聯(lián)的任何器件。
* 中斷信號(hào):PS中的通用中斷控制器(GIC)負(fù)責(zé)收集所有可用源的中斷,包括PS外設(shè)的所有中斷源和可編程邏輯的16個(gè)“外設(shè)”類(lèi)型中斷。此外,還有4個(gè)連接到CPU(IRQ0、 IRQ1、FIQ0和FIQ1)的直接中斷。來(lái)自PS外設(shè)的共28個(gè)中斷可提供給PL。
* 事件信號(hào):這些“帶外”異步信號(hào)說(shuō)明PS的特殊情況。PS提供一系列信號(hào)用于表明哪個(gè)CPU進(jìn)入待機(jī)模式,哪個(gè)CPU執(zhí)行了SEV(“發(fā)送事件”)指令。PS可用事件信號(hào)從WFE(“等待事件”)狀態(tài)中喚醒。
* 空閑AXI與DDR存儲(chǔ)器信號(hào):PS的空閑AXI信號(hào)用來(lái)指示PL中沒(méi)有未處理的AXI事務(wù)處理。該信號(hào)由PL驅(qū)動(dòng),是用來(lái)啟動(dòng)PS總線(xiàn)時(shí)鐘關(guān)斷功能的條件之一,確保所有PL總線(xiàn)器件均處于閑置狀態(tài)。DDR緊急/仲裁信號(hào)用來(lái)向PS DDR存儲(chǔ)器控制器的4個(gè)AXI端口DDR仲裁表示關(guān)鍵的存儲(chǔ)器處于緊張狀況。
* DMA信號(hào):PS的直接存儲(chǔ)器訪(fǎng)問(wèn)(DMA)模塊通過(guò)一系列“請(qǐng)求和確認(rèn)”信號(hào)與PL從設(shè)備通信。
圖4:硬件設(shè)計(jì)實(shí)例方框圖。
訪(fǎng)問(wèn)DDR存儲(chǔ)器
我們下面來(lái)分析一個(gè)設(shè)計(jì)實(shí)例,該實(shí)例涵蓋了典型MicroBlaze用戶(hù)可能涉及的幾個(gè)常見(jiàn)的需求,比如如何訪(fǎng)問(wèn)DDR存儲(chǔ)器;如何使用PS IOP中的外設(shè);如何在MicroBlaze和PS之間傳輸數(shù)據(jù)塊;如何在MicroBlaze和PS之間實(shí)現(xiàn)事件同步等。圖4給出了解決每種問(wèn)題的方法(分別標(biāo)識(shí)為1、2、3、4)。
訪(fǎng)問(wèn)DDR存儲(chǔ)器最簡(jiǎn)單方法就是通過(guò)4個(gè)高性能(HP)AXI接口的一個(gè)或多個(gè)連接(方框圖右上方)。4個(gè)64位寬端口可供可編程邏輯訪(fǎng)問(wèn)。您首先必須啟用一個(gè)端口,然后連接AXI到端口。MicroBlaze采用AXI4-Lite接口,而HP端口則應(yīng)用作全AXI4連接。所幸的是,賽靈思設(shè)計(jì)工具可自動(dòng)彌補(bǔ),無(wú)需任何手動(dòng)修改就確保實(shí)現(xiàn)成功連接。方框圖中①顯示了該連接。這類(lèi)連接的優(yōu)勢(shì)在于創(chuàng)建起來(lái)非常簡(jiǎn)單,而DDR存儲(chǔ)器對(duì)設(shè)計(jì)來(lái)說(shuō)就是常規(guī)存儲(chǔ)器。而不足之處在于,AXI-Lite不支持突發(fā)模式,而且只有32位寬,因此會(huì)喪失不少性能。
還可通過(guò)其它方法將基于PL的外設(shè)連接到DDR存儲(chǔ)器,比如采用DMA控制器,同樣也可采用HP端口。雖然這種連接機(jī)制更復(fù)雜,但能提高大數(shù)據(jù)塊的傳輸性能。
在PS中啟用UART和三重定時(shí)器/計(jì)數(shù)器(TTC)。M_AXI_GP0連接的BRAM控制器位于PL中,但從概念上說(shuō)是PS設(shè)計(jì)的組成部分(實(shí)際上也是PS設(shè)計(jì)的一部分)。
MicroBlaze作為設(shè)計(jì)的另一部分采用BRAM提供64KB的整合代碼和數(shù)據(jù)空間,供MicroBlaze專(zhuān)用。顯然,我們能連接這些端口到PS的HP端口以訪(fǎng)問(wèn)DDR存儲(chǔ)器,不過(guò)這樣做會(huì)讓實(shí)現(xiàn)工作變得更復(fù)雜。
有3個(gè)連接到MicroBlaze的標(biāo)準(zhǔn)外設(shè):一個(gè)是負(fù)責(zé)接收TTC的PWM波形輸入并將其解釋為中斷源和接收的UART字符中斷的中斷控制器;一個(gè)是負(fù)責(zé)驅(qū)動(dòng)ZC702開(kāi)發(fā)板上8個(gè)LED的GPIO,第三個(gè)是用于連接到PS所連接的同一BRAM的B側(cè)的BRAM控制器。此外還有兩個(gè)連接:一個(gè)是到S_AXI_GP0的連接,用于實(shí)現(xiàn)PS內(nèi)部外設(shè)的尋址;另一個(gè)到高性能端口的連接,可讓MicroBlaze訪(fǎng)問(wèn)DDR存儲(chǔ)器部分。
外設(shè)、數(shù)據(jù)塊和同步
到PS S_AXI_GP0端口的連接是訪(fǎng)問(wèn)可編程系統(tǒng)IOP模塊的關(guān)鍵(圖中的②)。S代表這是一個(gè)從端口,也就是接受PL中的組件啟動(dòng)的事務(wù)處理。在MicroBlaze和S_AXI_GP0端口之間建立連接時(shí),IOP模塊可從0xE000_0000擴(kuò)展到0xE02F_FFFF,這意味著MicroBlaze地址空間中的其它外設(shè)都不能重疊于這段地址,而這段地址將供處理器共享。
與此同時(shí),許多機(jī)制均支持MicroBlaze和PS之間的數(shù)據(jù)塊傳輸。往返DMA和DDR以及DMA和片上存儲(chǔ)器(OCM)就是兩個(gè)可能性。另一種就是在設(shè)計(jì)實(shí)例中實(shí)現(xiàn)的機(jī)制,其使用雙端口BRAM(圖中的③)。PS為BRAM控制器一側(cè)主設(shè)備,而MicroBlaze則為其另一側(cè)主設(shè)備。軟件負(fù)責(zé)管理分區(qū)和共享BRAM存儲(chǔ)器空間的使用,因?yàn)閮蓚?cè)都有權(quán)對(duì)存儲(chǔ)器的全部?jī)?nèi)容進(jìn)行全面讀取和寫(xiě)入。
最終問(wèn)題涉及如何在MicroBlaze和PS之間同步事件。PS包括大量定時(shí)器,您能對(duì)PL中任意數(shù)量的定時(shí)器實(shí)例化。設(shè)計(jì)實(shí)例中采用了一個(gè)TTC外設(shè)中的一個(gè)通道來(lái)生成100毫秒的脈沖信號(hào)(圖中的④)。這里的關(guān)鍵是要認(rèn)識(shí)到TTC生成的波形能從PS以外訪(fǎng)問(wèn),但TTC中斷只能在PS以?xún)?nèi)可用。您可用波形本身作為MicroBlaze中斷,從而規(guī)避這個(gè)問(wèn)題。此外,您也可采用硬件定時(shí)器(AXI定時(shí)器或用戶(hù)編碼的定時(shí)器)為PS和MicroBlaze提供中斷。
圖5:獨(dú)立軟件域和重疊項(xiàng)。
軟件支持
與任何嵌入式設(shè)計(jì)一樣,您要考慮的不光是硬件實(shí)現(xiàn)問(wèn)題,還要考慮軟件支持。對(duì)本例而言,要考慮兩個(gè)處理器的重疊區(qū)域(如圖5所示)。
就硬件而言,要把系統(tǒng)視為兩個(gè)相互交叉的嵌入式設(shè)計(jì):PS和MicroBlaze。我們的參考設(shè)計(jì)可讓PS為其自身和MicroBlaze生成時(shí)鐘信號(hào)并提供中斷。MicroBlaze可使用這些信號(hào),但不能影響或?qū)ζ湫薷摹S和PL共用PS的IOP模塊、DDR存儲(chǔ)器與控制器以及常見(jiàn)的雙端口BRAM。
從地址映射角度看,IOP地址固定在硬件中,不能修改。MicroBlaze和Cortex-A9必須對(duì)外設(shè)使用相同的地址。技術(shù)參考手冊(cè)在這方面做了詳細(xì)說(shuō)明,非常具有參考價(jià)值。技術(shù)參考手冊(cè)分兩部分對(duì)解決設(shè)計(jì)中的外設(shè)問(wèn)題進(jìn)行了闡述。這部分中的所有寄存器都列出了地址和簡(jiǎn)介,管理兩個(gè)處理器之間的資源則是用戶(hù)要開(kāi)展的一項(xiàng)任務(wù),要避免數(shù)據(jù)沖突,避免資源不足等。
圖6:Cortex-A9應(yīng)用和MicroBlaze應(yīng)用流程圖。
采用DDR存儲(chǔ)器及其控制器比較簡(jiǎn)單,因?yàn)镈DR存儲(chǔ)器控制器能管理沖突問(wèn)題,而且提供適當(dāng)?shù)膯l(fā)避免任何請(qǐng)求方無(wú)法獲得數(shù)據(jù)。由于這不在用戶(hù)控制下,時(shí)延可能會(huì)有些難以預(yù)見(jiàn)。
常見(jiàn)的BRAM采用相同的較低地址位,不過(guò)針對(duì)該模塊的每個(gè)處理器存儲(chǔ)器空間的位置可用XilinxPlatform Studio的地址標(biāo)簽來(lái)選擇。跟以前一樣,數(shù)據(jù)沖突、同步和存儲(chǔ)器分配也是讀者要完成的工作。
我們的軟件設(shè)計(jì)實(shí)例更主要的目的是演示連接Cortex-A9和MicroBlaze的過(guò)程,而不是要做任何實(shí)際的工作。一些方法將演示這方面的可能性。
圖6左側(cè)所示的Zynq-7000應(yīng)用是一款簡(jiǎn)單的設(shè)計(jì),其采用賽靈思單機(jī)版板支持包。它運(yùn)行的程序很大程度上讓處理器保持空閑狀態(tài),只是周期性地通過(guò)串行端口發(fā)出T字符表明自己仍在工作。此外,它會(huì)計(jì)算T的次數(shù)并將計(jì)數(shù)統(tǒng)計(jì)保存在BRAM中,與MicroBlaze共享。
MicroBlaze應(yīng)用也運(yùn)行單機(jī)版板支持套件。這樣就能支持中斷,每次串行端口上出現(xiàn)字符,MicroBlaze就把字符緩存起來(lái),并發(fā)送對(duì)應(yīng)的Hex-ASCII到PS IOP模塊的串行端口。此外,它會(huì)構(gòu)建接收字符串,每收到一個(gè)字符都保存在DDR存儲(chǔ)器中。收到回車(chē)后,將計(jì)算校驗(yàn)和,并在字符串后直接添加到DDR存儲(chǔ)器。BRAM預(yù)先設(shè)定的位置處設(shè)置標(biāo)記,當(dāng)Cortex代碼“看到”標(biāo)記時(shí)就從DDR存儲(chǔ)器讀取字符串,并驗(yàn)證校驗(yàn)和。如果校驗(yàn)和準(zhǔn)確,MicroBlaze發(fā)出“+”,否則發(fā)出“X”。
簡(jiǎn)而言之,設(shè)計(jì)實(shí)例證明MicroBlaze和Zynq7000 PS完全能和平共處。AXI連接點(diǎn)數(shù)量很多,使MicroBlaze(或PL中的任何組件)能方便地訪(fǎng)問(wèn)IOP模塊中的外設(shè)、OCM和DDR??删幊踢壿嬆芊奖愕卦L(fǎng)問(wèn)IOP模塊的中斷,而PL中能生成一系列中斷并發(fā)送給PS。軟件協(xié)調(diào)和定義良好的行為是避免爭(zhēng)搶情況和尋址沖突的關(guān)鍵。
評(píng)論