当前位置:首页 期刊杂志

L-DSP 片上Flash 控制器设计与实现

时间:2024-05-04

曹 韬, 邹望辉, 汪 东

(1 长沙理工大学 物理与电子科学学院, 长沙410114; 2 湖南毂梁微电子有限公司, 长沙410005)

0 引 言

随着半导体制造工艺的发展和计算机体系结构等方面的改进,DSP(Digital Signal Processors)芯片功能日益强大,被广泛应用于语音图像识别与处理、自动控制、医学、通信、军事等领域等。 片上Flash存储器是一种内嵌于芯片的非易失性存储器,具有低成本、高安全性和高灵活性等优点,因此被作为程序和数据存储器用于DSP 设计中[1-2]。 DSP 是一种专用于数字信号处理的嵌入式微处理器,其核心部分是中央处理单元CPU(Central Processor Unit)负责从各存储器中获取指令并执行,因此CPU 对Flash 的访问较为频繁[3]。 这两者相较而言,CPU拥有较高运行频率,但片上Flash 属于低速存储设备,并且具有特定的接口与时序要求,因此CPU 无法直接对片上Flash 进行访问[4],需要用控制器实现这两种协议的转换,使两者能够正常通信;由于CPU对Flash 的读访问时间较长导致系统性能降低[5],因此需要先进的控制器结构来提高访问效率。

由于Flash 生产工艺的限制[6],芯片量产时部分Flash 会出现小范围损坏称为初始坏块,这些坏块的出现会导致整块芯片无法正常使用[7]。 利用Flash 的冗余空间替代损坏区域进行存储能对Flash起到修复作用,替换逻辑需要由外部控制器实现。

L-DSP 是一款单核低功耗DSP,系统频率为15MHz ~150MHz,拥有特殊的总线协议Memory Bus,并需要通过总线搭载4Mbit 大小的片上Flash作为唯一的片上非易失性存储器。 本文根据LDSP 对片上Flash 存储器的需求及其总线特点,设计一种应用于L-DSP 的片上Flash 控制器。 L-DSP取指主要发生在片上Flash 空间,通过提高Flash 取指效率能有效提高系统的运行速度。 为提高芯片性能,控制器中还设计了一种基于指令预取[8-10]的加速模块;因为L-DSP 片上Flash 空间较大,易产生初始坏块,所以控制器中还对初始坏块进行修复,在一定程度上避免了因Flash 损坏造成流片失败。

1 Flash 控制器设计方案与实现

控制器包括总线接口、预取单元、读控制、坏块替换和控制寄存器五个部分,其结构如图1 虚线内所示。

图1 Flash 控制器结构图Fig. 1 Structure diagram of Flash controller

所选用 Flash 为上海宏力 GSMC FLS004M56DA,其结构如图2 所示。 控制逻辑部分列出与读取访问相关的接口,存储部分包含主空间,非易失性寄存器空间(NVR)和冗余空间(RDN),其中NVR 主要用于存放芯片出厂时的测试数据,冗余空间是独立于主空间的备用空间。

图2 Flash 结构图Fig. 2 Structure diagram of Flash

1.1 控制器接口设计

控制器拥有总线接口与Flash 接口。 总线接口连接Memory Bus,用于接收总线的读Flash 请求并送出读数据,主要信号如表1 所示。 总线接口收到读请求后将读地址送给读控制模块,读控制模块读Flash 需要的控制信号,并直接与Flash 外部接口连接。 产生Flash 接口读控制时序如图3 所示。 A1,A2,A3为三次读访问的地址,D1,D2,D3为对应的读数据。 TAA(Address Access Time)是Flash 固有的读访问时间,其最大值为40 ns,所以读地址及控制接口信号至少要稳定40 ns 才能确保DOUT 每次输出的读数据都正确。

表1 总线接口信号列表Tab. 1 Bus interface signal list

图3 Flash 读取访问时序图Fig. 3 Read access timing diagram of Flash

1.2 读控制逻辑设计

由于访问Flash 存在固有延时TAA,因此在不同系统频率下控制器的读控制逻辑会存在差异。 如图4(a)所示,当系统频率较慢,一个周期大于40 ns时,控制器只需要等待一个周期就能送出数据和数据有效信号;而当系统频率较快时,一个周期无法满足40 ns 的访问时间,就在数据返回前插入N 个等待周期,同时维持Flash 读时序稳定。 如图4(b)所示,当周期为13.33 ns 到40 ns 之间时,至少需要插入3 个等待周期才能在数据有效拍输出稳定的数据。 如果当前的系统频率是fs,则必须满足

将其变换并统一单位,则

当频率一定时, N 取到满足公式(2)的最小整数即为最少等待周期数,即控制器达到当前频率最快读取速率。

