閱讀382 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【OpenHW參賽手記】AXI-Stream接口介紹

AXI4-Stream協議是一種用來連接需要交換數據的兩個部件的標準接口,它可以用於連接一個產生數據的主機和一個接受數據的從機。當然它也可以用於連接多個主機和從機。該協議支持多種數據流使用相同共享總線集合,允許構建類似於路由、寬窄總線、窄寬總線等更為普遍的互聯。AXI4-Stream接口的信號線定義如圖1所示[1]。比較重要的信號線有:

ACLK為時鍾線,所有信號都在ACLK上升沿被采樣;

ARESETn為複位線,低電平有效;

TVALID為主機數據同步線,為高表示主機準備好發送數據;

TREADY為從機數據同步線,為高表示從機準備好接收數據;這兩根線完成了主機與從機的握手信號,一旦二者都變高有效,數據傳輸開始。

TDATA為數據線,主機發送,從機接收。

TKEEP為主機數據有效指示,為高代表對應的字節為有效字節,否則表示發送的為空字節。

TLAST為主機最後一個字指示,下一clk數據將無效,TVALID將變低。

TID,TDEST,TUSER均為多機通信時的信號,這裏不涉及,不予考慮。


看到這裏,可能大家都還對Stream沒有一個直觀的認識。其實Stream並不陌生,在我們學c++編程時,一定會包含<iostream>,這樣就可以完成控製終端對程序的輸入輸出了。如果還是不夠直觀,想象一下連續不斷的水流,永遠向著一個方向以固定的速度輸送的接口。以我們看視頻為例,視頻文件本來是保存在硬盤裏的,怎麼播放呢,不能一下子把整個文件都顯示到屏幕上,而是以一定的速度,連續不斷地輸出到屏幕上(每秒30~60幀),這個過程就是流Stream接口完成的。

Xilinx提供的流式IP核有很多用途,可以實現音頻流、視頻流、數據流到內存或者相反方向的傳輸。有人問了,內存是PS控製的,怎麼才能把PS裏DDR2的內容以Stream形式發出去呢(例如以固定速度送往DA,完成信號發生器的設計)?答案就是利用AXI總線做轉換。ZYNQ的PS部分是ARM Cortex A9係列,支持AXI4,AXI-Lite總線。PL部分也有相應AXI總線接口,這樣就能完成PS到PL的互聯。僅僅這樣還不夠,需要PL部分實現流式轉換,即AXI-Stream接口實現。Xilinx提供的從AXI到AXI-Stream轉換的IP核有:AXI-DMA,AXI-Datamover,AXI-FIFO-MM2S以及AXI-VDMA等。這些IP核可以在XPS的IP Catalog窗口中看到。

AXI-DMA:實現從PS內存到PL高速傳輸高速通道AXI-HP到AXI-Stream的轉換;

AXI-FIFO-MM2S:實現從PS內存到PL通用傳輸通道AXI-GP到AXI-Stream的轉換;

AXI-Datamover:實現從PS內存到PL高速傳輸高速通道AXI-HP到AXI-Stream的轉換,隻不過這次是完全由PL控製的,PS是完全被動的;

AXI-VDMA:實現從PS內存到PL高速傳輸高速通道AXI-HP到AXI-Stream的轉換,隻不過是專門針對視頻、圖像等二維數據的。

除了上麵的還有一個AXI-CDMAIP核,這個是由PL完成的將數據從內存的一個位置搬移到另一個位置,無需CPU來插手。這個和我們這裏用的Stream沒有關係,所以不表。

這裏要和大家說明白一點,就是AXI總線和接口的區別。總線是一種標準化接口,由數據線、地址線、控製線等構成,具有一定的強製性。接口是其物理實現,即在硬件上的分配。在ZYNQ中,支持AXI-Lite,AXI4和AXI-Stream三種總線,但PS與PL之間的接口卻隻支持前兩種,AXI-Stream隻能在PL中實現,不能直接和PS相連,必須通過AXI-Lite或AXI4轉接。PS與PL之間的物理接口有9個,包括4個AXI-GP接口和4個AXI-HP接口、1個AXI-ACP接口,均為內存映射型AXI接口。

上麵的IP是完成總線協議轉換,如果需要做某些處理(如變換、迭代、訓練……),則需要生成一個自定義Stream類型IP,與上麵的Stream接口連接起來,實現數據輸入輸出。用戶的功能在自定義Stream類型IP中實現。

最後更新:2017-04-03 16:48:32

  上一篇:go 給android添加係統屬性:Settings.system和SystemProperties
  下一篇:go PHP安裝eAccelerator加速器的配置信息