IntelFPGA

    技术2025-04-05  32

    dcfifo常用于跨时钟域数据传输,有两种工作模式,normal mode/ showahead mode,本文主要通过仿真对比这两种模式的区别。

    1.showahead mode

    参数设定 intended_device_family = "Cyclone 10 LP", lpm_numwords = 128, //FIFO深度在位宽为写位宽32bit时为128,响应的以读位宽16bit来看深度为256 lpm_showahead = "ON", //模式设置 lpm_type = "dcfifo_mixed_widths", lpm_width = 32, //输入数据宽度 lpm_widthu = 7, //写时钟下的FIFO深度位宽 lpm_widthu_r = 8, //读时钟下的FIFO深度位宽,比写要多1bit,深度是其2倍 lpm_width_r = 16, //输出数据宽度 overflow_checking = "ON", rdsync_delaypipe = 6, //写指针过度到读时钟域下需要6级流水来同步,会延迟判断FIFO是否空 ,但偏保守 read_aclr_synch = "ON", //开启异步复位读时钟同步 underflow_checking = "ON", use_eab = "ON", write_aclr_synch = "ON", //开启异步复位写时钟同步 wrsync_delaypipe = 6; //读指针过度到读时钟域下需要6级流水同步,会延迟判断FIFO是否满,但偏保守

    在showahead模式下,即使没有读请求信号,FIFO也会先输出一个数据,在本例子中,输入为32为,输出为16位,FIFO首先输出32位中的低16位后输出高16位。如图qout端口一直挂199,等到真正的读命令来了才属于高16位的数201。但是后续每次读完之后并没有提前将下一个数据挂出,和普通FIFO无异。

    2.normal mode

    参数设置上和上面的唯一区别就是OFF了lpm_showahead 。 在正常模式下,一开始是没有挂数据的(输出0),只有在读命令来了之后才输出数据。相比上面的showahead模式,正常模式始终比其慢半拍(慢在最开始没有提前挂出低16位)。正常模式最后输出是197,超前模式最后输出是194。

    3.超前模式应用场景

    超前模式下,可以直接读取fifo最前面的数据而不必先发出读请求再读,当然为了持续读后续数据还是要发出读请求。 正常模式下,必须严格地先发读请求,再读取数据。为了持续读后续数据也是要持续发出读请求。

    Processed: 0.009, SQL: 9