天天看點

PicoBlaze 8 位微控制器

PicoBlaze 8 位微控制器

PicoBlaze 是一個8 位的微控制器,非常适合于Spartan 系列及Virtex 系列FPGA。還可以用于CPLD,但是需要外部加SRAM 存儲器以運作程式。它又被稱為常數化的可程式設計狀态機KCPSM((K)constant Coded Programmable State Machine),之是以這樣稱呼它,是因為PicoBlaze 非常适合實作複雜的、實時性要求不高的狀态機。

一般情況下,實作一個PicoBlaze 微控制器,僅僅需要96 個SLICE(192 邏輯單元)和一個BRAM(Block RAM),最大可以尋址1K 指令空間(每條指令18 位寬)。其性能可以達到44~76DMIPS,取決于其所用的FPGA 及速度等級。

PicoBlaze 可以擴充最多256 個8 位的輸入口和256 個8 位的輸出口,可以通過這些輸入/輸出口友善地實作與使用者邏輯的連接配接。另外,它還具有一個中斷輸入。

PicoBlaze 以VHDL/Verilog 源碼提供給使用者,占用非常少的資源,不會像51 核等CPU一樣停産。而且它完全采用同步設計,容易在各種FPGA 中實作。

12.1 PicoBlaze 特性

PicoBlaze 微控制器框圖如圖12-1 所示,它的特性介紹如下。

PicoBlaze 8 位微控制器

圖12-1 PicoBlaze 微控制器框圖

16 個8 位的通用資料寄存器。指令空間:1K(18 位)片上存儲器,上電自動裝入。ALU:位元組寬度,具有進位carry 及零zero 标志位。64 個位元組的片上暫存器Scratchpad RAM。最多可以擴充256 個輸入口和256 個輸出口。31(10 位)個可供CALL/RETURN 調用的堆棧。每條指令在兩個時鐘周期内完成,在Virtex2-Pro、Virtex-4、Virtex-5、Virtex 6高性能FPGA中,可以達到200MHz(100MIPS)。快速中斷響應,最差為5個時鐘周期。在Spartan、Virtex2、Virtex-II Pro、Virtex4/5/6中,僅需要大約96個SLICE和一個BRAM。支援彙編和指令集仿真。

12.2 PicoBlaze硬體基本結構

接下來介紹PicoBlaze微控制器的硬體基本結構,包括控制器各功能子產品、信号、中斷、暫存器、輸入輸出端口以及指令存儲器的不同配置結構。

12.2.1 PicoBlaze功能子產品說明

下面對圖12-1中所示PicoBlaze的各功能子產品進行簡要說明。

(1) 通用寄存器(General Purpose Register):PicoBlaze有16個通用寄存器,被定義為s0~sF,為友善程式的編寫,這些寄存器可以用彙編指令重新命名。各寄存器用途一樣,沒有優先級,也沒有專用的累加器。

(2) 1K尋址空間:每條指令都是18位寬,這些指令與FPGA其他邏輯設計一同編譯,程式在配置過程中自動裝入BRAM運作。

(3) 算術邏輯單元(ALU):ALU單元執行所有微控制器運算,内容如下。

基本的算術操作,例如加法和減法。位運算,例如與、異或等操作。算術比較和位測試操作。移位和旋轉操作。

所有具有一個操作數的操作,操作數被置于一個指定的寄存器中(sX),結果也被存放在此寄存器中。如果某條指令需要兩個操作數,則第二個操作數被置于另外一個寄存器sY或者是一個立即數kk中。

(4) 标志位(Flag):ALU的操作會影響标志位RO和CARRY。ZERO表示最後一個操作結果為零,CARRY的結果預示着各種各樣的情況,取決于最後一條指令的執行結果。

(5) 中斷使能标志(Interrupt_Enable):使能中斷輸入Interrupt。

(6) 64位元組暫存器(Scratchpad RAM):PicoBlaze微控制器提供64位元組的片上資料暫存空間,通過STORE和FETCH指令直接或間接尋址。STORE指令将通用寄存器sX中的内容寫到64個空間中的某個位址,FETCH的操作與STORE相反,讀出64個空間中某個數到寄存器sX中。此RAM的6位位址可以用立即數指定,也可以通過一個通用寄存器指定,僅低6位有效,位址範圍00~3F。

(7) 輸入/輸出(Input/Output):PORT_ID指定輸入/輸出的位址,它為8位,是以可以擴充256個輸入口和256個輸出口。輸入時,PicoBlaze從輸入口IN_PORT 讀資料存入sX 中; 輸出時, PicoBlaze 将sX 中資料送到OUT_PORT。

(8) 程式計數器(Program Counter,PC):PC 指向下一條将要執行的指令。預設情況下,PC 自動指向下一條指令所存儲的位置。僅JUMP 、CALL、RETURN、RETURNI、中斷和複位指令會改變這種預設行為。PC 不會直接被

應用程式改變。PC 為10 位寬,是以最大尋址空間為1024,當PC 達到3FF hex 時,會傳回到00 位址。

(9) 程式流控制(Program Flow Control):程式的預設執行順序可以通過改變條件或非條件流控指令來改變。JUMP 可以跳轉到1024 個空間的任何位置。

