基于双端口RAM的乒乓操作测试

news2024/9/20 14:27:52

文章目录

  • 前言
  • 一、乒乓操作简介
  • 二、双端口RAM配置
  • 三、RAM控制模块设计
  • 四、乒乓操作验证


前言

  本文将介绍基于双端口RAM的乒乓操作测试,并探索如何在AWC_C4MB开发板上实现这一测试。双端口RAM作为一种性能出色且功能强大的存储器设计,为我们提供了并发访问和数据交互的重要工具。AWC_C4MB开发板作为一款先进的硬件平台,拥有强大的处理能力和丰富的外设资源,通过在该开发板上进行乒乓操作测试,可以更好地理解并发读写操作对系统性能的影响,并找出性能瓶颈和优化策略。开发板实物图如下:

在这里插入图片描述
  在本次测试中,我们将详细介绍如何调用AWC_C4MB开发板的双端口RAM IP核,实现并发的读写操作,通过50MHZ时钟分别向两个不同的RAM里面写入100个数据,然后通过25MHZ时钟连续无间断将数据读出,了解其如何支持高速数据交换和并行处理。

一、乒乓操作简介

  乒乓操作是一种特殊的内存访问模式,通常用于并发读写操作。它在计算机系统中扮演着重要角色,尤其在多处理器系统、实时应用和高性能计算领域。乒乓操作的基本思想是同时进行并发的读和写操作,实现快速的数据交换和共享。它的名称源自于乒乓球比赛中球的来回传递,类似地,在乒乓操作中,数据在不同的访问者之间来回传递和交换。
  以两个缓存器RAM1和RAM2进行乒乓操作为例,初始时刻数据写入端口将数据写入进RAM1内,不进行其它操作,如下图所示:

在这里插入图片描述
  RAM1内数据写入完成后,数据读出端口就可以开始读取出RAM1内数据了,同时数据写入端口继续向RAM2内写入数据,如下图所示:

在这里插入图片描述
  当RAM1内的数据读出完成,RAM2内的数据写入完成,此刻对两个存储器的读写操作进行交换,数据写入端口继续向RAM1内写入数据,数据读出端口开始读出RAM2内的数据,如下图所示:

在这里插入图片描述
  因此,在乒乓操作中,涉及到多个访问者或处理器同时访问内存。通常情况下,一个访问者进行读操作,而另一个访问者同时进行写操作。这种并发的读写操作可以提高内存访问效率,减少等待时间,提高整个系统的性能。

二、双端口RAM配置

  双端口RAM(Dual-Port RAM)是一种具有两个独立数据端口的随机存取存储器(RAM),它可以同时支持两个不同的读写操作。每个端口都可以独立地访问内存单元,无需等待其他端口的操作完成。这使得双端口RAM能够实现高效的并发读写操作,广泛应用于需要同时进行多个数据访问的系统中。双端口RAM示意图如下:

在这里插入图片描述
  在Quartus里面配置双端口RAM IP核,①在IP核目录下输入RAM,②点击RAM:2-PORT,③为双端口RAM IP核指定一个存放路径并命名,本工程给该IP核命名为ram_gen。操作步骤如下图所示:

在这里插入图片描述
  针对弹出的界面:
  ①是选择RAM的端口类型,可以选择单个读端口和单个写端口,也可以选择两个读端口和两个写端口,在本工程中,只需要一个写端口和一个读端口对数据进行写入和读出即可,因此选择第一个选项;
  ②是设定用什么来定义存储器的大小,可以选择按字节定义,也可以选择按比特数定义,这里设定按照字节定义;
  按照下图配置,配置完成后点击Next:

在这里插入图片描述
  针对弹出的界面:
  ①是设置输入的信号深度,本工程写入到RAM内的数据是100个,数据位宽为8,因此选择128即可;
  ②是设置输入输出数据位宽是否相同,这里要设置不相同,因为写入数据时钟是50MHZ,写入的数据位宽设置为8,读时钟为25MHZ,所以读出的数据位宽要为16,才能满足处理速度与处理面积相等的原则,实现数据的无缝传输与处理;
  ③是存储单元类型的选择,这里保持默认设置即可。
  按照下图配置,配置完成后点击Next:

