基于FPGA的多通道FIFO存储控制器的设计与实现

吕达 张加宏 李敏 冒晓莉 杨天民 谢丽君



关键词: FIFO; 有限状态机; Verilog HDL; ModelSim; FPGA; 存储控制器; 轮询时间; 资源利用率
中图分类号: TN830.3; TP302; TP332 ? ? ? ? ? ? ? 文献标识码: A ? ? ? ? ? ? ?文章编号: 1004?373X(2019)04?0001?04
Design and implementation of multi?channel FIFO memory controller based on FPGA
L? Da1, ZHANG Jiahong1,2,3, LI Min1,3, MAO Xiaoli1,3, YANG Tianmin1, XIE Lijun1
(1. School of Electronics and Information Engineering, Nanjing University of Information Science & Technology, Nanjing 210044, China; 2. Jiangsu Collaborative Innovation Center of Atmospheric Environment and Equipment Technology, Nanjing University of Information Science & Technology, Nanjing 210044, China;
3. Jiangsu Key Laboratory of Meteorological Observation and Information Processing, Nanjing University of Information Science & Technology, Nanjing 210044, China)
Abstract: A multi?channel FIFO memory controller is designed to solve the conflict problem occurring when multiple functional modules access the same memory unit simultaneously. The work principle of the controller and the architecture design of the system are given. The finite state machine (FSM) and Verilog HDL language are used to design various modules. The pre?simulation and post?simulation are completed by using the ModelSim. The board unloading function verification is completed on the Xilinx FPGA platform. The practical results show that the memory controller can maximize the memory access efficiency on the premise of ensuring no access conflicts occur, provide an easy?to?use user interface, and easily define parameters such as the number of channels and the polling time of each channel according to the specific application, thereby achieving the highest resource utilization rate.
Keywords: FIFO; finite state machine; Verilog HDL; ModelSim; FPGA; memory controller; polling time; resource utilization rate0 ?引 ?言
FPGA在对实时性要求高而且数据流量大或者算法复杂度高的应用场合中使用越来越广泛[1]。而FPGA的应用一般都会涉及对外部存储单元数据存储和读取问题,所以设计一款接口简单易用、访问效率高、性能稳定的存储控制器至关重要[2?4]。目前存储控制器广泛采用LocalLink接口总线。该接口总线由写入数据线、读取数据线、地址线、指令线和握手信号线组成。其中握手信号线包括local_ready和local_valid。local_ready用于通知外部模块该控制器处于空闲状态,此时外部模块可对该控制器发送读/写请求。local_valid用于通知外部模块数据可用,此时外部模块可从读取数据线上取走数据[5]。采用LocalLink接口总线的存储控制器拥有设计难度低、使用简单等优点的同时也存在以下不足:首先,不支持多个外部功能模块同时访问同一个控制器下挂载的存储单元,外部多个功能模块必须分时使用同一控制器,这就给外部功能模块之间的协调带来了困难,甚至造成存储访问冲突;其次,握手过程需占用时钟周期,这就导致了存储器访问效率低下问题;最后,由于不带数据缓冲,该存储控制器只能应用在数据流量相对稳定的场合。
本文设计带FIFO的多通道存储控制器,使得多个外部功能模块通过不同通道可以互不干扰地访问同一存储器单元[6]。外部模塊可以在任何时候将指令、数据和地址写入FIFO或者从FIFO中读取数据,而不需要等待该控制器空闲,也无需等待数据可用,提高了存储器访问效率。通过设置FIFO深度以满足不同的突发访问要求。对于数据流量相对稳定的应用,可设置较小的FIFO深度以节省FPGA资源,而对于短时间内存储器访问量大的应用,则设置较大的FIFO深度,以防止数据遗漏。本文以ST公司的M25P64 NORFLASH为例,详细阐述了带FIFO的多通道存储控制器设计过程。前仿真和后仿真使用Micron公司提供的M25P64仿真模型,最后在基于Xilinx公司的FPGA芯片XC6SLX45和在线逻辑分析仪ChipScope下板验证和测试。1 ?系统设计
1.1 ?架构设计
本文设计的带FIFO的多通道存储控制器以SPI接口NORFLASH为示例,主要论述各通道仲裁和管理机制以及设计方法,而不是针对SPI接口NORFLASH的读/写过程展开叙述。图1是带FIFO的四通道存储控制器系统架构简图。其中通道0和通道1只支持读指令,通道2和通道3只支持写指令和擦除指令。图1中PLL是锁相环模块,其不仅负责提供该控制器的系统时钟,还负责提供外部存储器时钟flash_clk、FIFO时钟fifo_clk以及外部存储器数据捕获时钟cap_clk。各时钟为同频率异相位关系,具体各时钟的相位关系在后仿真中初步确定,在下板验证中最终确定。仲裁器的作用是决定各通道是否使能、控制多路器和清零轮询计数。轮询计数器用于记录每个通道轮询时间。指令FIFO用于存放指令数据。读FIFO用于缓存控制器已经从外部存储读取到的数据。写FIFO用于缓存用户将要写入外部存储器的数据。读管理器和写管理器分别负责各自通道指令译码、执行操作和信号反馈等。
本文设计的存储控制器接口简单而高效。表1列出了该控制器的接口总线,通道0和通道1包括所有指令类接口和读取类接口,通道2和通道3包括所有指令类接口和写入类接口。
1.2 ?仲裁器设计
仲裁机制采用时间片轮转方式,具体过程如下所述:首先,仲裁器在将轮询计数器清零后使能通道0管理器并设置对应多路器;然后,通道0管理器开始执行操作,当通道0管理器检测到轮询计数器计数值超出预设值,也即时间片消耗完,向仲裁器发送完成信号;最后,仲裁器收到通道0完成信号后,关闭通道0,并将轮询计数器清零后使能下一个通道,依次循环,达到各通道合理访问外部存储单元的目的。仲裁器的作用是协调各个通道对外部存储单元的访问请求,不但控制多路器和各通道管理器,还负责控制初始化模块和安全模块。仲裁器状态机如图2所示,存储控制器系统复位后,由IDLE状态进入S0状态,将多路器选择为初始化模块,随后进入S1状态,使能初始化模块并获得外部存储芯片ID。当初始化完成后进入S2状态,将多路器选择为安全模块,随后进入S3状态,使能安全模块,安全模块根据初始化模块获得的ID进行安全校验。安全校验不通过仲裁器锁死在S3状态,否则进入S4状态,S4状态中将多路器选择为读模块并清零轮询计数器,随后进入S5状态,使能通道0管理器。当收到通道0管理器反馈的完成信号后,进入S6状态,关闭通道0管理器并清零轮询计数器,随后进入S7状态,使能通道1管理器。如此依次执行通道1、通道2和通道3操作,当收到通道3管理器反馈的完成信号后,再次进入S4状态。
1.3 ?读管理器和写管理器设计
读管理器和写管理器除了具备指令译码,执行操作和信号反馈等基本功能外,为了满足更苛刻的轮询时间要求和优化执行效率,还具备指令拆分和指令综合功能。指令拆分功能表述如下:当某一条指令需要读取的数据较多,执行时间超过一个轮询时间片时,为了不占用其他通道的轮询时间,必须暂停该条指令,为其他通道让出使用权。指令综合功能表述如下:为了提高读取数据的效率,将多条地址连续的读指令合并成一条读指令,而节省重复发送指令码、访问地址的时间。
读管理器的状态机如图3所示,在S0状态中判断cmd_record[29:24]数据量是否为0。数据量为0表示在上一次轮询该通道时遗留下未完成的指令,此时跳转到S1状态;如果不为0且指令FIFO不为空,则进入S10,如果数据量为0而指令FIFO为空则进入OVER状态。S10和S11是从指令FIFO中读取新指令的过程,完成后同样进入S1状态。S1状态中首先判断指令名是否合法,如果不合法进入ERROR状态,合法则判断读FIFO是否已经被写满,写满将rd_overflow拉高并进入OVER状态,未写满进入S2状态。S2~S5状态是读取4 B数据并更新cmd_record的过程,完成S5后进入S6状态。在S6状态中首先检查轮询计数器是否大于等于预设值或者读FIFO是否为空,如果计数器大于预设值或者读FIFO为空,则进入S12状态,否则判断cmd_record[29:24]数据量是否为0,不为0则进入S3状态继续读取数据,为0检测指令FIFO是否为空,为空同样进入S12状态,否则进入S7状态。S7,S8完成从指令FIFO中读取新的指令操作,如果地址连续则不需要结束本次读操作而直接从S8进入S3状态继续进行读操作,否则进入S9状态结束本次读操作并进行新的读操作。S12中主要完成关闭读模块操作,之后进入OVER状态,OVER状态将done拉高。写管理器的状态机设计与读管理器类似,不再赘述。
2 ?仿真和分析
2.1 ?前仿真
带FIFO的多通道存储控制器在Xilinx ISE 14.7环境下开发。以Micron公司提供的M25P64模型在ModelSim中进行行为级仿真。带FIFO的多通道存储控制器将对外部存储单元的操作转化成对FIFO的操作,FIFO由Xilinx FIFO生成器IP核构造。为了尽可能消除毛刺,提高系统稳定性,本文设计中所有的多路器都采用时序逻辑触发的方式[7?9]。
前仿真时序如图4所示,p0通道和p1通道可以不冲突地轮流读取数据。在此过程中人为设置了错误的指令名和FIFO过载等非正常状态,而从仿真的时序图中也不难发现这些非正常状态均能得到预期的反馈。2.2 ?后仿真
综合并布局布线后仿真可以全面地包含器件延时、连线延时以及时钟毛刺等信息,不但可以全面地验证所设计的模块功能是否满足设计要求,还能保证稳定性要求。本文设计中后仿真要解决的核心问题是窗口问题,即将时钟信号的采样边沿调整到有效窗口的中心位置。

