国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【FPGA】 xilinx vivado中AXI4通信協(xié)議詳解

這篇具有很好參考價(jià)值的文章主要介紹了【FPGA】 xilinx vivado中AXI4通信協(xié)議詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一.什么是AXI通信協(xié)議

AXI是ARM 1996年提出的微控制器總線家族AMBA中的一部分。AXI的第一個(gè)版本出現(xiàn)在AMBA3.0,發(fā)布于2003年。當(dāng)前的最新的版本發(fā)布于2010年。AXI 4總線和別的總線一樣,都用來(lái)傳輸bits信息 (包含了數(shù)據(jù)或者地址) 。AXI4總線有三種類型,分別是AXI4、AXI4-Lite、AXI4-Stream
AXI4:主要面向高性能地址映射通信的需求,支持突發(fā)傳輸;
AXI4-Lite:是一個(gè)簡(jiǎn)單地吞吐量地址映射性通信總線,不支持突發(fā)傳輸;
AXI4-Stream:不包含地址,面向高速流數(shù)據(jù)傳輸;
AXI4 是一種高性能memory-mapped總線,分為主、從兩端,兩者間可以連續(xù)的進(jìn)行通信。AXI4及AXI4Lite有地址,AX14能夠?qū)崿F(xiàn)burst傳輸,可以在一個(gè)地址后傳輸多個(gè)數(shù)據(jù),最多可以達(dá)256 字節(jié)。AXI4-Lite不支持burst傳輸。AXI4-Stream 只有一個(gè)通道,不需要地址,可以burst 傳輸無(wú)限的數(shù)據(jù)。假設(shè)有master A,和 slave B,A與B通過(guò)AXI4或者AXI4Lite連接通訊,A可以把B這個(gè)外設(shè)看作A上的某個(gè)地址。當(dāng)A向B傳輸數(shù)據(jù)時(shí),就等同于A向這個(gè)地址傳數(shù)。
AXI4 和 AXI4-Lite接口包含5個(gè)不同的通道:兩個(gè)讀通道和三個(gè)寫通道。
兩個(gè)讀通道:讀地址通道(read addresschannel)、讀數(shù)據(jù)通道(read data channel):
xilinx的axi,FPGA與信號(hào),fpga開(kāi)發(fā)
三個(gè)寫通道: 寫地址通道(write addresschannel)、寫數(shù)據(jù)通道(write data channel)、寫響應(yīng)通道(write response channel);

xilinx的axi,FPGA與信號(hào),fpga開(kāi)發(fā)
相比于 AXI4,AXI4-Stream 不涉及地址。AXI4-Stream傳輸?shù)臄?shù)據(jù)流包含三種類型: data type、position type、 null type 。data type是最有意義的數(shù)據(jù); position type作為占位符使用,可以用來(lái)表征date type 的相對(duì)位置,null type不包含任何有用的信息。
數(shù)據(jù)流的結(jié)構(gòu)可以有很多種,例如: 可以只傳數(shù)據(jù),也即都是data type,不包含position type和null type; 也可以將data type 和 null type 混著傳輸;還可以將position type 和 data type混著傳輸。當(dāng)然,三者混著傳輸也沒(méi)有問(wèn)題。

二.信號(hào)描述

AXI與AXI-lite信號(hào)描述如下所示,由于AXI-lite不支持突發(fā),所以與突發(fā)相關(guān)的管教都不具備。

