社区导航

 
查看: 2423|回复: 3

[原创] 【FPGA开源教程连载】第十三章A 嵌入式RAM使用之双端口RAM

[复制链接]

127

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-1-2 09:56:39 | 显示全部楼层 |阅读模式
嵌入式RAM使用之双端口RAM


实验目的: 1.学习Altera公司Cyclone IV系列器件的内部结构
2.学会调用Quartus II软件中提供双口RAM核并进行仿真
实验平台:芯航线FPGA学习套件核心板
图片1.jpg
实验原理:
       本开发板使用的为Altera公司的CycloneIV系列芯片,其体系结构如图13-1所示。其核心架构是四输入查找表 (LUTs) 构成的 LE, 存储器模块以及乘法器。体系结构中还包括通用PLL以及I/O,其他诸如多用PLL、高速收发器以及PCIe硬核模块会在其高端系列IVGX中存在。
       图片2.jpg
图13-1Cyclone IV体系结构
逻辑单元 (LE) 在 Cyclone IV 器件结构中是最小的逻辑单位。LE 紧密且有效的提供了高级功能的逻辑使用。其内部结构如图13-2所示。可以LE基本包含以下几个部分:4输入查找表LUT、D触发器(可以对每个LE 配置可编程的寄存器为D、T、JK或SR触发器操作)以及其它组合逻辑。详细介绍可参考器件手册中Chapter2. LogicElements and Logic Array Blocks in Cyclone IV Devices
图片3.jpg
13-2逻辑单元内部结构
    嵌入式存储器结构由一列列M9K 存储器模块组成,通过对这些 M9K存储器模块进行配置,可以实现各种存储器功能,例如:RAM、移位寄存器、ROM 以及FIFO缓冲器。详细介绍可参考器件手册中Chapter 3. MemoryBlocks in Cyclone IV Devices
图13-3为一个嵌入式乘法器列以及相邻的逻辑阵列模块 (LAB)。嵌入式乘法器可 以配置成一个18 × 18乘法器,或者配置成两个 9 × 9 乘法器。对于那些大于18 × 18的乘法运算,Quartus® II 软件会将多个嵌入式乘法器模块级联在一起。虽然没有乘法器数据位宽的限制,但数据位宽越大,乘法运算就会越慢。每个嵌入式乘法器均由以下几个单元组成:乘法器级、输入与输出寄存器以及输入与输出接口,其乘法器模块的体系结构如图12-4所示。详细介绍可参考器件手册中Chapter4. EmbeddedMultipliers in Cyclone IV Devices
图片4.jpg 图片5.jpg
图12-3与 LAB 相邻的按列排列的嵌入式乘法器                                图12-4乘法器模块的体系结构
       Cyclone IV内部其他部分功能均可在Altera官网提供的CycloneIV 器件手册中下载学习。
实验步骤:
新建一个以名为dpram的工程保存在prj下,然后单击Tools—MegaWizard Plug-In Manager来启动Mega Wizard插件管理器,并新建一个IP核。选择MemoryCompiler下的RAM:2-PORT,并将输出目录确定为工程文件夹下的ip文件夹,并以dpram保存,单击Next。对于单端口RAM,读写操作公用端口A的地址,数据通过端口A写入和读出;对于本节使用的双端口RAM,则是一个读端口和一个写端口。
图片6.jpg
12-5新建一个双端口的RAM
       这里将双端口RAM的使用方式设置为一个读端口和一个写端口,另一种方式为两个端口都可用做读/写。这也就是设置一般而言的简单双端口RAM还是真正双端口RAM
图片7.jpg
12-6两端口RAM设置第三页
       设置存储器大小的方式为按照字数确定,另一种方式为按照比特数;不同端口使用相同数的位宽;端口位宽为8;存储器使用的存储块类型为软件自动选择;存储器深度为软件自动选择。
图片8.jpg
12-7两端口RAM设置第四页
       时钟选择这里为单时钟,用一个时钟和一个时钟使能信号控制存储块所有的寄存器。其他应用场所还可以设置为双时钟使用独立的输入时钟和输出时钟或者双时钟使用单独的读时钟和写时钟。不创建读使能信号;
