一步一步学做一个CPU——4,使用库中模块设计费波拉斯数计算器

本文介绍了如何使用QuartusII中的MegaWizard添加RAM模块并配置参数,涉及添加总线、手动按钮作为时钟信号、常量设置等内容,并演示了波形仿真的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1, 使用MegaWizard添加一个RAM模块。

RAM模块属于原理图设计中一个较为复杂的模块,并非如一个简单的二输入与门那样直接添加就可以了,还有一些参数需要配置和设定。在QuartusII中添加一个类似RAM的复杂模块需要用到MegaWizard,通过使用MegaWizard添加一个RAM模块,可以了解如何用MegaWizard为库提供的模块配置参数。

依然是使用Symbol tool打开添加模块对话框,MagaWizard的模块多数在megafunctions目录下,我们使用的是megafunctions——>storage——>lpm_ram_dq,勾选上Launch MegaWizard Plug-In,OK,打开MegaWizard Plug-In Manager,选择为库文件生成的文件类型,有AHDL语言,VHDL语言和Verilog HDL语言三种选择,根据需要和自己对他们的熟悉程度选择,设定为其生成的目录文件,建议生成到工程所在目录下,并在其名称基础上加上些有意义的后缀。接下来是关于模块具体参数的设定,不同的模块会有所不同,这里请先按照图中的配置方式选择,使用8位容量32个字的RAM,不带有输出口寄存功能。

为了让RAM有一个初始值,我们要为其写个初始化数据文件,下面选中Yes, use this file for the memory content data,并设定好文件路径名称。下一步是生成文件的清单,最后Finish将生成模块添加到设计文件中。

clip_image002 clip_image004

clip_image006 clip_image008

clip_image010 clip_image012

clip_image014 clip_image016

clip_image018

2,添加总线与提取总线上一位数据的方法。

以上是通过MegaWizard添加模块的方法,用相同的方法,我们可以添加lpm_add_sub模块。

本例中涉及到的就是以上两种模块,通过联系和实践,可以测试试验一下其他的模块。

接下来添加输入输出引脚,这个前面介绍过,这里有点不同的是,输出引脚是8位的,这个在命名的时候后面加上[7..0]就表示是个8位的输出,例如fib_res[7..0],如果要用到其中一位就是名字加上下方括号跟标号,例如fib_res[5]。

3,用手动按钮作为时钟信号测试。

实验板上的时钟太快了,不利于我们观察,那就用仿真时学的办法,加一个输入按钮,模拟时钟,按一下,时钟跳一下,于是加了一个输入引脚,用于连接实验板上的按钮开关。输入引脚后面要加一个非门,因为实验板上松开按钮时候输入是高电平,所以用一个非门也就是反相器来取反向。

需要指出的是,用手动按钮做时钟信号来测试是一个权宜的方法,实际的设计中是不推荐的,包括组合电路的输出用做时钟信号都是不好的设计习惯,因为时序电路工作的时钟要求波形稳定,组合逻辑电路中产生波形的毛刺对其工作影响较大,造成错误的数据或不可预测的结果。

4,常量的加入。

由于加入的ram模块至少含有32个字的存储,只需用到其中一个,地址线置零就可以了,每次时钟来临都进行写入操作,那么写入使能始终设为Enable。那么这些常量该怎么设定呢?在原理图设计中,有GND和VCC两个常量,分别代表逻辑1和逻辑0,将他们引入到电路中就可以了,多位数据合并到一条总线上是将各位数据用逗号隔开,添加到总线命名中。

5,让你的电路更加清晰。

前面介绍到,当电路规模愈加复杂时,将各模块直接连接到一起会严重影响其清晰美观,那么推荐的方式是采用网络标识的形式,也可以为GND,VCC添加一个网络标识,把他们改名为b1和b0如图,那么内存地址我们可以写为b0 ,b0, b0, b0,b0。

clip_image020

clip_image022 clip_image024

再把上图整理一下,看看效果是否好一点了。

clip_image026

6,初始化RAM中数据

clip_image028 clip_image030

7,波形仿真工具

这里在学习一下使用QuartusII自带的波形仿真工具,新建一个Vector Waveform File。

clip_image032 clip_image034

在图中位置右击,搜索添加Node和Bus,在Insert Node or Bus框中点击Node Finder按钮,弹出Node Finder框,点击List将所有输入输出节点列出,添加到Selected Nodes中,OK。

clip_image036 clip_image038

选中clk_button,点击工具栏的Overwrite Clock,在Clock框中填好起始时间,结束时间,时钟周期等参数,为其添加一个时钟输入。

clip_image040 clip_image042

在编译过整个工程后,如无错误,点击Start Simulation,片刻后,仿真波形输出出来,仿真结果如图,由于只是8位存储器,所以233后面的数结果会有问题,但是仿真结果与我们设计的电路所应得到的输出效果是一致的。

clip_image044

8, 总结

这里我们学习了利用MegaWizard添加megafunctions库中的复杂模块,学习了如何使用Node和Bus,以及如何使用节点标识取代直接连线,是原理图层次划分更加清楚,另外还有如何进行波形仿真,对设计进行有效验证,基本在Logisim中可能用到的常用功能在QuartusII设计工具中都能找到。会使用Logisim构建一个电路,相应使用QuartusII工具的原理图设计也不会有难度了,当然他们库中包含的模块还有些不同,但一般常见的标准模块QuartusII都有,而是是我们在实际设计中会用到的标准接口标准功能的模块,要好好了解熟悉他们的用法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值