Upload
nalani
View
157
Download
8
Embed Size (px)
DESCRIPTION
7.4 基于 IP Core 的 Block RAM 设计. 7.4 基于 IP Core 的 Block RAM 设计. 本节介绍基于 IP Core 的 Block RAM 设计,由于 Block RAM 属于特殊结构,使用 Xilinx 公司提供的 IP Core 是比较方便的,而且灵活、高效、不容易出错( IP Core 的使用请见 3.1.4 节)。. 7.4.1 双端口块 RAM ( Dual-Port Block RAM ). 双端口 RAM 的特性 - PowerPoint PPT Presentation
Citation preview
7.4 基于 IP Core 的 Block RAM设计 本节介绍基于 IP Core 的 Block RAM 设计,由于 Block RAM 属于特殊结构,使用 Xilinx 公司提供的 IP Core 是比较方便的,而且灵活、高效、不容易出错( IP Core 的使用请见 3.1.4 节)。
7.4.1 双端口块 RAM ( Dual-Port Block RAM )双端口 RAM 的特性
Virtex 、 Virtex-E 、 Virtex-II 、 Virtex-IIPro 、Spartan 、 Spartan-II 、 Spartan-IIE 和 Spartan-3 系列的 FPGA 都嵌入了 Block RAM 。 支持所有 3 种 Virtex-II 写模式 :Read-After-Write 、Read-Before-Write 和 No-Read-On-Write (只适用于 Virtex-II 和 Spartan-3 ) 支持 RAM 和 ROM 功能。 支持 1 到 256BIT 的数据端口宽度。 根据选择的不同结构,支持 1 到 2M 字的存储深度。
支持 ROM 功能,两个端口可以同时对一个地址的数据进行读操作。 支持 RAM 功能,两个端口可以同时对不同的地址进行写操作,或者对同一地址进行读操作。 两个端口是完全独立的。 支持 A 、 B 端口的不对称配置。 支持 CORE 设计或者使用 SelectRAM+ 、 SelectRAM-II 库原语以求面积优化。 支持不同极性的控制信号引脚:时钟( clock )、 使能( enable ) , 写使能( write enable ) 和输出初使化( output initialization )引脚。 结合 Xilinx 的 Smart-IP 技术使设计更灵活,最优化实现。
2 .双端口 RAM 的功能描述 Dual-Port Block RAM 是由一块或多块叫做 Select-RAM+™ 的 4Kb 存储块组成的。 Virtex-II 和 Spartan-3 系列的 Dual-Port Block RAM 是由一块或多块 16 Kb 存储块( SelectRAM-II™ )组成的,能构成更宽或者更深的存储器设计。 Select-RAM+™ 和 SelectRAM-II™ 都是真正的双端口 RAM ,为 Spartan-II 和 Virtex 系列家族的芯片提供快速、离散的而且足够大的块 RAM 。因为 Spartan-II 和 Virtex 都使用 4Kb 的 Select-RAM+™ 存储块,所以任何涉及到 Virtex 能实现的 RAM ,都可以在 Spartan-II 、 Virtex-E 、 Virtex-II 、 Virtex-IIPro 、 Spartan-IIE 系列中实现。
每个存储器含有两个完全独立的端口 A 和 B ,两个端口享有同时访问存储器中同一地址的能力,存储器的深度和宽度由使用者自己定义。两个端口在功能上是完全一样,都可以对存储器进行读写操作。两个端口可以同时对存储器的同一地址进行读操作,如果对同一地址进行操作,一个端口读,一个端口写,那么写操作成功,而读出的数据是无效的。
根据使用者的定义,可以配置端口 A 和端口 B的数据宽度和地址宽度。当两个端口被禁用时( ENA 和 ENB 无效),存储器中的数据和输出端口将保持不变。当两个端口可用时( ENA 和 ENB 有效),对存储器的所有操作将在输入时钟的边沿触发。
进行写操作时( WEA 或 WEB 有效),相应数据端口的数据将写入地址端口所指定的存储地址中。 在这个操作中, Spartan-II/Virtex 和 Virtex-II 系列的块 RAM 的输出端口的动作并不相同。 Virtex-II 和 Spartan-3 系列的块 RAM 的输出端口的具体实现要根据“写模式”的设置而定。Virtex-II 和 Spartan-3 系列的块 RAM 支持 3 种“写模式”,每种模式决定了输出端口在写操作发生后将如何作出反应。
Spartan-II 和 Virtex 系列的块 RAM 只支持一种“写模式”: Read-After-Write 。这种写模式使写入的数据在写操作后呈现在输出端口。 在读操作时,地址输入端口指定的地址上的数据在输出端口输出。当同步初始化( Synchronous Initialization(SINITA 或 SINITB) )有效时,有锁存器的输出端口将被同步初始化, Spartan-II 和 Virtex 系列将被初始化为 0 , Virtex-II 系列将被初始化为使用者事先定义的数据。同步初始化操作并不影响存储器中的数据,也不会与写操作发生冲突。 使能,写使能和同步初始化可以被定义为高电平有效或者低电平有效。
端口名称 端口方向 功能描述DIN[A|B]<n:0>可选 输入 数据输入:数据从此端口写入存储器。ADDR[A|B]<m:0> 输入 地址输入:写或者读操作的地址由此端口输入。 WE[A|B]可选 输入 写使能控制信号:控制数据写入存储器。 EN[A|B]可选 输入 使能控制信号:写或者读操作的有效控制。SINIT[A|B]可选 输入 同步初始化控制信号:使输出端口初始化为预先设定的状态。 CLK[A|B] 输入 时钟信号:所有存储器操作是在输入时钟的同步下进行的。 ND[A|B]可选 输入 握手信号:表示 A 或者 B 端口上有新的而且有效的地址数据。(高电平有效)。 DOUT[A|B]<n:0>可选 输出 数据输出端口:存储器的同步数据输出端口。 RFD[A|B]可选 输出 握手信号:表示存储器已经准备好接受新数据。(高电平有效) RDY[A|B]可选 输出 握手信号:表示输出端口上的数据有效。(高电平有效)。
7.4.2 使用 IP Core 生成双端口 RAM Xilinx 提供了 Dual-Port Block RAM 的 IP Core 。具体如何调用 IP Core 、生成 IP Core 见 3.1.4 节。这里介绍具体的一些 IP Core参数,设计者可以根据设计的需要设置这些参数。 Dual-Port Block RAM 的参数设置窗口分别如图 7.4.2、图 7.4.3 、图 7.4.4 、图 7.4.5所示。Dual-Port Block RAM 的参数设置一共有 4 个窗口,可以单击按钮进入下一个窗口。
元件名称( Component Name ) :为了生成 IP Core ,必须为生成的文件取一个名称。 端口 A 存储器大小( Memory Size ):
数据端口 A 宽度( Width A ):可以选择数据端口 A 的宽度,宽度可以从 1 到 256 。 地址端口 A 深度( Depth A ):可以选择存储器的字节数。根据所选择的不同结构,字节数可以从 2BIT 到 2M 。可以选择的地址深度要根据所选择的数据端口 A 的宽度而定。 Spartan-II 和 Virtex 系列的块 RAM 的最大字节数为 256K , Virtex-II 和 Spartan-3 系列的块 RAM 的最大字节数为 1M 。必须注意生成的 CORE 的大小不能超过目标器件库原语的大小
端口 B 存储器大小( Memory Size ):
数据端口 B 宽度( Width B ):可以选择数据端口 B 的宽度,可以选择的数据端口 B 的宽度取决于定义的数据端口 A 的宽度。对于 Spartan-II 和 Virtex 系列的块 RAM ,能够选择的宽度可以是 1 , 2, 4 , 8或 16倍 A 端口的宽度。对于 Virtex-II 系列的块 RAM ,能够选择的宽度可以是 1 , 2, 4 , 8, 16 或 32 倍 A 端口的宽度。
地址端口 B 深度( Depth B ):定义了 Width A 、 Depth A 和 Width B 后, Depth B 的值将为定值。根据端口 A 和 B 定义的存储器的大小必须相等可以计算出 Depth B 。
端口 A 可选项( Port A Options ) : 配置( Configuration )选项:可以选择的有 Read And Write (读和写) , Write Only (只写)和 Read Only (只读)。 写模式 (Write mode)选择:可以为 Virtex-II 系列的块 RAM选择写模式。 Spartan-II 和 Virtex 系列的块 RAM 只支持 Read After Write 模式。
Read After Write 模式(支持的有 Virtex-II 、 Spartan-II 、 Spartan-3 、 Virtex ),可能有下面几种情况: 没有输入输出寄存器时:数据在 WEA 信号有效后的第一个时钟沿传送到端口 DOUTA 。 仅有输入寄存器时:数据在 WEA 信号有效后的第二个时钟沿传送到端口 DOUTA 。 仅有输出寄存器时:数据在 WEA 信号有效后的第二个时钟沿传送到端口 DOUTA 。 有输入和输出寄存器时:数据在 WEA 信号有效后的第三个时钟沿传送到端口 DOUTA 。 Read After Write 模式的时序如图 7.4.6 所示。
Read Before Write 模式(支持的有 Virtex-II 、 Spartan-3 ),可能有下面几种情况: 没有输入输出寄存器时 :在 WEA 信号有效后的第一个时钟沿,存储器中当前地址上的数据被传送到端口 DOUTA 。 仅有输入寄存器时:在 WEA 信号有效后的第二个时钟沿,存储器中当前地址上的数据被传送到端口 DOUTA 。
仅有输出寄存器时:在 WEA 信号有效后的第二个时钟沿,存储器中当前地址上的数据被传送到端口 DOUTA 。 有输入和输出寄存器时:在 WEA 信号有效后的第三个时钟沿,存储器中当前地址上的数据被传送到端口 DOUTA 。
No-Read-On-Write 模式(支持的有 Virtex-II 、 Spartan-3 ):当 WEA 有效时,不会进行读操作。 DOUTA 端口将保持上一次读操作的数据。No-Read-On-Write 模式时序如图 7.4.8所示。
端口 B 可选项( Port B Options ) : 端口 B 可选项与端口 A 可选项相同。 端口 A 设计选项( Port A Design Options ) :
1 可选引脚端( Optional Pins ): a. 使能引脚端。 b. 握手信号引脚端。包括 ND 、 RFD 、 RDY 信号,它们的含义如表 7.4.1 所示。需要注意的是, ND 信号必须在 RFD 有效时才能有效。RFD 信号在 EN 信号有效时一直是有效的。
可选输入寄存器( Register Options ) :可以为端口 DIN 、 ADDR 和 WE添加输入寄存器。可选输出寄存器( Output Register Options ) :
a. Additional Output Pipe Stages: 选择‘ 1’可以为输出端口再增加一级寄存器,选择‘ 0’不加寄存器。 b. 初始化( SINIT )引脚: SINIT 引脚的含义见表 7.4.1 。
端口 B 可选项( Port B Options ) : 端口 B可选项与端口 A 可选项相同。 库原语选择( Primitive Selection ):有两项可供选择。
面积优化( Optimize For Area )。 选择库原语( Select Primitive )。 Virtex 、 Virtex-E 和 Spartan-II 的库原语有 4kx1, 2kx2, 1kx4, 512x8和 256x16 。 Virtex-II 的库原语有 16kx1, 8kx2, 4kx4, 2kx9, 1kx18, 和 512x36.
初始化( Initial Contents ) :可以设置配置后存储器中的初始值。 全局初始化值( Global Init Value ):全局初始化值定义了配置后存储器中初始值。缺省(默认)为‘ 0’。注意输入的值必须是 16 进制,并且其大小不能超过 A 端口能输入的最大值。 加载初始化文件( Load Init File ):存储器中的初始值可以保存在一个以 COE 为后缀的文件中,加载这个文件可以使存储器在配置后,各个单元的初始值为文件中所列出的值。
7.4.3 使用 Memory Editor 生成 COE文件 前面提到,可以为双端口 RAM 提供一个初始化数据文件,加载这个文件可以使 RAM 在配置后,各个单元的初始值为文件中的所列出的值。下面介绍如何使用 Memory Editor 生成这个文件,并且写入初始化数据。