39
7.4 基基 IP Core 基 Block RAM 基基

7.4 基于 IP Core 的 Block RAM 设计

  • 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设计

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 系列将被初始化为使用者事先定义的数据。同步初始化操作并不影响存储器中的数据,也不会与写操作发生冲突。 使能,写使能和同步初始化可以被定义为高电平有效或者低电平有效。

3 .双端口 RAM 的引脚 双端口 RAM 的 Core引脚如图 7.4.1 所示。

图 7.4.1 双端口 RAM 的引脚

双端口 RAM 的 Core 引脚的具体含义列表于表 7.4.1 。

端口名称 端口方向 功能描述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 个窗口,可以单击按钮进入下一个窗口。

图 7.4.2 Dual-Port Block RAM 的参数设置窗口

图 7.4.3 Port A Block RAM 的参数设置窗口

图 7.4.4 Port B Block RAM 的参数设置窗口

图 7.4.5 Dual-Port Block RAM 的参数设置窗口

元件名称( 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 所示。

图 7.4.6 Read After Write 模式时序

Read Before Write 模式(支持的有 Virtex-II 、 Spartan-3 ),可能有下面几种情况: 没有输入输出寄存器时 :在 WEA 信号有效后的第一个时钟沿,存储器中当前地址上的数据被传送到端口 DOUTA 。 仅有输入寄存器时:在 WEA 信号有效后的第二个时钟沿,存储器中当前地址上的数据被传送到端口 DOUTA 。

仅有输出寄存器时:在 WEA 信号有效后的第二个时钟沿,存储器中当前地址上的数据被传送到端口 DOUTA 。 有输入和输出寄存器时:在 WEA 信号有效后的第三个时钟沿,存储器中当前地址上的数据被传送到端口 DOUTA 。

图 7.4.7 Read Before Write 模式时序

No-Read-On-Write 模式(支持的有 Virtex-II 、 Spartan-3 ):当 WEA 有效时,不会进行读操作。 DOUTA 端口将保持上一次读操作的数据。No-Read-On-Write 模式时序如图 7.4.8所示。

图 7.4.8 No-Read-On-Write 模式时序

端口 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 。

引脚极性( Pin Polarity ):使用者可以为存在的引脚极性配置。对于时钟信号,可以配置成上升沿或下降沿触发。对于 EN 、 WE 和 SINIT 引脚端,可以配置成高电平或低电平有效。

端口 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 生成这个文件,并且写入初始化数据。

打开 Xilinx Core Generator 。选择菜单 ToolsMemory Editor ,如图 7.4.9所示。进入 Memory Editor ,如图 7.4.10 所示。

图 7.4.10 Memory Editor

(2)单击按钮,如图 7.4.11 所示键入名称。

图 7.4.11 键入名称

单击确定。然后设置好双端口 RAM 的各个参数,并且在初始值输入区填写数据。选择 FileGenerate COE Files 生成 COE文件,如图 7.4.12所示。

图 7.4.12 生成 COE文件