FPGA-RAM的使用
FPGA技术联盟 2023-05-26

文章

简介

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

13

第十三章: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开始),在此不在重复讲述。

在第十四章中将对Verilog HDL 中串口通信进行讲解。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • EDA
  • 仿真
  • CAD
  • 芯片
  • 如何选择全定制与半定制ASIC设计

    ASIC分为全定制和半定制。全定制设计需要设计者完成所有电路的设计,因此需要大量人力物力,灵活性好但开发效率低下。如果设计较为理想,全定制能够比半定制的ASIC芯片运行速度更快。半定制使用库里的标准逻辑单元(...

    09-12
  • IGMPv2的组播路由器选举机制的优势是什么?

    IGMPv2 igmp版本2对版本1所做的改进主要有:(1)共享网段上组播路由器的选举机制共享网段表示一个网段上有多个组播路由器的情况。在这种情况下,由于此网段上运行igmp的路由器都能从主机那里收到成员资格报告消息,...

    09-12
  • 物理地址在不同计算机体系中的表现如何?

    在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址(Physical Address),又叫实际地址或绝对地址。 地址从0开始编号,顺序地每次加1,因此存储器的...

    09-12
  • 假芯片对电子行业的影响分析

    芯片的重要性不言而喻,可以说,一切智能电子设备都离不开芯片。但是,由于目前芯片相对短缺,因此市场上出现了部分假芯片。为增进大家对芯片的认识,本文将对假芯片的相关内容予以介绍。如果你对芯片具有兴趣,不...

    09-12
  • 语音芯片在儿童玩具中的创新使用

    芯片是一种非常重要的电子器件,可以说,芯片制作能力强的企业或者国家都占据着重要地位。为增进大家对芯片的认识,本文将对语音芯片的应用范围、语音芯片的选择予以介绍。如果你对语音芯片具有兴趣,不妨继续往下...

    09-12
  • 语音芯片在日常生活中的应用有哪些?

    芯片在诸多产品中都有所应用,如手机处理器芯片、蓝牙芯片、AI芯片等等。虽然我们可能对芯片的底层知识并不了解,但是对于芯片的作用,还总是能说出个一二三。为增进大家对芯片的认识,本文将对语音芯片如何录音、...

    09-04
  • 压力变送器的常见故障及解决方案是什么?

    压力变送器在工业环境中具有重要应用,对于压力变送器,电气等专业的朋友相对更为熟悉。为增进大家对压力变送器的认识,本文将基于两点介绍压力变送器:1、压力变送器的日常维护,2、压力变送器如何校准。如果你对...

    09-04
  • 电子元器件散热方法的常见误区

    元器件是电子领域的基本元件,很多重要的设备都是通过元器件构建起来的。为增进大家对电子元器件的认识,本文将对元器件的几种常见的散热方法予以详细介绍。如果你对元器件具有兴趣,不妨和小编一起来继续往下阅读...

    08-26
  • 熔断器与断路器的选择性比较

    熔断器和断路器在主要性能方面存在一些差异,为了更好选择和使用熔断器和断路器,下面针对熔断器和断路器的主要性能进行对比。

    08-13
  • MATLAB仿真RLC电路基础教程

    本文演示如何用MATLAB进行电路仿真,测量RLC电路的电压。我用的是R2014a,不同版本软件界面

    08-09
  • 分析一个共集电极放大电路

    仿真前仿真中示波器波形图双击示波器图标,调节X轴扫描为500μS/Div,A、B通道Y轴幅度均为1V/Div。

    07-25
下载排行榜
更多
评测报告
更多
广告