首页 百科知识 存储器设计

存储器设计

时间:2022-10-26 百科知识 版权反馈
【摘要】:存储器的设计是EDA技术中的一项重要技术,在很多电子系统中都有存储器的应用,比如,利用EDA技术产生一个正弦波,正弦波的数据就需要存放在ROM中。下面介绍几种存储器模块的设计方法,同时也可以了解到LPM的使用方法。完成数据输入后,保存文件并命名为rom.mif。至此,ROM的设置已经完成。它确实与双端口存储器相同,具有两个端口,但它与双端口存储器最大的不同就是一个端口专门用于写入操作,而另一个端口专门用于读取操作。

11.2 存储器设计

存储器的设计是EDA技术中的一项重要技术,在很多电子系统中都有存储器的应用,比如,利用EDA技术产生一个正弦波,正弦波的数据就需要存放在ROM中。EDA技术中采用宏功能模块的调用方法来设计存储器是比较好的一种方法。下面介绍几种存储器模块的设计方法,同时也可以了解到LPM的使用方法。

11.2.1 ROM设计

创建ROM前首先需要建立ROM内的数据文件,ROM内的数据可以提前进行设计或利用其他工具软件生成。在Quartus II中能接受的初始化数据文件有两种:Memory Initialization File(.mif)格式和Hexadecimal(Intel-Format)File(.hex)格式。在实际应用中使用一种格式的文件即可。下面以建立.mif格式的文件为例,介绍数据文件的建立和使用。

1.建立.mif格式的文件

首先在磁盘上建立一个工作文件夹,然后建立工程文件LMP-ROM并存放在该工作文件夹中。

在Quartus II主界面下选择“File”→“New”菜单命令,并在“New”对话框中单击“Other Files”选项卡,如图11.2.1所示。然后选择“Memory Initialization File”选项,单击“OK”按钮后弹出如图11.2.2所示的对话框,设ROM中有64个8位数据。在“Number of words”中填入ROM中的数据数,这里填写64,在Word size中填入数据宽度,这里取8位,单击“OK”按钮,弹出如图11.2.3所示的空的.mif格式的数据表。填入数据后如图11.2.4所示,右击窗口边缘的地址栏,弹出格式选择窗口,可以从中选择不同的地址格式和数据格式。表中任意数据对应的地址为左列数和顶行数之和。例如,表中的数据“88”对应的地址为左列16,顶行3,则地址为16+3=19。完成数据输入后,保存文件并命名为rom.mif。

img567

图11.2.1 选择数据文件

img568

图11.2.2 设置数据

img569

图11.2.3 数据表

img570

图11.2.4 填入数据

2.制定ROM模块

数据文件保存完毕后,利用MegaWizard Plug-In Manager来制定ROM宏模块,并将创建好的数据文件加载到此ROM中。设计步骤如下。

(1)在Quartus II主界面下选择“Tools”→“MegaWizard Plug-In Manager”命令,弹出如图11.2.5所示的对话框。选中“Create a new custom megafunction variation”选项,单击“Next”按钮,弹出如图11.2.6所示的对话框。在该对话框的左侧栏选择“Memory Complier”项下的“ROM-1PORT”,再选择器件和语言方式(这里选择“ACEX1K”器件和“VHDL”语言),最后输入ROM文件存放的路径和文件名(文件名为rom1)。

img571

图11.2.5 创建宏模块

img572

图11.2.6 选择ROM宏模块

(2)单击“Next”按钮后弹出如图11.2.7所示的对话框,设置地址线位宽和数据位宽。在数据位宽和数据数一栏中选择8和64;在“What should the memory block type be?”框中选择默认的“Auto”。设置完后单击“Next”按钮,弹出如图11.2.8所示的对话框,在该对话框中设置寄存器和使能信号等,这里均选择默认设置。

(3)单击“Next”按钮,弹出如图11.2.9所示的对话框,在这里进行数据文件的指定。在“Do you want to...”框中选择“Yes,use this file for the memory content data”选项,并单击“Browse”按钮选择待指定的文件rom.mif。单击“Next”按钮后弹出如图11.2.10所示的对话框,从而可以看到仿真库的信息。单击“Next”按钮后弹出如图11.2.11所示的对话框,从而可以看到关于此ROM的信息概要,最后单击“Finish”按钮完成ROM的创建。

(4)ROM创建完成后,将生成文件命名为rom1.vhd的文件。该文件既可以用于原理图编辑,也可用于顶层文件的实例化。

(5)建立一个图形输入文件,在编辑窗口的空白处双击,出现如图11.2.12所示的界

面。打开“Libraries”栏中的“Project”下的“rom1”,生成的电路符号如图11.2.13所示。其中,inclock为时钟信号输入端,address[5..0]为地址输入端,q[7..0]为数据输出端。

img573

图11.2.7 设置数据线和地址线宽度

img574

图11.2.8 设置寄存器端口

img575

图11.2.9 指定数据文件

img576

图11.2.10 仿真库信息

img577

图11.2.11 ROM信息概要