L-DSP 系统频率可变,若将等待周期数固定为某一数值并且保证所有频率下正常读取,则必须让N 在最大频率下能满足公式(2)。 那么在未达到最大系统频率时将造成等待时间的过长从而降低系统性能。 为避免时间浪费,利用控制寄存器灵活配置控制器等待周期。 根据当前系统频率将其配置为满足公式(2)的最小整数,控制器就能每次以最快速度读出Flash 某一地址中的数据。

1.3 指令预取设计

即使以最快速度读取Flash,总线每次对Flash的读访问仍存在等待时间,同样造成了系统运行速度减慢,利用指令预取方式减少部分等待时间。 在图4(a)和(b)中控制器对Flash 两次读访问之间有一段间隔时间Tint,实际上是Flash 等待总线处理并发出请求的时间,期间Flash 处于未被访问状态。其长度由CPU 执行的程序以及总线的仲裁机制共同决定,经分析Tint最短为3 个时钟周期,如遇总线非优先处理Flash 访问请求,Tint将被延长。 若控制器能够在Tint时间内预测到总线的下一个读地址,并且提前向Flash 发起读访问,就能在预测成功时减少总线下一次读Flash 的等待时间。

因为大多数指令地址是连续的,即后一条指令地址为前一条指令地址加2,所以控制器做连续地址预取设计可以大概率加快取指速度。 如图4(c)所示,当总线处理CPU 下一个取指请求或其他事务时,控制器预先将下一地址中的指令读取并存放在缓冲器中。控制器收到下一地址A1+ 2 的取指令请求时,下一拍从缓冲器中将数据输出, 达到加速取指的目的。 当频率更高,间隔时间Tint不足以完成对Flash 下一个地址读取访问,预取过程中控制器收到A1+2 地址的取指请求,需在预取时间Tint基础上稳定读时序,直到满足TAA后将DOUT 端口数据经过缓冲器输出到总线,同样能够达到预取加速的效果。

图4 控制器不同条件下的读时序Fig. 4 Read timing of controller under different condition

设计如图5 所示预取结构,预取单元包含虚线内所示的3 部分。 缓冲器利用数据寄存器实现,由于数字寄存器面积开销较大容易增加成本,并且LDSP 系统运行时Tint不会太长,预取不足以填满大量缓冲器,因此缓冲器数量太大反而造成资源浪费。经实验测试,4 个缓冲器的结构利用率较高,预取加速效果较好,所以选用4 个缓冲器存放预取的指令。

图5 预取缓冲结构Fig. 5 Pre-fetch buffer structure

预取过程中控制器与总线保持通信,预取单元根据收到的读请求控制预取进程并送出预取数据,其处理过程如图6 所示。 请求解析模块接收读请求,解析请求类型和地址信息,判断数据在缓冲器中的位置以及是否冲刷预取;数据控制模块控制缓冲器中的数据输出,并且收到冲刷信号后清空缓冲器数据;预取控制模块负责发出预取请求,并在缓冲器填满时暂停预取,直到指令被取出。

图6 预取发生时的读请求解析Fig. 6 Read request parsing when pre-fetch occurs

1.4 坏块替换设计

对坏块的检测在芯片出厂时完成,单个坏块信息以16 位数据形式被保存在无法修改的NVR 中。Flash 主空间分为1024 个扇区,单个扇区大小与单片RDN 大小相同,而坏块信息只会记录损坏的地址所处扇区,即无法正常存储地址的高10 位,存放在NVR 保留地址的数据低10 位,同时需要将最高位写0 表示低10 位坏块信息有效。 主空间中某个扇区出现一个或多个无法存储的地址时,控制器将访问该段地址的读写访问映射,对某RDN 片区的访问。

坏块信息在Flash 内不便于利用,因此控制器对Flash 进行任何操作之前,先将坏块信息读出并保存。 L-DSP 上电时CPU 固定会在另一个片上空间取指执行一段初始化程序,之后跳转到Flash 执行,因此控制器利用芯片上电到CPU 执行完初始化程序这段时间将Flash 中的坏块信息载入到数据寄存器中,坏块替换结构如图7 所示。

图7 坏块替换结构Fig. 7 Structure of bad block replacement

带有初始坏块替换的Flash 控制器访问流程如图8 所示。

图8 坏块替换访问流程Fig. 8 Access process of bad block replacement

