FPGA實(shí)現(xiàn)AXI4總線的讀寫(xiě)_如何寫(xiě)axi4邏輯
一、AXI4 接口描述
| 通道 | 信號(hào) | 源 | 信號(hào)描述 |
| 全局信號(hào) | aclk | 主機(jī) | 全局時(shí)鐘 |
| aresetn | 主機(jī) | 全局復(fù)位,低有效 | |
| 寫(xiě)通道地址與控制信號(hào)通道 | M_AXI_WR_awid[3:0] | 主機(jī) | 寫(xiě)地址ID,用來(lái)標(biāo)志一組寫(xiě)信號(hào) |
| M_AXI_WR_awaddr[31:0] | 主機(jī) | 寫(xiě)地址,給出一次寫(xiě)突發(fā)傳輸?shù)膶?xiě)地址 | |
| M_AXI_WR_awlen[7:0] | 主機(jī) | 突發(fā)長(zhǎng)度,給出突發(fā)傳輸?shù)拇螖?shù) | |
| M_AXI_WR_awsize[2:0] | 主機(jī) | 突發(fā)大小,給出每次突發(fā)傳輸?shù)淖止?jié)數(shù) | |
| M_AXI_WR_awburst[1:0] | 主機(jī) | 突發(fā)類(lèi)型 | |
| M_AXI_WR_awlock | 主機(jī) | 總線鎖信號(hào),可提供操作的原子性 | |
| M_AXI_WR_awcache[3:0] | 主機(jī) | 內(nèi)存類(lèi)型,表明一次傳輸是怎樣通過(guò)系統(tǒng)的 | |
| M_AXI_WR_awprot[2:0] | 主機(jī) | 保護(hù)類(lèi)型,表明一次傳輸?shù)奶貦?quán)級(jí)及安全等級(jí) | |
| M_AXI_WR_awqos[3:0] | 主機(jī) | 質(zhì)量服務(wù)QoS | |
| M_AXI_WR_awvalid | 主機(jī) | 有效信號(hào),表明此通道的地址控制信號(hào)有效 | |
| M_AXI_WR_awready | 從機(jī) | 表明“從”可以接收地址和對(duì)應(yīng)的控制信號(hào) | |
| 寫(xiě)通道數(shù)據(jù)通道 | M_AXI_WR_wdata[63:0] | 主機(jī) | 寫(xiě)數(shù)據(jù) |
| M_AXI_WR_wstrb[7:0] | 主機(jī) | 寫(xiě)數(shù)據(jù)有效的字節(jié)線,用來(lái)表明哪8bits數(shù)據(jù)是有效的 | |
| M_AXI_WR_wlast | 主機(jī) | 表明此次傳輸是最后一個(gè)突發(fā)傳輸 | |
| M_AXI_WR_wvalid | 主機(jī) | 寫(xiě)有效,表明此次寫(xiě)有效 | |
| M_AXI_WR_wready | 從機(jī) | 表明從機(jī)可以接收寫(xiě)數(shù)據(jù) | |
| 寫(xiě)通道響應(yīng)通道 | M_AXI_WR_bid[3:0] | 從機(jī) | 寫(xiě)響應(yīng)ID TAG |
| M_AXI_WR_bresp[1:0] | 從機(jī) | 寫(xiě)響應(yīng),表明寫(xiě)傳輸?shù)臓顟B(tài) | |
| M_AXI_WR_bvalid | 從機(jī) | 寫(xiě)響應(yīng)有效 | |
| M_AXI_WR_bready | 主機(jī) | 表明主機(jī)能夠接收寫(xiě)響應(yīng) | |
| 讀通道地址與控制信號(hào)通道 | M_AXI_RD_arid[3:0] | 主機(jī) | 讀地址ID,用來(lái)標(biāo)志一組寫(xiě)信號(hào) |
| M_AXI_RD_araddr[31:0] | 主機(jī) | 讀地址,給出一次寫(xiě)突發(fā)傳輸?shù)淖x地址 | |
| M_AXI_RD_arlen[7:0] | 主機(jī) | 突發(fā)長(zhǎng)度,給出突發(fā)傳輸?shù)拇螖?shù) | |
| M_AXI_RD_arsize[2:0] | 主機(jī) | 突發(fā)大小,給出每次突發(fā)傳輸?shù)淖止?jié)數(shù) | |
| M_AXI_RD_arburst[1:0] | 主機(jī) | 突發(fā)類(lèi)型 | |
| M_AXI_RD_arlock[1:0] | 主機(jī) | 總線鎖信號(hào),可提供操作的原子性 | |
| M_AXI_RD_arcache[3:0] | 主機(jī) | 內(nèi)存類(lèi)型,表明一次傳輸是怎樣通過(guò)系統(tǒng)的 | |
| M_AXI_RD_arprot[2:0] | 主機(jī) | 保護(hù)類(lèi)型,表明一次傳輸?shù)奶貦?quán)級(jí)及安全等級(jí) | |
| M_AXI_RD_arqos[3:0] | 主機(jī) | 質(zhì)量服務(wù)QOS | |
| M_AXI_RD_arvalid | 主機(jī) | 有效信號(hào),表明此通道的地址控制信號(hào)有效 | |
| M_AXI_RD_arready | 從機(jī) | 表明“從”可以接收地址和對(duì)應(yīng)的控制信號(hào) | |
| 讀通道數(shù)據(jù)通道 | M_AXI_RD_rid[3:0] | 從機(jī) | 讀IDtag |
| M_AXI_RD_rdata[63:0] | 從機(jī) | 讀數(shù)據(jù) | |
| M_AXI_RD_rresp[1:0] | 從機(jī) | 讀響應(yīng),表明讀傳輸?shù)臓顟B(tài) | |
| M_AXI_RD_rlast | 從機(jī) | 表明讀突發(fā)的最后一次傳輸 | |
| M_AXI_RD_rvalid | 從機(jī) | 表明此通道信號(hào)有效 | |
| M_AXI_RD_rready | 主機(jī) | 表明主機(jī)能夠接收讀數(shù)據(jù)和響應(yīng)信息 |
二、地址通道的控制信號(hào)與地址描述
1、地址ID
AWID[3:0]與ARID[3:0]:對(duì)于只有一個(gè)主機(jī)從機(jī)設(shè)備,該值可設(shè)置為任意
2、地址結(jié)構(gòu)
AWADDR[31:0]與ARADDR[31:0]:AXI協(xié)議是基于burst(突發(fā))的,主機(jī)只給出突發(fā)傳輸?shù)牡谝粋€(gè)字節(jié)的地址,從機(jī)必須計(jì)算突發(fā)傳輸后續(xù)的地址。突發(fā)傳輸不能跨4KB邊界(防止突發(fā)跨越兩個(gè)從機(jī)的邊界,也限制了從機(jī)所需支持的地址自增數(shù)
3、突發(fā)長(zhǎng)度
AWLEN[7:0]與ARLEN[7:0]:ARLEN[7:0]決定讀傳輸?shù)耐话l(fā)長(zhǎng)度,AWLEN[7:0]決定寫(xiě)傳輸?shù)耐话l(fā)長(zhǎng)度。AXI4擴(kuò)展突發(fā)長(zhǎng)度支持INCR突發(fā)類(lèi)型為1256次傳輸,對(duì)于其他的傳輸類(lèi)型依然保持116次突發(fā)傳輸(Burst_Length=AxLEN[7:0]+1)
4、突發(fā)大小
ARSIZE[2:0],讀突發(fā)傳輸;AWSIZE[2:0],寫(xiě)突發(fā)傳輸。
| AxSIZE[2:0] | 傳輸字節(jié)大小 |
| 3'b000 | 1 |
| 3'b001 | 2 |
| 3'b010 | 4 |
| 3'b011 | 8 |
| 3'b100 | 16 |
| 3'b101 | 32 |
| 3'b110 | 64 |
| 3'b111 | 128 |
5、突發(fā)類(lèi)型
AWBURST[1:0]與ARBURST[1:0]:
| AxBURST[1:0] | 突發(fā)類(lèi)型 |
| 2'b00 | FIXED |
| 2'b01 | INCR |
| 2'b10 | WRAP |
| 2'b11 | Reserved |
FIXED:突發(fā)傳輸過(guò)程中地址固定,用于FIFO訪問(wèn)
INCR:增量突發(fā),傳輸過(guò)程中,地址遞增。增加量取決AxSIZE的值
WRAP:回環(huán)突發(fā),和增量突發(fā)類(lèi)似,但會(huì)在特定高地址的邊界處回到低地址處?;丨h(huán)突發(fā)的長(zhǎng)度只能是2,4,8,16次傳輸,傳輸首地址和每次傳輸?shù)拇笮?duì)齊。最低的地址整個(gè)傳輸?shù)臄?shù)據(jù)大小對(duì)齊?;丨h(huán)邊界等于(AxSIZE*AxLEN)
三、數(shù)據(jù)通道信號(hào)描述
1、WDATA與RDATA:寫(xiě)與讀數(shù)據(jù)線信號(hào)
WSTRB:有效字節(jié),WSTRB[n:0]對(duì)應(yīng)于對(duì)應(yīng)的寫(xiě)字節(jié),WSTRB[n]對(duì)應(yīng)WDATA[8n+7:8n],也就是對(duì)于的數(shù)據(jù)寬度的字節(jié)數(shù)是否有效。WVALID為低時(shí),WSTRB可以為任意值,WVALID為高時(shí),WSTRB為高的字節(jié)線必須指示有效的數(shù)據(jù)。對(duì)于一般應(yīng)用,將WSTRB全部置1即可,保證全部數(shù)據(jù)有效。讀通道無(wú)該信號(hào)。
2、WLAST與RLAST
寫(xiě)與讀最后一個(gè)字節(jié),拉高表示傳輸最后一個(gè)字節(jié),也意味著傳輸結(jié)束
3、burst[1:0]
描述讀寫(xiě)相應(yīng)結(jié)構(gòu)
| burst[1:0] | |
| 00 | 常規(guī)訪問(wèn)成功 |
| 01 | 獨(dú)占訪問(wèn)成功 |
| 10 | 從機(jī)錯(cuò)誤 |
| 11 | 解碼錯(cuò)誤 |
四、突發(fā)寫(xiě)時(shí)序:
AXI4突發(fā)寫(xiě)可以分為7個(gè)狀態(tài),寫(xiě)空閑,寫(xiě)通道寫(xiě)地址等待,寫(xiě)通道寫(xiě)地址,寫(xiě)數(shù)據(jù)等待,寫(xiě)數(shù)據(jù)循環(huán),接受寫(xiě)應(yīng)答,寫(xiě)結(jié)束這7種狀態(tài)。之所以劃分為7個(gè)狀態(tài)是為了后續(xù)寫(xiě)程序的狀態(tài)機(jī)做準(zhǔn)備。
7種狀態(tài)
1、寫(xiě)空閑:等待觸發(fā)突發(fā)信號(hào)
2、寫(xiě)通道寫(xiě)地址等待:準(zhǔn)備好寫(xiě)地址AWADDR,然后拉高AWVALID。
3、寫(xiě)通道寫(xiě)地址:從機(jī)接受到AWVALID,發(fā)出AWREADY。
4、寫(xiě)數(shù)據(jù)等待:準(zhǔn)備好數(shù)據(jù)WDATA,拉高WVALID。
5、寫(xiě)數(shù)據(jù)循環(huán):從機(jī)接受WVALID,確認(rèn)數(shù)據(jù)WDATA有效并且接受,發(fā)出WREADY,AXI是突發(fā)傳輸:循環(huán)該操作到接受到WLAST最后一個(gè)數(shù)據(jù)標(biāo)志位。
6、接受寫(xiě)應(yīng)答:接受到從機(jī)發(fā)出的BVALID,主機(jī)發(fā)出BREADY。
7、寫(xiě)結(jié)束:拉低未拉低的信號(hào),進(jìn)入寫(xiě)空閑