图5是fifo_clk后仿真时序图,系统时钟设置为50 MHz。如图5中椭圆标示处,fifo_clk上升沿处于有效窗口中心位置,此时,能保证最优的建立时间和保持时间。flash_clk,cap_clk时钟调节过程同fifo_clk。
经过后仿真时钟相位调节,Micron公司提供的M25P64仿真模型和Xilinx库均无报错,因而满足时序要求。3 ?下板验证及测试
ChipScope是ISE开发环境中的一个工具,集成了关键逻辑分析器和其他测试和测量组件,用于测试Xilinx FPGA芯片内部的目标设计[10?11]。本文设计的带FIFO的多通道存储控制器在Xilinx公司的FPGA芯片XC6SLX45中进行验证和测试。该设计主要资源使用情况如下:使用逻辑片资源657,占9%;使用1个PLL资源,占25%;使用6 KB嵌入式RAM资源,占2%。图6a)为ChipScope窗口。从ChipScope中观察到本文设计的存储控制器能从外部存储单元中读取数据。图6b)为测试指令综合功能。写入3条地址连续的读/写指令,如图6b)中p0_cmd_rd_data所示,3条指令被综合成一条读指令,如图6b)中flash_addr所示。综上所述,本文设计与实现的带FIFO的多通道存储控制器达到了预期功能,具有较强的实用性。4 ?结 ?语
本文以实际应用为出发点,实现带FIFO的多通道存储控制器,使得多个外部模块能够高效而又无冲突访问同一外部存取单元。本文设计不局限于SPI接口NORFLASH,其他类型存储单元只要改变对应接口模块和读/写模块即可,因而具有良好的可移植性和通用性。本文设计具备高度的可配置性,用户可以根据具体应用自由定义通道数量、各通道功能、各通道轮询时间、FIFO深度等,以达到最高资源利用效率。
参考文献
[1] LIU B L, LIU B Q, PAN L, et al. Research and design of video acquisition system based on FPGA [J]. Applied mechanics and materials, 2014, 644: 3472?3475.
[2] 李明明,王全忠,郭伟,等.一种NOR FLASH控制器验证平台的研究[J].现代电子技术,2015,38(10):162?165.
LI Mingming, WANG Quanzhong, GUO Wei, et al. Research on a verification platform for NOR FLASH controller [J]. Modern electronics technique, 2015, 38(10): 162?165.
[3] 吕波,张涌,黄侃,等.基于FPGA的四口RAM设计与实现[J].仪表技术与传感器,2017(1):34?37.
L? Bo, ZHANG Yong, HUANG Kan, et al. Design and implementation of quad?port RAM based on FPGA [J]. Instrument technique and sensor, 2017(1): 34?37.
[4] 吴长瑞,徐建清,蒋景红.基于Kintex?7 FPGA的DDR3 SDRAM接口应用研究[J].现代电子技术,2017,40(24):21?24.
WU Changrui, XU Jianqing, JIANG Jinghong. Application of DDR3 SDRAM interface based on Kintex?7 FPGA [J]. Modern electronics technique, 2017, 40(24): 21?24.
[5] MAHMOODI M R, SAYEDI S M. A low cost high speed FPGA?based image processing framework [J]. International journal of modern education and computer science, 2016, 8(3): 11?21.
[6] GONG Z P, CHEN T F, ZOU F, et al. Implementation of multi?channel FIFO in one blockRAM with parallel access to one port [J]. Journal of computers, 2014, 9(5): 1193?1200.
[7] 张松,李筠.FPGA的模块化设计方法[J].电子测量与仪器学报,2014,28(5):560?565.
ZHANG Song, LI Jun. Modular design of FPGA design methodology [J]. Journal of electronic measurement and instrumentation, 2014, 28(5): 560?565.
(上接第4页)
[8] 关珊珊,周洁敏.基于Xilinx FPGA的SPI FLASH控制器设计与验证[J].电子器件,2012,35(2):216?220.
GUAN Shanshan, ZHOU Jiemin. Design and verification of SPI FLASH controller based on Xilinx FPGA [J]. Chinese journal of electron devices,2012,35(2):216?220.
[9] 黄宏智,周钦强,黄飞龙.新型自动气象站NAND FLASH存储系统的设计与实现[J].电子测量技术,2016,39(12):132?135.
HUANG Hongzhi, ZHOU Qinqiang, HUANG Feilong. Design and realization of the storage system for new automatic weather station based on NAND FLASH [J]. Electronic measurement technology, 2016, 39(12): 132?135.
[10] Xilinx. Product guide: LogiCORE IP FIFO generator v9.3 [EB/OL]. (2012?12?18) [2017?10?25]. https://www.xilinx.com/support/documentation/ip_documentation/fifo_generator/v9_3/pg057?fifo?generator.pdf.
[11] Xilinx. User guide: ChipScope pro software and cores [EB/OL]. (2012?10?16)[2017?10?26]. https://www.xilinx.com/support/documentation/sw_manuals/xilinx14_7/chipscope_pro_sw_cores_ug029.pdf.