CALL 指令指定了子程式的起始位址, 同時傳回位址被儲存在CALL/RETURN 堆棧中。如果程式中使能了中斷,那麼,當中斷發生時,程式的傳回位址也會儲存在CALL/RETURN 堆棧中,同時中斷向量3FF(Hex)裝入PC。中斷用RETURNI 傳回,而不是RETURN。

(10) 堆棧(CALL/RETURN):CALL/RETURN 堆棧最大可以存儲31 個指令位址,允許31 級子程式嵌套。由于中斷也會占用此堆棧,是以,如果程式中使能了中斷,則至少需要保留一級空間給中斷用。此堆棧是一個輪轉型的結

構,如果堆棧滿,再裝入位址時,最早進入的位址就會溢出。沒有指令可以控制堆棧或堆棧的指針,也沒有程式空間供堆棧應用。

(11) 中斷(Interrupt):PicoBlaze 提供一個中斷輸入,且這個中斷是異步的,它可以發生在指令周期的任何時候。然而,一般的設計規則建議用時鐘同步PicoBlaze 的所有輸入。中斷響應時間小于5 個時鐘周期。

(12) 複位(Reset):PicoBlaze 在FPGA 配置完成後立即自動複位。複位強制PicoBlaze 器進入初始狀态,PC=0,标志位清零,中斷禁止,CALL/RETURN堆棧也被複位。但是資料寄存器和Scrachpad RAM 不受複位的影響。

12.2.2 PicoBlaze 接口信号

本節介紹PicoBlaze 微控制器的接口信号,如圖12-2 所示。

PicoBlaze 8 位微控制器

圖12-2 PicoBlaze 微控制器接口連接配接

IN_PORT[7:0]:資料輸入。在執行INPUT 指令期間,有效的輸入資料将出現在此端口。INTERRUPT:中斷輸入。如果中斷使能位被應用程式置位,那麼,當此中斷輸入口有一個持續至少2 個時鐘周期的高電平,則PicoBlaze 會進入中斷服務程式。如果中斷使能标志位清零,則PicoBlaze 會忽略中斷引腳上的信号。RESET:複位輸入。為了複位微控制器,産生一個複位事件,隻需要使RESET口輸入一個至少一個時鐘寬度的高電平。随着FPGA配置的完成,會自動産生一個複位信号。CLK:時鐘輸入。CLK最高頻率由ISE綜合結果決定。沒有占空比的要求。OUT_PORT[7:0]:資料輸出。在執行OUTPUT指令期間,輸出資料出現在此端口,并持續兩個時鐘周期。FPGA内部邏輯可以在CLK上升沿當WRITE_STROBE為高時采樣該資料。PORT_ID[7:0]:輸出端口位址。在執行INPUT/OUTPUT指令期間,此端口信号保持兩個時鐘周期。READ_STROBE:讀控制信号。此信号為高,在執行INPUT指令期間,表明IN_PORT[7:0]已經被采樣到指定的資料寄存器中。該信号在雙周期輸入指令INPUT的第二個時鐘周期有效。該信号常被用來作為讀FIFO操作的握手信号。WRITE_STROBE:寫控制信号。在執行OUTPUT指令期間,此信号為高時OUT_PORT[7:0]資料有效。此信号在OUTPUT指令的第二個CLK周期有效。在FPGA内,當WRITE_STROBE有效時在CLK上升沿采樣OUT_PORT[7:0]資料。INTERRUPT_ACK:中斷響應輸出。此信号為高時,響應中斷事件。在雙周期的中斷事件的第二個時鐘周期此信号有效。它經常被用來清除中斷源INTERRUPT的輸入。

12.2.3 PicoBlaze指令集

PicoBlaze微控制器的指令包括程式控制指令、算術指令、邏輯指令、移位和旋轉指令、中斷指令、存儲指令和輸入/輸出指令等,如圖12-3所示。

PicoBlaze 8 位微控制器

圖12-3 PicoBlaze指令集

子程式調用和傳回支援深度為31的堆棧。x和y表示寄存器,範圍是0~F。kk代表立即數,範圍是00~FF。aaa代表位址,範圍是000~3FF。pp代表端口位址,範圍是00~FF。ss代表暫存器位址,範圍是00~3F。

表12-1是PicoBlaze微控制器各指令操作的簡要說明。這些指令都是按照KCPSM3的文法(括号中為pBlazIDE的文法)進行說明,每條指令包括了基本描述、功能描述以及對進位位和零标志位的影響。

表12-1 PicoBlaze指令清單

PicoBlaze 8 位微控制器
PicoBlaze 8 位微控制器
PicoBlaze 8 位微控制器

sX:16個通用寄存器中的任何一個,s0~sF。sY:16個通用寄存器中的任何一個,s0~sF。aaa:10 位位址,為立即數,或者為一個三位的16 進制數000~3FF,或者為标号。kk:8 位端口位址,或者為立即數,或者為兩位16 進制數00~FF。pp:8 位端口位址,或者為立即數,或者為兩位16 進制數00~FF。ss:6 位暫存器位址,或者為立即數,或者為兩位16 進制數00~3F。RAM[n]:位址為n 的暫存器内容。TOS:存在于堆棧頂的值。