首页 > 其他分享 >FPGA FIFO IP核(3)- 仿真

FPGA FIFO IP核(3)- 仿真

时间:2024-07-27 22:00:47浏览次数:6  
标签:仿真 FPGA IP FIFO 信号 pi data reg

仿真思路

  • 如何在写入标志信号(写入请求信号)有效时将数据写入到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

标签:仿真,FPGA,IP,FIFO,信号,pi,data,reg
From: https://blog.csdn.net/weixin_45547259/article/details/140739503

相关文章

  • 【C# 】Pipe管道通信使用
    管道通信        管道通信(PipeCommunication)可以用来在两个或多个进程之间传递数据。        管道可以是匿名的也可以是有名的,有名管道允许不同进程间的通信,而匿名管道通常用于父子进程之间的通信。    详细参考pipe管道通信原理_核间通信pipe通信......
  • BUUCTF 2.rip
    拿到题目首先运行一下我们可以看到在我第一次运行时我们发现他就是将我们输入的重新输出了一遍,我们可以猜测应该是gets函数输入,然后输出,那我们便可以测试第二次,我们输入一个超长字符串,发现程序崩溃了,我们可以猜测应该是程序没有对长度进行检测而导致的栈溢出,那么我们带着这个猜......
  • 洛谷P1042 [NOIP2003 普及组] 乒乓球
    题目链接:-P1042[NOIP2003普及组]乒乓球[NOIP2003普及组]乒乓球题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役......
  • 自写ApiTools工具,功能参考Postman和ApiPost
    近日在使用ApiPost的时候,发现新版本8和7不兼容,也就是说8不支持离线操作,而7可以。我想说,我就是因为不想登录使用才从Postman换到ApiPost的。众所周知,postman时国外软件,登录经常性抽风,离线支持也不太好。所以使用apipost,开始用apipost7一直很好用。可是apipost大升级,不支持离线操......
  • 广域网(WAN)、局域网(LAN)的区别与联系、WLAN与WiFi的关系,ipconfig和ping
    1.广域网和局域网广域网(WideAreaNetwork),简称WAN,是一种地域范围覆盖广的计算机网络的集合,通常所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家。由于其超长的覆盖范围,发送介质主要是政府或者大型企业部署的电话线或光纤,因此又被大家亲切的称为:外网、公网。......
  • 苹果系统Applescript实现FaceTime蓝号检测,无痕检测数据是否开通FaceTime服务
    FaceTime是苹果公司iOS和macOS(以前称MacOSX或OSX)内置的一款视频通话软件,通过Wi-Fi或者蜂窝数据接入互联网,在两个装有FaceTime的设备之间实现视频通话。其要求通话双方均具有装有FaceTime的苹果设备,苹果ID以及可接入互联网的3G/4G/5G或者Wi-Fi网络。 二、Applescript来实现检......
  • 代码随想录day24打卡|| 93复原ip地址 78子集| 90子集||
    93复原ip地址力扣题目链接题目描述有效IP地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和"192.168.1.1" 是 有效 IP地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 无......
  • dpdk下ipsec内联卸载(inline offload)测试
    使用intel82599网卡完成。介绍本文介绍了数据平面开发套件(DPDK)框架中的内联IPsec加速支持实现,特别关注英特尔®8259910千兆以太网控制器系列的功能和支持。内联IPsec可用于实现IPsec感知系统,该系统具有比旁路辅助和加速硬件更好的延迟,前提是支持的算法合适。......
  • ClearCLIP: Decomposing CLIP Representations for Dense Vision-Language Inference
    Motivation&Abs文章关注的任务为用VLM(如CLIP)做开放词汇分割,motivation主要来自于作者的一个观察:分割图中的噪声主要来自于残差连接,这会导致在文本-图像预训练更加强调全局特征,从而牺牲了局部判别能力,从而导致了分割结果中的噪声。为此作者提出了ClearCLIP,对CLIP的特征进行解耦,......
  • CF605E Intergalaxy Trips 题解
    Description\(n\)个点的有向完全图。\(i\toj\)的边每天出现的概率均为\(p_{i,j}\),若\(i=j\),有\(p_{i,j}=1\)。每天可以选择一条存在的出边走过去或停留在原地不动。求最优策略下从\(1\)到\(n\)的期望天数。\(n\le10^3\)。Solution设\(f_i\)表示\(i\)......