FPGA入门系列12--RAM的使用

news2024/11/24 6:53:56

文章简介

本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者在FPGA开发方面的能力,每一个章节中都有针对性的代码书写以及代码的讲解,可作为读者参考。

第十三章:RAM的使用

 在FPGA中, 不得不提的是存储器, 当我们做相关项目时,经常会遇到存储数据的问题,数据量过大时,我们可以将其存储在 FPGA 芯片的外设存储器上,比如 sdram、 ddr sdram、 ddr3 sdram 等, 然而访问外设存储器相对比较麻烦,因此当数据量较小时,我们可以直接使用 FPGA 芯片内部自带的 ram 的 IP核。
        Ram 是 random access memory 的简称,即随机存储器的意思, ram 可以按照所需进行随机读/写。我们可以通过调用 FPGA 内部的 IP 核生成一个 ram, 并通过编写 Verilog HDL 代码控制该 ram。

01 新建工程

打开ISE软件新建工程:File>>New Project。

       先建立顶层文件,点击New Source,如图1箭头所指:

图1 新建New Source

        在弹出的New Source Wizard中为模块命名以及选择存放路径,如图2所示:

图2  模块命名与路径

        点击Next,最后点击Finish完成。此时在ISE界面可以看到生成的v文件,如图3所示:

 图3 生成v文件

02 调用IP核

 一种是通过Tools>>Core Generator调用。(第二种调用方法见文末注释)。

图4 IP核的调用

        打开Core Generator的页面如图 5所示。

图5 打开 IP Core界面

        点击 File>>New Project 弹出如图6所示的界面,根据图 6、 图 7 的标注进行相关的设置。

图6 器件选择

图7 语言选择

        选择好了之后点击 OK 生成该 IP 核工程,可以在图 8 所示的窗口选择所需的IP 核, 在此我们选择 Memories&StorageElements>>RAMs&ROMs>>Block MemoryGenerator,鼠标左键双击该选项,弹出如图 10 所示的 ram IP 核窗口。

图8 IP核选择窗口

图9  双击选择RAM IP核

图10 RAM命名窗口

图11 RAM类型选择

        在图 11 所示的窗口中选择所需的 ram 类型,在此我们选择 Simple Dual Port RAM, 该 ram 包含两个地址总线,一个写地址和一个读地址,分别控制两个地址总线可以控制该 ram 的读和写。

图12 RAM存储容量选择

        根据图 12 所示来选择所需的 ram 数据的位宽和深度, 此处的数据位宽和深度都不是无限的,而是要根据芯片内部的资源来定的。

图13 RAM的其它设定

        图 13 所示界面可以选择是否在 B 端(输出端) 加寄存器,加了寄存器可以使ram 输出的数据更稳定。若是需要该 ram 在被调取时被初始化,我们可以勾选图 13 标出的区域,并且加入 ram 可以识别的初始文件(coe 文件)。

图14 B端口复位的设定

        若是需要对 B 端口设定复位键,可以在图 14 所示的区域勾选。

图15 调用RAM的信息

        图 15 是我们调取该 IP 核的最后一步, 该界面主要总结了之间我们设定 ram,我们查看是否满足了我们的需求,若是没有满足可以退回到对应的位置重新选择,若是满足,点击 Generate 生成该 IP 核。

03 添加IP核文件到工程

 右键点击ISE中的工程名, 选择Adding Source 添加我们的IP核文件(xco),如图 16 所示。

图16 添加XCO文件到工程

        之后弹出如图 17 所示的窗口,点击 OK 将该文件添加到工程。

图 17 添加文件到工程

04 编写顶层代码

接下来写出对该 ram 控制的 Verilog HDL 代码, 要求对该 ram 进行整体的读写交替进行。

        代码示例1:

代码解析 1:
①第 16 行的 always 实现写使能(wr_en)的赋值, 当读的时候 wr_en 赋值0,写的时候 wr_en 为 1;
②第 24 行的 always 实现了写地址的产生;
③第 32 行的 always 实现了读地址的产生;
④第 41 行实现了该 ram IP 核的实例化。

05 编写测试代码

        编写相应的测试文件, 具体如代码示例 2。

        代码示例 2:

        编写完测试代码后,需要将测试代码添加到工程中。