//全局信號(hào)
		.M_AXI_ACLK(m00_axi_aclk),//時(shí)鐘
		.M_AXI_ARESETN(m00_axi_aresetn),//全局復(fù)位
		//寫地址通道信號(hào)
		.M_AXI_AWID(m00_axi_awid),//AXI4-LITE不支持 寫地址ID。這個(gè)信號(hào)用于寫地址信號(hào)組的標(biāo)記,用來(lái)標(biāo)識(shí)數(shù)據(jù)傳輸順序。詳見(jiàn)協(xié)議定義。
		.M_AXI_AWADDR(m00_axi_awaddr),//寫地址。寫地址給出突發(fā)數(shù)據(jù)傳輸?shù)牡谝粋€(gè)傳輸?shù)刂贰?/span>
		.M_AXI_AWLEN(m00_axi_awlen),//AXI4-LITE不支持 突發(fā)長(zhǎng)度。給出突發(fā)傳輸中準(zhǔn)確的傳輸個(gè)數(shù)。支持INCR和WRAP傳輸模式。(長(zhǎng)度)突發(fā)長(zhǎng)度=awlen+1
		.M_AXI_AWSIZE(m00_axi_awsize),//AXI4-LITE不支持 突發(fā)大小。這個(gè)信號(hào)用于確定突發(fā)傳輸中每個(gè)傳輸?shù)拇笮?。(寬度)總線位寬=2^size Betyes
		.M_AXI_AWBURST(m00_axi_awburst),//AXI4-LITE不支持 突發(fā)類型。該信息與突發(fā)大小信息一起,表示在突發(fā)過(guò)程中,地址如何應(yīng)用于每個(gè)傳輸。支持INCR和WRAP傳輸模式。
		.M_AXI_AWLOCK(m00_axi_awlock),//AXI4-LITE不支持 鎖類型。該信號(hào)提供了關(guān)于傳輸原子特性的額外信息(普通或互斥訪問(wèn))。AXI3支持,AXI4不支持
		.M_AXI_AWCACHE(m00_axi_awcache),//緩存類型,建議值為0011。
		.M_AXI_AWPROT(m00_axi_awprot),//保護(hù)類型,訪問(wèn)權(quán)限,建議值為000。
		.M_AXI_AWQOS(m00_axi_awqos),//QoS標(biāo)識(shí)符,xilinx AXI4不支持
		.M_AXI_AWUSER(m00_axi_awuser),//xilinx AXI4不支持
		.M_AXI_AWVALID(m00_axi_awvalid),//寫地址有效信號(hào)。為高指示地址有效。
		.M_AXI_AWREADY(m00_axi_awready),//寫地址準(zhǔn)備信號(hào)。為高表示從設(shè)備空閑,準(zhǔn)備接收地址;為低表示從設(shè)備忙。
		//寫數(shù)據(jù)通道信號(hào)
		.M_AXI_WDATA(m00_axi_wdata),//寫數(shù)據(jù),AXI-LITE僅支持32bit,AXI支持32bit-1024bit
		.M_AXI_WSTRB(m00_axi_wstrb),//寫字節(jié)選通,用于表示更新存儲(chǔ)器的字節(jié)通道,對(duì)于數(shù)據(jù)總線的每8位數(shù)據(jù)有一位寫選通信號(hào)
		.M_AXI_WLAST(m00_axi_wlast),//AXI-LITE不支持 寫最后一個(gè)數(shù)據(jù)指示信號(hào)。表示突發(fā)傳輸中的最后一個(gè)數(shù)據(jù)。
		.M_AXI_WUSER(m00_axi_wuser),//xilinx AXI4不支持。
		.M_AXI_WVALID(m00_axi_wvalid),//寫有效。為高指示數(shù)據(jù)有效。
		.M_AXI_WREADY(m00_axi_wready),//寫準(zhǔn)備。為高表示從設(shè)備空閑,準(zhǔn)備接收數(shù)據(jù);為低表示從設(shè)備忙。
		//寫響應(yīng)通道
		.M_AXI_BID(m00_axi_bid),//AXI-LITE不支持 響應(yīng)ID。寫響應(yīng)識(shí)別標(biāo)記,BID值必須匹配AWID值。
		.M_AXI_BRESP(m00_axi_bresp),//寫響應(yīng)。該信號(hào)表示寫狀態(tài),0時(shí)候表示沒(méi)有錯(cuò)誤,
		.M_AXI_BUSER(m00_axi_buser),//xilinx AXI4不支持。
		.M_AXI_BVALID(m00_axi_bvalid),//寫響應(yīng)有效。為高指示響應(yīng)數(shù)據(jù)有效
		.M_AXI_BREADY(m00_axi_bready),//寫響應(yīng)準(zhǔn)備。為高表示主設(shè)備空閑,準(zhǔn)備接收寫響應(yīng);為低表示主設(shè)備忙。
		//讀地址通道
		.M_AXI_ARID(m00_axi_arid),//AXI-LITE不支持 讀地址ID。這個(gè)信號(hào)用于讀地址信號(hào)組的標(biāo)記。
		.M_AXI_ARADDR(m00_axi_araddr),//讀地址。讀地址給出突發(fā)數(shù)據(jù)傳輸?shù)牡谝粋€(gè)傳輸?shù)刂贰?/span>
		.M_AXI_ARLEN(m00_axi_arlen),//AXI-LITE不支持 突發(fā)長(zhǎng)度。給出突發(fā)傳輸中準(zhǔn)確的傳輸個(gè)數(shù)。支持INCR和WRAP傳輸模式。
		.M_AXI_ARSIZE(m00_axi_arsize),//AXI-LITE不支持 突發(fā)大小。這個(gè)信號(hào)用于確定突發(fā)傳輸中每個(gè)傳輸?shù)拇笮 ?/span>
		.M_AXI_ARBURST(m00_axi_arburst),//AXI-LITE不支持 突發(fā)類型。該信息與突發(fā)大小信息一起,表示在突發(fā)過(guò)程中,地址如何應(yīng)用于每個(gè)傳輸。支持INCR和WRAP傳輸模式
		.M_AXI_ARLOCK(m00_axi_arlock),//鎖類型。該信號(hào)提供了關(guān)于傳輸原子特性的額外信息(普通或互斥訪問(wèn))
		.M_AXI_ARCACHE(m00_axi_arcache),//緩存類型,建議值為0011。
		.M_AXI_ARPROT(m00_axi_arprot),//保護(hù)類型,建議值為000。
		.M_AXI_ARQOS(m00_axi_arqos),//QoS標(biāo)識(shí)符,xilinx AXI4不支持。
		.M_AXI_ARUSER(m00_axi_aruser),//xilinx AXI4不支持
		.M_AXI_ARVALID(m00_axi_arvalid),// 	讀地址有效信號(hào)。為高指示地址有效
		.M_AXI_ARREADY(m00_axi_arready),//讀地址準(zhǔn)備信號(hào)。為高表示從設(shè)備空閑,準(zhǔn)備接收地址;為低表示從設(shè)備忙
        //讀數(shù)據(jù)通道		
		.M_AXI_RID(m00_axi_rid),//AXI-LITE不支持 讀ID標(biāo)記,該信號(hào)是讀數(shù)據(jù)信號(hào)組標(biāo)記,由從設(shè)備產(chǎn)生RID,RID必須和讀交易中的ARID匹配
		.M_AXI_RDATA(m00_axi_rdata),//讀數(shù)據(jù)。32位到1024位寬 AXI-LITE只支持32位寬
		.M_AXI_RRESP(m00_axi_rresp),//讀響應(yīng)。該信號(hào)表示讀狀態(tài),可允許相應(yīng)的表示為
		.M_AXI_RLAST(m00_axi_rlast),//AXI-LITE不支持 讀最后一個(gè)數(shù)據(jù)指示信號(hào)。表示突發(fā)傳輸中的最后一個(gè)數(shù)據(jù)
		.M_AXI_RUSER(m00_axi_ruser),//xilinx AXI4不支持。
		.M_AXI_RVALID(m00_axi_rvalid),//讀有效。為高指示數(shù)據(jù)有效
		.M_AXI_RREADY(m00_axi_rready)//讀準(zhǔn)備。為高表示主設(shè)備空閑,準(zhǔn)備接收數(shù)據(jù);為低表示主設(shè)備忙。

