FPGA FIFO IP核(3)- 仿真

news2024/12/24 21:01:04

仿真思路

  • 如何在写入标志信号(写入请求信号)有效时将数据写入到FIFO中?
    在调用模块代码中,pi_flag每四个时钟周期产生一个有效信号,即写请求信号。每次当pi_data检测到pi_flag信号有效时加1,从0~255循环变化。实现效果就是在pi_flag有效时将pi_data写入到FIFO中。
  • 读请求信号rdreq在FIFO的满标志信号full有效时拉高,空标志信号empty有效时拉低。

仿真代码

'timescale 1ns/1ns
module	tb_fifo();

//定义寄存器,定义线束
reg			sys_clk  ;
reg	[7:0]	pi_data  ;
reg			pi_flag  ;
reg			rdreq    ;
reg			sys_rst_n;
reg	[1:0]	cnt_baud ;

wire	[7:0]	po_data;
wire			empty  ;
wire			full   ;
wire	[7:0]	usedw  ;
//***********主要代码*************
//系统时钟初始化,复位信号
initial begin
	sys_clk		=	1'b1;
	sys_rst_n  <=	1'b0;
	#100;//延迟100ns
	sys_rst_n  <=   1'b1;
end
//50Mhz系统时钟设置:周期为20ns,每10ns电平翻转一次
always	#10	 sys_clk = ~sys_clk;
//计数器设置,计数0~3
always@(posedge	sys_clk	or	negedge	sys_rst_n)
	if(sys_rst_n  ==  1'b0)
		cnt_baud  <=  2'b0;
	else	if(&cnt_baud == 1'b1)
	    cnt_baud  <=  2'b0;
	else
		cnt_baud  <=  cnt_baud + 1'b1;
//pi_flag:写请求信号,输入有效标志信号,每四个时钟周期且没有读要求时产生一个数据有效标志信号
always@(posedge	sys_clk	or	negedge	sys_rst_n)
	if(sys_rst_n == 1'b0)
		pi_flag  <= 1'b0;
	else	if((cnt_baud == 2'd0) &&  (rdreq == 1'b0))
		pi_flag  <= 1'b1;
	else
		pi_flag  <= 1'b0;
//写入的数据:pi_data 0~255的循环
always@(posedge	sys_clk	or	negedge	sys_rst_n)
	if(sys_rst_n == 1'b0)
		pi_data  <= 8'b0;
	else	if((pi_data == 8'd255) && (pi_flag == 1'b1))
		pi_data <= 8'b0;
	else	if(pi_flag == 1'b1)
		pi_data <= pi_data +1'b1;
//读请求信号
always@(posedge	sys_clk	or	negedge	sys_rst_n)
	if(sys_rst_n == 1'b0)
		rdreq <= 1'b0;
	else	if(full == 1'b1)
		rdreq <= 1'b1;
	else	if(empty == 1'b1)
		rdreq <= 1'b0;
//例化
 fifo fifo_inst(
 	.sys_clk	(sys_clk),
 	.pi_data	(pi_data),
 	.pi_flag	(pi_flag),
 	.rdreq		(rdreq  ),
 	.po_data	(po_data),
 	.empty		(empty  ),
 	.full		(full   ),
 	.usedw		(usedw	)
 );
 endmodule

编译,设置NativeLink后,进行仿真,在设置testbech时将仿真时间设置为100微秒,设置testbech的具体步骤不再赘述。
在这里插入图片描述

仿真结果分析

运行Modelsim后,出现仿真结果如下,其中:
pi_data(写入数据)与po_data(读出数据)交替出现;
pi_flag(数据有效标志信号)与pi_data对应;
rdreq(读请求信号)为高电平有效时,po_data信号输出;
在这里插入图片描述
将写入数据与读出数据衔接的时间段放大后来看:
pi_data信号为11111111(255),且pi_flag信号为1时,full(满标志信号)拉高,表明存储空间已满。
此时usedw(存储数据的个数)也变为了0。
在这里插入图片描述
下图中,full(满标志信号)有效时,rdreq(读请求信号)也被拉高,开启读数据。
读取数据开始时,有两个时钟周期的0,第一个潜伏期导致,第二个为读出的数据0。
在这里插入图片描述
整体来看,随着数据被逐渐读出,存储的数据也慢慢减少,full信号在读出第一个数据后就迅速被拉低。如下图所示:
在这里插入图片描述
之前设置的是普通模式,如下图,在读到数据11111110时,empty信号就被拉高,原因是这里读出的数据要比读使能信号延一拍
在这里插入图片描述
在之前的FIFO IP核配置过程中,如果把普通模式更改为先出数据模式,如下图,则会出现相对容易理解的结果。
在这里插入图片描述
这里当rdreq(读请求信号)有效时,数据并没有像之前一样有一个潜伏的0信号,读数据和rdreq信号是同步的。
在这里插入图片描述
而对于empty信号,在读出最大数11111111(255)后被立刻拉高:
在这里插入图片描述

小结

OK,上面就是同步时钟FIFO IP 的仿真结果相关分析了,可以发现结合信号波形来理解FIFO,很多之前不太理解的地方会变的清晰一些,但是有些地方还是有些模模糊糊。还有一个异步时钟FIFO IP核的仿真,还得再写一期。

参考资料:《FPGA Verilog开发实战指南》《Verilog数字系统设计教程》
特别鸣谢:BiliBili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1953484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF怎么压缩?在线pdf压缩VS PDF压缩软件,谁更好用?10款工具详细多方位测评

PDF怎么压缩&#xff1f;PDF文件压缩可以使用本地文件压缩软件&#xff0c;也可以在网页上使用在线压缩工具一键压缩。 在日常工作和生活中&#xff0c;PDF文件因其跨平台性和良好的保持格式不变的能力而广受欢迎。然而&#xff0c;随着PDF文件内容的增加&#xff0c;文件大小也…

【JavaScript】详解Day.js:轻量级日期处理库的全面指南

文章目录 一、Day.js简介1. 什么是Day.js&#xff1f;2. 安装Day.js 二、Day.js的基本用法1. 创建日期对象2. 格式化日期3. 解析日期字符串4. 操作日期5. 比较日期 三、Day.js的高级功能1. 插件机制2. 国际化支持 四、实际应用案例1. 事件倒计时2. 日历应用 在JavaScript开发中…

如何免费实现网站HTTPS访问

在当今数字化的世界中&#xff0c;网络安全问题愈发凸显其重要性。对于网站而言&#xff0c;实现HTTPS访问已经成为提升用户信任度和保障数据安全的重要手段。然而&#xff0c;对于许多小型网站和个人博客来说&#xff0c;购买SSL证书可能是一笔不小的开销。下面将介绍如何免费…

基于微信小程序+SpringBoot+Vue的儿童预防接种预约系统(带1w+文档)

基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 基于微信小程序SpringBootVue的儿童预防接种预约系统(带1w文档) 开发合适的儿童预防接种预约微信小程序&#xff0c;可以方便管理人员对儿童预防接种预约微信小程序的管理&#xff0c;提高信息管理工作效率及查询…

【数据结构】单链表带头双向循环链表的实现

一、链表的概念及结构 1.链表的概念 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 2.链表的结构 一般讲的链表包括数据域和指针域&#xff1a; 二、链表的种类 实际中链表的结构…

云HIS系统源码,业务云协同和数据云协同的数字化医院信息系统

云HIS是利用云计算、大数据、物联网、移动互联网等技术&#xff0c;打造的一个安全、便捷、共享、协同的医疗互联网云生态平台。核心功能是业务云协同和数据云协同。云HIS具有可扩展、易共享、易协同、低成本、体验号、更便捷、易维护的优势&#xff0c;重新定义了数字化医院信…

Intel(R) Wireless-AC 9462 WLAN已关闭开不起来的可能原因

最近给老电脑机械师T90重装系统&#xff0c;装好各种驱动之后&#xff0c;发现无线功能开不起来&#xff0c;WLAN已关闭不管怎么操作都开不起来 最后尝试把笔记本的无线网卡重新插了一下就正常了

freertos的学习cubemx版

HAL 库的freertos 1 实时 2 任务->线程 3 移植 CMSIS_V2 V1版本 NVIC配置全部是抢占优先级 第四组 抢占级别有 0-15 编码规则&#xff0c; 变量名 &#xff1a;类型前缀&#xff0c; c - char S - int16_t L - int32_t U - unsigned Uc - uint8_t Us - uint…

sheng的学习笔记-AI-公式-指数加权移动平均(EWMA)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 基础知识 指数加权移动平均&#xff08;Exponential Weighted Moving Average&#xff09;&#xff0c;是一种常用的序列处理方式 看例子&#xff0c;首先这是一年365天的温度散点图&#xff0c;以天数为横坐标&#xff0…

C++进阶(9)C++11

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 目录 一、统一列表初始化 二、变量类型推导 1、auto 2、decltype 3、typeid 三、左值/右值 1、左值引用/右值引用&#xff08;粗&#xff09; 2、右值 3、右值引用&#xff08;细&#xff09; 1…

135.分发糖果,遍历方向+candy选取的详解

力扣135分发糖果 题目思路代码 题目 https://leetcode.cn/problems/candy/description/ 老师想给孩子们分发糖果&#xff0c;有 N 个孩子站成了一条直线&#xff0c;老师会根据每个孩子的表现&#xff0c;预先给他们评分。 你需要按照以下要求&#xff0c;帮助老师给这些孩子…

【Python机器学习】朴素贝叶斯——使用Python进行文本分类

目录 准备文本&#xff1a;从文本中构建词向量 训练算法&#xff1a;从词向量计算概率 测试算法&#xff1a;根据现实情况修改分类器 准备数据&#xff1a;文档词袋模型 要从文本中获取特征&#xff0c;需要先拆分文本。这里的特征是来自文本的词条&#xff0c;一个词条是字…

大脑网络交互分析:公式与应用

大脑网络交互分析&#xff1a;公式与应用 核心概念与重要性 大脑网络交互分析是神经科学研究中的重要领域&#xff0c;它关注大脑不同区域之间的连接与交互方式。通过分析大脑网络&#xff0c;我们可以理解大脑如何处理和整合信息&#xff0c;进而揭示认知、情感和行为的神经…

java 集合框架-map(键值对集合)

一、Map接口 (键值对集合) 1.实现类 (1).线程不安全 HashMap 1.特点: ①无序 ②查找效率高&#xff1a;根据key&#xff0c;查找value 2.数据结构&#xff1a;数组&#xff08;哈希表&#xff09; 链表&#xff08;链地址法解决哈希表冲突&#xff09; 红黑树&#xff0…

UDP的报文结构及其注意事项

1. 概述 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的数据传输服务&#xff0c;不保证数据的可靠传输。在网络通信中&#xff0c;UDP通常用于一些对实时性要求较高、数据量较小、传输延迟较低的应用&#xff0c…

大数据的数据质量有效提升的研究

大数据的数据质量有效提升是一个涉及多个环节和维度的复杂过程。以下是从数据采集、处理、管理到应用等方面&#xff0c;对大数据数据质量有效提升的研究概述&#xff1a; 一、数据采集阶段 明确采集需求&#xff1a;在数据采集前&#xff0c;需明确数据需求&#xff0c;包括…

Mike21粒子追踪模型particle tracking如何展示粒子轨迹

前言&#xff1a; 随着模型的推广&#xff0c;模型的很多模块也问的多了起来&#xff0c;PT粒子追踪模块最近群友也在问&#xff0c;结果算了出来&#xff0c;却实现不了展示运动轨迹。今天就写段简单的PT后处理的方法吧。 注意&#xff1a;MIKE21输出模块中不但输出了关于水…

3个管人绝招,让下属心服口服

管人不能瞎管&#xff0c;手段很重要&#xff1a;3个管人绝招&#xff0c;让下属心服口服 一&#xff1a;差异化管理&#xff0c;玩弄人性 谁赞成&#xff0c;谁反对&#xff0c;看清楚谁顺从自己&#xff0c;谁反对自己之后&#xff0c;接下来要做的便是区别对待。 给听话的…

简单的CSS样式

样式分为三种 内部样式&#xff1a;写在html文件里的样式叫内部样式 内联样式&#xff1a;写在需要的标签中 外部样式&#xff1a;写在外部css文件里 可以通过不同的选择器来选择设置指定组件的样式&#xff1a; <style>/* 写在html文件里的样式叫内部样式 *//* 选择器 *…