[D-XI] DFFE 2 随机存储器 点IP-core

EDA:quartus  II 13. 1(14.0)

平台:CycloneV:5CSEMA5F31C6

阅读“《自己设计制作CPU与单片机》---- 姜咏江”

个人笔记中的文字表达极差。读书后为存储器的出现编斗。学习随机存储器的练习笔记保存地址:to_mmry1k。


2015.07.18

作为一个存储器单元(这里指一位)它应该具有“读/写”、“存储”功能(非指ROM这种只读)。同时,所设计的存储模块的封装应能够组成更大的存储器模块,因为现在的存储器都比较大。


1 DFFE 2存储器

1.1 mmry1

quartus II库内提供了DFFE元件,它具有存储一位的功能,可以先通过它斗出一个能够“读/写”的模块,斗不出来再换思路。将DFFE拉倒mmry1.bdf文件中,斗出模块名为mmry1:将DFFE的ENA输入作为写DFFE的使能端口,当选中本DFFE且写信号使能时,i就会写入DFFE(在这个条件下控制DFFE的预置功能);当选中本DFFE且为非写入信号时就默认为读DFFE。mmry1的功能仿真图如下。

[D-XI] DFFE 2 随机存储器 点IP-core_第1张图片

Figure1. mmry1功能仿真图

addr= rw_ = 1时且clk上升沿到来时,可通过i写mmry1;addr =1且rw_ = 0时可通过o输出DFFE的状态。


1.2 mmry8

将4个mmry1排在mmry4.bdf中,构成逻辑上的连续输入/输出就得到了4位存储器。这样的设计可以位访问mmry4的每一位,也可以将4个mmry1的选择输入addr连接在一个输入上,让4个mmry1成为一个最小的访问单位(继而构成以8位为存储单元的存储器,具有此功能的模块mmry41在mmry4.bdf中)。mmry4功能仿真图如下。

[D-XI] DFFE 2 随机存储器 点IP-core_第2张图片

Figure2. mmry4功能仿真

在mmry8.bdf中可由2个mmry41的封装组成8位的存储单元mmry8。mmry8的功能仿真图如下。

[D-XI] DFFE 2 随机存储器 点IP-core_第3张图片

Figure3. mmry8功能仿真

当写mmry8的时候,其输出为高阻状态。当读mmry8的时候,其实mmry8内的DFFE也是收不到数据的。mmry8用独立的导线来完成读写(书中的存储器的读和写共用一组导线,这样更节约导线资源)。


2015.07.19

1.3 mmry1k

mmry1k没有考虑一个信号的扇出量(如一个时钟输出最多能够驱动8个mmry8)等实际中现的因素。


首先由mmry8在mmry16bytes.bdf中组合一个24大的存储器mmry16bytes,其的地址输入a由译码器(to_faddsub工程下夫人sdc.bdf中有一个24位译码器)输出,因为对于一块存储器来说,在同一时间只能选中一个存储器单元。mmry16bytes功能仿真图如下。

[D-XI] DFFE 2 随机存储器 点IP-core_第4张图片

Figure4. mmry16bytes功能仿真

直接在mmry1k.bdf中由mmry16bytes构成mmry1k,注意各存储器单元的地址来自译码器的输出(每次只有一位为1)。mmry1k功能仿真图如下。

[D-XI] DFFE 2 随机存储器 点IP-core_第5张图片

Figure5. mmry1k功能仿真图

由于没有设计输入为10输出为1024种互斥情况的译码器,在编译的布线阶段会提示mmry1k的端口超过了FPGA平台的最大IO数。不过不影响其功能仿真。如果将10位译码器添加到工程中后一共只需要占用30左右个端口


1.4 内存对齐

存储器可以用较小容量的多块芯片组成容量大的存储器。用2块mmry1k的芯片可以组成容量为2k且最多可以一次访问16位的存储器。具体做法在笔记“内存(RAM)结构[物理级] malloc()实际分配给用户的内存中的1.5部分”。这需要适当改造mmry1k(加片选信号)。


2 IP Core 2存储器

书中述:我们自己设计的随机存储器不能够使用FPGA中的存储资源,只有用FPGA中提供的IP和才能够利用FPGA中的存储资源。利用IP核可以组织我们所需要的随机存储器RAM或者ROM。Quartus II提供的存储器的IP核为Symbol工具栏(tools >> MegaWizardPlug-In Manager(不勾选show only wizard-generated files)或在.bdf文件中双击弹出(然后点MegaWizard Plug-InManager))中的megafunction >> storage >> lpm_ram_dq。


使用IP核的方式为:找到IP核的手册;在手册中查看IP和的配置参数和接口。编写testbench测试调用IP核模块的功能、时序等,直至满足要求(像我这类的初学者如果找不到手册,看不懂手册都属正常)。


在官网的Document >> IP and Megafunctions下面没有找到关于lpm_ram_dq的手册,到是找到了像DDR等IP核的手册,在使用这些IP核前可以先看一下“Introduction to Altera IPCores”这个手册,看看如何使用IP核。再搜了一下关于“quartus II和IP core/megafunction”也没有找到相关的手册,难道其中的description就已经能够说清库元件的使用?在quartus II中自带的库元件中,将其添加到原理图文件中后,双击其元件右上角的参数框,就可以配置元件的参数和接口(端口)了。


只要给IP核一些正确的参数就可以得到想要的数字模块电路。找到IP核官方手册(此次没有在官网上找到lpm_ram_dq的手册)和正确理解IP核端口及参数配置是使用IP核的必要前提。在使用lpm_ram_dq的过程中(可以先看ports栏包含的参数,再去parameter中结合description填写参数值),将EDA换成了quartus II 14.0才能够仿真lpm_ram_dq构成的4k存储器,而且存储器似而不能保存数据(布吉岛哪里没有配置对还是怎么,如果是自己设计的存储器就可以从组成存储器的最小单元找问题,不过自己写得模块大都需要实践反馈才能渐变完美)。由于这是7月最后一篇关于ETF的学习笔记,就点到IP结束吧。下回续学。


2015.07.21

3 总结

6、7月在“书”的指导下学习并练习了怎样构建“数字电路模块”。当遇到要用电路实现复杂逻辑时,可划分逻辑到很小的部分(小到本人可以掌控位置,如本人可以用电路实现加法逻辑,那就将加法逻辑划为最小单位),一部分一部分的用电路将逻辑实现(在能够清楚掌握IP核配置参数和借口含义的情况下,IP核能够帮助我们节约设计时间)。确保各个模块逻辑对应电路的功能、时序等都满足要求时再将各逻辑对应的电路连接起来形成最终的目标数字电路。


[2015.07.20-11:16

[ETF Note Over]

你可能感兴趣的:([D-XI] DFFE 2 随机存储器 点IP-core)