1.4 块存储器资源 |
|
每个UltraScale结构的FPGA包含多个36Kb容量的块存储器(Block RAM,BRAM),每个块存储器都有完全独立的端口,共享保存的数据。每个BRAM可以配置成一个36Kb的RAM或者两个独立的18Kb的RAM。由时钟控制每个存储器的访问(读或者写),通过连接每个BRAM列的使能信号,可以在垂直相邻的BRAM之间实现级联。这样,就提供了一种非常容易的方法,用于创建大容量、快速的存储阵列和FIFO,大大降低了系统功耗。
将所有的输入、数据、地址、时钟使能和写使能寄存。输入地址总是被时钟驱动(除非关闭地址锁存),一直保留数据直到下一个操作为止。在以消耗一个额外时钟延迟的代价下,一个可选的输出数据流水线寄存器允许更高的时钟速率。在写操作期间,数据的输出能反映出前面所保存的数据或者新写入的数据,或者其保持不变。当设计者的设计中包含没有使用的BARM时,会自动断电,以降低功耗。每个BARM中有一个额外的引脚,它用于控制动态功率的控制特性。
每个端口可以配置成32K×1、16K×2、8K×4、4K×9(或8)、2K×18(或16)、1K×36(或32)或者512×72(或者64)模式。不管配置成一个RAM块还是FIFO,两个端口都可以有不同宽度和深度比,并且没有任何限制。只有在简单双端口模式下,其数据宽度可以大于18位(18Kb RAM)或者36位(36Kb RAM)。在该模式下,一个端口专用于读操作,另一个端口专用于写操作。在简单双端口模式下,一侧(读或者写)的宽度是可以变化的,而另一个端口固定为32/36位或者64/72位。双端口36KbRAM的所有侧都可以是可变的宽度。图1.12给出了简单双端口和真正双端口BRAM的配置模式。
图1.12 双端口RAM的两种配置模式
每个64位宽的BRAM能产生、保存和利用8位额外的海明码。在读过程中,纠正单比特错误和检测两比特错误操作。在写或者读外部64/72位宽的存储器时,也可以使用ECC逻辑。
图1.13给出了UltraScale内建的FIFO结构。每个BRAM能配置成一个36Kb的FIFO或者一个18Kb的FIFO。内建的FIFO控制器用于单时钟(同步)或者双时钟(异步或者多数据率)操作,内部递增地址。此外,提供了4个握手信号:满、空、可编程的满和编程的空。可编程的标志允许设计者指定FIFO计数器的值,这个值用于控制标志变成激活状态。使用者可以对FIFO的宽度和深度进行编程,以支持在一个FIFO上使用不同宽度的读端口和写端口。一个专用的级联路径允许容易创建更深的FIFO。
图1.13 内建FIFO的结构图