此行为是由MLAB硬件特性引起的。当写操作发生且写地址等于读地址时,MLAB的输出始终更新。写入基于MLAB的SCFIFO宏功能中的最后一个可用位置时,将声明完整标志并存储新数据并传播到输出。 SCFIFO输出在读取请求后的周期中显示正确的数据。这种行为(如下面的图1所示)发生在电路板测试期间或使用SCFIFO设计网表进行仿真时。使用SCFIFO功能模型进行仿真时不会发生此行为。
对于在其他内存块类型(M512,M4K,M9K,M144K,M20K和M-RAM)中实现的SCFIFO宏功能,不会发生此行为。对于以这些存储器块类型之一实现的SCFIFO宏功能,当写入SCFIFO宏功能中的最后一个可用位置时,将声明完整标志并存储新数据但输出不会更改。只有在声明读取请求时,输出才会更新。
使用Quartus®II7.0及更高版本以及MegaWizard™插件中的以下设置生成的SCFIFO宏功能受影响:
- 为读访问选项选择了正常的同步FIFO模式
- 选择MLAB用于存储块类型
- 输出寄存器选项没有选择(最小区域)
要避免此行为,请对SCFIFO宏功能进行以下更改之一:
- 将输出寄存器选项从No(最小区域)更改为Yes(最佳速度) 。请注意,两种模式下SCFIFO宏功能的输出延迟相同
- 选择其他内存块类型
在Quartus®II软件的未来版本中,SCFIFO MegaWizard插件计划在选择正常同步FIFO模式和无(最小区域)选项时禁用MLAB存储器块类型选项。
图1显示了基于MLAB的SCFIFO宏功能的波形。周期9中的读取请求在周期10的输出处产生有效数据。即使没有额外的读取请求,周期12中的写入请求也会导致输出在周期14中更新为新数据。周期15中的下一个读取请求再次产生周期16输出的有效数据。
图1.基于MLAB的SCFIFO波形
没有回复内容