FIFO APP应用程序:
1、写入千兆位以太网数据,向DDR3写入数据时
2 .当AD采样时钟和内部时钟不同时,需要通过FIFO进行转换
3、频率不同时也需要用FIFO变换
Vivado中FIFO生成器的配置方法
1、
2、标准先进先出
读取read mode时延迟1个周期的时钟,第一个word fall through
读取模式读取时没有延迟时钟周期,如果提供使能,则有数据,读取延迟=0。
3、
读取数据计数显示fifo中有多少数据。
异步FIFO实现
具体实现代码:
`时间比例1 ns/1ps
//
//Company:
//Engineer:
//
//create date :2016/08/1014336042336033
//Design Name:
//Module Name: fifo_timing
//Project Name:
//Target Devices:
//Tool Versions:
//Description:
//
//Dependencies:
//
//Revision:
//revision 0.01 -文件创建
//Additional Comments:
//
//
module fifo_timing (
inputwiresclk,
inputwirerst_n,
inputwirer_clk,
inputwiredata_v,
inputwire[7:0]data_in,
outputwiredata_ov,
outputwire[15:0]data_out,
output wirefifo_w_clk,
outputwirefifo_r_clk,
outputwirefifo_w_en,
outputwire[7:0]fifo_w_data,
inputwirefifo_full,
outputwirefifo_r_en,
inputwire[15:0]fifo_r_data,
inputwirefifo_empty,
input wire [ 8:0 ] FIFO _ rd _ count
);
无线全功能;
wireempty;
//r_clk
regr_flag;
wire[8:0]rd_data_count;
reg[8:0]r_cnt;
wirerd_en;
assign fifo_w_clk=sclk;
assign fifo_r_clk=r_clk;
assign FIFO _ w _ en=data _ v (FIFO _ full );
assign fifo_w_data=data_in;
assign FIFO _ r _ en=r _ flag (FIFO _ empty );
assign data_out=fifo_r_data;
assign data_ov=r_flag;
assignrd_en=r_flag;
always @ (posedger _ clkornegedgerst _ n ) ) ) ) ) ) ) ) )。
if(rst_n==1'B0 ) ) ) ) ) ) )。
r_flag=1'b0;
) ) )
r_flag=1'b0;
(else if (FIFO _ rd _ count=' d255r _ flag==1' B0 ) ) ) ) ) ) 652 )
r_flag=1'b1;
always @ (posedger _ clkornegedgerst _ n ) ) ) ) ) ) ) ) )。
if(rst_n==1'B0 ) ) ) ) ) ) )。
r_cnt='d0;
elseif(r_flag==1'B1 ) ) ) ) )。
r_cnt=r_cnt 1'b1;
else
r_cnt='d0;
assigndata_ov=r_flag;
最终模块