Menu Close

Vivado Block ROM 的生成与配置详解

在Vivado下,Xilinx公司提供了很多实用的IP核,其中包括内存存储ROM (read-only memory,只读存储器),这些集成IP核功能强大,接口简单,仿真文件齐全,配套的设计案例丰富。建议在工程中充分利用这些简单,高性能,而且稳定可靠的IP核。本文主要介绍Block ROM的生成与配置。

Quartus下关于ROM IP核的生成,参考文章Quartus ROM 的生成与配置详解。

1.Vivado下内存配置与Quartus下的不同点

  • Vivado下ROM由Distributed Memory Generator生成的时候,可以不需要时钟锁存,直接生成,而Quartus的ROM IP核必须地址锁存。
  • Vivado下内存接口基本上都提供了AXI 4接口,而Quartus没有提供AXI4接口。

除此之外,注意在Xilinx中,内存IP核种类划分和Quartus 中RAM/ROM用端口数量和内存种类划分不一样,如图1所示。

图1 Quartus下内存分类。

 

Xilinx下通过内存的基本实现单位分为两大类,每一类可以细分为RAM/ROM和单端口/双端口,见图2所示:

图2 Xilinx下内存分类

2. Vivado ROM/RAM IP核分类

Xilinx下内存IP核分为了两种:

  • Distributed Memory Generator
  • Block Memory Generator

Distributed Memory Generator:分配式内存,主要使用LUT 资源来生成内存结构。LUT(lookup table)是只包括一个真值表的微小存储单位,因为LUT结构遍布FPGA,常见,灵活,所以LUT是最快的存储单元,一般被称为作distributed memory。

Block Memory Generator:相对较大的数据片上存储。详情参见文章Xilinx 7系列FPGA Block RAM概述。

 

3. Vivado下生成Block ROM IP核步骤

ROM是一个免费但功能强大的IP核。这里使用Block Memory Generator生成ROM IP以及配置和应用的例子。下面以使用Block Memory Generator生成一个16 X 256的单端口ROM为例介绍Block ROM IP配置步骤。步骤如下:

  • 在Vivado IP catalog 中找到Block Memory Generator,双击跳出界面如图3所示,

图3

 

  • 在图3中的选择合适的参数进行配置,各个参数的选择如下:
    • 选择Interface Type为Native(这里不选择AXI4,关于配置成AXI4接口的例子,在之后会有专门的文章进行讨论)。
    • Memory Type选择为 Single Port ROM。
    • Write Enable 在选择 ROM后,会自动禁用;因为ROM在初始化后,只能读,而不能写。
    • Algorithm Options 可选Minimum Area,Low Power和Fixed Primitives 3种。这里选择Minimum Area。 三种算法的举例如图4所示:

图4

 

Minimum Area算法可以使用最少的RAM原语块。Low Power算法最小化读取或写入操作期间启用的Block Memory的数量,但是可能会使用更多的Block Memory块。Fixed Primitives算法只需要一种RAM原语块,并根据需要进行拼接。

图5

 

  • 由于是Single Port ROM,这里只需要配置Port A Option。这里设置为宽度16-bit,深度256-bit。
  • 注意Enable Port Type选择Always Enabled
  • 对于Port A Optional Output Registers有两个选项:Primitive Output Register和Core Output Register,优点是会提升性能,缺点是都会为读取操作增加一个额外的时钟周期延迟。这里选择的是 Primitive Output Register,是Block Memory Generator里的嵌入式输出寄存器,不需要额外的FPGA资源,而Core Output Register需要FPGA的额外资源和通用的内部连线,如图所示:

图6

 

图7

 

图8

 

  • Block Memory Generator IP核的总结,Memory Type是单端口ROM,因为16* 256 = 4Kb,所以只需要使用1个18K BRAM就足够
  • 地址锁存需要的一个时钟周期加上输出的锁存,总共读操作会有2个时钟周期的延时
  • 地址宽度是8-bit

之后的文章会讲解如何使用这个生成的单端口ROM IP核。

Posted in FPGA, FPGA 教材教案, FPGA开发板, IP开发, Verilog, Verilog, Vivado, 开发工具, 开发板, 开发语言, 教材与教案, 文章, 编程语言

发表回复

相关链接