AXI-stream信號(hào)描述如下所示,

.M_AXIS_ACLK(m00_axis_aclk),//時(shí)鐘
		.M_AXIS_ARESETN(m00_axis_aresetn),//復(fù)位
		.M_AXIS_TVALID(m00_axis_tvalid),//Stream讀寫數(shù)據(jù)有效。為高指示數(shù)據(jù)有效。
		.M_AXIS_TDATA(m00_axis_tdata),//Stream讀寫數(shù)據(jù),8到4096位寬。
		.M_AXIS_TSTRB(m00_axis_tstrb),//字節(jié)選通信號(hào)。用于表示更新存儲(chǔ)器的字節(jié)通道,對(duì)于數(shù)據(jù)總線的每8位數(shù)據(jù)有一位選通信號(hào)。
		.M_AXIS_TLAST(m00_axis_tlast),//表明包的邊界,1代表最后數(shù)據(jù)
		.M_AXIS_TREADY(m00_axis_tready)//Stream讀寫讀準(zhǔn)備。為高表示對(duì)端設(shè)備空閑,準(zhǔn)備接收數(shù)據(jù);為低表示對(duì)端設(shè)備忙。

三.工作時(shí)序圖

AXI4協(xié)議主從設(shè)備間的讀操作使用獨(dú)立的讀地址和讀數(shù)據(jù)通道,只需要一個(gè)地址就可以執(zhí)行最大為256的突發(fā)長(zhǎng)度的讀操作。
讀時(shí)序如下所示。
xilinx的axi,FPGA與信號(hào),fpga開(kāi)發(fā)

