FPGA22 双时钟FIFO

1 双时钟FIFO

双时钟FIFO的主要应用就是一部数据的收发,异步数据就是指数据的发送端和接收端处于不同的两个时钟域。使用双时钟FIFO能够将不同时钟域内的数据同步到所需要的时钟域中。
在这里插入图片描述

2 创建一个FIFO

在这里插入图片描述

3 testbench

`timescale 1ns/1ns

`define wrclk_period 20
`define rdclk_period 10 //定义两个时钟

module dfifo_tb;

	reg	[15:0]  data;
	reg	  rdclk;
	reg	  rdreq;
	reg	  wrclk;
	reg	  wrreq;
    
	wire	[7:0]  q;
	wire	  rdempty;
	wire	[8:0]  rdusedw;
	wire	  wrfull;
	wire	[7:0]  wrusedw;
    
 fifoip f1(
 
	.data(data),
	.rdclk(rdclk),
	.rdreq(rdreq),
	.wrclk(wrclk),
	.wrreq(wrreq),
	.q(q),
	.rdempty(rdempty),
	.rdusedw(rdusedw),
	.wrfull(wrfull),
	.wrusedw(wrusedw)
    );

    
    initial wrclk = 1;
    always #(`wrclk_period/2) wrclk = ~wrclk;
    
    initial rdclk = 1;
    always #(`rdclk_period/2) rdclk = ~rdclk;
    
    
    integer i;
    
    initial 
    begin
    data = 0;
    rdreq = 0;
    wrreq = 0;
    #(`wrclk_period*20+1);
    
    for(i=0;i<=255;i=i+1)
    begin
    wrreq = 1;
    data = i + 1024;
    #(`wrclk_period);
    end
    wrreq = 0;
    
    #(`rdclk_period*20);
    
    for(i=0;i<=255;i=i+1)
    begin
    rdreq = 1;
    #(`rdclk_period);
    end
    rdreq = 0;
    #(`rdclk_period*20);
    $stop;

    end
endmodule 

4 前仿真

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/helloworld573/article/details/105360368