1 概述 PicoBlaze 8位微處理器是Xilinx公司為Virtex系列FPGA、Spartan-Iitxi系列FPGA和CoolRunner-II系列CPLD器件設計嵌入式專用IP Core。它解決了常量編碼可編程狀態機(KCPSM)的問題。這一模塊只占用SpartanIIE的76個小區(slice),占最小的XC2S50E 器件9%的資源,占XC2S300E器件不到2%的資源。在這一模塊中還包括一個用于存儲指令的由Block RAM組成的ROM,最多可存儲256條指令。PicoBlaze只用了如此少的資源,但其速度卻可達到40MIPS以上。 PicoBlaze提供49個不同的指令,16個寄存器(CPLD為8個),256個直接或間接的可設定地址的端口,1個可屏蔽的、速率為 35MIPS的中斷。它的性能超過了傳統獨立元器件組成的微處理器,而且成本低,使得PicoBlaze在數據處理和控制算法領域有著廣泛的應用前景 。由于可編程部分也完成嵌入,PicoBlaze可與子程序和外圍設備結合起來完成特殊的設計。其基本應用框架如圖1所示。 PicoBlaze模塊由VHDL語言設計,不需要預編譯,可直接由布局布線工具嵌入到容量大一點的器件中;可以認為PicoBlaze幾乎不占資源,而且一個設計中可以包括多個PicoBlaze。PicoBlaze適用于復雜的但對時間要求不太高的系統中,并可以簡華設計。 2 PicoBlaze原理與結構分析 PicoBlaze 8位微處理器內部結構如圖2所示。 PicoBlaze處理器IP Core由全局寄存器、計算邏輯單元(ALU)、程序流控制標志和復位邏輯、輸入/輸出(I/O)、中斷控制器等幾大部分構成。 全局寄存器:16個8位全局寄存器,s0~sf。寄存器的操作是非常靈活的;沒有為特殊任務保留寄存器,任何寄存器的優先權都是一樣的。 算術邏輯單元(ALU):提供了8位處理器需要的所有簡單操作。執行所有的操作都是用任意一個寄存器提供的操作數完成。若操作需兩個操作數,則有另一寄存器指定或在指令中嵌入一8位常量值。在不增加程序大小的前提下,指不定期任意常量值,增強了簡單的指令特性。更明白地說,ADD1與 INCREMENT指令是等價的。若操作超過8位,則有一選項(增加或減少)可供選擇。二進制操作碼(LOAD、AND、OR、XOR)可操作和測試二進制數,還包括SHIFT和ROTATE指令集合。 程序流控制標志:ALU操作后的結果影響ZERO和CARRY兩個標記。用有條件的或無條件的程序流控制指令決定程序執行的順序。JUMP指令指定在程序空間內的絕對地址。CALL指令將程序定位到用一段代碼寫的子程序的絕對地址,同時將返回地址壓棧。嵌套CALL指令使用的棧為15層,對于程序大小足夠了。 復位邏輯:復位信號強迫程序回到初始狀態,即程序從地址00開始執行,中斷被屏蔽,狀態標記和堆棧也同時復位,但寄存器中內容不受影響。 輸入/輸出(I /O):PicoBlaze提供256個輸入端口和256個輸出端口。由端口總線提供一個8位地址值與一個READ或WRITE選通脈沖信號,一起指定訪問端口。這個端口地址值或為一確定值或由任意一寄存器中內容指定。當訪問一由分布式或塊狀RAM組成的內存時,最好用直接尋址。當進行輸入操作時,輸入端口上的值被輸出一個READ_STROBE輸出脈沖時,即表示進行了一次輸入操作。 中斷控制器:PicoBlaze提供一中斷輸入信號。只要用一些簡單的組合邏輯,多個信號就可進行組合并被應用于這一中斷。程序中可定義此中斷是否被屏蔽,默認值是中斷被屏蔽。一被激活的中斷信號使程序執行“CALL FF”指令(FF即256,程序存儲器的最后一個位置),然后設計者為此定義的放在此處的一段程序被執行。一般在此地址放一JUMP指令,跳轉到中斷服務程序。中斷進程屏蔽其它中斷,RETURNI指令保證在中斷程序結束后,標記和控制指令回到原先的狀態。 表1 PicoBlaze處理器指令集
3 PicoBlaze的指令集和調試器 表1列舉了所有代表十六進制的PicoBlaze操作碼的指令,其中: ①“X”和“Y”代表寄存器,“s”,范圍為0~F; ②“kk”代表常量,“aa”代表地址,“pp”代表端口地址,范圍均為00~FF。 pBlazIDE(Integrated Development Environment)是PicoBlaze匯編程序的編輯、調試、匯編集成環境。利用它可以方便地仿真所寫程序的輸入輸出、寄存器內值的變化及程序指令的順序執行過程,便于檢查程序的錯誤。PicoBlaze處理器IP Core應用的VHDL源代碼和調試器pBlazeIDE可以從Xilinx網站上直接下載。 4 PicoBlaze的應用系統設計 應用于Spartan-II和Virtex-E器件的PicoBlaze處理器IP Core,外掛一個可存儲256條指令的RAM,共同工作。若是用戶需要更多的程序存儲空間以便執行更加復雜的操作,有以下幾種解決方案。 *Xilinx 針對Virtex-E器件特別設計了KCPSM2模塊,提供1024個地址,且操作32個寄存器。 *若用戶的程序超過了256條指令,則可以考慮將設計分解為幾個過程,每一個過程由一個單獨的PicoBlaze模塊(每個擁有自己的RAM)完成。在一些設計中,以一個PicoBlaze為主(Master),其它一個或多個PicoBlaze為輔(Slave)。雙端口分布式存儲器是在處理器間交換數據的一個很好的選擇。 *可選擇將超過256個指令的程序分解到兩個或多個塊狀RAM中,用一個選擇開關來選擇存儲了要執行的指令的RAM。最簡單的是使用一個被一觸發器輸出控制的二選一選擇器來選擇RAM,如圖3所示。 這種方法的缺點是:二路選擇器占用8個slice,且加大了程序執行的延時,降低了程序最大執行速率。一個更好的方法是將二路選擇器放到RAM 中,一條指令被分別存放在兩個512×8的RAM中,用switch信號和8位地址信號組成9位信號,選擇要執行的指令。圖4列舉了一個利用 PicoBlaze實現控制四個七段數據管顯示的例子,左邊兩個從0變到99,右邊情形相同,變化的間隔均為1s。但同時刻只有一個計數器增加,而選擇哪一個計數器增加則由DIP switch輸入控制。 結語 PicoBlaze是一個典型的8位微處理器。與傳統的8位MCU相比,它是一個由VHDL實現的軟處理器IP Core,可以在各種FPGA和CoolRunnerII CPLD上實現,設計靈活方便;因此,PicoBlaze將在基于可編程邏輯和MCU的應用領域中發揮積極的作用。其較高的處理性能和較少的資源占用,預示其具有更加廣泛的應用前景。 參考文獻 1. Xilinx Inc PicoBlaze Processor IP Guide 2003 2. Xilinx Inc Programmable Logic Data Book.Rev6 2003 作 者:國防科技大學 溫廣翔 徐欣 來 源:單片機與嵌入式系統應用2003(12) |