RAM IP核

简介: RAM IP核

RAM IP核

RAM: Random Access Memory, 随机存取存储器。

可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据,将地址作为索引

读写速度是由时钟频率决定的。

作用: 主要用来存放程序以及程序执行过程中产生的中间数据、结果等

RAM IP核简介

通过对BRAM( 块RAM )存储器模块进行配置,可以实现各种存储器功能( RAM, 移位寄存器,ROM以及FIFO缓冲器 )

Block RAM资源, 一片是36K

每一片RAM有完全独立的读写端口

每一个端口都可以配置为32Kx1, 16Kx2, 8Kx4, 4Kx9(or8), 1Kx36(or 32), 512x72(or 64), 常用位宽为8,16,32

36K 资源不一定能够完全使用, 只有在特定的位宽才可以使用36K

每一块Block RAM可以被分割成独立的两块18K块RAM使用

所有的Block RAM的读写位宽都可以改变

两个邻近的36KBlock RAM,可以被配置成为一个64Kx1的双端口RAM

Vivado的BMG IP核( Block Memory Generator , 块RAM生成器),可以配置成RAM或者ROM。

  • RAM,随机存取存储器,可读可写
  • ROM, 只读存储器,正常工作时只读

两者使用资源都是FPGA内部的BRAM, 不过ROM只用到了BRAM的读数据端口。

RAM分类: 真双端口RAM, 伪双端口RAM,单端口RAM

  • 真双端口RAM( True Dual-Port RAM, TDP), 两个端口都可以独立的对BRAM进行读写
  • 伪双端口RAM( Simple Dual-Port RAM, SDP), 有两个端口,其中一个只能读,另一个只能写
  • 单端口RAM, 只有一个RAM, 读写通过这一个端口来进行

单端口RAM只有一组数据线、地址线、时钟信号以及控制信号,双端口RAM具有两组数据线、地址线、时钟信号以及控制信号。

Xilinx 7系列的内部BRAM全部是真双端口RAM,两个端口可以独立的进行读写,可以被配置成不同的RAM形式。

端口描述

  • DINA: 端口A写数据信号
  • ADDRA: 端口A,读写地址信号,对于单端口RAM来说,读地址和写地址共用该地址线
  • WEA: 端口A写使能信号,1->写有效,0->读有效
  • ENA: 端口A写使能信号,高有效。禁止后端口A上的读写无效。ENA信号可选,取消该信号后,RAM一直处于有效状态。
  • RSTA:端口A复位信号,可配置为高有效或者低有效,可选信号
  • REGCEA: 端口A输出寄存器使能信号,为1时,DOUTA保持最后一次输出的数据,可选信号
  • CLKA: 端口A的时钟信号
  • DOUTA: 端口A读出的数据。

RAM IP核配置

  • Basic
  • Memory Type 存储器类型
  • Single Port RAM (单端口RAM )
  • Simple Dual Port RAM ( 伪双端口RAM )
  • True Dual Port RAM ( 真双端口RAM )
  • Single Port ROM ( 单端口ROM )
  • Dual Port ROM ( 双端口ROM )
  • ECC Options : Error Correction Capability 纠错能力选项 ( 单端口RAM不支持ECC )
  • Write Enable: 字节写使能选项,勾选后可以单独将数据的某个字节写入RAM中
  • Algorithm Options: 算法选项
  • Minimum Area 最小面积
  • Low Power 低功耗
  • Fixed Primitives 固定原语
  • Port A 选项,设置端口A的参数
  • Write Width 写数据位宽( Bit )
  • Read Width
  • Write Depth 写深度,例如设置为32,RAM所能访问的地址范围为0-31
  • Read Depth
  • Operating Mode: RAM 读写操作模式,共三种模式
  • Write First 写优先, 数据先写入RAM,然后在下一个时钟输出该数据
  • Read First 读优先, 数据先写入RAM中,同时输出RAM中同地址的上一次数据
  • No Change 不变模式,读写分开操作,不能同时进行
  • Enable Port Type: 使能端口类型
  • Use ENA Pin 添加使能端口A信号
  • Always Enabled 取消使能信号,端口一直处于使能状态
  • Port A Optional Output Register : 端口A输出寄存器选项
  • Primitives Output Register ,打开BRAM内部位于输出数据总线之后的输出流水线寄存器。
    一般设计中为了改善时序性能会勾选此选项,但是会使得BRAM输出的数据延迟一拍。

