AXI協議


一個賊有用的鏈接

http://www.cnblogs.com/lkiller/p/4773235.html
關於AXI4代碼的一些認知(真的比CSDN好用,小聲BB)
寫操作。
首先,在設計時需要確定突發長度,AWLEN[7:0]決定寫傳輸的突發長度。
AXI4突發類型[AxBURST]來決定
INCR :增量突發,突發長度為1~256,傳輸過程中,地址遞增。增量取決於Axsize的值
WRAP:回環突發,和增量突發類似,但會在特定高地址的邊界處回到低地址處。回環突發的長度只能是2,4,8,16次傳輸,傳輸首地址和每次傳輸的大小對齊。最低的地址整個傳輸的數據大小對齊。回環邊界等於(AxSIZE*AxLEN)。
(AWLEN[7:0]=wlen,AWSIZE=110,AWBURST=01)
Address_N = Aligned_Address + (N-1) x Number_Bytes
WSTRB[n:0]對應於對應的寫字節,WSTRB[n]對應WDATA[8n+7:8n]。WVALID為低時,WSTRB可以為任意值,WVALID為高時,WSTRB為高的字節線必須指示有效的數據。(因為傳輸的位寬為64bit,每個字節都有效,WSTRB=8‘hff)
AWPORT(000正常、安全、數據存取)、AWLOCK(0正常,不支持獨占)、AWCACHE(0011,bufferable&cacheable)這三個信號主要是安全級別的,不是很懂 慢慢再看
為了預防READY信號和VALID信號之間發生鎖死的情況,需要遵守兩個原則:
1)一個通道中的VALID信號絕對不能依存於其它通道中的READY信號。即,一個通道拉起VALID信號的唯一原因只能是該通道需要發起數據傳輸,而不看其它通道有沒有完成數據傳輸。
2)一個通道中,READY信號可以等到VALID信號拉起后再根據自身狀況適時拉起。言外之意是,READY信號提前拉起來也可以,只要宿設備已經能夠隨時接收源設備的數據
 
1)寫地址通道:主設備只有在發送地址和控制信號時,才可以拉起AWVALID信號,只有當從設備拉起AWREADY信號后,主設備才可以更新地址和控制信號;如果地址和控制信號發送結束了,主設備在得到從設備的最后一個AWREADY信號時,才可以將AWREADY信號拉低。如果得不到從設備的AWREADY,主設備就必須保持AWVALID和地址等信號不變。

讀地址通道除去那幾個自定義的信號,那就是只剩下四個信號需要控制啦,其中一個包括從設備的AWREADY輸入信號和三個輸出信號:AWVALID、AWLEN、AWADDR。

協議設定時,首先是要更新地址和突發大小的更新(地址來自PS端,信號trans_addr來確定。傳輸大小也是PS端傳輸的,信號trans_len來決定如果trans_len大於255的話呢,就先傳255,如果學校與255呢,就傳輸trans_len-1)

因為一個BURST能傳輸的最大的數據量是256*8byte,對應的么一個BURST的補償地址是2^8*2^3。

這時,問題來了。怎么判斷一個BURST傳輸完成了,以及只剩最后一個BURST了。(只剩最后一個BURSET的話,就是補償地址的高位(大於11)和需要傳輸的數據數的高位(大於8)相等,那就是說,需要傳書的數據只需要一個BURST就可以完成了),如果低位相等的話,則說明一個BURST傳輸完成 。如果BURST傳輸完成了,就傳數據。最后一次傳輸完成了就傳輸新的地址。

傳輸地址的狀態機來判斷AWVALID信號什么時候為高。首先,只有主設備發送地址和控制信號時,AWVALID才會變高(設計為當FIFO中的數大於一個BURST的數據量時)。

awready信號和wready信號可以默認為高,這樣就可以少斷言一次

從設備控制的用於發送寫響應信號的BVALID信號必須要等到從設備接收了寫數據之后才可以拉起。只有寫數據操作完成了,從設備才可以向主設備發送響應信號。

來一段代碼:(算了)

2)寫數據通道:主設備和從設備在寫數據通道的握手方式和寫地址通道相同。
這個通道就主要是:WDATA(rdata)、WLAST、WVALID(fifo數據有效)、WREADY,WSTRB
當wvalid和wready信號都為高時,傳輸數據有效
設計兩個計數器,在傳輸信號開始后,wvalid和wready信號都相等時,分別用來計算本burst傳輸的數據次數以及一共傳輸的數據數。還是需要在最后一次burst傳輸時,判斷最后一次出傳輸的數據量。wlast表示一個burst的最后一次傳輸。
 
3)寫響應通道:與寫地址通道、寫數據通道不同的是,在寫響應通道中,BVALID信號的控制者是從設備,BREADY信號的控制者是主設備。
     還有一個BRESP信號,由從機控制。表明寫事物的狀態。
 
TOP文件就是把AXI端口的信號和FIFO相對應的信號進行一個鏈接,以及設計寫入數據的地址。這個以后再寫好了。(設計的這個模塊FIFO是主,DDR是從設備)
 
4)讀地址通道:主設備和從設備在讀地址通道的握手方式和寫地址通道相同。
ARVALID信號不依存於任何信號,只要主設備要讀數據,就可以拉起ARVALID信號,將地址和控制信號送上讀地址通道;從設備控制的ARREADY信號可以先於ARVALID或后於ARVALID信號拉起;而從設備控制的RVALID信號必須等ARVALID和ARREADY都拉起來后,即從設備已經得到了主設備發來的地址及控制信號,然后從設備就可以去相應的地址將數據讀出來,並放上讀數據通道,同時可以拉起RVALID信號;而主設備控制的RREADY既可以看RVALID的情況拉起,也可以自行適時拉起。
讀地址通道需要控制的信號:ARLEN,ARVALID,ARADDR(trans_addr)ARREADY(從設備控制)
首先,依舊是地址的更新和傳輸大小的控制
然后是一個傳輸地址的狀態機,當接收到trans_start信號之后就開始寫FIFO狀態,如果FIFO不滿,就拉高ARVALID,傳輸地址,傳輸之后再看傳輸進行到哪一步了,如果沒傳完就進入等待狀態,如果傳完了,就回到初始狀態。
 
 
5)讀數據通道:ARVALID的控制者是從設備,ARREADY的控制者是主設備。

 RDATA,RRESP,RLAST,RVALID和rready(FIFO不為空就拉高,最后一個傳輸了就拉低)

好像沒啥可寫的了哇。。。。就,先這樣吧。


免責聲明!

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



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