用vivado創建new AXI4 IP,配置:AXI4-Full,Master。分析內部關於AXI4接口自動產生的代碼。
1、在 M_AXI_ACLK 同步時鍾下,抓取 INIT_AXI_TXN 由低變高,讓 init_txn_pulse 產生個pulse信號;
2、輸入信號 INIT_AXI_TXN 是這個ip的一個輸入信號,是由用戶在PL或PS側控制,下有說明;
3、產生信號 init_txn_pulse 負責在運行中初始化接口的關鍵控制信號,如同 M_AXI_ARESETN 下的初始化;
Write Address Channel
1、大部分接口都是固定值設置;awburst=01,地址設置成INCR遞增模式;
2、首先協議要求,復位時master側的arvalid、awvalid、wvalid必須low;
3、從代碼判斷,初始時ready=0(axi4協議推薦1),start一次burst是16*4B,一次burst結束后slave側ready=1,master側valid=0,addr+size;
4、從這里可以看出 init_txn_pulse 可以讓地址回到起始,准備下次覆蓋;
5 、可以看出axi總線的地址是按照byte為單位,而不是width;
burst_size_bytes = C_M_AXI_BURST_LEN * C_M_AXI_DATA_WIDTH/8 = 16* 32/8 = 64 Byte;
Write Data Channel
1、wlast=1的條件,C_M_AXI_BURST_LEN是對burst的區別,這里是16,只考慮(write_index == 16 - 2) && wnext
1、clogb函數功能是把 len / width,轉換成AxSIZE的匹配mode。規范的代碼都是按照一定的規則來定義對應關系的。
附錄:
amba_axi_protocol_spec.pdf