XILINX原語之——xpm_fifo_async(異步FIFO靈活設置位寬、深度)

目錄

一、"fwft"模式(First-Word-Fall-Through read mode)

1、寫FIFO

2、讀FIFO

二、"std"模式(standard read mode)

1、寫FIFO

2、讀FIFO


調用方式和xpm_fifo_sync基本一致:

XILINX原語之——xpm_fifo_sync(靈活設置位寬、深度)_xpm fifo-CSDN博客

將引腳設置成和調用FIFO IP一致,例化后:

`timescale 1ns / 1psmodule ASYNC_FIFO#(parameter 				READ_MODE	= 	"fwft",	//"std"- standard read mode;"fwft"- First-Word-Fall-Through read modeparameter 	integer 	DATA_WIDTH	= 	32,		//1 to 4096parameter 	integer 	DATA_DEPTH	= 	2048,	//16 to 4194304parameter 	integer 	READ_LATENCY= 	0		//0 to 100  "fwft":0; "std":1 
)(input 	wire 							rst           ,input 	wire 							wr_clk        ,input 	wire 							rd_clk        ,input 	wire [DATA_WIDTH-1  : 0] 		din           ,input 	wire 							wr_en         ,input 	wire 							rd_en         ,output 	wire [DATA_WIDTH-1  : 0] 		dout          ,output 	wire 							full          ,output 	wire 							empty         ,output 	wire [$clog2(DATA_DEPTH) : 0] 	rd_data_count ,output 	wire [$clog2(DATA_DEPTH) : 0] 	wr_data_count );wire		sync_rst;xpm_cdc_sync_rst #(.DEST_SYNC_FF	(3			),   .INIT			(1			),           						.INIT_SYNC_FF	(0			),   .SIM_ASSERT_CHK	(0			)  )u_sync_rst(.dest_rst		(sync_rst	),					.dest_clk		(wr_clk		),.src_rst		(rst		)   );xpm_fifo_async #(.CDC_SYNC_STAGES(2),       		// DECIMAL  2 to 8.DOUT_RESET_VALUE("0"),    		// String.ECC_MODE("no_ecc"),       		// String.FIFO_MEMORY_TYPE("block"), 	// String	"auto", "block","distributed".FIFO_READ_LATENCY(READ_LATENCY),// DECIMAL	0 to 10.FIFO_WRITE_DEPTH(DATA_DEPTH),  // DECIMAL	16 to 4194304.FULL_RESET_VALUE(0),      		// DECIMAL.PROG_EMPTY_THRESH(10),    		// DECIMAL.PROG_FULL_THRESH(10),     		// DECIMAL.RD_DATA_COUNT_WIDTH($clog2(DATA_DEPTH)+1),   // DECIMAL	1 to 23.READ_DATA_WIDTH(DATA_WIDTH),   // DECIMAL	1 to 4096.READ_MODE(READ_MODE),         	// String	"std", "fwft".RELATED_CLOCKS(0),        		// DECIMAL.SIM_ASSERT_CHK(0),        		// DECIMAL; 0=disable simulation messages, 1=enable simulation messages.USE_ADV_FEATURES("0707"), 		// String.WAKEUP_TIME(0),           		// DECIMAL.WRITE_DATA_WIDTH(DATA_WIDTH),    // DECIMAL	1 to 4096.WR_DATA_COUNT_WIDTH($clog2(DATA_DEPTH)+1) // DECIMAL 1 to 23)u_xpm_fifo_async(// output  .almost_empty	(),  .almost_full	(),   .data_valid		(),       .dbiterr		(),      .dout			(dout		),         .empty			(empty		),      .full			(full		),        .overflow		(),  .prog_empty		(),      .prog_full		(),       .rd_data_count	(rd_data_count), .rd_rst_busy	(),    .sbiterr		(),        .underflow		(),     .wr_ack			(),        .wr_data_count	(wr_data_count), .wr_rst_busy	(),   // input  .din			(din		),               .injectdbiterr	(0), .injectsbiterr	(0), .rd_clk			(rd_clk		),          .rd_en			(rd_en		),        .rst			(sync_rst	),            .sleep			(0),       .wr_clk			(wr_clk		),     .wr_en			(wr_en		)           );endmodule

同樣使用IP生成一個FIFO進行仿真對比。

一、"fwft"模式(First-Word-Fall-Through read mode)

生成的FIFO IP同樣設置為fwft模式,仿真代碼如下:

`timescale 1ns / 1psmodule tb_async_fifo();parameter 				READ_MODE	= 	"fwft";//"std"- standard read mode;"fwft"- First-Word-Fall-Through read modeparameter 	integer 	DATA_WIDTH	= 	32;parameter 	integer 	DATA_DEPTH	= 	2048;reg 							rst           ;reg 							wr_clk        ;reg 							rd_clk        ;reg [DATA_WIDTH-1  : 0] 		din           ;reg 							wr_en         ;wire 							rd_en         ;wire [DATA_WIDTH-1  : 0] 		dout          ;wire 							full          ;wire 							empty         ;wire [$clog2(DATA_DEPTH) : 0] 	rd_data_count ;wire [$clog2(DATA_DEPTH) : 0] 	wr_data_count ;wire [31 : 0] 						dout_IP;wire 								full_IP;wire 								empty_IP;wire [11 : 0] 						rd_data_count_IP;	wire [11 : 0] 						wr_data_count_IP;	ASYNC_FIFO#(.READ_MODE				(READ_MODE),.DATA_WIDTH				(DATA_WIDTH),.DATA_DEPTH				(DATA_DEPTH),.READ_LATENCY			(0			))u_ascfifo(.rst  		  	(rst  		  ),       .wr_clk 	  	(wr_clk 	  ),     .rd_clk 	  	(rd_clk 	  ),     .din 	      	(din 	      ),    .wr_en   	  	(wr_en   	  ),    .rd_en        	(rd_en        ), .dout         	(dout         ), .full         	(full         ), .empty        	(empty        ), .rd_data_count	(rd_data_count), .wr_data_count	(wr_data_count));wire		sync_rst;xpm_cdc_sync_rst #(.DEST_SYNC_FF	(3			),   .INIT			(1			),           						.INIT_SYNC_FF	(0			),   .SIM_ASSERT_CHK	(0			)  )u_sync_rst(.dest_rst		(sync_rst	),					.dest_clk		(wr_clk		),.src_rst		(rst		)   );DCFIFO_32W_2048D u_IP_fifo (.rst		(sync_rst),                      // input wire rst.wr_clk	(wr_clk),                // input wire wr_clk.rd_clk	(rd_clk),                // input wire rd_clk.din		(din),                      // input wire [31 : 0] din.wr_en	(wr_en),                  // input wire wr_en.rd_en	(rd_en),                  // input wire rd_en.dout		(dout_IP),                    // output wire [31 : 0] dout.full		(full_IP),                    // output wire full.empty	(empty_IP),                  // output wire empty.rd_data_count(rd_data_count_IP),  // output wire [11 : 0] rd_data_count.wr_data_count(wr_data_count_IP)  // output wire [11 : 0] wr_data_count);initial beginwr_clk<=0;rd_clk<=0;rst<=1;
#2000rst<=0;
endalways #5 wr_clk<=!wr_clk;always #10 rd_clk<=!rd_clk;reg		[31:0]		cnt;always @(posedge wr_clk or posedge rst)beginif (rst) begincnt		<= 0;end else beginif(cnt>=10000)cnt<=0;elsecnt<=cnt+1;endendalways @(*)beginif (rst) beginwr_en		<= 0;end else beginif(cnt>200&&cnt<3000 && full==0)beginwr_en		<= 1;end elsewr_en		<= 0;endendalways @(posedge wr_clk or posedge rst)beginif (rst) begindin<=0;end else beginif(cnt>200&&cnt<3000 && full==0)begindin			<=din+1;endendendreg		rd_en_1;always @(posedge rd_clk or posedge rst)beginif (rst) beginrd_en_1		<= 0;end else beginif(cnt>3000 && empty==0)beginrd_en_1		<= 1;end elserd_en_1		<= 0;endendassign	rd_en=rd_en_1 && (empty==0);
endmodule

