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 中读出的数据在延时一个时钟周期之后,开始输出数据


相关文章
|
5月前
|
数据库 数据安全/隐私保护
在阿里云中,访问控制(Resource Access Management,简称RAM)是权限管理系统,主要用于控制账号在阿里云中
在阿里云中,访问控制(Resource Access Management,简称RAM)是权限管理系统,主要用于控制账号在阿里云中
523 3
|
5月前
阿里云RAM角色和自定义角色
阿里云RAM角色和自定义角色
76 1
|
7月前
|
安全 API 数据安全/隐私保护
云安全中心-云平台配置检查CIEM查询到的Ram相关的检查项,能否在阿里云OpenAPI查到同样的?
云安全中心-云平台配置检查CIEM查询到的Ram相关的检查项,能否在阿里云OpenAPI查到同样的?
68 1
|
7月前
[笔记]阿里云创建RAM用户
[笔记]阿里云创建RAM用户
|
安全 Cloud Native 数据可视化
阿里云通信相应服务RAM用户授权Quick Start
通信与每个人息息相关。云通信即基于云计算平台,将传统通信能力进行云化,为客户提供便捷高效的触达能力。在教育行业,“通知”必须在15分钟内到达,而“验证码”则要求在3秒内到达,这对通信的并发跟调度都提出了更高的要求。阿里云云通信采用云原生化的方式,通过低代码、组件化以及可视化编排,为客户提供安全可信、场景化、智能化的定制服务。在主账号开通云通信相应服务后,您可以创建RAM用户,并为RAM用户授予不同的权限,提供给您企业的员工用来管理服务资源,从而让您避免与其他用户共享云账号密钥,降低企业的信息安全风险。本文针对云通信下相应服务授予的RAM权限做一下总结,以便使用过程中可以快速参考引用。
323 0
|
安全 API 数据安全/隐私保护
阿里云短信服务RAM用户授权Quick Start
短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。在主账号开通短信服务后,您可以创建RAM用户,并为RAM用户授予不同的权限,提供给您企业的员工用来管理短信服务资源,从而让您避免与其他用户共享云账号密钥,降低您企业的信息安全风险。本文以子账号使用短信服务报错为例,简单介绍主账号授予RAM用户访问使用短信服务的操作步骤,以供参考。
560 1
阿里云短信服务RAM用户授权Quick Start
|
安全
阿里云RAM用户访问用户中心授权Quick Start
用户中心提供用户上云所涉及到的企业财务经营管理全链路能力,包括但不限于企业财务、账号中心、资金管理、卡券管理、账单管理、订单管理、分账管理、发票管理、合同管理、成本管理、资源实例管理、节省计划、SLA赔付等相关服务。目前多数企业在使用云上服务时,出于安全和管理考虑都是使用RAM账号。然而RAM用户常常在控制台进入用户中心查看近期的消费数据时往往遇到无权访问的权限问题。本文简单介绍主账号授予RAM用户访问费用中心的操作步骤,以供参考。
886 1
阿里云RAM用户访问用户中心授权Quick Start
|
弹性计算
阿里云服务器迁移中心SMC开通RAM服务授权
阿里云服务器迁移中心SMC开通RAM服务角色授权AliyunSMCDefaultRole
485 0
阿里云服务器迁移中心SMC开通RAM服务授权
|
存储 数据采集 运维
阿里云RAM账号配置SLS数据加工最佳实践
数据加工服务是阿里云SLS推出的面向日志ETL处理的服务,主要解决数据加工过程中转换、过滤、分发、富化等场景。使用数据加工功能时,将涉及数据读写权限以及数据加工操作权限的授予问题。本文档主要介绍:1. 使用主账号为RAM用户授权以使其具有浏览Logstore数据的权限并能够创建和修改数据加工作业;2. 在不同工作场景下使用RAM账号创建或修改数据加工的最佳实践方法。
|
人工智能 自然语言处理 文字识别
阿里云子账号(RAM用户)使用人工智能产品相关授权示例
访问控制RAM(Resource Access Management)是阿里云提供的管理用户身份与资源访问权限的服务,使用RAM,您可以创建、管理RAM用户(例如员工、系统或应用程序),并可以控制这些RAM用户对资源的操作权限。当您的企业存在多用户协同操作资源的场景时,RAM可以让您避免与其他用户共享阿里云账号密钥,按需为用户分配最小权限,从而降低企业的信息安全风险。在使用RAM用户(子账号)调用相应API前,需要阿里云账号(主账号)对RAM账号进行相应授权。但是客户在第一次使用过程中往往看到权限问题不知如果解决,更不懂怎么进行授权操作等一系列问题。本文简单介绍在一些服务如何为RAM用户授权。
1148 0
阿里云子账号(RAM用户)使用人工智能产品相关授权示例

热门文章

最新文章