原创 22.我与FPGA的恋爱之异步双时钟FIFO验证

2016-4-22 16:11 2370 23 23 分类: FPGA/CPLD 文集: 我与FPGA的恋爱

   FIFO一般指的是对数据的存储具有先进先出特性的一个存储器,常被用于数据的缓存或者高速异步数据的交互

 

下图为分别为单时钟FIFO和双时钟FIFO的结构图:

 1.png

 

单时钟FIFO:

        单时钟FIFO常用于片内数据交互

双时钟FIFO:

双时钟FIFO的一个典型应用就是异步数据的收发。

因为直接调用的fifo核,所以直接对其仿真就能查看波形

仿真文件:

`timescale 1ns/1ps
`define clk_period 20

module FIFO_tb;

//source define

	reg	[7:0]  data;
	reg	  rdclk;
	reg	  rdreq;
	reg	  wrclk;
	reg	  wrreq;

//probe define
	wire	[7:0]  q;
	wire	  rdempty;
	wire	  rdfull;
	wire	  wrempty;
	wire	  wrfull;

//instant user module

	fifo fifo(
			.data(data),
			.rdclk(rdclk),
			.rdreq(rdreq),
			.wrclk(wrclk),
			.wrreq(wrreq),
			.q(q),
			.rdempty(rdempty),
			.rdfull(rdfull),
			.wrempty(wrempty),
			.wrfull(wrfull)
	);

//generater clock
	initial wrclk = 1;
	always #(`clk_period/2)wrclk = ~wrclk;
	
	initial rdclk = 1;
	always #(`clk_period)rdclk = ~rdclk;	
	
	integer i;

	initial begin
		wrreq = 0;
		data = 0;
		rdreq = 0;
		#(`clk_period*20 + 1);
		//写入
		for (i=0;i <= 511 ;i = i + 1)begin
			wrreq = 1;
			data = i;
			#`clk_period;
		end
		wrreq = 0;
		#(`clk_period*20);
		
		//读取
		for (i=0;i <= 511 ;i = i + 1)begin
			rdreq = 1;
			#`clk_period;
		end	
		rdreq = 0;
		$stop;		
	end

endmodule

仿真效果:

2016-04-22_155507.jpg

更多方便的fifo使用后续别的主题的笔记会有记录

谢谢

文章评论0条评论)

登录后参与讨论
我要评论
0
23
关闭 站长推荐上一条 /2 下一条