RAM-IP核配置及使用

ROM系列知识分类:
(1)RAM-IP核配置及使用
(2)串口发送+RAM+VGA传图


前言

本篇文章主要介绍RAM-IP核配置及使用。


一、RAM配置介绍

说到 FPGA ,不得不提的是存储器,当我们做相关项目时,经常会遇到存储数据的问题,数据量过大时,我们可以将其存储在 FPGA 芯片的外设存储器上,比如 sdram、ddr sdram、ddr3 sdram等,然而访问外设存储器相对比较麻烦,因此当数据量较小时,我们可以直接使用 FPGA 芯片内部自带的 ram 的 IP 核。

RAM是random access memory的简称,即随机存储器的意思,Ram可以按照所需进行随机读/写。我们可以通过调用FPGA内部的IP核生成一个ram,并通过编写Verilog HDL代码控制该ram。

1.进入工程,选择IP Catalog:
IP Catalog

2.在IP Catalog界面搜索框中输入RAM,在Memories & storage Elements选项下有两种IP,一种是DRAM(Distributed Memory Generator),一种是BRAM(Block Memory Generator):

RAM_1

这里的DRAM并不是动态存储器,而是分布式存储器,与BRAM区别在于,DRAM通过FPGA中的查找表拼凑形成,而BRAM是FPGA中整块双口RAM资源。

这里学习BRAM的使用,双击Block Memory Generator。
RAM_2

Interface Type:支持AXI4 和AXI4Lite,默认为Native。

Memory Type:IP核支持生成5种类型的存储:

l Single-port RAM

l Simple Dual-port RAM

l Ture Dual-port RAM

l Single-port ROM

l Dual-port ROM

Single-port RAM(单口RAM),通过单组接口读写一块存储空间,接口如下:
单口RAM

Simple Dual-port RAM(简单双口RAM),有A和B两组接口,其中A接口用来写RAM,B接口用来读RAM,接口如下:

简单双口RAM

Ture Dual-port RAM(真双口RAM),有A和B两组接口,每一组接口都可以完成读和写操作,接口如下:
真双口RAM

ECC Options:只有Simple Dual-port RAM时,该选项才可用,IP核支持内置的汉明纠错功能(Built-in Hamming Error Correction Capability(BuiltIn ECC)),且支持数据位宽小于64位的软汉明纠错(soft ECC)。

Write Enable:设置是否启用字节写入,启用时,字节位宽可选为8位(无奇偶校验位)和9位(有奇偶校验位),此时数据位宽应是字节位宽的倍数,默认情况下不启用。

Algorithm Options:选择实现的内存算法。

Minimum Area Algorithm:使用最少数量的原语生成IP核;

Low Power Algorithm:低功耗算法,在读或写操作期间启用最小数量的块RAM原语;

Fixed Primitive Algorithm:固定单元算法,连接一个基本内存单元来生成IP核,在下拉列表中选择要使用的单元类型。

各芯片片内RAM资源如下:
各芯片片内RAM资源

这里选用Simple Dual-port RAM,其余保持默认。

xca35tfgg484-2芯片RAM容量:
RAM_个数
由于所选型号为xca35tfgg484-2其提供50个Block RAMs 当选择写入位宽16位时根据Artix-7系列最多位2Kx18x50 = 100Kx18.

配置端口A:

Write Width:写入位宽16(RGB565)

Read Width:读出位宽,读写位宽可以不一致,IP核支持的读写位宽比例有:1:32、1:16、1:8、1:4、1:2、1:1、2:1、4:1、8:1、16:1、32:1。

Write Depth:写入深度65536(显示256x256图像)

Write Width:写入位宽16(RGB565)
RAM_3

配置端口B:

Read Depth:读出深度

Operating Mode:选项有Write First、Read First和No Change三种模式。

Enable Port Type:端口使能控制,可以使用ENA引脚控制,也可以选择always Enabled

Port A Optional Output Rregisters:选择是否在输出端添加寄存器

Port A Output Reset Options:配置复位信号

READ Address Change A:这个功能只在UltraScale设备上使用。

RAM写优先(Write First)时序如下,在ENA信号拉高后,在时钟上升沿检测ADDRA地址为aa,而WEA写使能为低,DOUTA就输出地址aa对应的数据;在第二个时钟上升沿,ENA为高,WEA信号为高,执行写操作,地址为bb,就将DINA上的数据1111写入存储中,并把DINA上的数据送到DOUTA上进行输出;在第三个时钟上升沿依然如此,将DINA数据写入存储同时将数据送到DOUTA上进行输出;第四个上升沿,ENA为高,WEA为低,执行读操作,地址为dd,就读取存储器地址dd中的数据送到DOUTA上进行输出。

RAM读优先时序如下:在ENA和WEA同时为高时,输出的数据是存储器存储的数据,同时,也会把新写入的数据替换掉存储器中的对应地址的数据。

RAM No Change模式:在ENA和WEA同时为高时,只进行写操作,不进行读操作,也就是说DOUTA保持前一拍数据,直到WEA为低。

Pipeline Stages within Mux:输出端Mux流水线级数

