天天看點

PicoBlaze輸入/輸出端口

PicoBlaze輸入/輸出端口

PicoBlaze微控制器支援最大256個輸入口和256 個輸出口,PicoBlaze與輸入和輸出有關的信号在“PicoBlaze微控制器接口信号”部分有詳細說明,包括PORT_ID[7:0]、IN_PORT[7:0]、OUT_PORT[7:0]、READ_STROBE WRITE_STROBE。在時序要求苛刻的設計中, 對PORT_ID 和資料路徑允許兩個時鐘周期, 對于READ_STROBE 和WRITE_STROBE 需要限制到一個時鐘周期。為了提高性能,在允許的情況下可以插入流水寄存器。

PORT_ID:此信号作為輸入或輸出端口的辨別或者說是位址。它的有效高電平持續兩個時鐘周期,這樣做的目的是為了有足夠的時間進行譯碼,有足夠的時間與異步RAM 連接配接,還有,在雙周期操作時,允許從同步RAM(例如,BRAM)中讀資料。

INPUT 和OUTPUT 操作支援直接和間接尋址,端口位址由立即數指定或由寄存器指定。間接尋址方式适用于對BRAM、具有連續位址的外設、片内或片外存儲器中的表格的通路。

擴充PicoBlaze 外設其實非常友善,唯一具有挑戰性的地方在于,如何用最少的邏輯資源實作對PORT_ID 譯碼。表12-2 所示為一般的方法(取決于端口數)。

PicoBlaze輸入/輸出端口

一、 INPUT 操作

輸入操作将IN_PORT輸入口的資料傳送到由寄存器sX 指定的16 個資料寄存器中的任何一個,如圖12-11所示,PORT_ID 由sY确定或者由一個8位的立即數确定,指定輸入源。輸入源由一個多路器選擇,多路器的大小與輸入源的通道數成正比,它直接影響PicoBlaze 的性能。

PicoBlaze輸入/輸出端口

圖12-11 輸入操作和FPGA内部接口

圖12-12中為輸入指令時序圖,圖中顯示PicoBlaze微控制器從由s7指定的端口讀資料,資料被讀入s0。當執行此指令時,寄存器s7 的内容出現在PORT_ID上,PORT_ID被FPGA内部邏輯譯碼,被請求的資料出現在IN_PORTREAD_STROBE 在輸入指令的第二個時鐘周期變高,盡管READ_STROBE 主要用于FIFO,以使FIFO 能夠更新它的讀指針。出現在IN_PORT的資料在第2 個上升沿被采樣,表明INPUT指令執行完畢,之後,資料被采樣進入s0。

PicoBlaze輸入/輸出端口

圖12-12 INPUT 指令的PORT 時序

從圖12-12時序圖可以看出,由于PORT_ID保持兩個時鐘周期有效,是以輸入資料多路器可以被寄存,以保證性能,如圖12-13所示。

PicoBlaze輸入/輸出端口

圖12-13 由多路器将多個輸入變為一路輸入

二、 OUTPUT 操作

輸出操作将寄存器sX 的内容送到OUT_PORT,PORT_ID 由寄存器sY 确定或者由一個8位的立即數确定,指定輸出口。WRITE_STROBE 表明OUT_PORT 資料有效,并且準備好被捕獲。通常情況下,WRITE_STROBE 與PORT_ID 組合成時鐘使能或者寫使能供FPGA邏輯捕獲輸出資料。

PicoBlaze輸入/輸出端口

圖12-14 OUT_PORT與FPGA邏輯

圖12-14是一個擴充輸出端口的執行個體,圖12-15為其時序圖,PicoBlaze 要将s0的内容送到PORT_ID為65HEX 的端口,s0 的内容出現在OUT_PORT,端口位址65HEX 出現在PORT_ID,WRITE_STROBE 在指令周期的第二個時鐘邊沿變高,表明資料有效。

PicoBlaze輸入/輸出端口

圖12-15 OUT_PORT 指令的PORT 時序

對于8個或者少于8個的輸出口,常用one-hot編碼方式,如圖12-16所示,因為它僅需要對PORT_ID的某一位進行譯碼,是以很大程度上減少了FPGA譯碼邏輯所需資源,同時也提高了性能。如果用來譯碼的PORT_ID位數為3或者小于3,則譯碼邏輯僅用一級邏輯即可實作,這時的性能最高。

圖12-17所示為一個簡單的輸出程式,用one-hot編碼定義4個輸出口,同時定義了一個廣播式的輸出口,先向4個輸出口輸出4個不同的值,最後兩條語句将所有4個口清零。

PicoBlaze輸入/輸出端口

圖12-16 簡單的輸出

PicoBlaze輸入/輸出端口

圖12-17 one-hot 編址輸出例程