FPGA从Xilinx的7系列学起(6)

2.3 7 系列BlockRAM使用三种模式

2.3.1 简单单口BlockRAM

如上图所示,简单的单口RAM的端口非常简单:
时钟: CLKA,
地址: ADDRA
写使能: WEA,
写数据: DIA,
读数据: DOA,

还有一些其他的非必须的端口图中就没有一一列出来了。

以前我们讲过,BlockRAM都是真正的双口RAM,但是有时候需要简单有效的配置方式,用户就会选择使用简单的单口RAM的模式。类似于中国人说的弱水三千只取一瓢,你纵使有各种的灵活性,我还是选择最适合我的配置方式。由于BlockRAM可以分割成36K或18K位的大小,下面列出来当用户你完全使用36Kb RAM的时候能够配置的方式和用户只使用18Kb RAM的时候能够配置的模式。对于36Kb大小的空间可以配制成:32k x 1, 16k x 2, 8k x 4, 4k x 9, 2k x 18, 1k x 36;对于18Kb的空间可以配置成: 16k x 1, 8k x 2, 4k x 4,2k x 9, 1k x 18, 512 x 36。另外也允许用户配置的写模式有三种:

WRITE_FIRST: 同时读写相同地址时,从DIA写入的数据立即在DOA上可见,也就是写优先;

READ_FIRST: 同时读写相同地址时,以前的数据还是出现在DOA上,也就是读优先;

NO_CHANGE: DOA一直保持以前的数据(可以节省功耗)。

这些配置都是你在例化BlockRAM的GUI界面上可以选择的。

另外说一下,除了上面显示的信号,简单的端口RAM端口还有其他端口:

读使能:ENA,

输出锁存器复位:RSTRAMA,

输出寄存器复位:RSTREGA

输出寄存器芯片使能:REGCEA,

为简化起见,DIA和DOA总线被示出为包括校验位,校验位和数据实际是不同的总线,他们分别是DIPA和DOPA。RST,CE,和CLK信号高低有效的使能是可编程的决定。其他RST信号是同步的Reset信号。REGCEA优先级是否超过RSTREGA是通过RSTREG_PRIORITY属性来编程。另外,即使是写使能不是有效的时候,也要确保Address线上没有时序错误。

2.3.2 真正的双口Block RAM

端口信息如图所示,就不一一赘述了。真正的双端口的RAM有两个独立的读/写端口,每个端口都有独立的时钟、地址、输入数据、输出数据、写使能等等。两个端口的时钟可以设置成同步或者异步;和简单的端口RAM不同的是真正的双端口RAM可以配置成不同的宽度。同时两个端口可以具有不同的写模式。那么就要求用户在写之前执行读,或者读之前执行写。这在例化BlockRAM的GUI界面中设置。这是非常重要,用户可以进行对一个位置进行读写,但是这个操作可能导致用户需求数据发生冲突产生错误,所以必须确保您的地址和控制信号不会造成数据冲突。只有在一种情况下不会发生错误,就是读写的时钟相同,写端口的写模式是READ_FIRST,读端口是要求使用旧数据。

2.3.3 简单的双口Block RAM


端口信息同样如图所示,也就不一一赘述了。BlockRAM有时候会被配置成为简单的双端口RAM。在这种配置模式下,每个端口分配为读或写功能,根据用户使用的BlockRAM大小,可以被配制成不同的模式:对于36Kb大小的空间的,两个端口中的一个被配置成72位;对于18Kb的空间的,两个端口中的一个被配置成32位。这是因为如果宽端口是没有必要的,用户只需要使用一个真实的双端口RAM来代替,甚至一个简单的双端口RAM的功能就足够了。

文章来源: FPGA那点事儿