五、突發(fā)讀時(shí)序
AXI4突發(fā)讀可以分為6個(gè)狀態(tài),讀空閑,讀通道寫(xiě)地址等待,讀通道寫(xiě)地址,讀數(shù)據(jù)等待,讀數(shù)據(jù)循環(huán),讀結(jié)束這6種狀態(tài)。之所以劃分為6個(gè)狀態(tài)是為了后續(xù)寫(xiě)程序的狀態(tài)機(jī)做準(zhǔn)備。
6種狀態(tài)
1、讀空閑:等待觸發(fā)突發(fā)信號(hào)。
2、讀通道寫(xiě)地址等待:準(zhǔn)備好寫(xiě)地址ARADDR,然后拉高ARVALID。
3、讀通道寫(xiě)地址:從機(jī)接受到ARVALID,發(fā)出ARREADY。
4、讀數(shù)據(jù)等待:從機(jī)準(zhǔn)備好數(shù)據(jù)WDATA,從機(jī)拉高RVALID。
5、讀數(shù)據(jù)循環(huán):主機(jī)接受RVALID,確認(rèn)數(shù)據(jù)RDATA有效并且接受,發(fā)出RREADY給從機(jī),AXI是突發(fā)傳輸:循環(huán)該操作到接受到RLAST最后一個(gè)數(shù)據(jù)標(biāo)志位
6、讀結(jié)束:拉低未拉低的信號(hào),進(jìn)入讀空閑

