问题描述
SDP模式下的Spartan-6 FPGA 9K Block RAM不支持所有端口宽度组合。
解决/修复方法
问题描述
在ISE工具12.1之前,Spartan-6 FPGA RAMB8BWER组件可以设置为RAM_MODE = SDP并接受任一端口上的任何数据WIDTH值。由于意外的硬件问题,此模式下现在仅支持两个端口的36位数据宽度。如果未将两个端口都设置为36位(DATA_WIDTH_A == DATA_WIDTH_B == 36),则会导致功能故障,该故障表现为来自Block RAM的任何读取的数据损坏。目前(12.1之前),软件中没有关于此行为的警告;在SDP模式下接受所有端口宽度。
受影响的组件
RAMB8BWER的RAM_MODE设置为“SDP”,WIDTH_A和/或WIDTH_B未设置为36.另外,RAM_SDP_MACRO可以在BRAM_SIZE =“9Kb”时显示此信息,并且一个端口大于18位且一个端口为18位或减。目前,正在审查XST综合行为,以确认它不会产生这种情况。目前尚不清楚其他综合工具在这个问题上的表现。
软件版本信息
- ISE Design Suite 11.5及更早版本 – 没有出现错误或警告。仿真行为看起来很正常。硬件可能在读取期间出现功能故障(数据损坏)。
- ISE Design Suite 12.1及更高版本 – 设计规则检查(DRC)已添加到UNIMacro,UNISIM,Map和Physical DRC中,以便检测到非法设置的错误。
变通
实例化RAMB8BWER并将RAM_MODE设置为SDP的任何设计都必须将A和B端口都设置为36.如果不可能,可以通过以下方法解决此问题:
- 如果两个端口都是18位或更少,请在RAM_MODE = TDP模式下使用RAMB8BWER并连接为SDP
- 如果写端口为18位或更少且读端口为36位,则可以将两个端口宽度设置为36位,RAM_MODE = SDP,并使用字节写使能选择要写入的相应字节。
这对面积和性能的影响最小,因此是通常优选的方法。如果无法做到这一点,另一种方法是使用RAMB16BWER。
- 如果读端口为18位或更少且写端口为36位,则建议在需要性能时使用RAMB16BWER。如果块RAM资源较低,则可以在SDP模式下使用RAMB8BWER,并将两个端口设置为36位。但是,需要对输出进行多路复用以将适当的字索引到输出。
文档
Spartan-6 FPGA Block RAM资源用户指南 (UG383)包含表1,2和3中端口宽度组合的完整指南。有关此问题的更多信息,请参阅UG383,以及有关Spartan-6 FPGA的所有其他信息阻止RAM。
没有回复内容