(1)首先Master判斷arready的信號(hào)是否為高電平,若該信號(hào)為高電平時(shí),代表slave已經(jīng)準(zhǔn)備好接收新的地址信息,否則Master不能給Slave發(fā)送地址信息。
(2)當(dāng)判斷完成后,Master給Slave發(fā)送地址信息,即發(fā)送araddr;在進(jìn)行地址發(fā)送時(shí),arvalid為高電平,arvalid為高電平,發(fā)送araddr。
(3)當(dāng)?shù)刂钒l(fā)送結(jié)束之后,slave就會(huì)通過(guò)read_data通道返回?cái)?shù)據(jù),master必須在rready和rvalid信號(hào)同時(shí)為高時(shí),將數(shù)據(jù)讀取,否則不能讀取數(shù)據(jù);當(dāng)最后一個(gè)數(shù)據(jù)發(fā)送時(shí),slave會(huì)將rlast信號(hào)同時(shí)拉高,代表最后一個(gè)數(shù)據(jù)發(fā)送完成。

寫時(shí)序如下所示。
xilinx的axi,FPGA與信號(hào),fpga開(kāi)發(fā)
AXI寫事務(wù)是在3個(gè)寫通道上完成多次數(shù)據(jù)傳輸(transfers)
(1)MASTER將寫地址及相應(yīng)的控制信息通過(guò)寫地址通道發(fā)送給SLAVE
(2)MASTER將需要寫入該地址的數(shù)據(jù)通過(guò)寫輸入通道發(fā)送給SLAVE
(3)SLAVE將寫結(jié)果通過(guò)寫反饋通道發(fā)送給MASTER,表明寫入是否成功

四.時(shí)序代碼實(shí)現(xiàn)

讀事務(wù)握手信號(hào)的關(guān)系:
xilinx的axi,FPGA與信號(hào),fpga開(kāi)發(fā)
?單箭頭指向 可以在前一個(gè)信號(hào)(本信號(hào))斷言之前或之后斷言的信號(hào)(指向的信號(hào))。
?雙箭頭指向 只有在前一個(gè)信號(hào)(本信號(hào))斷言之后才可以斷言的信號(hào)(指向的信號(hào))。
所以slave 在斷言讀取的數(shù)據(jù)有效信號(hào)RVALID之前,必須等到ARVALID與ARREADY斷言后。