在这里插入图片描述
  针对弹出的界面:
  ①是时钟的设置,可以设置读写端口时钟相同,也可以设置读写端口时钟不相同,也可以设置写入数据时钟和读出数据时钟不相同,这里设置写入和读出数据时钟不相同;
  ②是创建读数据使能信号,这里保持勾选;
  ③是创建端口字节使能信号,这里选择不勾选;
  按照下图配置,配置完成后点击Next:

在这里插入图片描述
  针对弹出的界面:
  ①是设置是否选择对读出的数据进行寄存,如果选择寄存,则在读使能信号有效时,数据会延迟一个时钟周期才输出,反之则在读使能信号有效时,数据马上输出,这里选择不勾选;
  ②是创建时钟使能信号,勾选此选项后,只有当时钟使能信号有效时,时钟才能正常工作,这里选择不勾选;
  ③是创建清零信号,该信号有效时,RAM内的数据清零,这里选择不勾选。
  按照下图配置,配置完成后点击Next:

在这里插入图片描述
  针对弹出的界面:
  该界面是设置是否初始化RAM,即向RAM内初始时存入数据,这里设置不提前存入。按照下图配置,完成后点击一直点击Next:

在这里插入图片描述
  跳转到下图时,选择生成例化模板,配置完成后点击Finish。
在这里插入图片描述

三、RAM控制模块设计

  首先设计一个数据生成模块,在50MHZ工作时钟下,复位信号无效时,每个时钟周期生成一个待写入的数据,并产生数据写入使能信号。RAM控制模块则是对写入到两个FIFO里面的信号进行定义,根据设计需要绘制的信号波形图如下图所示:

在这里插入图片描述
  对照上述信号波形图编写代码,即可实现基于双端口RAM的乒乓操作。

四、乒乓操作验证

在这里插入图片描述
  如图,读出的数据为rd_data,根据波形图可知已经实现数据无缓冲读出,基于双端口RAM的乒乓操作测试成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCB布线当中的地线和电源线的规划和处理

在PCB布线中,地线和电源线的规划和布局非常重要,可以影响电路的稳定性、抗干扰能力和信号质量。下面是一些常见的规划和布局建议: 分离地平面:将地线分为模拟地和数字地两个区域,并使用两个独立的地平面来布线。这样可…

MySql007——检索数据:排序检索数据(ORDER BY的使用)

前提:使用《MySql006——检索数据:基础select语句》中创建的products表 一、抛出问题 如果我们向获得products表中所有商品名称和价格,可以这些检索数据 SELECT prod_name, prod_price FROMproducts;但是发现这些价格是乱序的,…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 28 日论文合集)

文章目录 一、分割|语义相关(6篇)1.1 To Adapt or Not to Adapt? Real-Time Adaptation for Semantic Segmentation1.2 Towards Deeply Unified Depth-aware Panoptic Segmentation with Bi-directional Guidance Learning1.3 Semantic Image Completion and Enhancement usin…

PTC Preo creo弹出框 重新获得许可 取消弹出框方法

问题:打开proe软件之后,在使用时,会有【重新获得浮动许可证】的弹出框提示 解决办法: 1.重新打开proe 2.配置proe参数,Proe打开软件,打开选项 Proe用好多版本,打开的界面都不一样&#xff0c…

一零六六、线程池、锁

线程池: 管理线程创建,销毁的一系列池子 如何创建线程池? ExecutorService executor Executors.newFixedThreadPool(n); 创建线程有多种方法,为何要用线程池? 减少性能开销,每次执行任务都新建线程造成cpu资源浪费…

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板11

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

低代码平台的使用学习

背景 最近发现老婆每天都要捣鼓一个 excel 表格,并将表格发到群中,询问后才知道只是为了记录每天的事物变化。我想这接收方每次都要下载表格再打开看,太麻烦了,直接做个 web 表单,支持简单的增删改查就好了。 当我着…

Talk | ICCV‘23 华南理工大学林炜丰:视觉基础模型-尺度卷积调制遇上Transformer

