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.mzph.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…