AR# 34859

Virtex-6 FPGA Block RAM 设计咨询 - 地址空间重叠

描述

在地址重叠的某些情况下可能会导致 Virtex-6 FPGA block RAM 内容损坏。本答复记录为《Virtex-6 FPGA Block RAM 用户指南》(UG363) 第 15 页所提出的这一冲突避免类型提供了更详尽的信息,同时该指南还对如何避免其他的冲突类型进行了说明。

解决方案

问题描述:

在某些情况下,可能导致 Virtex-6 FPGA block RAM 内容损坏。

只有在为 block RAM 的 CLKA 和 CLKB 配置了不同时钟的情况下, 使用下列任何一种设置时才会出现此问题:
  • 为 RAMB36E1 或RAMB18E1 组件设置的真正双端口 (TDP) 模式 其中 WRITE_MODE = READ_FIRST
  • 为  RAMB36E1 或  RAMB18E1 元件设置的简单双端口 (SDP) 模式,包括 错误纠正代码 (ECC) 实现 

在某个重叠地址上,当一个端口在执行写操作而另一个端口在尝试进行后续的读操作时,读操作可能会失败,并且被写入的存储器位置的内容可能会损坏。如果 Block RAM 的 CLKA 和 CLKB 受同一个时钟驱动,那么将不会发生冲突,并且可以成功执行读写操作而不会发生存储器损坏。有关哪些时钟机制会受到此问题影响的更多详情,请参阅下列图表,并查阅“解决方法”部分以获取解决此问题的方法。



图 1:







表 1:地址冲突条件

 
RAMB36E1 原语

RAMB18E1 原语
地址冲突
在满足下列所有条件下才会发生地址冲突:

- 同时启用了两个端口(ENA 和 ENB = 1)

- 两个端口使用的不是同一个时钟 (CLKA ≠ CLKB)

-  时钟之间的相位偏移介于 100 ps 和 3 ns 之间(或下一个时钟沿) 

- 对于两个端口来说,A14-A8、A5 和 A0 都是相同的

在满足下列所有条件下才会发生地址冲突:

- 同时启用了两个端口(ENA 和 ENB = 1)

- 两个端口使用的不是同一个时钟 (CLKA ≠ CLKB)

-  时钟之间的相位偏移介于 100 ps 和 3 ns 之间(或下一个时钟沿) 

- 对于两个端口来说,A13-A7 和 A4 都是相同的


受影响的组件:
  • RAMB18E1 或 RAMB36E1,其 WRITE_MODE 在任一端口上均设置为 READ_FIRST
  • RAM_MODE=SDP 的 RAMB18E1 或 RAMB36E1
  • 所有 UNIMacro 组件,其 WRITE 模式在任一端口上均设置为 READ_FIRST



软件行为:
  • 在 ISE 11.4 和更高版本的软件中 - 将在 READ_FIRST 模式(包括 SDP 和 ECC 模式)的 block RAM 设计中生成一个警告消息,并且 CLKA 和 CLKB 将与不同的时钟相关联。
  • 在 ISE 12.1 和更高版本中 -  仿真的结果向用户阐明了此问题。  已更新了仿真模型以向用户发出此条件警报,并且反映可能发生损坏的未知因素。
  • 在 ISE 12.2 和更高版本中,已为简单双端口模式的 Block RAM 配置添加了 WRITE_FIRST 模式支持。如需更多详情,请参阅“解决方法”部分。

受影响的 IP:

某些 版本的 IP 受地址重叠问题的影响。为了避免发生此问题,请使用 ISE 12.1 或更高版本中的最新版 IP。



解决方法:
  • 对于真正双端口 (TDP) 模式,请确定是否绝对有必要使用 READ_FIRST 模式。  如果没有必要,请使用 WRITE_FIRST 或 NO_CHANGE 模式。
  • 在 12.1 软件中推出更新的仿真模型时,应该使用该模型对所有情况执行完整时序仿真。  为了识别任何潜在的冲突,至少应该运行综合后仿真。
  • 从 12.2 ISE 软件开始,简单双端口 (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 生成器来生成 Block RAM 的简单双端口配置,请选择并生成 v4.2 版的内核来使用 WRITE_FIRST 模式。 FIFO 生成器 v6.2 在必要时会自动使用 WRITE_FIRST 简单双端口 Block RAM。
    • 要为 SDP Block RAM 启用 WRITE_FIRST 模式,请在 UCF 文件的任何所需 Block RAM 中添加以下两个约束:
    • INST <BRAM_inst_name> WRITE_MODE_A = WRITE_FIRST;  
    • INST <BRAM_inst_name> WRITE_MODE_B = WRITE_FIRST; 
AR# 34859
日期 07/29/2010
状态 Active
Type 设计咨询
器件 More Less
Tools