数据输出总线负载多,可能带来难以满足的时序路径

  • Port A Output Reset Options : RAM 复位信号选项。
  • Other Options 设置RAM的初始值

RAM IP核仿真

.veo 文件是IP核自动生成的只读verilog例化模板文件。

文件1 ram_wr.v

产生读写RAM的信号, 写入32个数,再读出32个数

`timescale 1ns / 1ns
//
// Engineer: wkk
// 
// Create Date: 2023/03/20 16:18:49
// Design Name: 
// Module Name: ram_wr
//
module ram_wr(
    input           i_clk                           ,
    input           i_rst_n                         ,
    input           i_en                            ,
    output          o_wr_mode                       ,
    output [4:0]    o_wr_addr                       ,
    output [7:0]    o_w_data                          
);
reg [5:0]           cnt                            ;
reg [5:0]           cnt_reg                        ;
reg                 wr_mode_reg                    ;
//reg [7:0]           o_w_data_reg                  ;
assign o_w_data = {2'b0,cnt}                        ;
assign o_wr_addr = cnt_reg[4:0]                     ;
always @(posedge i_clk or negedge i_rst_n ) begin
    if( !i_rst_n )begin
        cnt_reg <= 6'b0;
    end else 
        cnt_reg <= cnt;
end
always @(posedge i_clk or negedge i_rst_n ) begin
    if( !i_rst_n )begin
        cnt <= 6'b0;
    end
    else if(i_en) begin
        if( cnt == 6'd63 )
            cnt <= 6'b0;
        else
            cnt <= cnt + 1'b1;   
    end else begin
        cnt <= 6'b0 ;
    end
end
assign o_wr_mode = wr_mode_reg;
always @(posedge i_clk or negedge i_rst_n ) begin
    if( !i_rst_n ) 
        wr_mode_reg <= 1'b0;                    // default read mode
    else if(i_en && cnt <= 6'd30 ) 
        wr_mode_reg <= 1'b1;
    else
        wr_mode_reg <= 1'b0;
end
endmodule
文件2 ram_test_top.v

进行ram读写

`timescale 1ns / 1ns
//
// Engineer: wkk
// 
// Create Date: 2023/03/20 16:55:18
// Design Name: 
// Module Name: ram_test_top
//
module ram_test_top(
    input           i_clk                           ,
    input           i_rst_n                         ,
    output [7:0]    o_r_data                        
);
   
