河南大学《EDA》vhdl语言的高级使用技巧(8)
时间:2025-07-06
时间:2025-07-06
作为16×1的同步RAM使用,也可以将两个LC联合起来作为16×2、32×1的同步RAM或者16×1的双口RAM使用,如图3所示。通过级连分布式RAM也可以实现更大容量的存储器[3]。
这种结构的存储器完全由可编程逻辑器件片内资源来实现,结构比较灵活,具有高速的特点,但存储宽度和深度受片内资源限制比较有限,存储容量较小,通常应用于小数据缓冲器、FIFO或寄存器文件,在DSP系统设计中较为常见。
(3) 块状RAM与分布式RAM的使用
在一般情况下,系统需要存储一定的数据时,最好使用块状RAM。无论是在资源的合理利用方面,还是稳定性方面,块状RAM都是最好的选择。在要求高速且存储容量较小的情况下也可以使用分布式RAM。但其要占用FPGA芯片内数量有限的触发器资源,所以一般建议当所设计的RAM容量超过1kb时就使用块状RAM。另外由于FPGA芯片内部嵌入的是同步RAM存储单元,在某些设计中如需要使用异步存储器,就必须使用分布式RAM,从而实现异步存储。
四 通用存储器的实现
为了调用FPGA芯片内的存储器资源,通常利用芯片厂商提供的工程软件直接调用所提供的通用存储器IP核,按要求设定参数后,直接生成可以在工程中调用的存储器模块。这种方法的优点是方便、快捷,可以缩短设计周期。但是由于IP核本质是具有知识产权的商业软件,其商业性及源代码的封闭性,决定了IP核在使用过程中不可能像开源VHDL代码一样,具有极高的灵活性、扩展性与可移植性;以下就结合代码分析一种基于VHDL语言实现通用存储器描述的思路及方法。
1 VHDL语言设计思路
用VHDL实现RAM存储器时,RAM进程的触发信号有时钟信号、片选信号和写信号。时钟信号的上升沿到来时,若片选信号和写信号均为1,这时从数据总线输入的数据被写入地址总线上地址制定的存储单元中,完成RAM的写操作。当时钟信号的上升沿到来时,若片选信号为
1、写信号为0,则数据将从相应的存储单元通过数据总线读出,完成RAM的读操作。
为了使代码使用灵活、方便,且具有良好的通用性、可重构性及可移植性,在存储宽度和深度的定义及同步、异步读模式、块状RAM与分布式RAM使用选择定义的过程中,必须利用在VHDL语言中的类属性定义来实现。使用时根据设计需要更改类属性定义参数,即可完成所需