//----------------------------
	//Read Address Channel
	//----------------------------
	  always @(posedge M_AXI_ACLK)                                 
	  begin                                                              
	                                                                     
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 )                                         
	      begin                                                          
	        axi_arvalid <= 1'b0;                                         
	      end                                                            
	    // If previously not valid , start next transaction              
	    else if (~axi_arvalid && start_single_burst_read)                
	      begin                                                          
	        axi_arvalid <= 1'b1;                                         
	      end                                                            
	    else if (M_AXI_ARREADY && axi_arvalid)                           
	      begin                                                          
	        axi_arvalid <= 1'b0;                                         
	      end                                                            
	    else                                                             
	      axi_arvalid <= axi_arvalid;                                    
	  end                                                                
	                                                                     
	                                                                     
	// Next address after ARREADY indicates previous address acceptance  
	  always @(posedge M_AXI_ACLK)                                       
	  begin                                                              
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1)                                          
	      begin                                                          
	        axi_araddr <= 'b0;                                           
	      end                                                            
	    else if (M_AXI_ARREADY && axi_arvalid)                           
	      begin                                                          
	        axi_araddr <= axi_araddr + burst_size_bytes;                 
	      end                                                            
	    else                                                             
	      axi_araddr <= axi_araddr;                                      
	  end                                                                


	//--------------------------------
	//Read Data (and Response) Channel
	//--------------------------------

	 // Forward movement occurs when the channel is valid and ready   
	  assign rnext = M_AXI_RVALID && axi_rready;                            
	                                                                        
	                                                                        
	// Burst length counter. Uses extra counter register bit to indicate    
	// terminal count to reduce decode logic                                
	  always @(posedge M_AXI_ACLK)                                          
	  begin                                                                 
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 || start_single_burst_read)                  
	      begin                                                             
	        read_index <= 0;                                                
	      end                                                               
	    else if (rnext && (read_index != C_M_AXI_BURST_LEN-1))              
	      begin                                                             
	        read_index <= read_index + 1;                                   
	      end                                                               
	    else                                                                
	      read_index <= read_index;                                         
	  end                                                                   
	                                                                        
	                                                                        
                                                                  
	  always @(posedge M_AXI_ACLK)                                          
	  begin                                                                 
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 )                  
	      begin                                                             
	        axi_rready <= 1'b0;                                             
	      end                                                               
	    // accept/acknowledge rdata/rresp with axi_rready by the master     
	    // when M_AXI_RVALID is asserted by slave                           
	    else if (M_AXI_RVALID)                       
	      begin                                      
	         if (M_AXI_RLAST && axi_rready)          
	          begin                                  
	            axi_rready <= 1'b0;                  
	          end                                    
	         else                                    
	           begin                                 
	             axi_rready <= 1'b1;                 
	           end                                   
	      end                                        
	    // retain the previous value                 
	  end 

寫事務(wù)握手信號(hào)的關(guān)系:
xilinx的axi,FPGA與信號(hào),fpga開(kāi)發(fā)
?單箭頭指向 可以在前一個(gè)信號(hào)(本信號(hào))斷言之前或之后斷言的信號(hào)(指向的信號(hào))。
?雙箭頭指向 只有在前一個(gè)信號(hào)(本信號(hào))斷言之后才可以斷言的信號(hào)(指向的信號(hào))。

