本节将介绍存放数据和程序的存储器的设计与实现。制作存储器用到了FPGA 的RAM 区域。 1.7.1 FPGA 的RAM 区域 许多FPGA 都有可供用户自由使用的RAM 区域。赛灵思生产的FPGA 称之为块RAM,大小从几千字节到几兆字节不等。在第2 章将要设计的电路板上搭载的Spartan- 3E XC3S250E,有27KB 可以利用的块RAM。 块RAM 可以作为子模块,以实例化的方式使用。块RAM 提供的功能如表1-22 所示。本书使用Single Port ROM 和True Dual Port RAM 两种类型。 表1-22 块RAM 的种类 更多关于赛灵思的块RAM 的资料请参阅下面的连接。这里,我们仅对本书使用的功能进行说明。 Using Block RAM in Spartan-3 Generation FPGAs http://www.xilinx.com/support/documentation/application_notes/xapp463.pdf Single Port ROM Single Port ROM 是单一端口读取专用的存储器。Single Port ROM 的输入输出端口如表1-23 所示,访问时序图如图1-82 所示。模块名、存储区域宽度和深度等参数在实例化时再决定。 表1-23 Single Port ROM 的输入输出端口 图1-82 Single Port ROM的访问时序 [Ⅰ]锁存输入的地址 时钟信号(clka)上升沿时将地址(addra)锁存。地址(addra)锁存后输出读取的数据(douta)。 [Ⅱ]锁存输出的数据 地址(addra)锁存后的下一个时钟周期,即可将读取的数据(douta)锁存。 True Dual Port RAM True Dual Port RAM 是双端口读写存储器。True Dual Port RAM 的两个端口可以同时访问。各个端口可以有独立的时钟。True Dual Port RAM 的输入输出端口如表1-24 所示,访问时序图如图1-83 所示。模块名、存储区域宽度和深度等参数在实例化时再决定。 表1-24 True Dual Port RAM 的输入输出端口 图1-83 Dual Port RAM的访问时序图 [Ⅰ]锁存输入的地址 时钟信号(clka)上升沿时将地址(addra)锁存。此时,如果写入使能信号(wea)有效,则将写入的数据(dina)写入存储器。地址(addra)锁存后输出读取的数据(douta)。 [Ⅱ]锁存输出的数据 地址(addra)锁存后的下一个时钟周期,即可将读取的数据(douta)锁存。 由于True Dual Port RAM 可以同时在两个端口进行读写操作,因此在两个端口同时对相同地址进行读写访问时应加以注意。此时的操作可以在块RAM 实例化时加以设置。在此不多做介绍,详情请参阅前文提到的块RAM 文档。 1.7.2 ROM 的设计与实现 本节设计的ROM 将用来存放引导程序。ROM 地址映射到地址0 处,AZ Processor 启动后从0 号地址开始执行程序。ROM 由单个名为rom 的模块构成。存储器使用Single Port ROM。表1-25 列出了rom 模块使用的宏一览,表1-26 列出了rom 模块信号线一览,代码1-10 列出了rom 模块的程序。 表1-25 宏一览(rom.h) 表1-26 信号线一览(rom.v) 代码1-10 Read Only Memory(rom.v) [Ⅰ]存储器的实例化 块RAM 的实例化。 [Ⅱ]异步复位 复位信号有效时,将就绪信号初始化。 [Ⅲ]生成就绪信号 片选信号与地址选通信号同时有效时,因为即将访问总线,就绪信号变为有效。其他情况时,就绪信号设置为无效。 1.7.3 小结 本节讲解了存储器的设计与实现。主要描述了FPGA 的块RAM 的使用方法。 专栏 存储器相关书籍 メモリICの実践活用法(桑野雅彦著、CQ出版) (中文译名:《存储器IC 的实践与活用方法》) 本书通俗易懂地讲述了各种存储器的构造、原理以及使用方法。通过阅读本书,读者们除了可以掌握存储器的基础知识,还可以了解从事电路设计所必需的存储器知识。