Memory Initialization:选择是否使用本地初始化.coe文件初始化存储空间。以及是否使用默认值初始化内存。

Structural/UNISIM Simulation Model Options:选择发生碰撞时由结构仿真模型生成的警告消息和输出的类型。

点击OK生成IP核。

二、RAM测试

`timescale 1ns / 1ps
//
// Create Date: 2022/12/12 17:45:28
// Module Name: RAM_TB
// Target Devices: 
// Tool Versions: Vivado 2018.3
// Name:小王在努力...
//


module RAM_TB( );
   reg clka,clkb;
   reg ena,enb;
   reg [15:0]addra,addrb;
   reg [15 : 0] dina;
   reg wea;
   wire [15:0]doutb;
RAM RAM_LH (
  .clka(clka),    // input wire clka
  .ena(ena),      // input wire ena
  .wea(wea),      // input wire [0 : 0] wea
  .addra(addra),  // input wire [15 : 0] addra
  .dina(dina),    // input wire [15 : 0] dina
  .clkb(clkb),    // input wire clkb
  .enb(enb),      // input wire enb
  .addrb(addrb),  // input wire [15 : 0] addrb
  .doutb(doutb)  // output wire [15 : 0] doutb
);    


initial clka = 1;
always  #10 clka = ~clka;

initial clkb = 1;
always  #15 clkb = ~clkb;


initial begin
    ena = 0;
    enb = 0;
    wea = 0;
    addra = 0;
    addrb = 0;
    dina = 0;
    #201;
    repeat (65536) begin
    ena = 1;
    wea = 1;
    #20;
    addra  = addra +1;
    dina = dina + 1;
   end
   ena = 0;
   wea = 0;
   
   #301;
   addrb = 65536;
   repeat (65536) begin
   enb = 1;
   #30;
   addrb = addrb -1;
   end
   #2000;
   $stop;

end
endmodule

三、仿真结果展示

1
2

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
IP(Intellectual Property)即知识产权。美国 Dataquest 咨询公司将半导体产业的 IP 定 义为“用于 ASIC 或 FPGA 中的预先设计好的电路功能模块”。简而言之,这里的 IP 即电 路功能模块。 IP 核在数字电路中常用于比较复杂的功能模块(如 FIFO、 RAM、 FIR 滤波 器、 SDRAM 控制器、 PCIE 接口等)设计成参数可修改的模块,让其他用户可以直接调用 这些模块。随着设计规模增大,复杂度提高,使用 IP 核可以提高开发效率,减少设计和调 试时间,加速开发进程,降低开发成本,是业界的发展趋势。利用 IP 核设计电子系统,引 用方便,修改基本元件的功能容易。具有复杂功能和商业价值的 IP 核一般具有知识产权, 尽管 IP 核的市场活动还不规范,但是仍有许多集成电路设计公司从事 IP 核的设计、开发 和营销工作。 IP 核有三种不同的存在形式: HDL 语言形式,网表形式、版图形式。分别对应我们常 说的三类 IP 内核:软核、固核和硬核。这种分类主要依据产品交付的方式,而这三种 IP 内核实现方法也各具特色。 PLL(Phase Locked Loop,即锁相环)是最常用的 IP 核之一,其性能强大,可以对输 入到 FPGA 的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望 时钟,实际上,即使不想改变输入到 FPGA 时钟的任何参数,也常常会使用 PLL,因为经 过 PLL 后的时钟在抖动(Jitter)方面的性能更好一些。 Altera 中的 PLL 是模拟锁相环,和 数字锁相环不同的是模拟锁相环的优点是输出的稳定度高、相位连续可调、延时连续可 调;缺点是当温度过高或者电磁辐射过强时会失锁(普通环境下不考虑该问题)。
以下是具体的操作和命令: 1. 准备三台 CentOS 7.9 虚拟机,并配置静态 IP。 2. 禁用 firewalld 和 SELinux。 ``` systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config ``` 3. 添加 Kubernetes 软件源。 ``` cat << EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF ``` 4. 安装 Kubernetes 组件。 ``` yum install -y kubelet kubeadm kubectl systemctl enable kubelet && systemctl start kubelet ``` 5. 配置 kubelet。 ``` cat << EOF > /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--fail-swap-on=false" EOF ``` 6. 配置 Kubernetes 主节点。 ``` kubeadm init --apiserver-advertise-address=<主节点 IP> --pod-network-cidr=10.244.0.0/16 ``` 执行该命令后,会生成一个加入集群的命令,记得保存该命令,后面会用到。 7. 配置 Kubernetes 节点。 ``` kubeadm join <主节点 IP>:6443 --token <token> --discovery-token-ca-cert-hash <hash> ``` 其中,`<token>` 和 `<hash>` 是在主节点初始化时生成的。 8. 配置 kubectl 与 root 用户权限。 ``` mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrc ``` 9. 完成 Kubernetes 集群部署。 ``` kubectl get nodes kubectl get pods -A ``` 使用 `kubectl get nodes` 命令查看集群节点,使用 `kubectl get pods -A` 命令查看集群中 Pod 的信息,进一步验证 Kubernetes 集群是否正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C.V-Pupil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值