本期为TechBeat人工智能社区第519期线上Talk! 北京时间8月3日(周四)20:00,华南理工大学—林炜丰的Talk已准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “视觉基础模型-尺度卷积调制遇上Transformer”,他介绍了一种新的…

Godot 4 源码分析 - 碰撞

碰撞功能应该是一个核心功能,它能自动产生相应的数据,比如目标对象进入、离开本对象的检测区域。 基于属性设置,能碰撞的都具备这样的属性:Layer、Mask. 在Godot 4中,Collision属性中的Layer和Mask属性是用于定义碰撞…

在线文档协作工具有哪些推荐?

在现代工作和学习中,团队协作的重要性日益凸显。随着云计算和互联网技术的快速发展,越来越多的在线协作工具涌现出来,为我们提供了高效、便捷的协作方式。我根据日常工作经验,向大家推荐3款主流、且备受欢迎的在线协作工具&#x…

AI绘图实战(十二):让AI设计LOGO/图标/标识 | Stable Diffusion成为设计师生产力工具

S:AI能取代设计师么? I :至少在设计行业,目前AI扮演的主要角色还是超级工具,要顶替?除非甲方对设计效果无所畏惧~~ 预先学习: 安装及其问题解决参考:《Windows安装Stable Diffusion …

用C语言构建一个数字识别卷积神经网络

卷积神经网络的原理和对应的python例子参见: https://victorzhou.com/blog/intro-to-cnns-part-1/ 和...-2/ 这里仅叙述卷积神经网络的配置, 其余部分不做赘述,具体请参见上一篇: 用C语言构建一个手写数字识别神经网路 卷积网络同样采用简单的三层结构&#xff0c…

为何优秀的项目经理都在用鱼骨图?

什么是鱼骨图 鱼骨图,又被称为因果图或是石川图,是一种强大的视觉工具,用于识别,探索和显示在复杂过程中可能或已经出现的问题的所有可能原因。这个名字来源于这个图的形状,看起来像一条鱼的骨骼。 这种图表的起源可…

了解 CVSS:通用漏洞评分系统的应用

漏洞威胁管理至关重要,因为网络犯罪是一种持续存在的全球风险。网络犯罪分子愿意利用软件中的任何漏洞来访问网络和设备。对使用该软件的软件开发人员和组织的影响可能很严重。用户必须处理攻击的结果,例如赎金或数据盗窃,并且还可能面临法律…

笔记:Android 9系统启动流程

启动流程 1.按下电源,系统启动 当电源键按下时,引导芯片代码(汇编指令)会从预定的地方(固化在ROM)开始执行,将引导程序 BootLoader 加载到 RAM中,然后执行 2.引导程序 BootLoader …

箭头函数和普通函数的区别

1. 写法不同 const arrayFn (a, b) > a b; function add(a, b) > {return a b; }2. 内部this的指向不同 window.a 1;// 箭头函数中的this在定义时就已经固定,不会因为调用对象的不同而改变 const loga () > {const a 2;return this.a; }// this在该…

【C语言学习】逃逸字符(转义字符)

逃逸字符(转义字符) 1.\" 双引号 \" printf("请分别输入身高的英尺和英寸,""如输入\"5 7\"表示5英尺7英寸:");这里的"\就是双引号的作用,因为在双引号里面直接用双引号无意义&…

C++问题记录:VS中使用cout输出vsnprintf()产生的字符串有乱码

1. 问题介绍 使用Visual Studio开发一个C项目的时候,使用vsnprintf()生成格式化字符串,在使用std::cout输出该字符串的时候产生乱码,但是使用printf()输出的结果是正常的,下面是相关代码和结果,如有指教,欢…

量子力学的挑战和未来:未解决的问题和可能的发展方向

亲爱的读者, 欢迎回到我们的量子力学系列文章。在前面的几篇文章中,我们已经深入探讨了量子力学的起源、基本概念、实验验证以及应用领域,包括量子计算、量子通信和量子感应。今天,我们将探讨量子力学所面临的挑战以及未来可能的…

【雕爷学编程】 MicroPython动手做(34)——通用传感器的综合运用2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…