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

文章简介

本系列文章主要针对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 器件选择

 

 

 

图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.hqwc.cn/news/13592.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 中的认证是什么,如何使用

Spring Boot 中的认证是什么,如何使用 在 Web 应用程序中,认证是一项重要的安全措施。Spring Boot 提供了丰富的认证机制,可以帮助我们轻松地实现各种认证需求。本文将介绍 Spring Boot 中的认证是什么,以及如何使用 Spring Boot…

多元回归预测 | Matlab阿基米德算法(AOA)优化极限梯度提升树XGBoost回归预测,AOA-XGBoost回归预测模型,多变输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 阿基米德算法(AOA)优化极限梯度提升树XGBoost回归预测,AOA-XGBoost回归预测模型,多变输入模型,多变量输入模型,多变量输入模型,matlab代码回归预测,多变量输入模型,多变量输入模型 评价指标包括:MAE、RMSE和R2…

oracle新建库(表空间)表

文章目录 前言一、sqlplus登录二、表空间1.新建表空间2. 查看表空间3. 查看表空间和对应数据文件4.表空间增加数据文件5.删除单个数据文件(只有一个默认的会删除失败)6.删除表空间及数据文件(慎用) 三、创建新用户并指定表空间1.去掉前缀2.新建用户&…

npm 记录

转 请看原文,我只是怕原文没了,复制了一遍。我目的是想记录缓存那一块。 前端工程化 - 剖析npm的包管理机制 - 掘金 在content-v2/sha512 执行 grep -n "https://registry.npmjs.org/base64-js/-/base64-js-1.0.1.tgz" -r ./ 获取缓存包…

整数序列(山东大学考研机试题)

水仙花数(中南考研机试题) 链接:3644. 水仙花数 - AcWing题库 /* 暴力枚举罢了 */ #include<iostream> using namespace std; const int N1e3100; int book[N]; int pow3(int k){return k*k*k; } int main() {int m,n;for(int i100;i<999;i){int t1,t2,t3;t1 i%10;t…

Redis从入门到精通【进阶篇】之消息传递发布订阅模式详解

文章目录 0. 前言1. 基本原理1.1 基于频道(Channel)的发布/订阅1.2 基于模式(Pattern)的发布/订阅 2. Redis 发布订阅实际应用2.1 Redis Sentinel2.1 SpringBoot Redis发布/订阅 3. Redis从入门到精通系列文章 0. 前言 发布订阅模式&#xff08;Publish-Subscribe Pattern&…

前端Vue自定义轮播图视频播放组件 仿京东商品详情轮播图视频Video播放效果 可图片预览

前端Vue自定义轮播图视频播放组件 仿京东商品详情轮播图视频Video播放 &#xff0c;可图片预览&#xff0c;下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13325 效果图如下: # cc-videoSwiper #### 使用方法 使用方法 <!-- g…

SSM学习笔记-------Spring(一)

SSM学习笔记-------Spring&#xff08;一&#xff09; Spring_day011、课程介绍1.1 为什么要学?1.2 学什么?1.3 怎么学? 2、Spring相关概念2.1 初识Spring2.1.1 Spring家族2.1.2 了解Spring发展史 2.2 Spring系统架构2.2.1 系统架构图2.2.2 课程学习路线 2.3 Spring核心概念…

Mac如何在终端使用diskutil命令装载和卸载推出外接硬盘

最近用 macOS 装载外接硬盘的时候&#xff0c;使用mount死活装不上&#xff0c;很多文章也没详细的讲各种情况&#xff0c;所以就写一篇博客来记录一下。 如何装载和卸载硬盘&#xff08;或者说分区&#xff09; mount和umount是在 macOS 上是不能用的&#xff0c;如果使用会…

2023亚马逊云科技中国峰会——Amazon DeepRacer

1.DeepRacer技术背景 早在20世纪初汽车问世之时&#xff0c;发明家们便已提出无人驾驶的设想。但即便是实现无人驾驶的初级阶段&#xff0c;也经历了足足百年时间。毕竟在复杂的城市路况下&#xff0c;机器若想像人一样实现感知、决策、控制等功能&#xff0c;必定面临各种复杂…

无线蓝牙耳机什么牌子好?八大真无线蓝牙耳机排名

蓝牙耳机作为当前热门的数码产品&#xff0c;无论何时都能用上&#xff0c;蓝牙耳机的快速发展逐渐的取代有线耳机&#xff0c;摆脱线条的束缚&#xff0c;更方便携带。当然&#xff0c;随着蓝牙耳机的设计各种各样&#xff0c;导致很多的小伙伴在选购耳机的时候&#xff0c;不…

如何用python编写3D游戏

Vizard是一款虚拟现实开发平台软件&#xff0c;从开发至今已走过十个年头。它基于C/C&#xff0c;运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时&#xff0c;Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI)&#xff0c;进而运行渲染核心。…