1 / 39

7.4 基于 IP Core 的 Block RAM 设计

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 的特性

nalani
Download Presentation

7.4 基于 IP Core 的 Block RAM 设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 7.4 基于IP Core的Block RAM设计

  2. 7.4 基于IP Core的Block RAM设计 • 本节介绍基于IP Core的Block RAM设计,由于Block RAM属于特殊结构,使用Xilinx公司提供的IP Core是比较方便的,而且灵活、高效、不容易出错(IP Core的使用请见3.1.4节)。

  3. 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字的存储深度。

  4. 支持ROM功能,两个端口可以同时对一个地址的数据进行读操作。支持ROM功能,两个端口可以同时对一个地址的数据进行读操作。 • 支持RAM功能,两个端口可以同时对不同的地址进行写操作,或者对同一地址进行读操作。 • 两个端口是完全独立的。 • 支持A、B端口的不对称配置。 • 支持CORE设计或者使用SelectRAM+ 、 SelectRAM-II 库原语以求面积优化。 • 支持不同极性的控制信号引脚:时钟(clock)、 使能(enable), 写使能(write enable) 和输出初使化(output initialization)引脚。 • 结合Xilinx的Smart-IP技术使设计更灵活,最优化实现。

  5. 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系列中实现。

  6. 每个存储器含有两个完全独立的端口A和B,两个端口享有同时访问存储器中同一地址的能力,存储器的深度和宽度由使用者自己定义。两个端口在功能上是完全一样,都可以对存储器进行读写操作。两个端口可以同时对存储器的同一地址进行读操作,如果对同一地址进行操作,一个端口读,一个端口写,那么写操作成功,而读出的数据是无效的。每个存储器含有两个完全独立的端口A和B,两个端口享有同时访问存储器中同一地址的能力,存储器的深度和宽度由使用者自己定义。两个端口在功能上是完全一样,都可以对存储器进行读写操作。两个端口可以同时对存储器的同一地址进行读操作,如果对同一地址进行操作,一个端口读,一个端口写,那么写操作成功,而读出的数据是无效的。

  7. 根据使用者的定义,可以配置端口A和端口B的数据宽度和地址宽度。当两个端口被禁用时(ENA和ENB无效),存储器中的数据和输出端口将保持不变。当两个端口可用时(ENA和ENB有效),对存储器的所有操作将在输入时钟的边沿触发。根据使用者的定义,可以配置端口A和端口B的数据宽度和地址宽度。当两个端口被禁用时(ENA和ENB无效),存储器中的数据和输出端口将保持不变。当两个端口可用时(ENA和ENB有效),对存储器的所有操作将在输入时钟的边沿触发。

  8. 进行写操作时(WEA或WEB有效),相应数据端口的数据将写入地址端口所指定的存储地址中。 在这个操作中,Spartan-II/Virtex和Virtex-II系列的块RAM的输出端口的动作并不相同。 • Virtex-II和Spartan-3系列的块RAM的输出端口的具体实现要根据“写模式”的设置而定。Virtex-II和Spartan-3系列的块RAM支持3种“写模式”,每种模式决定了输出端口在写操作发生后将如何作出反应。

  9. Spartan-II和Virtex系列的块RAM只支持一种“写模式”:Read-After-Write。这种写模式使写入的数据在写操作后呈现在输出端口。Spartan-II和Virtex系列的块RAM只支持一种“写模式”:Read-After-Write。这种写模式使写入的数据在写操作后呈现在输出端口。 • 在读操作时,地址输入端口指定的地址上的数据在输出端口输出。当同步初始化(Synchronous Initialization(SINITA或SINITB))有效时,有锁存器的输出端口将被同步初始化,Spartan-II和Virtex系列将被初始化为0,Virtex-II系列将被初始化为使用者事先定义的数据。同步初始化操作并不影响存储器中的数据,也不会与写操作发生冲突。 • 使能,写使能和同步初始化可以被定义为高电平有效或者低电平有效。

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

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

  12. 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个窗口,可以单击按钮进入下一个窗口。

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

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

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

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

  17. 元件名称(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的大小不能超过目标器件库原语的大小

  18. 端口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端口的宽度。

  19. 地址端口B深度(Depth B):定义了Width A、Depth A和Width B后,Depth B的值将为定值。根据端口A和B定义的存储器的大小必须相等可以计算出Depth B。

  20. 端口A可选项(Port A Options): • 配置(Configuration)选项:可以选择的有Read And Write(读和写), Write Only(只写)和Read Only(只读)。 • 写模式(Write mode)选择:可以为Virtex-II系列的块RAM选择写模式。Spartan-II和Virtex系列的块RAM只支持Read After Write模式。

  21. Read After Write模式(支持的有Virtex-II、Spartan-II、Spartan-3、Virtex),可能有下面几种情况: • 没有输入输出寄存器时:数据在WEA信号有效后的第一个时钟沿传送到端口DOUTA。 • 仅有输入寄存器时:数据在WEA信号有效后的第二个时钟沿传送到端口DOUTA。 • 仅有输出寄存器时:数据在WEA信号有效后的第二个时钟沿传送到端口DOUTA。 • 有输入和输出寄存器时:数据在WEA信号有效后的第三个时钟沿传送到端口DOUTA。 • Read After Write模式的时序如图7.4.6所示。

  22. 图7.4.6 Read After Write模式时序

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

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

  25. 图7.4.7 Read Before Write模式时序

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

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

  28. 端口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信号有效时一直是有效的。

  29. 可选输入寄存器(Register Options) :可以为端口DIN、ADDR和WE添加输入寄存器。 可选输出寄存器(Output Register Options): • a. Additional Output Pipe Stages:选择‘1’可以为输出端口再增加一级寄存器,选择‘0’不加寄存器。 • b. 初始化(SINIT)引脚: SINIT引脚的含义见表7.4.1。

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

  31. 端口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.

  32. 初始化(Initial Contents):可以设置配置后存储器中的初始值。 • 全局初始化值(Global Init Value):全局初始化值定义了配置后存储器中初始值。缺省(默认)为‘0’。注意输入的值必须是16进制,并且其大小不能超过A端口能输入的最大值。 • 加载初始化文件(Load Init File):存储器中的初始值可以保存在一个以COE为后缀的文件中,加载这个文件可以使存储器在配置后,各个单元的初始值为文件中所列出的值。

  33. 7.4.3 使用Memory Editor生成COE文件 • 前面提到,可以为双端口RAM提供一个初始化数据文件,加载这个文件可以使RAM在配置后,各个单元的初始值为文件中的所列出的值。下面介绍如何使用Memory Editor生成这个文件,并且写入初始化数据。

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

  35. 图7.4.10 Memory Editor

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

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

  38. 图7.4.12 生成COE文件

More Related