问题描述
在某些情况下,地址重叠,Spartan-6 FPGA Block RAM的内容可能会损坏。本答复记录提供了Spartan-6 FPGA Block RAM用户指南 (UG383)第15页的更多详细信息,其中还包括其他冲突避免描述。
解决/修复方法
问题描述:
- 用于RAMB16BWER或RAMB8BWER组件的WRITE_MODE = READ_FIRST的真双端口(TDP)模式
- 用于RAMB8BWER组件的WRITE_MODE = READ_FIRST的简单双端口(SDP)模式
解决方法 “ 解决问题的方法部分。 图1: 表1:地址冲突条件
RAMB16原语 | RAMB8原语 | |
地址冲突 | 当两个端口都被使能时(ENA和ENB = 1),两个端口(CLKA CLKB)上没有使用相同的时钟,时钟之间的相位偏移永远不会介于100 ps和3 ns之间(或下一个时钟边沿)下列: | 当两个端口都被使能(ENA和ENB = 1)并且两个端口(CLKA CLKB)和A12-A6上没有使用相同的时钟时,两个端口上的A4都是相同的 |
没有地址冲突 | 当任一端口被禁用(ENA或ENB = 0)时,在两个端口上使用相同的时钟(CLKA == CLKB),时钟之间的相位偏移绝不会介于100 ps和3 ns之间(或下一个时钟边沿)或其中一个对于这两个端口,以下情况中的地址始终不同 |
单端口(绑定端口A / B的上述地址之一) |
受影响的组件:
- TDP模式下的RAMB16BWER或RAMB8BWER,在任一端口上WRITE_MODE设置为READ_FIRST。
- SDB模式下的RAMB8BWER,WRITE_MODE设置为READ_FIRST。
- 所有具有WRITE模式的UNIMacro组件都在任一端口上设置为READ_FIRST。
软件中的行为:
- ISE 12.3及更高版本 – 该软件已更新,包括SDP写入第一模式作为地址重叠问题的首选解决方法。在SDP写入第一模式中,可能发生地址重叠,但它只会导致读取失败,而不会导致存储器单元损坏。有关详细信息,请参阅“解决方法”部分。
- 在ISE 12.1和12.2中 – 仿真结果确实向用户说明了问题。仿真模型已更新,以提醒用户有关此情况,并将反映可能发生损坏的未知数。
- 在ISE 11.5及更早版本中 – 仿真结果并未向用户说明问题。仿真行为看起来很正常,不会生成错误或警告。但是,硬件可能以存储器阵列和/或读取损坏的形式出现功能故障。
解决方法:
- 从ISE 12.3软件开始,简单双端口(SDP)Block RAM支持WRITE_FIRST模式,是首选的解决方法。
- 对于具有由相同时钟驱动的 RDCLK和WRCLK的所有SDP Block RAM,请使用READ_FIRST模式,因为在这种情况下不会发生冲突。如果SDP Block RAM的RDCLK和WRCLK 由不同的时钟驱动 ,则使用WRITE_FIRST模式。在WRITE_FIRST模式下,用户必须围绕当一个端口执行写操作而另一个端口同时从同一位置读取时存在的冲突避免要求进行设计。
- CoreGenerator IP和XST已更新,以支持WRITE_FIRST模式功能。如果使用Block RAM Generator生成Block RAM的简单双端口配置,则选择并生成内核的v4.3以使用WRITE_FIRST模式.FIFO Generator v6.3在必要时自动使用WRITE_FIRST简单双端口Block RAM。
- 要为SDP Block RAM启用WRITE_FIRST模式,请在UCF文件中的所有所需Block RAM上添加以下两个约束:
- INSTWRITE_MODE_A = WRITE_FIRST;
- INSTWRITE_MODE_B = WRITE_FIRST;
- 对于真双端口(TDP)模式,确定是否绝对需要READ_FIRST模式。如果不是,请使用WRITE_FIRST或NO_CHANGE模式。
- 当ISE 12.1软件中可用时,使用更新的仿真模型在所有条件下执行完整的时序仿真。至少应运行综合后仿真,以识别任何潜在的 iMPACT。
没有回复内容