//reg                         i_en                    ;
wire                        o_wr_mode               ;
wire [4:0]                  o_wr_addr               ;
wire [7:0]                  o_w_data                ;
ram_wr ram_wr_inst(
        .i_clk                              (  i_clk       ),
        .i_rst_n                            (  i_rst_n     ),
        .i_en                               (  1'b1        ),
        .o_wr_mode                          (  o_wr_mode   ),
        .o_wr_addr                          (  o_wr_addr   ),
        .o_w_data                           (  o_w_data    )  
);
            
singleport_ram_8x32 singleport_ram_8x32_inst (
  .clka         (i_clk       ),    // input wire clka
  .wea          (o_wr_mode        ),      // input wire [0 : 0] wea
  .addra        (o_wr_addr      ),  // input wire [4 : 0] addra
  .dina         (o_w_data       ),    // input wire [7 : 0] dina
  .douta        (o_r_data      )  // output wire [7 : 0] douta
);
endmodule
文件3 ram_test_top_tb.v
`timescale 1ns / 1ns
//
// Engineer:  wkk
// 
// Create Date: 2023/03/22 23:00:02
// Design Name: 
// Module Name: ram_test_top_tb
//
module ram_test_top_tb();
 reg           i_clk        ;
 reg           i_rst_n      ;
 wire [7:0]    o_r_data     ;
    
ram_test_top ram_test_top_inst(
  .i_clk                         (i_clk   ) ,
  .i_rst_n                       (i_rst_n ) ,
  .o_r_data                      (o_r_data) 
);
initial begin
    i_clk = 1'b0;
    i_rst_n = 1'b0;
    forever #5 i_clk = ~i_clk;
end
initial begin
    #10 i_rst_n = 1'b1;
    #1000 $stop;
end
endmodule
仿真结果
  1. 写数据,写入1-31

  2. 读数据,读出1-31
    RAM 中读出的数据在延时一个时钟周期之后,开始输出数据


相关文章
|
6月前
|
敏捷开发 Web App开发 测试技术
阿里云云效产品使用问题之钉钉绑定主帐号和RAM 有什么区别么
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
6月前
|
文字识别 API
印刷文字识别产品使用合集之如何创建RAM用户和阿里云账号的访问密钥
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
7月前
|
云安全 弹性计算 安全
AK泄露了,怎么办?
AccessKey(包含AccessKey ID和Secret)是程序访问的凭证,无异于打开云上资源的大门钥匙,保管好AK是保障云上安全最重要的事情,甚至没有之一。
106526 8
|
7月前
|
数据库 数据安全/隐私保护
在阿里云中,访问控制(Resource Access Management,简称RAM)是权限管理系统,主要用于控制账号在阿里云中
在阿里云中,访问控制(Resource Access Management,简称RAM)是权限管理系统,主要用于控制账号在阿里云中
679 3
|
7月前
|
缓存 BI
咨询下,阿里云云效ram账号绑定钉钉账号后,手机端看项目,是空的,怎么解决?
咨询下,阿里云云效ram账号绑定钉钉账号后,手机端看项目,是空的,怎么解决?
107 2
阿里云RAM角色和自定义角色
阿里云RAM角色和自定义角色
143 1
|
安全 API 数据安全/隐私保护
云安全中心-云平台配置检查CIEM查询到的Ram相关的检查项,能否在阿里云OpenAPI查到同样的?
云安全中心-云平台配置检查CIEM查询到的Ram相关的检查项,能否在阿里云OpenAPI查到同样的?
124 1
[笔记]阿里云创建RAM用户
[笔记]阿里云创建RAM用户
100 0
|
安全 API 数据安全/隐私保护
阿里云短信服务RAM用户授权Quick Start
短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。在主账号开通短信服务后,您可以创建RAM用户,并为RAM用户授予不同的权限,提供给您企业的员工用来管理短信服务资源,从而让您避免与其他用户共享云账号密钥,降低您企业的信息安全风险。本文以子账号使用短信服务报错为例,简单介绍主账号授予RAM用户访问使用短信服务的操作步骤,以供参考。
740 1
阿里云短信服务RAM用户授权Quick Start
|
安全
阿里云RAM用户访问用户中心授权Quick Start
用户中心提供用户上云所涉及到的企业财务经营管理全链路能力,包括但不限于企业财务、账号中心、资金管理、卡券管理、账单管理、订单管理、分账管理、发票管理、合同管理、成本管理、资源实例管理、节省计划、SLA赔付等相关服务。目前多数企业在使用云上服务时,出于安全和管理考虑都是使用RAM账号。然而RAM用户常常在控制台进入用户中心查看近期的消费数据时往往遇到无权访问的权限问题。本文简单介绍主账号授予RAM用户访问费用中心的操作步骤,以供参考。
1017 1
阿里云RAM用户访问用户中心授权Quick Start