06  添加测试代码到工程

        在 ISE 工程中右键工程名称添加测试文件(点击Add Source),在如图 18 所示的窗口中选择Simulation,点击OK。

图18 添加测试文件到工程

        按照如图 19 所示的步骤打开 modelsim 软件进行仿真。

图19 通过 ISE 调取 modelsim 仿真软件

        仿真波形如图 20 所示:

图20 仿真波形

07 注释

        正文所讲调用IP核的方法过于繁琐,旨在让初学者了解IP核的调用步骤。

        第二种方法与第一种本质上是一样的,但简便了许多。

        点击Add Source,弹出如图 21 所示界面:

图21 选择IP核文件类型

        点击Next,弹出如图22所示界面:

图22 选择RAM IP核

        点击Next>>Finish完成。接下来的步骤与正文一致(图10开始),在此不在重复讲述。

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

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

相关文章

Spring IOC DI - 整合MyBatis

Spring IOC目录 主要内容Spring 框架介绍Spring 框架的优势(对比以前项目的缺点)Spring 框架引入历史发展框架学习三要素Spring 模块介绍 Spring IoC/DI - 引入IoC/DI 概念辨析使用IoC/DI的好处IoC/DI具体应用场景 Spring IoC/DI - 代码实现环境准备Spring 框架环境搭建创建Mav…

图的遍历和应用

文章目录 图的遍历深度优先遍历对于无向图的邻接矩阵的深度优先遍历无向非连通图的深度优先遍历 对于无向图的邻接表的深度优先遍历非递归实现深度优先遍历无向图的邻接矩阵代码实现无向图的邻接表代码实现递归和非递归的同异 广度优先遍历邻接表BFS邻接矩阵BFS 图的应用生成树…

Android 拍照以及相册中选择(适配高版本)————上传头像并裁剪(一)

前言 在项目研发中,相信大家都遇到过给用户增加头像照片的需求。 随着手机版本的不断更新,android 8、android 9、android 10、android 12、android 13、鸿蒙系统等等;遇到这个功能需求,大家肯定会想,“这还不好写&…

“双碳”目标下二氧化碳地质封存技术应用前景及模型构建实践方法

二氧化碳地质封存技术起步较晚,目前仍没有一套相对完整的行业规范;且就该技术而言,涉及环节众多,理论相对复杂,对于行业的新入局者不太友好。因此,结合时代背景,我们首次尝试对二氧化碳地质封存…

【裸金属服务器】安装VMware ESXi

官方安装操作ESXi地址 一、虚拟化服务器分类: 寄居架构(Hosted Architecture)和裸金属架构(Bare Metal Architecture)。 1、寄居架构(Hosted Architecture):在操作系统之上安装和运…

8.系统日志

1.api访问日志 对应数据库 拦截器 拦截逻辑 ApiAccessLogFilter类的createApiAccessLog方法 buildApiAccessLogDTO方法就是完善实体类,把接口执行时长之类的填充完整。 然后就是保存日志到infra_api_access_log数据库。 过滤器注册生效 2.api错误日志 对应数…

Windows 程序开机自启动速度优化,为什么腾讯会议自启动速度那么高?

目录 一、问题的说明和定义 二、问题的分析 1.问题初步分析 2.详细的分析: 2.1Windows常见的自启动方式 2.2Windows常见的自启动方式的细节分析 三、问题的解决方案 1、为什么腾讯会议Rooms那么快 2.我们是否可以跟腾讯会议一样快 一、问题的说明和定义 这…

Vue之插件的定义和使用

概述 学习本文之前,我们需要弄清楚何为插件?插件其实就是一段扩展程序,主要目的是用于扩展功能。就比如Idea家族和VSCode家族的插件,它们也是一段扩展程序,将其安装到IDE中就可以使用插件里面实现的功能了&#xff0c…

SCADA平台的HMI功能

01 前言 虹科Panorama SCADA平台支持桌面HMI、Web HMI和移动HMI的功能。桌面HMI主要是在桌面工作站实现数据可视化,能够获取到最全面的数据信息以及实现功能;Web HMI可以通过在软件中添加Web HMI服务器,运行程序后,可以在Web 客户…

