0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vivado中BRAM IP的配置方式和使用技巧

CHANBAEK 来源:FPGA入门到精通 作者:未可知摩尔 2023-08-29 16:41 次阅读

FPGA开发中使用频率非常高的两个IP就是FIFO和BRAM,上一篇文章中已经详细介绍了Vivado FIFO IP,今天我们来聊一聊BRAM IP。

本文将详细介绍Vivado中BRAM IP的配置方式和使用技巧。

一、BRAM IP核的配置

1、打开BRAM IP核

在Vivado的IP Catalog中找到Block Memory Generator IP核,双击打开参数配置界面。

图片

2、配置BRAM IP基本参数

图片

(1)IP名

定制的IP的名字只能在定制时设定好,后续不能修改。

IP名设定,简单易懂即可,按照功能或数据宽度和深度来设定即可,例如BRAM_8x256,即表示数据宽度为8bit,数据深度为256bit。

(2)接口类型(Interface Type)

Native:最基本的接口,包括数据写入、数据读取等信号

AXI4:AXI4总线通信协议接口

(3)存储类型(Memory Type)

Single Port RAM:单端口RAM

Simple Dual Port RAM:简单双端口RAM,可选同步时钟和异步时钟,A端口只支持写数据,B端口只支持读数据。

True Dual Port RAM:真双端口RAM,可选同步时钟和异步时钟,A端口和B端口都支持写数据和读数据。

Single Port ROM:单端口ROM

Dual Port ROM:双端口ROM,A端口和B端口都可以读取数据

3、配置A端口或B端口参数

A端口和B端口参数配置界面基本一致,这里只介绍A端口的参数配置。

图片

(1)存储大小设置(Memory Size)

设置读数据或写数据端的数据位宽和深度,数据位宽范围为1 ~ 4608bit,数存储深度为2~1048576。

operating mode:读写同一个地址时,操作模式设定:写优先、读优先、不变,建议在实际应用时不出现这种情况。

Enable Port Type:设定是否开放端口使能控制信号。

(2)输出数据寄存设置

Primitives Output Register:输出数据是否插入一个寄存器,如果不选中这个,则读数据延时只有1个周期,否则读数据延时有2个周期。

建议选中这个输出寄存器,可以改善时序。

(3)复位参数设置

RSTA Pin (setreset pin):复位端口选择,如果选中,则开放复位端口。

Output Reset Value (Hex):设定复位生效后,输出数据值,默认为0

4、Other Options

这部分初始化值,对于RAM来说可能用处不大,但对于ROM来说很重要。

图片

选中这个Load Init File,再点击“Browse”选中“coe或mif”格式文件,最后点击“Edit”,在打开的界面选择“Valide”校验一下,如果有问题,这部分会提示红色文字,否则继续下一步即可。

5、IP设置参数总览

IP设置参数总览,可看到资源消耗、宽度、深度、读延迟等信息

图片

6、点击OK生成IP核。

在IP核生成完成后,点击source窗口下的“IP source”,鼠标左键单击这个IP,在“Instantiation Template”下,双击“veo”后缀文件,即可看到例化模板。

图片

二、BRAM IP核的接口

1、时钟信号和复位信号

复位信号 rsta/rstb

时钟 clka(A端口时钟) clkb(b端口时钟),复位信号 rsta(A端口复位),rstb(B端口复位)

2、端口信号

A和B端口信号基本一样,这里以A端口为例。

ena A端口使能信号

wea A端口写使能信号

addra A端口读写地址

dina A端口的写入数据

douta A端口的读取数据

三、BRAM IP核的调用

BRAM IP核的调用很简单,这里以同步时钟下的简单双端口RAM为例:

module top (
  input clk,
  input [7:0] data_in,
  input wr_en, 
  input [7:0] wr_addr,
  input [7:0] rd_addr,
  output [7:0] data_out  
);

    BRAM_8x256 u_BRAM_8x256 (
      .clka(clk),    // input wire clka
      .ena(1'b1),      // input wire ena
      .wea(wr_en),      // input wire [0 : 0] wea
      .addra(wr_addr),  // input wire [7 : 0] addra
      .dina(data_in),    // input wire [7 : 0] dina
      .clkb(clk),    // input wire clkb
      .enb(1'b1),      // input wire enb
      .addrb(rd_addr),  // input wire [7 : 0] addrb
      .doutb(data_out)  // output wire [7 : 0] doutb
    );

endmodule

下面是BRAM IP核的一个简单的testbench:

module test;

reg clk;  
reg [7:0] din;
reg wen;
reg [7:0] waddr;
reg [7:0] raddr;
wire [7:0] dout;

top u_top(
  .clk(clk), 
  .data_in(din),
  .wr_en(wen),
  .wr_addr(waddr),
  .rd_addr(raddr),
  .data_out(dout)  
);

initial begin
  clk = 0;
  wen = 0; waddr = 0; raddr = 0;
  #10 wen = 1; waddr = 1; din = 5; 
  #10 wen = 1; waddr = 2; din = 6; 
  #10 wen = 1; waddr = 3; din = 7; 
  #10 wen = 1; waddr = 4; din = 8;
  #10 wen = 1; waddr = 5; din = 9;
  #10 wen = 0; raddr = 1;
  #10 wen = 0; raddr = 2;
  #10 wen = 0; raddr = 3;
  #10 wen = 0; raddr = 4;
  #10 wen = 0; raddr = 5;
  #30 $finish;
end

always #5 clk = ~clk;  

endmodule

仿真测试图:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21326

    浏览量

    593235
  • 寄存器
    +关注

    关注

    30

    文章

    5032

    浏览量

    117745
  • fifo
    +关注

    关注

    3

    文章

    369

    浏览量

    43069
  • IP核
    +关注

    关注

    4

    文章

    317

    浏览量

    49043
  • BRAM
    +关注

    关注

    0

    文章

    40

    浏览量

    10886
收藏 人收藏

    评论

    相关推荐

    请问vivado如何减少BRAM瓦片这一数量?如何操作?

    嗨,我的设计在合成中使用141.5 BRAM瓦片。但是,在Zynq可以使用140 BRAM瓦片。实施后,这个数量下降到133瓦。我的问题是vivado如何减少这一数量?实施?这点可以
    发表于 10-31 16:17

    初始化BRAM警告coe文件不存在

    大家好,我搜索了几个关于初始化BRAM的线程,但我找不到答案。我使用的是Vivado 2015.4。我写了一个coe文件,想把coe文件加载到BRAM。首先,我添加一个
    发表于 04-17 09:47

    怎么将PGM程序文件加载到BRAM模型

    我有一个程序文件,在模拟开始时必须存储在BRAM。要加载BRAM,我无法重复使用我的传统测试平台任务,因为内存组织不同,因为这些任务是为ASIC RAM IP编写的。我们正在尝试使用
    发表于 04-22 07:41

    如何使用Vivado IP Block Design?

    对你所有的人来说,我已经阅读了有关IP Block Designs的手册和培训材料,并成功地生成了AXI LITE BRAM IP设计,以及之前在USER社区为您提供的一些帮助。我所
    发表于 03-20 08:52

    vivadobram加载coe文件数据仅在实例化中生成datain

    vivadobram加载coe文件数据仅在instatntiation中生成datain,但没有datain
    发表于 04-15 10:12

    如何设计定制的AXI-lite主IP

    嗨,我开始使用Vivado了。我正在尝试配置从Dram读取数据的自定义IP,处理它们然后将结果发送到Bram控制器。我想过使用AXI主接口制作自定义
    发表于 05-14 06:41

    URAM和BRAM的区别是什么

    地址,读出的是该地址原有数据;A端口写而B端口读同一地址,读出的是新写入的数据。    实例化方式  对于 BRAM,可采用原语、XPM_MEMORY、RTL代码或者IP Core的方式
    发表于 12-23 16:57

    BRAM IP核包括哪几种类型?怎么使用?

    BRAM IP核包括哪几种类型?Vivadoxilinx_BRAM IP核怎么使用?
    发表于 03-08 07:11

    FPGA实现基于VivadoBRAM IP核的使用

      Xilinx公司的FPGA中有着很多的有用且对整个工程很有益处的IP核,比如数学类的IP核,数字信号处理使用的IP核,以及存储类的IP核,本篇文章主要介绍
    的头像 发表于 12-29 15:59 9843次阅读

    Vivado中xilinx_BRAM IP核使用

    Vivado2017.2 中BRAM版本为 Block Memory Generator Specific Features 8.3。BRAM IP核包括有5种类型:Single-p
    发表于 03-10 06:15 19次下载
    <b class='flag-5'>Vivado</b>中xilinx_<b class='flag-5'>BRAM</b> <b class='flag-5'>IP</b>核使用

    浅析VivadoIP核DDS使用方式及注意事项

    vivado提供了DDS IP核可以输出正余弦波形,配置方法如下
    的头像 发表于 04-27 15:52 9192次阅读
    浅析<b class='flag-5'>Vivado</b>的<b class='flag-5'>IP</b>核DDS使用<b class='flag-5'>方式</b>及注意事项

    如何进行FFT IP配置和设计

    以Xilinx Vivado设计套件中提供的FFT IP为例,简要说明如何进行FFT IP配置和设计。
    的头像 发表于 07-22 10:21 1853次阅读

    如何在Vivado配置FIFO IP

    Vivado IP核提供了强大的FIFO生成器,可以通过图形化配置快速生成FIFO IP核。
    的头像 发表于 08-07 15:36 1938次阅读
    如何在<b class='flag-5'>Vivado</b>中<b class='flag-5'>配置</b>FIFO <b class='flag-5'>IP</b>核

    Vivado IP核Shared Logic选项配置

    在给Vivado中的一些IP核进行配置的时候,发现有Shared Logic这一项,这里以Tri Mode Ethernet MAC IP核为例,如图1所示。
    的头像 发表于 09-06 17:05 637次阅读
    <b class='flag-5'>Vivado</b> <b class='flag-5'>IP</b>核Shared Logic选项<b class='flag-5'>配置</b>

    FPGA实现基于VivadoBRAM IP核的使用

    Xilinx公司的FPGA中有着很多的有用且对整个工程很有益处的IP核,比如数学类的IP核,数字信号处理使用的IP核,以及存储类的IP核,本篇文章主要介绍
    的头像 发表于 12-05 15:05 520次阅读