仿真波形如下:

1、寫FIFO

FIFO空信號(empty):調用XPM原語和使用IP核一致;

FIFO滿信號(full):調用XPM原語和使用IP核一致,都在寫入2048+1個數據后拉高;

FIFO計數信號(wr_data_count):調用XPM原語和使用IP核一致,計數延遲2個wr_clk周期。

2、讀FIFO

FIFO滿信號(full):調用XPM原語和使用IP核一致;

FIFO計數信號(rd_data_count):調用XPM原語和使用IP核一致,計數延遲2個rd_clk周期。

FIFO輸出信號(dout): 調用XPM原語和使用IP核一致,rd_en使能時輸出數據,無時鐘延遲。

FIFO空信號(empty):調用XPM原語和使用IP核一致,都在讀完數據后1個周期拉高;

二、"std"模式(standard read mode)

生成的FIFO IP同樣設置為STD模式,仿真代碼如下:

`timescale 1ns / 1psmodule tb_Async_fifo_std();parameter 				READ_MODE	= 	"std";//"std"- standard read mode;"fwft"- First-Word-Fall-Through read modeparameter 	integer 	DATA_WIDTH	= 	32;parameter 	integer 	DATA_DEPTH	= 	2048;reg 							rst           ;reg 							wr_clk        ;reg 							rd_clk        ;reg [DATA_WIDTH-1  : 0] 		din           ;reg 							wr_en         ;wire 							rd_en         ;wire [DATA_WIDTH-1  : 0] 		dout          ;wire 							full          ;wire 							empty         ;wire [$clog2(DATA_DEPTH) : 0] 	rd_data_count ;wire [$clog2(DATA_DEPTH) : 0] 	wr_data_count ;wire [31 : 0] 						dout_IP;wire 								full_IP;wire 								empty_IP;wire [10 : 0] 						rd_data_count_IP;	wire [10 : 0] 						wr_data_count_IP;	ASYNC_FIFO#(.READ_MODE				(READ_MODE),.DATA_WIDTH				(DATA_WIDTH),.DATA_DEPTH				(DATA_DEPTH),.READ_LATENCY			(1			))u_ascfifo(.rst  		  	(rst  		  ),       .wr_clk 	  	(wr_clk 	  ),     .rd_clk 	  	(rd_clk 	  ),     .din 	      	(din 	      ),    .wr_en   	  	(wr_en   	  ),    .rd_en        	(rd_en        ), .dout         	(dout         ), .full         	(full         ), .empty        	(empty        ), .rd_data_count	(rd_data_count), .wr_data_count	(wr_data_count));wire		sync_rst;xpm_cdc_sync_rst #(.DEST_SYNC_FF	(3			),   .INIT			(1			),           						.INIT_SYNC_FF	(0			),   .SIM_ASSERT_CHK	(0			)  )u_sync_rst(.dest_rst		(sync_rst	),					.dest_clk		(wr_clk		),.src_rst		(rst		)   );DCFIFO_32W_2048D_STD u_IP_fifo (.rst		(sync_rst),                      // input wire rst.wr_clk	(wr_clk),                // input wire wr_clk.rd_clk	(rd_clk),                // input wire rd_clk.din		(din),                      // input wire [31 : 0] din.wr_en	(wr_en),                  // input wire wr_en.rd_en	(rd_en),                  // input wire rd_en.dout		(dout_IP),                    // output wire [31 : 0] dout.full		(full_IP),                    // output wire full.empty	(empty_IP),                  // output wire empty.rd_data_count(rd_data_count_IP),  // output wire [11 : 0] rd_data_count.wr_data_count(wr_data_count_IP)  // output wire [11 : 0] wr_data_count);initial beginwr_clk<=0;rd_clk<=0;rst<=1;
#2000rst<=0;
endalways #5 wr_clk<=!wr_clk;always #10 rd_clk<=!rd_clk;reg		[31:0]		cnt;always @(posedge wr_clk or posedge rst)beginif (rst) begincnt		<= 0;end else beginif(cnt>=10000)cnt<=0;elsecnt<=cnt+1;endendalways @(*)beginif (rst) beginwr_en		<= 0;end else beginif(cnt>200&&cnt<3000 && full==0)beginwr_en		<= 1;end elsewr_en		<= 0;endendalways @(posedge wr_clk or posedge rst)beginif (rst) begindin<=0;end else beginif(cnt>200&&cnt<3000 && full==0)begindin			<=din+1;endendendreg		rd_en_1;always @(posedge rd_clk or posedge rst)beginif (rst) beginrd_en_1		<= 0;end else beginif(cnt>3000 && empty==0)beginrd_en_1		<= 1;end elserd_en_1		<= 0;endendassign	rd_en=rd_en_1 && (empty==0);endmodule

1、寫FIFO

FIFO空信號(empty):調用XPM原語和使用IP核一致;

FIFO計數信號(wr_data_count):調用XPM原語和使用IP核一致,計數延遲2個周期。

FIFO滿信號(full):調用XPM原語和使用IP核一致,都在寫入2048-1個數據后拉高;

2、讀FIFO

FIFO滿信號(full):調用XPM原語和使用IP核一致,都在讀取數據后1個時鐘周期后拉低;

FIFO計數信號(rd_data_count):調用XPM原語和使用IP核一致,計數延遲2個rd_clk周期。

FIFO輸出信號(dout): 調用XPM原語和使用IP核一致,rd_en使能后下一個時鐘周期輸出數據,1個時鐘周期延遲。

FIFO空信號(empty):調用XPM原語和使用IP核一致,都在讀完2048-1個數據后拉高;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81890.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81890.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81890.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

系統學習算法:動態規劃(斐波那契+路徑問題)

題目一&#xff1a; 思路&#xff1a; 作為動態規劃的第一道題&#xff0c;這個題很有代表性且很簡單&#xff0c;適合入門 先理解題意&#xff0c;很簡單&#xff0c;就是斐波那契數列的加強版&#xff0c;從前兩個數變為前三個數 算法原理&#xff1a; 這五步可以說是所有…

《讓內容“活”起來:Flutter社交應用瀑布流布局的破界實踐》

用戶動態的展示方式如同舞臺的布景&#xff0c;直接影響著觀眾——用戶的體驗。而瀑布流布局&#xff0c;以其獨特的美感和高效的信息展示能力&#xff0c;成為眾多社交應用的心頭好。當我們滑動著Instagram、Pinterest&#xff0c;或是國內熱門的小紅書&#xff0c;那種內容如…

微機控制技術復習【一】

填空題&#xff1a; 簡答題&#xff1a; 1、什么是計算機控制系統?其典型形式有哪些? 2、給出 DDC &#xff08;直接數字控制&#xff09;控制系統結構框圖&#xff0c;并說明各組成部分的作用&#xff1f; 3、采樣周期選擇的理論依據是什么?工程應用中應如何選擇?選擇采樣…

前端學習基礎—VScode環境配置及html基礎知識

作為初學者&#xff0c;一個好的開發環境能極大地提高理解與學習的效率&#xff0c;本文分享我的VScode環境配置方法&#xff0c;涵蓋插件、主題、快捷鍵等&#xff0c;希望能助你快速搭建舒適邊界的前端學習環境。 一、VSCode環境配置 首先找到vscode插件商店&#xff0c;在這…

【一】 基本概念與應用領域【830數字圖像處理】

考綱 文章目錄 1 概念2005甄題【名詞解釋】2008、2012甄題【名詞解釋】可考題【簡答題】可考題【簡答題】 2 應用領域【了解】2.1 伽馬射線成像【核醫學影像】☆2.2 X射線成像2.3 紫外波段成像2.4 可見光和紅外波段成像2.5 微波波段成像2.6 無線電波段成像2.7 電子顯微鏡成像2…

QuecPython錯誤碼匯總

QuecPython中定義的各種錯誤代碼常量 錯誤碼常量錯誤碼釋義QUEC_PY_FAIL-1Generic failure codesQUEC_PY_OK0Quec_py value indicating success (no error)QUEC_PY_EPERM1Operation not permittedQUEC_PY_ENOENT2No such file or directoryQUEC_PY_ESRCH3No such processQUEC_…

C++學習-入門到精通-【4】函數與遞歸入門

C學習-入門到精通-【4】函數與遞歸入門 函數與遞歸入門 C學習-入門到精通-【4】函數與遞歸入門一、 數學庫函數sqrt()ceil()cos()exp()fabs()floor()fmod()log()log10()pow()sin()tan()總結 二、具有多個形參的函數定義三、函數原型、函數簽名和實參的強制類型轉換函數原型函數…

天線測試報告解讀學習

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、無源測試和有源測試二、無源測試報告1.駐波2.回損3.史密斯圓圖4.效率5.增益6.天線方向圖7.天線隔離度8.無源測試總結 三、有源測試報告1.TRP與TIS2.測試指標…

GEC6818蜂鳴器驅動開發

相關知識&#xff1a;Linux設備驅動開發 insmod 編譯好的.ko文件后再運行beep_app.c編譯完成的可執行文件即可使板子蜂鳴。 beep_drv.c: #include <linux/module.h> //包含了加載模塊時需要使用的大量符號和函數聲明 #include <linux/kernel.h> //包含了printk內…

電腦定時管家!Wise Auto Shutdown 深度測評:多任務執行 + 靈活定時

各位電腦小達人&#xff0c;今天給大家介紹一款超厲害的Windows系統定時任務管理工具——Wise Auto Shutdown&#xff01;這玩意兒就像電腦的貼心小管家&#xff0c;能自動執行關機、重啟這些操作&#xff0c;時間設定靈活得很&#xff0c;還有提醒機制呢。下面我給大家好好嘮嘮…

vscode 配置qt

工具&#xff1a;vscode、qttools、qtconfigure Search Mode改成基于cmake的。 # 在項目中指定Qt的路徑 set(Qt5_DIR "/home/jp/qt-everywhere-src-5.12.9/arm-qt/lib/cmake/Qt5") # 用于指定 Qt5 的安裝路徑 find_package(Qt5 REQUIRED COMPONENTS Widgets)這樣就…

基于Boost庫、Jsoncpp、cppjieba、cpp-httplib等構建Boost搜索引擎

??個人主頁&#xff1a;小羊 ??所屬專欄&#xff1a;項目 很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~ 目錄 項目背景技術棧和項目環境正排索引和倒排索引數據去標簽與清洗下載數據源去標簽 建立索引構建正排索引構建倒排索引 建立搜索引擎h…

QMK機械鍵盤固件開發指南:從源碼到實踐

QMK機械鍵盤固件開發指南&#xff1a;從源碼到實踐 前言 QMK&#xff08;Quantum Mechanical Keyboard&#xff09;是一款開源的鍵盤固件&#xff0c;支持眾多自定義鍵盤的功能配置。通過QMK&#xff0c;您可以完全掌控鍵盤的每一個按鍵&#xff0c;實現復雜的宏指令、多層按…

WPF 導航

WPF 導航相關控件/機制 控件 / 類說明常用屬性/方法Frame用來承載不同的頁面 (Page) 并在它們之間切換的容器。Source&#xff08;導航到的 URI&#xff09; Navigate()&#xff08;導航方法&#xff09; CanGoBack / GoBack() CanGoForward / GoForward()Page表示一個單獨的可…

時序建模演進之路:從 MLP、RNN 到 LSTM 與 GRU

時序建模演進之路&#xff1a;從 MLP、RNN 到 LSTM 與 GRU 您是否好奇機器如何能像人類一樣理解、生成流暢的文本&#xff0c;甚至是從海量代碼中自動生成文檔&#xff1f;這些自然語言處理 (NLP) 領域的迷人挑戰&#xff0c;其核心在于模型處理和記憶 序列數據 的能力。 然而…

【Redis——數據類型和內部編碼和Redis使用單線程模型的分析】

文章目錄 Redis的數據類型和內部編碼單線程模型的工作過程Redis在處理命令時雖然是一個單線程模型&#xff0c;為啥效率那么高&#xff0c;速度快呢&#xff1f; 總而言之&#xff0c;Redis提供的哈希表容器并不一定真的是真的哈希表&#xff0c;而是在特點的場景下&#xff0c…

鴻蒙NEXT開發動畫(風格的旋轉加載動畫組件)

1.創建空白項目 2.Page文件夾下面新建Spin.ets文件&#xff0c;代碼如下&#xff1a; /*** SpinKit 風格的旋轉加載動畫組件。** component* param spinSize - 動畫容器大小&#xff08;必須為正數&#xff09;* param spinColor - 動畫顏色&#xff08;支持資源引用&#xf…

后端接口請求http改為https

1、使用 OpenSSL 生成自簽名證書 在Linxu服務器上執行如下命令&#xff1a; openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes 運行此命令后&#xff0c;會提示輸入一些信息&#xff08;如國家、省份、城市、組織名稱等&#xff09;&…

工作記錄 2017-12-12 + 在IIS下發布wordpress

工作記錄 2017-12-12 序號 工作 相關人員 1 修改郵件上的問題。 更新RD服務器。 在IIS下發布wordpress。 郝 服務器更新 RD服務器更新了&#xff0c;更新的文件放在190的D:\Temp\CHTeam\fnehr_update_20171212\下了。 數據庫更新: 數據庫沒有更新 更新的文件&#xf…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】1.2 安裝與配置PostgreSQL(Windows/Linux/macOS)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 1.2 安裝與配置 PostgreSQL(Windows/Linux/macOS)1.2.1 操作系統兼容性與硬件要求1.2.2 Windows 安裝與配置1.2.2.1 安裝步驟1.2.2.2 服務管理1.2.2.3 配置文件路徑1.2.3 Linux 安裝與配置(以 Ubuntu…