首页 > 代码库 > FPGA之FIFO学习心得

FPGA之FIFO学习心得

FIFO

FIFO:

中文意思:先进先出【类似于堆栈】

 

作用:

FPGA中,一般用于不同时域之间的数据传递,比如FIFO的一端是AD采集,另一端是计算机PCI总线,假设AD的采集速度一般都是几百Kb/sPCI总线的速度为200Mb/s,在这俩个的时域中传递数据时就可以采用FIFO来作为数据缓冲。同时FIFO还可以作为不同数据宽度之间的传递FIFO也是可以胜任的,比如UART收到的数据传递给USBUART收到的数据是8位的数据,USB传递的16数据,如果之间传递,他们是不同的时域,传输的速度也是不一样的,为了解决这个我们可以使用FIFO

将读写时钟配置为rd_clkwr_clk

读写数据宽度 配置写8位数据,读16位数据;

同时我们根据需求还可以选择对应标志位,使能位有效时间等。

    

分类:

FIFO的类型及FIFO说明:

根据数据出现在输出总线上的时间不同分为不同的种类。

普通FIFO:每次在使能位有效的情况下,读时钟和写时钟的上升沿来时,将数据读出  来,一个时钟一个数据。

预取FIFO:写时同普通FIFO一样,读时数据提前输出到总线上,比普通FIFO早一个时钟。

 

FIFO的生成:

同其他的IP生成是一样的,我们选择对应的IP核后,会有对应的配置向导,根据向导选择对应的参数。

简单的步骤就省略掉了。

我们命名好了FIFO的名字后,就来到以下的界面,接下来我们要进行一些相应的配置。

1关于interface的选择,【百度的,】native是做soc工程

技术分享

Next后,需选择时钟和存储类型。

1,时钟:一般根据FIFO的作用,读写时钟是不同步。

2,存储类型:有block RAM distibute RAM两种。

【百度】由此区别表明,当FIFO较大时应选择block RAM,当FIFO较小时,选择distribute RAM.另外一个很重要的就是block RAM支持读写不同宽度,而distribute不支持。在这里为了更全面的了解FIFO,选择block RAM以拥有非对称方向速率的特性。

技术分享

FIFO读写模式:

标准模式和预取模式。通常我们选择标准模式,至于预取FIFO的作用目前还没有遇到。

我们选择位宽和深度后,地址自动就生成了。

data port parameters 中的actual write depthactual read depth

技术分享

我们设置完时钟和数据后,就该添加控制信号了

控制信号越多操作越复杂,同时对FIFO的控制更加精准了

1、标志位,半空和半满

2、……

 

复位信号和可编程信号的配置。虽然在block RAMdistribute RAM中,启用rst端口,且配置成同步复位,即整个FIFO共用一个复位信号,而不是读写不同的复位。至于编程信号,看选项就很容易理解了。配置如图,FIFO中数据达到200时,programmable full有效,数据为10时,programmable empty有效。

技术分享

之后是写计数和读计数,都使之有效,由于写深度是256,读深度是512.因此写计数器的宽度定义为8,读计数器的狂度定义为9.其实不一定计数器一定要比深度大,当计数器计数最大值小于数据深度时,例如数据深度为512,而计数器大小为256,则每两个数据计数器计数一次。

技术分享

  最后可以看到我们配置的FIFO信息如下(注意几个关键信息),最后生成IP就好了。

技术分享

 

 

 

【有效电平】

Rst 高电平有效

复位后(23)个周期内是无法进行写操作的;

  Wr_en 在拉高的上升沿时,数据立即生效

  Rd_en 在读上升沿并没有进行读数据,而是在下一个上升沿时进行读操作

关于计数,如果计数值设置的不够大时一开始就会失效,成为高阻状态。

读写计数是大概不准.

 

 上升沿是时钟上升沿 不是wr_en rd_en的上升沿, 【信号触发后clk的上升沿生效】

 

空满标志有效电平是?高有效

技术分享 

仿真结果图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


本文出自 “10927461” 博客,请务必保留此出处http://10937461.blog.51cto.com/10927461/1873776

FPGA之FIFO学习心得