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