FPGA中利用fifo时钟域转换—慢时钟域转快时钟域
一、时间计算方法
FIFO的输入数据的时钟是40MHz,FIFO输出数据取60MHz,刚好是40MHz的1.5倍,将慢时钟域转快时钟域。另外,fifo输出的数据,要输出给上位机,一帧数据要传输640*512=327680个像素数据,要求帧频为100Hz,对应的时间是1/100Hz=10ms,即要求10ms内将327680个数据传输完毕。验证fifo的输出时钟60MHz是否满足要求的方法:输出一帧数据的时间 = 一帧的总数据量/频率,T=(640 ×1.5 ×512 )/ 60M=8.192 ms
什么是频率:单位时间内周期变化的次数。1 Hz 表示每秒发生一次
二、注意的问题
1、FPGA中的计数器其实就是在计时。FIFO输入端的时钟频率小,输出时钟频率快,为了保证输入FIFO的数据与输出数据速度相等,即FIFO不至于读空,行计数器计数的最大值也必须放大1.5倍,即640*1.5=960,从FIFO中读数据时前640个计数时数据有效,这640个计数期间可以至一个标志rd_en位为1,作为FIFO读使能信号,960中的后320个计时为FIFO读数据消隐期,此时rd_en=0,即不读数据。这样输入FIFO的数据读出FIFO的数据时间上就可以匹配上,不至于将FIFO读空。
2、先预存一行640个数据到FIFO中,存第二行数据的同时,读取第一行的数据,这样FIFO就不会被读空;
3、FIFO输出后面的模块必须要60M的时钟来接收数据,不然数据会不正确。