注:
1、讀數(shù)據(jù)必須總是跟在與其數(shù)據(jù)相關(guān)聯(lián)的地址之后。
2、寫(xiě)響應(yīng)必須總是跟在與其相關(guān)聯(lián)的寫(xiě)事務(wù)的最后出現(xiàn)。
六、寫(xiě)時(shí)序狀態(tài)機(jī)

七、寫(xiě)時(shí)序代碼
module axi4_write( input clk , input resetn , input enable_write , //寫(xiě)使能 input [31:0] w_addr , //地址 input [63:0] w_data , //數(shù)據(jù) output reg write_done , //寫(xiě)完成 output reg write_data , //表示數(shù)據(jù)寫(xiě)入,突發(fā)模式下可用于切換數(shù)據(jù)的指示信號(hào) //axi4寫(xiě)通道地址通道 output [3:0] m_axi_awid , //寫(xiě)地址ID,用來(lái)標(biāo)志一組寫(xiě)信號(hào) output reg[31:0] m_axi_awaddr ,//寫(xiě)地址,給出一次寫(xiě)突發(fā)傳輸?shù)膶?xiě)地址 output [7:0] m_axi_awlen , //突發(fā)長(zhǎng)度,給出突發(fā)傳輸?shù)拇螖?shù) output [2:0] m_axi_awsize , //突發(fā)大小,給出每次突發(fā)傳輸?shù)淖止?jié)數(shù) output [1:0] m_axi_awburst , //突發(fā)類(lèi)型 output m_axi_awlock , //總線鎖信號(hào),可提供操作的原子性 output [3:0] m_axi_awcache , //內(nèi)存類(lèi)型,表明一次傳輸是怎樣通過(guò)系統(tǒng)的 output [2:0] m_axi_awprot , //保護(hù)類(lèi)型,表明一次傳輸?shù)奶貦?quán)級(jí)及安全等級(jí) output [3:0] m_axi_awqos , //質(zhì)量服務(wù)QoS output reg m_axi_awvalid , //有效信號(hào),表明此通道的地址控制信號(hào)有效 input m_axi_awready , //表明“從”可以接收地址和對(duì)應(yīng)的控制信號(hào) //axi4寫(xiě)通道數(shù)據(jù)通道 output reg[63:0] m_axi_wdata , //寫(xiě)數(shù)據(jù) output [7:0] m_axi_wstrb , //寫(xiě)數(shù)據(jù)有效的字節(jié)線 output reg m_axi_wlast , //表明此次傳輸是最后一個(gè)突發(fā)傳輸 output reg m_axi_wvalid , //寫(xiě)有效,表明此次寫(xiě)有效 input m_axi_wready , //表明從機(jī)可以接收寫(xiě)數(shù)據(jù) //axi4寫(xiě)通道應(yīng)答通道 input [3:0] m_axi_bid , //寫(xiě)響應(yīng)ID TAG input [1:0] m_axi_bresp , //寫(xiě)響應(yīng),表明寫(xiě)傳輸?shù)臓顟B(tài) input m_axi_bvalid , //寫(xiě)響應(yīng)有效 output reg m_axi_bready //表明主機(jī)能夠接收寫(xiě)響應(yīng) ); //*******************參數(shù)***************************** localparam W_IDLEW = 3'b001 ; //空閑等待 localparam W_DRIVEW = 3'b011 ; //準(zhǔn)備、取地址 localparam W_HANDS = 3'b010 ; //握手 localparam W_WSTBR = 3'b110 ; //突發(fā) localparam W_WAIT = 3'b111 ; //等待結(jié)束的信息 localparam W_END = 3'b101 ; //寫(xiě)數(shù)據(jù)階段 parameter LEN_NUM = 1 ; parameter AWID = 0 ; //*********內(nèi)部信號(hào)****************************** reg [2:0] state , next_state ; reg wready_over ; reg [7:0] len ; assign m_axi_awid = AWID[3:0] ; // [3:0] //寫(xiě)地址ID,用來(lái)標(biāo)志一組寫(xiě)信號(hào) assign m_axi_awlen = LEN_NUM-1 ; // [7:0] //突發(fā)長(zhǎng)度,給出突發(fā)傳輸?shù)拇螖?shù) assign m_axi_awsize = 3'b011 ; // [2:0] //突發(fā)大小,給出每次突發(fā)傳輸?shù)淖止?jié)數(shù) assign m_axi_awburst = 2'b10 ; // [1:0] //突發(fā)類(lèi)型 assign m_axi_awlock = 1'b0 ; // //總線鎖信號(hào),可提供操作的原子性 assign m_axi_awcache = 4'b0010 ; // [3:0] //內(nèi)存類(lèi)型,表明一次傳輸是怎樣通過(guò)系統(tǒng)的 assign m_axi_awprot = 3'b000 ; // [2:0] //保護(hù)類(lèi)型,表明一次傳輸?shù)奶貦?quán)級(jí)及安全等級(jí) assign m_axi_awqos = 4'b0000 ; // [3:0] //質(zhì)量服務(wù)QoS assign m_axi_wstrb = 8'hff ; //狀態(tài)機(jī) always @(*) begin state = next_state ; end always @(posedge clk or negedge resetn) begin if(!resetn) begin wready_over<=0; end else if(state==W_IDLEW || state==W_END ) wready_over<=0; else if(m_axi_wready) wready_over<=1; end always @(posedge clk or negedge resetn) begin if(!resetn) begin next_state <= W_IDLEW ; len <=0 ; end else case(state) W_IDLEW : if(enable_write) next_state <= W_DRIVEW ; else next_state<=W_IDLEW ; W_DRIVEW: if(m_axi_awready) begin next_state <= W_HANDS ; len<=LEN_NUM-1 ; end else next_state<=W_DRIVEW ; W_HANDS : if(wready_over && len==0) next_state <= W_WAIT ; else if(wready_over ) next_state <= W_WSTBR ; else next_state<=W_HANDS ; W_WSTBR : if(len==1) next_state <= W_WAIT ; else begin next_state <= W_WSTBR ; len <=len-1 ; end W_WAIT : next_state<=W_END ; W_END : if(m_axi_bvalid)next_state <= W_IDLEW ; else next_state<=W_END ; default : next_state<=W_IDLEW ; endcase end // 組合邏輯輸出 always @(* ) begin case(state) W_IDLEW : begin m_axi_wlast = 0 ; m_axi_awaddr = 0 ; m_axi_awvalid = 0 ; m_axi_wdata = 0 ; m_axi_wvalid = 0 ; m_axi_bready = 0 ; write_done = 0 ; write_data = 0 ; end W_DRIVEW: begin m_axi_wlast = 0 ; m_axi_awaddr = w_addr ; m_axi_awvalid = 1 ; m_axi_wdata = 0 ; m_axi_wvalid = 0 ; m_axi_bready = 0 ; write_done = 0 ; write_data = 0 ; end W_HANDS : begin m_axi_wlast = 0 ; m_axi_awaddr = 0 ; m_axi_awvalid = 0 ; m_axi_wdata = 0 ; m_axi_wvalid = 0 ; m_axi_bready = 0 ; write_done = 0 ; write_data = 0 ; end W_WSTBR : begin m_axi_wlast = 0 ; m_axi_awaddr = 0 ; m_axi_awvalid = 0 ; m_axi_wdata = w_data ; m_axi_wvalid = 1 ; m_axi_bready = 0 ; write_done = 0 ; write_data = 1 ; end W_WAIT : begin m_axi_wlast = 1 ; m_axi_awaddr = 0 ; m_axi_awvalid = 0 ; m_axi_wdata = w_data ; m_axi_wvalid = 1 ; m_axi_bready = 0 ; write_done = 1 ; write_data = 1 ; end W_END : begin m_axi_wlast = 0 ; m_axi_awaddr = 0 ; m_axi_awvalid = 0 ; m_axi_wdata = 0 ; m_axi_wvalid = 0 ; m_axi_bready = 1 ; write_done = 0 ; write_data = 0 ; end default : begin m_axi_wlast = 0 ; m_axi_awaddr = 0 ; m_axi_awvalid = 0 ; m_axi_wdata = 0 ; m_axi_wvalid = 0 ; m_axi_bready = 0 ; write_done = 0 ; write_data = 0 ; end endcase end endmodule
八、讀時(shí)序狀態(tài)機(jī)

九、讀時(shí)序代碼
module axi4_read(
input resetn ,//axi復(fù)位
input clk , //axi時(shí)鐘
input enable_read ,
output read_data ,
output read_done ,
input [31:0] r_addr ,
output reg [63:0] r_data ,
//axi讀通道寫(xiě)地址
output [3:0] m_axi_arid , //讀地址ID,用來(lái)標(biāo)志一組寫(xiě)信號(hào)
output reg [31:0] m_axi_araddr , //讀地址,給出一次寫(xiě)突發(fā)傳輸?shù)淖x地址
output [7:0] m_axi_arlen , //突發(fā)長(zhǎng)度,給出突發(fā)傳輸?shù)拇螖?shù)
output [2:0] m_axi_arsize , //突發(fā)大小,給出每次突發(fā)傳輸?shù)淖止?jié)數(shù)
output [1:0] m_axi_arburst , //突發(fā)類(lèi)型
output [1:0] m_axi_arlock , //總線鎖信號(hào),可提供操作的原子性
output [3:0] m_axi_arcache , //內(nèi)存類(lèi)型,表明一次傳輸是怎樣通過(guò)系統(tǒng)的
output [2:0] m_axi_arprot , //保護(hù)類(lèi)型,表明一次傳輸?shù)奶貦?quán)級(jí)及安全等級(jí)
output [3:0] m_axi_arqos , //質(zhì)量服務(wù)QOS
output reg m_axi_arvalid , //有效信號(hào),表明此通道的地址控制信號(hào)有效
input m_axi_arready , //表明“從”可以接收地址和對(duì)應(yīng)的控制信號(hào)
//axi讀通道讀數(shù)據(jù)
input [3:0] m_axi_rid , //讀ID tag
input [63:0] m_axi_rdata , //讀數(shù)據(jù)
input [1:0] m_axi_rresp , //讀響應(yīng),表明讀傳輸?shù)臓顟B(tài)
input m_axi_rlast , //表明讀突發(fā)的最后一次傳輸
input m_axi_rvalid , //表明此通道信號(hào)有效
output reg m_axi_rready //表明主機(jī)能夠接收讀數(shù)據(jù)和響應(yīng)信息
);
//
localparam [2:0] R_IDLER = 3'b001 ;
localparam [2:0] R_WAIT = 3'b011 ;
localparam [2:0] R_BURST = 3'b010 ;
localparam [2:0] R_END = 3'b110 ;
parameter ARID = 0 ;
parameter RD_LEN = 1 ;
//
reg [2:0] state , next_state ;
reg rvalid_over ;
//
assign m_axi_arid = ARID[3:0] ;//地址id
assign m_axi_arlen = RD_LEN-32'd1 ;//突發(fā)長(zhǎng)度
assign m_axi_arsize = 3'b011 ;//表示AXI總線每個(gè)數(shù)據(jù)寬度是8字節(jié),64位
assign m_axi_arburst = 2'b01 ;//地址遞增方式傳輸
assign m_axi_arlock = 1'b0 ;
assign m_axi_arcache = 4'b0010 ;
assign m_axi_arprot = 3'b000 ;
assign m_axi_arqos = 4'b0000 ;
assign read_data = m_axi_rvalid ;
assign read_done = m_axi_rlast ;
//axi讀狀態(tài)機(jī)
always @(*) begin
state = next_state ;
end
//
always @(posedge clk or negedge resetn) begin
if(!resetn) begin
rvalid_over <=0 ;
end
else if(state==R_IDLER) begin
rvalid_over <=0 ;
end
else if(m_axi_rvalid)begin
rvalid_over <= 1 ;
end
end
always @(posedge clk or negedge resetn) begin
if(!resetn)
next_state <= R_IDLER;
else case(state)
R_IDLER : if(enable_read) next_state <= R_WAIT ;else next_state<=R_IDLER ;
R_WAIT : if(m_axi_arready) next_state<=R_BURST ;else next_state<=R_WAIT ;
R_BURST : if(m_axi_rlast) next_state<=R_END ;else next_state <= R_BURST ;
R_END : if(rvalid_over) next_state<=R_IDLER;else next_state<=R_END ;
default : next_state<=R_IDLER ;
endcase
end
//
always @(*) begin
case(state)
R_IDLER : begin
m_axi_araddr = 0 ;
m_axi_arvalid = 0 ;
m_axi_rready = 0 ;
r_data = 0 ;
end
R_WAIT : begin
m_axi_araddr = r_addr ;
m_axi_arvalid = 1 ;
m_axi_rready = 0 ;
r_data = 0 ;
end
R_BURST : begin
m_axi_araddr = 0 ;
m_axi_arvalid = 0 ;
m_axi_rready = 1 ;
r_data = m_axi_rdata ;
end
R_END : begin
m_axi_araddr = 0 ;
m_axi_arvalid = 0 ;
m_axi_rready = 1 ;
r_data = 0 ;
end
default : begin
m_axi_araddr = 0 ;
m_axi_arvalid = 0 ;
m_axi_rready = 0 ;
r_data = 0 ;
end
endcase
end
endmodule
原文鏈接:
https://tencentcloud.csdn.net/678a0c64edd0904849a660e1.html
-
FPGA
+關(guān)注
關(guān)注
1659文章
22368瀏覽量
633042 -
接口
+關(guān)注
關(guān)注
33文章
9491瀏覽量
156585 -
時(shí)序
+關(guān)注
關(guān)注
5文章
403瀏覽量
38699 -
AXI4總線
+關(guān)注
關(guān)注
0文章
9瀏覽量
1546
原文標(biāo)題:FPGA實(shí)現(xiàn)AXI4總線的讀寫(xiě)_如何寫(xiě)axi4邏輯
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
使用AXI4接口IP核進(jìn)行DDR讀寫(xiě)測(cè)試
NVMe IP之AXI4總線分析
請(qǐng)問(wèn)microblaze如何通過(guò)串口讀寫(xiě)FPGA內(nèi)部axi4總線上的寄存器?
看看在SpinalHDL中AXI4總線互聯(lián)IP的設(shè)計(jì)
深入AXI4總線一握手機(jī)制
深入 AXI4總線 (四):RAM 讀取實(shí)戰(zhàn)
AXI4 、 AXI4-Lite 、AXI4-Stream接口
使用AXI4總線實(shí)現(xiàn)視頻輸入輸出
FPGA AXI4協(xié)議學(xué)習(xí)筆記(二)
FPGA AXI4協(xié)議學(xué)習(xí)筆記(三)
Xilinx FPGA AXI4總線(一)介紹【AXI4】【AXI4-Lite】【AXI-Stream】
漫談AMBA總線-AXI4協(xié)議的基本介紹
FPGA實(shí)現(xiàn)AXI4總線的讀寫(xiě)
評(píng)論