至此,ROM的设置已经完成。接下来,在原理图编辑器中连接成如图11.2.14所示的电路,并进行编译和仿真,其功能仿真波形如图11.2.15所示,其时序仿真波形如图11.2.16所示。观察波形可知,输入端q输出的数据正是数据文件rom.mif中写入的数据。

11.2.2 RAM设计

RAM的创建过程与ROM的创建过程基本相同,同样使用MegaWizard Plug-In Manager工具进行定制。进入如图11.2.17所示的对话框后,在左侧栏选择“Memory Complier”项下的“RAM:1-PORT”选项,器件和语言根据需要进行选择(这里选择ACEX1K器件和VHDL语言),然后输入RAM文件存放的路径和文件名(文件名为ram1)。

img578

图11.2.12 图形符号界面

img579

图11.2.13 生成的ROM符号

img580

图11.2.14 ROM原理图

img581

图11.2.15 ROM功能仿真波形

img582

图11.2.16 ROM时序仿真波形

img583

图11.2.17 选择RAM宏模块

数据宽度选择8位,数据数选择64,其他均按默认处理,如图11.2.18所示。后面的设置与ROM类似,所不同的是RAM不需要指定数据文件,具体的创建过程如图11.2.19至图11.2.22所示。

img584

图11.2.18 设置数据线和地址线宽度

创建完成后生成相应的ram1.vhd文件,创建图元后生成的电路符号如图11.2.23所示。其中,data[7..0]为数据输入端,we为读写使能端,address[5..0]为地址输入端,inclock和outclock为时钟信号,q[7..0]为数据输出端。加入输入端口,完成RAM的电路原理图,如图11.2.24所示。

img585

图11.2.19 设置寄存器端口

img586

图11.2.20 选择是否指定数据文件

img587

图11.2.21 仿真库信息

img588

图11.2.22 RAM信息概要

img589

图11.2.23 生成的RAM符号

img590

图11.2.24 RAM电路原理图

对创建的RAM进行编译和仿真,功能仿真波形如图11.2.25所示,其时序仿真波形如图11.2.26所示。其中,读写允许信号we为高电平时写允许,低电平时读允许。观察图形可知,当we为1时写入数据,当we为0时重复写入数据时的地址,而输出端q则输出写入的数据。

img591

图11.2.25 RAM功能仿真波形

img592

图11.2.26 RAM时序仿真波形

11.2.3 FIFO设计

FIFO(first-in first-out)是一个先入先出的双口缓冲存储器,FIFO存储器可以独立进行输入输出,也可以看成是一种双端口存储器。它确实与双端口存储器相同,具有两个端口,但它与双端口存储器最大的不同就是一个端口专门用于写入操作,而另一个端口专门用于读取操作。数据是按照写入的顺序被读出的,因此没有地址引脚,这也是与双端口存储器的不同之处。

FIFO的设计方法与ROM、RAM的设计方法基本相同。同样使用MegaWizard Plug-In Manager工具进行定制。进入如图11.2.27所示的对话框后,在左侧栏选择“Memory Complier”项下的“FIFO”选项,器件和语言根据需要进行选择(这里选择ACEX1K器件和VHDL语言),然后输入FIFO文件存放的路径和文件名(文件名为fifo1)。

img593

图11.2.27 选择FIFO宏模块

参数设置对话框如图11.2.28所示,数据宽度选择8位,数据数选择64。单击“Next”按钮,在如图11.2.29所示的对话框中可以选择其他的输入输出端口,比如清零端等。在如图11.2.31所示的对话框中可以进行优化方式等设置,这里选择了速度优化。具体的创建过程如图11.2.28至图11.2.33所示。

img594

图11.2.28 设置数据线和地址线宽度

img595

图11.2.29 FIFO端口设置

创建完成后生成的FIFO电路符号如图11.2.34所示。其中,data[7..0]为数据输入端,wrreq为写入数据请求信号,rdreq为读出数据请求信号,clock为时钟信号,q[7..0]为数据输出端,full为存储器溢出指示信号,empty为FIFO空指示信号,usedw[5..0]为当前已使用的地址数指示。完成端口连接的FIFO原理图如图11.2.35所示。

img596

图11.2.30 设置读取方式

img597

图11.2.31 选择优化方式

img598

图11.2.32 FIFO仿真库信息

img599

图11.2.33 FIFO信息概要

img600

图11.2.34 生成的FIFO符号

img601

图11.2.35 FIFO原理图

对创建好的FIFO进行编译和仿真,得到的功能仿真波形如图11.2.36所示,时序仿真波形如图11.2.37所示。当写入数据请求信号wrreq为1时,在clock的上升沿下,将data输入的数据存入FIFO中;而在wrreq为0和读出数据请求信号rdreq为1时,在clock的上升沿下,输出端q按照先入先出的顺序将FIFO中的数据读出,整个过程中usedw的值也随之变化。

img602

图11.2.36 FIFO功能仿真波形

img603

图11.2.37 FIFO时序仿真波形

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