//--------------------
	//Write Data Channel
	//--------------------
	  assign wnext = M_AXI_WREADY & axi_wvalid;                                   
	                                                                                    
	// WVALID logic, similar to the axi_awvalid always block above                      
	  always @(posedge M_AXI_ACLK)                                                      
	  begin                                                                             
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 )                                                        
	      begin                                                                         
	        axi_wvalid <= 1'b0;                                                         
	      end                                                                           
	    // If previously not valid, start next transaction                              
	    else if (~axi_wvalid && start_single_burst_write)                               
	      begin                                                                         
	        axi_wvalid <= 1'b1;                                                         
	      end                                                                           
	    /* If WREADY and too many writes, throttle WVALID                               
	    Once asserted, VALIDs cannot be deasserted, so WVALID                           
	    must wait until burst is complete with WLAST */                                 
	    else if (wnext && axi_wlast)                                                    
	      axi_wvalid <= 1'b0;                                                           
	    else                                                                            
	      axi_wvalid <= axi_wvalid;                                                     
	  end                                                                               
	                                                                                    
	                                                                                    
	//WLAST generation on the MSB of a counter underflow                                
	// WVALID logic, similar to the axi_awvalid always block above                      
	  always @(posedge M_AXI_ACLK)                                                      
	  begin                                                                             
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 )                                                        
	      begin                                                                         
	        axi_wlast <= 1'b0;                                                          
	      end                                                                           

	    else if (((write_index == C_M_AXI_BURST_LEN-2 && C_M_AXI_BURST_LEN >= 2) && wnext) || (C_M_AXI_BURST_LEN == 1 ))
	      begin                                                                         
	        axi_wlast <= 1'b1;                                                          
	      end                                                                           
                               
	    else if (wnext)                                                                 
	      axi_wlast <= 1'b0;                                                            
	    else if (axi_wlast && C_M_AXI_BURST_LEN == 1)                                   
	      axi_wlast <= 1'b0;                                                            
	    else                                                                            
	      axi_wlast <= axi_wlast;                                                       
	  end                                                                               
	                                                                                    
	                                                                                                                                    
	  always @(posedge M_AXI_ACLK)                                                      
	  begin                                                                             
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 || start_single_burst_write == 1'b1)    
	      begin                                                                         
	        write_index <= 0;                                                           
	      end                                                                           
	    else if (wnext && (write_index != C_M_AXI_BURST_LEN-1))                         
	      begin                                                                         
	        write_index <= write_index + 1;                                             
	      end                                                                           
	    else                                                                            
	      write_index <= write_index;                                                   
	  end                                                                               
	                                                                                    
	                                                                                    
	/* Write Data Generator                                                             
	 Data pattern is only a simple incrementing count from 0 for each burst  */         
	  always @(posedge M_AXI_ACLK)                                                      
	  begin                                                                             
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1)                                                         
	      axi_wdata <= 'b1;                                                             
	    //else if (wnext && axi_wlast)                                                  
	    //  axi_wdata <= 'b0;                                                           
	    else if (wnext)                                                                 
	      axi_wdata <= axi_wdata + 1;                                                   
	    else                                                                            
	      axi_wdata <= axi_wdata;                                                       
	    end                                                                             


	//----------------------------
	//Write Response (B) Channel
	//----------------------------

	  always @(posedge M_AXI_ACLK)                                     
	  begin                                                                 
	    if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 )                                            
	      begin                                                             
	        axi_bready <= 1'b0;                                             
	      end                                                               
	    // accept/acknowledge bresp with axi_bready by the master           
	    // when M_AXI_BVALID is asserted by slave                           
	    else if (M_AXI_BVALID && ~axi_bready)                               
	      begin                                                             
	        axi_bready <= 1'b1;                                             
	      end                                                               
	    // deassert after one clock cycle                                   
	    else if (axi_bready)                                                
	      begin                                                             
	        axi_bready <= 1'b0;                                             
	      end                                                               
	    // retain the previous value                                        
	    else                                                                
	      axi_bready <= axi_bready;                                         
	  end                                                                   
	                                                                        
	                                                                        
	//Flag any write response errors                                        
	  assign write_resp_error = axi_bready & M_AXI_BVALID & M_AXI_BRESP[1];

五.總結(jié)

vivado中許多IP核都采用AXI通信協(xié)議,理解AXI協(xié)議有助于后續(xù)開(kāi)發(fā)工作,詳細(xì)信息推薦官方文件ug1037以及ihi0022c文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-861067.html