HTML5基础知识总结总结(详细,附带源代码)

HTML5基础知识 一:前言二: HTML基本结构。三:基本标签3.1 h标签3.2 p标签3.3 hr标签3.4 br标签3.5 strong标签与em标签3.6 特殊符号3.7 运行效果 三:图像标签四:链接标签五:列表六:表格七&#…

Allegro PCB后处理和生产文件导出

Allegro PCB后处理,主要是完成线路设计以后,输出生产文件之前的处理。部分是看教程做的记录,方便以后自己参考。 教程: [小哥Cadence Allegro 132讲字幕版PCB视频教程]_哔哩哔哩_bilibili 感觉关键是多看右边Options菜单&#xf…

【15】SCI易中期刊推荐——电子电气 | 仪器仪表(中科院4区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

[NISACTF 2022]level-up

[NISACTF 2022]level-up f12 发现提示disallow 也就是不允许的想到robots.txt LEVEL_2 <?php //here is level 2 error_reporting(0); #屏蔽报错信息 include "str.php"; #包含str.php这个页面 if (isset($_POST[array1]) && isset($_POST[arr…

巧用千寻位置GNSS软件|如何快速完成道路桥涵放样

道路桥涵放样主要解决道路施工中正交、斜交涵洞的测量&#xff0c;正交涵洞放样是中心线的定线放样&#xff1b;斜交涵洞放养是涵洞中心线与线路成一固定夹角的情况下的放样。 那么如何运用千寻位置GNSS软件实现道路桥涵放样呢&#xff1f;下面为各位一一介绍。 点击【测量】-&…

【移动端网页布局】移动端网页布局基础概念 ⑨ ( webkit 内核 | 移动端网页 CSS 初始化 - normalize.css )

文章目录 一、webkit 内核二、移动端网页 CSS 初始化 - normalize.css 一、webkit 内核 移动端浏览器 都是 基于 webkit 内核的 , QQ 浏览器 / 百度 / Safari / UC 都是基于 webkit 内核的 ; 移动端网页布局需要 兼容 普通浏览器 与 webkit 浏览器 ; webkit 内核浏览器 对 HT…

Ubuntu18 更换 apt 源为阿里云

Step1. 备份 list 文件 进入对应文件夹&#xff0c;用管理员权限&#xff0c;执行复制操作&#xff1a; cd /etc/apt/ sudo cp sources.list sources.list.bak Step2. 修改 list 文件 通过管理员权限&#xff0c;使用 vim 进行修改&#xff1a; sudo vim sources.list 将…

【Pytorch】六行代码实现:特征图提取与特征图可视化

前言 之前记录过特征图的可视化&#xff1a;Pytorch实现特征图可视化&#xff0c;当时是利用IntermediateLayerGetter 实现的&#xff0c;但是有很大缺陷&#xff0c;只能获取到一级的子模块的特征图输出&#xff0c;无法获取内部二级子模块的输出。今天补充另一种Pytorch官方…

ChatGPT如何写作-ChatGPT写作程序

ChatGPT如何写作 ChatGPT是一款自然语言处理模型&#xff0c;它无法像人类一样进行“写作”。但是&#xff0c;您可以利用ChatGPT的生成文本功能来帮助您生成文字。以下是一些使用ChatGPT写作的建议&#xff1a; 确定主题和目标受众。在开始写作之前&#xff0c;请确保您清楚知…

凝心聚力,携“源”出海:开源社顾问委员会2023年第一季度会议圆满举办!

2023 年 3 月 25 日&#xff0c;开源社顾问委员会&#xff08;以下简称"顾问委员会"&#xff09;第一季度会议在北京圆满召开。这是顾问委员会自 2018 年成立以来的第 17 次全体委员会议。 为增进顾问委员会成员交流&#xff0c;加强开源社社区建设&#xff0c;实现开…

第五章 资源包使用

游戏开发中会大量使用模型文件&#xff0c;图片文件&#xff0c;这些资源都需要事先导入到项目中去。导入的方式非常简单&#xff0c;将这些文件直接复制到项目中的Assets目录下即可。Unity 会在文件添加到 Assets 文件夹时自动检测到这些文件并同步显示在Project视图中。 Uni…