图片9.jpg
12-8双端口RAM设置第五页
       对输出端口进行寄存;不创建时钟使能信号;不创建异步复位端口,需注意这里复位并不复位RAM中的数据而是只复位寄存器上的值。
图片10.jpg
12-9两端口RAM设置第七页
这个选项只会在前面选择“一个读端口和一个写端口”或者“两个端口都可用读写”,才会出现如果对同一个地址既要写又要读,那么输出端口q的输出是什么。这里选择不关心,另一种可以设置为写数据之前的存储数据。
图片11.jpg
12-10两端口RAM设置第8
       这里不对RAM进行初始化,在后面使用ROM时必须进行初始化,初始化步骤将在ROM部分再讲解。
图片12.jpg
12-11两端口RAM设置第10
       然后确定配置信息后即可点击Finish完成配置。
并将生成的IP核加入工程,即可在工程下看到加入的IP核文件并设置为顶层文件。
为了测试仿真编写测试激励文件,新建dpram_tb.v文件并输入以下内容再次进行分析和综合直至没有错误以及警告,保存到testbench文件夹下。这里除了实现例化需要仿真的文件以及时钟创建,还实现了在地址从0~16上写入数据从255减至240。延时一段时间后读地址为0~16上的数据。
图片13.jpg 图片14.jpg 图片15.jpg


编译无误后可以在图12-12设计报告中看到本设计的使用的逻辑单元为0,这是因为这里我们只生成了一个RAM的IP核,没有使用逻辑设计。
图片16.jpg
12-12设计报告
设置好仿真脚本后进行功能仿真,可以看到如图12-12所示的数据写入时的波形文件。在写入信号使能有效后,上升沿来到后地址0写入数据’d255,下一个上升沿在地址1处写入数据’d254,以此类推。可以看出数据写入正常。
图片17.jpg
12-12数据写入时波形
放大读取部分数据波形,在图12-13中发现在写入与读间隔中,输出端口移植是’d255不利于分析数据。这里将激励文件中的rdaddress初始值改为一个写操作用不到的地址,大于16即可:rdaddress = 30;重启仿真即可看到图12-14波形数据。可看出输出总是延迟一个系统时钟周期。
图片18.jpg
12-13读数据波形文件
图片19.jpg
12-14修改后的读取波形数据
为了更好的观察时钟沿与地址、数据变化的过程,全编译后进行时序仿真。读数据时,可以看出第一个箭头时钟上升沿采到地址0 ;第二个时钟上升沿开始赋值,但是由于逻辑延迟(红框)后才开始赋值;因此第三个时钟上升沿的数据才是稳定的。
图片20.jpg
       这样就完成了,一个双端口RAM的配置与仿真。下一讲将以此为基础,进行串口收发+按键+双口RAM组成的简易系统设计。




小梅哥
芯航线电子工作室


关于学习资料,小梅哥系列所有能够开放的资料和更新(包括视频教程,程序代码,教程文档,工具软件,开发板资料)都会发布在我的云分享。(记得订阅)链接:http://yun.baidu.com/share/home?uk=402885837&view=share#category/type=0



此帖出自FPGA/CPLD论坛

class13_dpram.rar

895.93 KB, 下载次数: 60

第十三章A_嵌入式RAM使用之双端口RAM.pdf

1.18 MB, 下载次数: 60

评分

1

查看全部评分



回复

使用道具 举报

401

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-1-2 13:36:48 | 显示全部楼层
谢谢小梅哥

点评

感谢您的支持!!!  详情 回复 发表于 2017-1-4 00:56


回复

使用道具 举报

127

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2017-1-2 09:57:13 | 显示全部楼层
本文配有由小梅哥精心录制的配套视频教程,现已上架到本站EE大学堂,欢迎大家前往观看。观看过程中如果对哪一课程有疑问,可以到对应的文档教程帖子下面回复,我们会及时为您解答。视频教程链接:http://training.eeworld.com.cn/course/3577


回复

使用道具 举报

127

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2017-1-4 00:56:02 | 显示全部楼层

感谢您的支持!!!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-10-19 13:52 , Processed in 0.132705 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表