EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用FIFO去解决异步时钟源的问题: }+ i' W7 |: i* p8 E! ~$ J
7 U# Z" I R& @因为想用Spartan-6去从图像传感器采集图像,所以想直接用pclk做为FIFO的写时钟,传感器的行同步信号HS作为FIFO写是能输入,这样可以省去好多coding的工作。然而,事情往往不会那么顺利,我发现pclk的时钟是只有在有数据的时候才会从传感器输出,当传感器不输出数据时,pclk也就不会跳动了。具体时序可参考仿真图的wr_clk.
- b ^( K: A4 m" H. \# H: W2 H5 o: x0 x9 O4 P6 [
Xilinx自带仿真器,仿真结果截图:
! k& g, N3 u, v7 A! oFIFO复位后,经过两个wr_clk,Full 和almost_full信号才会复位, + g# u' k2 r# ^' t
6 ~+ j) W1 w- P3 b5 k8 w" K当初始不去reset时,会丢失第一个数据 1 t# x9 ?* J' ~0 n2 K& p% X* r7 T
下图为设置了Reset, 丢失了数据1,2,3 从仿真结果看,这个写入过程,需要wr_clk比实际数据数要多1或跟多,不然,最后一个数据时写进不到FIFO里面的。
& B2 p' w. A7 U+ z; k; R2 c0 Y0 m从下图可以发现,实际写入的最后一个数为150,但是由于写时钟写完最后一个数后就停止跳动,当去读FIFO时,无论rd_en和rd_clk一直是有效状态,在FIFO中始终读不出来150这个数
结论:对于只当有数据才会有数据始终跟随输出的传感器,如果用FPGA中的FIFO直接读取,会出现丢数据的情况
v; P4 j+ [3 e6 Z" g& O |