深入AXI4總線- [一]握手機制


知乎用戶ljgibbs授權轉發

本系列我想深入探尋 AXI4 總線。不過事情總是這樣,不能我說想深入就深入。當前我對 AXI總線的理解尚談不上深入。但我希望通過一系列文章,讓讀者能和我一起深入探尋 AXI4。

聲明1:部分時序圖以及部分語句來自 ARM AMBA 官方手冊

(有的時候感覺手冊寫得太好了,忍不住就直接翻譯了。。)

聲明2:AXI 總線是 ARM 公司的知識產權

備注

VALID/READY 握手機制

AXI 總線共有 5 個獨立的通道,分別為寫地址、寫數據、寫回應、讀地址、讀數據通道。5 條通道相互獨立,有一些細小的差別,但共同使用一套握手機制:VALID/READY 機制,來實現信息的傳遞。

VALID/READY 機制這個賽高啊,這個好啊,ARM 的手冊上這么誇:

作為一種雙向流控機制,VALID/READY 機制可以使發送接收雙方都有能力控制傳輸速率。

在握手機制中,通信雙方分別扮演發送方(Source)和接收方(Destination),兩者的操作(技能)並不相同。

發送方置高 VALID 信號表示發送方已經將數據,地址或者控制信息已經就緒,並保持於消息總線上。

接收方置高 READY 信號表示接收方已經做好接收的准備。

當雙方的 VALID/READY 信號同時為高,在時鍾 ACLK 上升沿,完成一次數據傳輸。所有數據傳輸完畢后,雙方同時置低自己的信號。

所謂的雙向流控機制,指的是發送方通過置起 VALID 信號控制發送的時機與速度,接收方也可以通過 READY 信號的置起與否控制接收速度。

發送方擁有傳輸的主動權,但接收方在不具備接收能力時,也能夠置低信號停止傳輸,反壓發送方。

VALID/READY 的三種情況

VALID/READY 信號按照到達的先后順序可以分為 3 種情況:

1.VALID 信號先到達

發送方 VALID 信號早早就到了,這時還不到 T2 時刻,並帶來了新鮮的數據(數據通道),地址或者控制信息(地址通道),總之是信息(Information)。

但過了 T2 也沒見到接收方的 READY 信號。原來是接收方還忙着,可能上一次的數據還沒存完,還堵在數據通路上,忙過了 T2 才來。

好吧,那也行,T3 時刻傳輸完成。

在這種情況下,接收方通過 READY 信號控制了傳輸速度,反壓了發送速度。

協議規定在這種情況下,VALID 信號一旦置起就不能置低,直到完成握手(handshake occurs),至少傳輸一周期數據。

在設計接收方邏輯時,檢測到 VALID 信號置起,如果系統正忙,完全可以讓發送方等待,發送方在完成傳輸之前都不會置低 VALID 信號,不需要考慮發送方撤銷傳輸的可能。

協議另外規定:發送方不能通過等待接收方 READY 信號來確定置起 VALID 信號的時機

這句中文閱讀理解有點難,原文為:

A source is not permitted to wait until READY is asserted before asserting VALID.

筆者個人理解,READY 信號可能先到達,如下圖的情況。但是設計發送方邏輯時,不能將 READY 信號作為置高 VALID 邏輯的條件,比如將 READY 信號通過組合邏輯生成 VALID 信號。

換句話說,發送方准備發送,置起 VALID 信號是完全主動與獨立的過程。接收方 READY 信號按照協議可以依賴發送方 VALID 信號,但如果此時發送方也依賴接收方信號,就會造成死鎖的情況,所以協議在這里強調了 VALID 信號的主動性。

module axi_src
...
//assign VALID = SRC_CONDITION && READY;//NOT permitted and may cause deadlock
assign VALID = SRC_CONDITION;//permitted 
...
endmodule

module axi_dst
...
assign READY = CONDITION && VALID;//permitted
...
endmodule

2.READY 信號先到達

READY 信號很自由,可以等待 VALID 信號到來再做響應,但也完全可以在 VALID 信號到來前就置高,表示接收端已經做好准備了。

而且,READY 信號與 VALID 不同,接收方可以置起 READY 之后發現:其實我好像還挺忙,然后置低 READY 信號。只要此時 VALID 信號沒有置起,這種操作是完全可以。

3.同時到達

同時到達就很簡單,等到下一個時鍾上升沿 T2,傳輸就這么輕松愉快地在一個時鍾周期里完成了。

實現細節

本文的最后討論一個協議的實現細節。如果讀者僅僅想了解 AXI 協議的使用,那么每篇文章的實現細節章節可以跳過。這個章節面向有實現 AXI 協議需求的讀者。

前文我們討論過, READY 信號原則上由接收方自身的接收狀況以及 VALID 信號控制。(或者僅由接收方自身的接收狀況決定)協議中沒有規定 READY 信號的默認狀態,即未進行傳輸時的電平狀態(default value)。

協議建議 AW/AR READY 信號(這里 AW/AR 指的是讀寫地址通道的 READY 信號,將在第二章中正式引入)的默認電平為高電平。若默認電平為低,則每次傳輸至少需要 2 個周期才能完成,第一個周期置高 VALID 信號,第二個周期從機才會置高 READY 信號。相當於每次傳輸增加 1 個周期時間開銷,這在某些情況下會對傳輸效率有較大的影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM