FPGA中嵌入式存储器模块的设计
时间:03-28
来源:互联网
点击:
1 引言
FPGA的片上存储资源有两种实现方式:细粒式和粗粒式。所谓细粒式,是指每个基本逻辑单元可以配置成一个小的存储器.若干个小存储器冉通过合并进行扩展。它不需要额外逻辑,但存储密度较低,适用于存储需求不多的应用。而粗粒式,就是将大容量的存储器模块嵌入到FPGA芯片中作为专用存储单元,与细粒式相比具有存储密度高的优点,适用于数据处理等需要大量片上存储空间的情况。随着FPGA应用日益广泛,大容量存储需求越来越多,嵌入式存储器模块因此已经成为FPGA芯片中十分重要的资源。并且与普通存储器相比,它们具有更灵活的可配置性。
本文所设计的存储器模块是我们FPGA芯片的一部分,其功能、结构、布局都为整个芯片服务。它是一个基于0.13微米CMOS工艺的同步18Kb双端口存储器,可以配置成为ROM或SRAM,每个端口支持6种数据宽度和3种写入模式,并且可以选择控制信号的极性,对每个输出端口独立地进行置0/置1操作。在应用中,多个存储器模块可以通过合并实现深度或宽度的扩展,也可以作为FIFO或大的查找表使用。
2 存储器模块的设计
2.1层次结构
从FPGA芯片的角度,该电路分为逻辑层和配置层,如图1所示。逻辑层是一个静态存储器,有A和B两个独立的端口。en为片选信号,we为读写控制信号,ssr为间步预置控制信号。配置层的作用是为逻辑层提供配置信号,从而选择存储模块的配置模式。每个配置信号对应配置层的一个6管配置单元,在FPGA初始化阶段被赋值后送到逻辑层。
2.2存储单元
存储单元采用图2(a)所示的8管双端口结构,每个端口对应一条的字线和一对位线。当字线电位拉高时,对应的两个NMOS管打开,数据通过位线写入或者读出。作为ROM使用时,为了实现对存储单元的初始化,必须提供一个从配置层到存储单元的数据通道。我们的实现方式如图2(b)所示,即在A端口增加字线、位线选择器。awl_lgc、abl_lgc为逻辑层中A端I=I的字线和位线,cfgwl、cfgbl为来自配置层的字线和位线。当模式选择信号modesel为低电位时,配置层的字线和位线通过,完成对存储器的初始化。反之,逻辑层的字线和位线通过,该存储器即为普通静态存储器。
图1存储器模块层次结构
图2 存储单元设计
图3三种写入模式示意图
该存储器模块有三种写入模式,对应进行写操作时输出端口的三种状态(图3)。Read_First表示在写入新的数据之前,先把存储单元中旧的数据读出来,即在一个时钟周期内完成先读后写两步操作;Write_First表示写入的数据同时也是读出的数据;Nochange表示在写操作过程中输出端口状态保持不变。Read First是默认模式,其实现的关键在于下面介绍的预充电电路。
因为读写操作都必须经过位线,为了实现一个时钟周期内先读后写的功能,读和写就必须在两个不同的时间窗121进行。为此设计如图4(a)的预充电电路。dw、dwn是准备写入的数据,由输入信号经过一定逻辑产生;dr、dm是准备读出的数据,经过灵敏放大器等电路处理后送到输出端。yi为预充电控制信号,rdctl为读控制信号,wtcd为写控制信号,它们的时序关系如图4(b)所示。yi为低电平期间两条位线都被拉到VDD,读写操作均被关闭。vi的高电平窗121约为0.5ns,此间先用半个窗口时间进行读操作(rdcfl拉低),再用后半个窗口时间进行写操作(wIctl拉低)。这样读出的时候写入路径关闭,写入的时候读出路径关闭,从而实现了先读旧数据后写新数据的目的。
图4预充电电路
图5数据宽度选择电路
2.4数据宽度选择电路
经过图5所示的电路,存储器模块可以实现6种数据宽度的选择(16Kxl,8Kx2.4Kx4。2Kx9,1Kxl8,5 12x36)。其中,每一个多路选择器(MUX)由一位地址信号控制,起到地址译码的作用。写数据时,总线选择阵列从36个输入数据中选出需要的数据,经过多路选择器的地址译码,写入相应的存储单元。读数据时,每个多路选择器或者输出所需要的数据或者保持高阻状态,这些数据进入总线选择阵列并送到对应的输出端口。所有数据宽度模式复用36个输入端和36个输出端,不同模式占用的端口不同。对于512x36模式,所有端口均被利用,但是对宽度小于36的模式就必然存在多余端口。为了避免这些不用的端口浮空可能引起的电路不稳定性,在使用时它们会被自动接到VDD或GND。
3 验证方法和结果
由于本文所设计的存储器模块信号数量多、工作模式的组合多样,我们采用行为级仿真工具Modelsim和晶体管级仿真工具Hsim协同仿真的方式对其进行验证。利用行为级仿真可以方便观察电路的功能是否实现,加速验证进度,特别是当验证电路扩展到存储器阵列甚至整个FPGA芯片的时候。而通过晶体管级的仿真可以得到详细而比较精确的时序参数,例如上升/下降时间、延时等。图6为Modelsim中A端口Read_First和Write 两种写操作模式的仿真波形,从中可以清楚地看出二者的特点和区别。
图6仿真波形
访问时间是存储器性能的重要指标,我们选择位于位线结构顶端的存储单元作为关键路径进行读写操作,测定数据在输出端的有效时间相对时钟上升沿的延迟。因为不同数据宽度模式下信号经过的路径长短不同,它们的延迟也必然不同。仿真结果显示:512x36模式下延迟时间最短为1.75ns,16Kxl模式下延迟时间最长为2.7ns,与理论上一致。
FPGA的片上存储资源有两种实现方式:细粒式和粗粒式。所谓细粒式,是指每个基本逻辑单元可以配置成一个小的存储器.若干个小存储器冉通过合并进行扩展。它不需要额外逻辑,但存储密度较低,适用于存储需求不多的应用。而粗粒式,就是将大容量的存储器模块嵌入到FPGA芯片中作为专用存储单元,与细粒式相比具有存储密度高的优点,适用于数据处理等需要大量片上存储空间的情况。随着FPGA应用日益广泛,大容量存储需求越来越多,嵌入式存储器模块因此已经成为FPGA芯片中十分重要的资源。并且与普通存储器相比,它们具有更灵活的可配置性。
本文所设计的存储器模块是我们FPGA芯片的一部分,其功能、结构、布局都为整个芯片服务。它是一个基于0.13微米CMOS工艺的同步18Kb双端口存储器,可以配置成为ROM或SRAM,每个端口支持6种数据宽度和3种写入模式,并且可以选择控制信号的极性,对每个输出端口独立地进行置0/置1操作。在应用中,多个存储器模块可以通过合并实现深度或宽度的扩展,也可以作为FIFO或大的查找表使用。
2 存储器模块的设计
2.1层次结构
从FPGA芯片的角度,该电路分为逻辑层和配置层,如图1所示。逻辑层是一个静态存储器,有A和B两个独立的端口。en为片选信号,we为读写控制信号,ssr为间步预置控制信号。配置层的作用是为逻辑层提供配置信号,从而选择存储模块的配置模式。每个配置信号对应配置层的一个6管配置单元,在FPGA初始化阶段被赋值后送到逻辑层。
2.2存储单元
存储单元采用图2(a)所示的8管双端口结构,每个端口对应一条的字线和一对位线。当字线电位拉高时,对应的两个NMOS管打开,数据通过位线写入或者读出。作为ROM使用时,为了实现对存储单元的初始化,必须提供一个从配置层到存储单元的数据通道。我们的实现方式如图2(b)所示,即在A端口增加字线、位线选择器。awl_lgc、abl_lgc为逻辑层中A端I=I的字线和位线,cfgwl、cfgbl为来自配置层的字线和位线。当模式选择信号modesel为低电位时,配置层的字线和位线通过,完成对存储器的初始化。反之,逻辑层的字线和位线通过,该存储器即为普通静态存储器。
图1存储器模块层次结构
图2 存储单元设计
图3三种写入模式示意图
该存储器模块有三种写入模式,对应进行写操作时输出端口的三种状态(图3)。Read_First表示在写入新的数据之前,先把存储单元中旧的数据读出来,即在一个时钟周期内完成先读后写两步操作;Write_First表示写入的数据同时也是读出的数据;Nochange表示在写操作过程中输出端口状态保持不变。Read First是默认模式,其实现的关键在于下面介绍的预充电电路。
因为读写操作都必须经过位线,为了实现一个时钟周期内先读后写的功能,读和写就必须在两个不同的时间窗121进行。为此设计如图4(a)的预充电电路。dw、dwn是准备写入的数据,由输入信号经过一定逻辑产生;dr、dm是准备读出的数据,经过灵敏放大器等电路处理后送到输出端。yi为预充电控制信号,rdctl为读控制信号,wtcd为写控制信号,它们的时序关系如图4(b)所示。yi为低电平期间两条位线都被拉到VDD,读写操作均被关闭。vi的高电平窗121约为0.5ns,此间先用半个窗口时间进行读操作(rdcfl拉低),再用后半个窗口时间进行写操作(wIctl拉低)。这样读出的时候写入路径关闭,写入的时候读出路径关闭,从而实现了先读旧数据后写新数据的目的。
图4预充电电路
图5数据宽度选择电路
2.4数据宽度选择电路
经过图5所示的电路,存储器模块可以实现6种数据宽度的选择(16Kxl,8Kx2.4Kx4。2Kx9,1Kxl8,5 12x36)。其中,每一个多路选择器(MUX)由一位地址信号控制,起到地址译码的作用。写数据时,总线选择阵列从36个输入数据中选出需要的数据,经过多路选择器的地址译码,写入相应的存储单元。读数据时,每个多路选择器或者输出所需要的数据或者保持高阻状态,这些数据进入总线选择阵列并送到对应的输出端口。所有数据宽度模式复用36个输入端和36个输出端,不同模式占用的端口不同。对于512x36模式,所有端口均被利用,但是对宽度小于36的模式就必然存在多余端口。为了避免这些不用的端口浮空可能引起的电路不稳定性,在使用时它们会被自动接到VDD或GND。
3 验证方法和结果
由于本文所设计的存储器模块信号数量多、工作模式的组合多样,我们采用行为级仿真工具Modelsim和晶体管级仿真工具Hsim协同仿真的方式对其进行验证。利用行为级仿真可以方便观察电路的功能是否实现,加速验证进度,特别是当验证电路扩展到存储器阵列甚至整个FPGA芯片的时候。而通过晶体管级的仿真可以得到详细而比较精确的时序参数,例如上升/下降时间、延时等。图6为Modelsim中A端口Read_First和Write 两种写操作模式的仿真波形,从中可以清楚地看出二者的特点和区别。
图6仿真波形
访问时间是存储器性能的重要指标,我们选择位于位线结构顶端的存储单元作为关键路径进行读写操作,测定数据在输出端的有效时间相对时钟上升沿的延迟。因为不同数据宽度模式下信号经过的路径长短不同,它们的延迟也必然不同。仿真结果显示:512x36模式下延迟时间最短为1.75ns,16Kxl模式下延迟时间最长为2.7ns,与理论上一致。
FPGA 嵌入式 CMOS 电路 放大器 总线 仿真 自动化 相关文章:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 赛灵思:可编程逻辑不仅已是大势所趋,而且势不可挡(07-24)