芯片上电后,控制器先将NVR 中固定存放坏块信息的地址中的数据加载到若干内部寄存器,最高位为0 的数据表示需要替换的坏块信息,最高位为1 的数据被视为无效。 控制器将对Flash 的读写访问地址高10 位与这些寄存器的低10 位进行对比,若匹配则访问用于替换的RDN 扇区。 读RDN 片区时需要将RDN 信号拉高,其他信号与主空间访问时序相同。 主空间中可能存在多个扇区出现损坏,则需要多片RDN 进行替换。 厂家经验得出,Flash 每1Mbit 易出现1 处坏块,使用4 个坏块信息寄存器。当出现4 个不同扇区的坏块时,取原主空间访问地址低8 位作为对RDN 扇区访问的偏移地址,即低8位地址;用第9、10 位地址作为RDN 片选信号,其他高位补0。 替换数量更多时继续拓宽高位地址。

2 功能验证与综合

Flash 控制器设计和仿真激励都是由Verilog HDL 描述,因此采用NC-Verilog 仿真工具。 仿真使用由生产商提供的Flash IP 的Behavior model 行为级模型模拟Flash 存储电路,模型为控制器提供Flash 接口以及存储空间。 将Flash 控制器搭载到L-DSP芯片总线,搭建系统级仿真环境,利用CPU通过总线和控制器从Flash 模型中获取指令并运行。 在Flash 中存入一段无跳转顺序执行的程序,改变系统频率、控制器读取速率以及预取的使能,通过仿真记录各种系统配置下程序运行的时间,对比分析程序运行的效率。

2.1 读控制逻辑验证

验证非预取模式下读速率控制逻辑,系统频率固定在150 MHz,由前面可得此频率下最快读取周期数为6,因此测试周期数为6 和默认最大值15 之间程序运行的几种情况。 对比运行时间可以得出将读周期数配置成最优数值能够有效加快程序运行的结论。

表2 同频率不同读速率下的运行时间Tab. 2 Run time at different read rates and the same frequency

2.2 指令预取验证

表3 为默认配置,所有频率下单次读访问周期数为最大值15,即最慢读取速率;表4 配置为满足各频率读时序要求的最短读周期数,即最快读取速率。

表3 数据表明,在默认相同读访问周期条件下,无论系统工作在哪一频率,预取加速比率同为8.563%,而由表4 数据可以得出,将读周期数配置为最优数值能提高预取加速比率,并且预取加速比率随着读周期数减少而提高,在额定150 MHz 频率下加速17.61%。

表3 默认读取速率下运行时间Tab. 3 Run time at default read rate

表4 最快读取速率下运行时间Tab. 4 Run time at the fastest read rate

2.3 坏块替换验证

启用坏块替换后的读访问如图9 所示,给入唯一坏块信息0x3ff,当总线访问0x3_ff00 和0x3_ff02地址时,RDN 变为高电平,Flash 读地址为0x0 和0x2,读出数据为RDN1 空间中默认值0xffff 而非主空间中的预设值,表明控制器已将对主空间0x3_ff00 和0x3_ff02 的访问转换为对RDN1 空间0x0 和0x2 的访问。 坏块替换逻辑正确。

2.4 DC 综合

综合工具使用的是Synopsys 公司的Design Compiler,在0.18 μm CMOS 工艺下对Flash 控制器进行综合,系统频率为150 MHz,得到综合后的面积开销为0.13 mm2,总功耗为10.17 mW。

3 FPGA 原型验证

将搭载有此Flash 控制器的L-DSP 全芯片设计固化到FPGA,L-DSP 芯片拥有片上调试系统,可以利用JTAG 接口通过XDS 仿真器连接PC 上的调试软件CCS,验证环境如图10 所示。 利用CCS 对LDSP 进行编程并将程序下载到Flash 模型中,访问程序空间并控制程序运行,验证Flash 控制器功能正确性。

图9 坏块地址转换Fig. 9 Address translation of bad block

图10 FPGA 验证环境Fig. 10 FPGA verification environment

利用CCS 编程并下载到Flash 中,通过片上调试系统调用Flash 控制器对程序空间进行读访问,界面效果截图如图11 所示,控制器能够正确完成对Flash 的数据访问。 再利用CCS 修改指针运行该段程序,运行结果如图12 所示,正确的将SRAM 中的0x9000 地址修改为0x1235,程序运行正确。

图11 Flash 程序空间访问图Fig. 11 Program space access map of Flash

图12 运行结果Fig. 12 Operation result

4 结束语

本文根据L-DSP 对于片上Flash 存储器的要求,针对系统总线Memory Bus 协议以及所选型的Flash 接口时序,设计了一种将总线对Flash 地址空间读请求转换为Flash 接口有效读访问时序的控制器电路,其兼容系统15 MHz~150 MHz 的工作频率区间,并能通过配置系统控制寄存器达到其中任一频率下的最快读取访问速率;实现了指令预取功能,提高了系统连续取指运行情况下的取指效率,在额定150 MHz 频率下取指效率提高17.61%;利用Flash 冗余空间替换主空间坏块,实现主空间初始坏块修复,提高了芯片出厂良率。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!