从零开始利用MATLAB进行FPGA设计(五)详解双口RAM

2024-04-26 19:12

本文主要是介绍从零开始利用MATLAB进行FPGA设计(五)详解双口RAM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

创作于谱仪算法设计过程中的数字能谱生成模块设计。

往期回顾:

从零开始利用MATLAB进行FPGA设计(四)生成优化HDL代码

从零开始利用MATLAB进行FPGA设计(三)将Simulink模型转化为定点数据类型

目录

1.关于双口RAM

2.System Generation中的双口RAM

2.1模块接口

2.1.1形态因素

2.1.2写模式

2.1.3冲突行为

2.2块参数


1.关于双口RAM

简单说RAM表示随机存储器,作为一种易失型存储器,在计算机关闭或重新启动时RAM中存储的数据就会丢失。

FPGA工程实践中的RAM形式包括单口RAM(SPRAM)、简单双口RAM(Simple Dual Port RAM)和真双口RAM(True Dual Port RAM)。

单口RAM只有一套读写线,读写时分复用,不能同时读写。也就是说单口指的是一个读写数据接口,用于写入或读出。

对于双端口RAM来说,分别有一套读写地址线,可以同时进行读写(同一时间内读写地址不能冲突)。也就是说有两个读写数据接口。

简单双口RAM的A口只能用于写入,B口只能用于读出;真双口RAM的A口可以用于写入或写出,B口也可以用于写入或写出。

2.System Generation中的双口RAM

Xilinx的双口RAM允许使用多个数据宽度以不同的采样频率同时访问内存空间。

2.1模块接口

这种双口RAM有两组独立的端口,同时用于读写。独立的地址、数据和写使能端口允许对内存空间进行共享。每个端口组都有一个输出端口和三个输入端口,用于地址、输入数据和写使能。每个端口组也可以添加端口使能和同步复位。

这种双口RAM可以利用FPGA中的分布式存储器、块RAM或UtralRAM资源实现。

2.1.1形态因素

双口RAM块支持各种形态因素(FF),形态因素定义如下:

W是A和B端口的数据宽度,端口B的深度定义为:

输出端口具有和输入端口相同的数据类型。当形态因素为1时,端口A和B的输入端口可以具有不同算术类型和二进制点位置的数据;形态因素大于1时端口A和端口B的数据输入仅具有无符号的算术类型,二进制点为位于0。

通过在每个单独的地址端口提供有效地址,可以访问内存块中的位置进行读取或写入。有效地址是从0到d-1的无符号整数,其中d表示该端口的RAM深度(RAM中的字数)。在仿真中,试图读取内存末尾之后的位置会报错。当双口RAM在分布式存储器或块RAM中实现时,初始RAM内容可以通过块参数指定。每个写使能端口必须是一个布尔值。当WE端口为1时,数据输入端口上的值将被写入到地址线指示的位置。

2.1.2写模式

当双端口RAM块在块RAM中实现时,可以在块参数对话框中设置块的写入模式。

在写入操作期间,输出取决于写入模式。当WE为0时,输出端口具有由地址线指定的位置处的值。在写入操作期间,输入数据端口上呈现的数据被存储在由端口的地址输入选择的内存中。在写入周期中,可以将每个数据输出端口A和B的行为配置为以下选择之一:

写入模式可以借助下图描述。在图中,内存已设置为初始值5,并且地址位被指定为4。当使用无读取写入模式时,输出不受地址线的影响,并且输出与WE为0时的最后一次输出相同。对于另外两种模式,输出来自由地址线指定的位置,因此是正在写入的位置的值。这意味着输出可以是对应于写入后的旧值,这对应于写入后读取。

2.1.3冲突行为

  • 读-读冲突:两个端口同时从同一存储单元读取,读取操作可以成功。
  • 写-写冲突:两个端口同时从同一存储单元写入,则两个输出都被标记为无效。
  • 读-写冲突:一个端口写入,另一个端口从同一存储单元读取的情况下,虽然内存内容不会被破坏,但读取端口上输出数据的有效性取决于写入端口的写入模式:
    • 如果写入端口处于写入前读取模式,则另一个端口可以可靠地读取旧的存储器内容。
    • 如果写入端口处于写入后读取或不读取写入模式,则读取端口输出的数据无效(NaN)。

2.2块参数

Depth:指定端口A中内存的字数,必须是正整数。端口B的深度是由输入数据宽度指定的形态因素推断的。

Initial value vector:对于分布式存储器或块RAM,指定初始内存内容。初始值向量中元素的大小和精度基于为端口A指定的数据格式。当向量比RAM长时,向量的尾部元素被丢弃。当RAM比向量长时,RAM的尾部字被设置为零。初始值向量根据RAM的端口A上指定的精度进行饱和和舍入。UltraRAM存储器在上电或设备复位期间初始化为全0。

Memory Type:选择是否将双端口RAM实现为分布式存储器、块RAM或UltraRAM的选项。分布式双端口RAM始终设置为使用端口A处于写入前读取模式,端口B处于只读模式。

这篇关于从零开始利用MATLAB进行FPGA设计(五)详解双口RAM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/938420

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input