到了這里,關(guān)于【FPGA】 xilinx vivado中AXI4通信協(xié)議詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 紫光FPGA DDR3 IP使用和注意事項(xiàng)(axi4協(xié)議)

    紫光FPGA DDR3 IP使用和注意事項(xiàng)(axi4協(xié)議)

    紫光DDR3 IP使用 對(duì)于紫光ddr3 IP核的使用需要注意事情。 閱讀ddr ip手冊(cè): 1、注意:對(duì)于寫地址通道,axi_awvalid要一直拉高,axi_awready才會(huì)拉高。使用的芯片型號(hào)時(shí)PG2L100H-6FBG676,不同的型號(hào)IP核接口和axi的握手協(xié)議也不一樣(一定要注意),這點(diǎn)要注意,這也給我挖了一個(gè)很大的

    2024年04月12日
    瀏覽(27)
  • DDR3 控制器 MIG IP 詳解完整版 (AXI4&VIVADO&Verilog)

    DDR3 控制器 MIG IP 詳解完整版 (AXI4&VIVADO&Verilog)

    DDR系列文章分類地址: (1)DDR3 基礎(chǔ)知識(shí)分享 (2)DDR3 控制器 MIG IP 詳解完整版 (AXI4VivadoVerilog) (3)DDR3 控制器 MIG IP 詳解完整版 (nativeVivadoVerilog) (4)基于 DDR3 的串口傳圖幀緩存系統(tǒng)設(shè)計(jì)實(shí)現(xiàn) (5)基于 DDR3 的native接口串口局部傳圖緩存系統(tǒng)設(shè)計(jì)實(shí)現(xiàn) (6)基于 DDR3 的

    2024年02月11日
    瀏覽(29)
  • FPGA----UltraScale+系列的PS側(cè)與PL側(cè)通過(guò)AXI-HP交互(全網(wǎng)唯一最詳)附帶AXI4協(xié)議校驗(yàn)IP使用方法

    FPGA----UltraScale+系列的PS側(cè)與PL側(cè)通過(guò)AXI-HP交互(全網(wǎng)唯一最詳)附帶AXI4協(xié)議校驗(yàn)IP使用方法

    1、之前寫過(guò)一篇關(guān)于ZYNQ系列通用的PS側(cè)與PL側(cè)通過(guò)AXI-HP通道的文檔,下面是鏈接。 FPGA----ZCU106基于axi-hp通道的pl與ps數(shù)據(jù)交互(全網(wǎng)唯一最詳)_zcu106調(diào)試_發(fā)光的沙子的博客-CSDN博客 大家好,今天給大家?guī)?lái)的內(nèi)容是,基于AXI4協(xié)議的采用AXI-HP通道完成PL側(cè)數(shù)據(jù)發(fā)送至PS側(cè)(PS側(cè)數(shù)

    2024年02月13日
    瀏覽(28)
  • AXI4協(xié)議

    AXI4協(xié)議

    在下面的圖中,單箭頭表示非必要條件,雙箭頭表示必要條件 1)讀傳輸依賴關(guān)系 上圖表示必RVALID必須等到ARVALID和ARREADY握手以后才能拉高,開(kāi)始數(shù)據(jù)傳輸。 2)寫傳輸依賴關(guān)系 從機(jī)必須等待主機(jī)的wlast拉高以后,才能將bvalid拉高,但wlast只保持一個(gè)周期。 AxSIZE[2:0] Bytes in tr

    2024年02月10日
    瀏覽(26)
  • FPGA中AXI協(xié)議的理解及接口信號(hào)的中文描述

    FPGA中AXI協(xié)議的理解及接口信號(hào)的中文描述

    AXI簡(jiǎn)介 AXI4 所采用的是一種 READY , VALID 握手通信機(jī)制,即主從模塊進(jìn)行數(shù)據(jù)通信前, 先根據(jù)操作對(duì)各所用到的數(shù)據(jù)、地址通道進(jìn)行握手。主要操作包括傳輸發(fā)送者 A 等到傳輸接受者 B 的 READY 信號(hào)后, A 將數(shù)據(jù)與 VALID 信號(hào)同時(shí)發(fā)送給 B ,這是一種典型的握手機(jī)制。 AXI 總線支

    2024年02月01日
    瀏覽(20)
  • AXI協(xié)議詳解(7)-響應(yīng)信號(hào)

    AXI協(xié)議詳解(7)-響應(yīng)信號(hào)

    本章描述了 AXI 讀寫事務(wù)中的四個(gè)從響應(yīng)。 它包含以下部分: 關(guān)于響應(yīng)信令 響應(yīng)類型 AXI 協(xié)議允許讀取和寫入事務(wù)的響應(yīng)信號(hào)。 對(duì)于讀取事務(wù),來(lái)自Slave的響應(yīng)信息與讀取數(shù)據(jù)本身一起傳遞,但是對(duì)于寫入,響應(yīng)信息沿寫入響應(yīng)通道傳送。 AXI 協(xié)議響應(yīng)為: OKAY EXOKAY SLVERR D

    2024年02月16日
    瀏覽(22)
  • FPGA - AXI4_Lite(實(shí)現(xiàn)用戶端與axi4_lite之間的交互邏輯)

    FPGA - AXI4_Lite(實(shí)現(xiàn)用戶端與axi4_lite之間的交互邏輯)

    在之前的博客中對(duì)AXI4總線進(jìn)行了介紹(FPGA-AXI4接口協(xié)議概述),在這篇博客中, 實(shí)現(xiàn)用戶端與axi4_lite之間的交互邏輯。 對(duì)AXI4總線簡(jiǎn)單介紹(具體可見(jiàn)FPGA-AXI4接口協(xié)議概述) ①AXI4是ARM公司提出的是一種高性能、高帶寬、低延遲的片內(nèi)總線 ②主要描述了主設(shè)備和從設(shè)備之間的

    2024年04月11日
    瀏覽(80)
  • 【接口協(xié)議】FPGA AXI接口協(xié)議詳解

    【接口協(xié)議】FPGA AXI接口協(xié)議詳解

    AXI是一種高頻率,高帶寬,低延遲的總線協(xié)議,是一種突發(fā)傳輸協(xié)議,即相鄰存儲(chǔ)器連續(xù)進(jìn)行數(shù)據(jù)傳輸。是由ARM公司推出的,后被用于FPGA。主要分為三種類型:AXI_FULL(全功能版),AXI_LITE(簡(jiǎn)化版),AXI_STREAM(面向數(shù)據(jù)流的)。本文詳細(xì)說(shuō)明AXI_FULL類型,后面兩種類型是FULL型的簡(jiǎn)

    2024年02月20日
    瀏覽(27)
  • 【FPGA】AXI4-Lite總線讀寫B(tài)RAM

    【FPGA】AXI4-Lite總線讀寫B(tài)RAM

    AXI協(xié)議基礎(chǔ)知識(shí) 。這篇博客比較詳細(xì)地介紹了AXI總線,并且羅列了所有的通道和端口,寫代碼的時(shí)候可以方便地進(jìn)行查表。 AXI總線,AXI_BRAM讀寫仿真測(cè)試 。 這篇文章為代碼的書寫提供大致的思路,比如狀態(tài)機(jī)和時(shí)序的控制問(wèn)題,可以參考。 雙向握手機(jī)制的實(shí)質(zhì)是: 數(shù)據(jù)接

    2024年02月15日
    瀏覽(17)
  • 詳解AXI4-Full接口(1)--什么是AXI4-Full接口?

    目錄 1、什么是AXI4-Full? 2、通道(Channel) 2.1、AXI 讀取傳輸事務(wù) 2.2、AXI 寫入傳輸事務(wù)

    2024年02月09日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包