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 前仿真