CN108052750A - 基于fpga的spi flash控制器及其设计方法 - Google Patents

基于fpga的spi flash控制器及其设计方法 Download PDF

Info

Publication number
CN108052750A
CN108052750A CN201711373989.0A CN201711373989A CN108052750A CN 108052750 A CN108052750 A CN 108052750A CN 201711373989 A CN201711373989 A CN 201711373989A CN 108052750 A CN108052750 A CN 108052750A
Authority
CN
China
Prior art keywords
cmd
fifo
spi
data
flag
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201711373989.0A
Other languages
English (en)
Other versions
CN108052750B (zh
Inventor
张贞雷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhengzhou Yunhai Information Technology Co Ltd
Original Assignee
Zhengzhou Yunhai Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhengzhou Yunhai Information Technology Co Ltd filed Critical Zhengzhou Yunhai Information Technology Co Ltd
Priority to CN201711373989.0A priority Critical patent/CN108052750B/zh
Publication of CN108052750A publication Critical patent/CN108052750A/zh
Application granted granted Critical
Publication of CN108052750B publication Critical patent/CN108052750B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Logic Circuits (AREA)
  • Multi Processors (AREA)

Abstract

本发明公开基于FPGA的SPI FLASH控制器及其的设计方法,涉及计算机芯片设计领域,根据SPI FLASH的指令类型软件配置标志寄存器;在FPGA中设置逻辑核心若干FIFO、状态机FSM、SPI时序产生模块;FIFO接收寄存器的值并发送给状态机,状态机根据标志寄存器的内容,决定读取对应FIFO;从FIFO读出数据转换为SPI时序,通过SPI接口输出给SPI FLASH。状态机接收SPI FLASH的读返回信息,并缓存到FIFO,等待软件读取。本发明基于FPGA逻辑设计,自主实现SPI FLASH控制器,实现方法简单,减少了***复杂度,不需要额外购买FPGA IP,极大降低项目成本。

Description

基于FPGA的SPI FLASH控制器及其设计方法
技术领域
本发明涉及计算机芯片设计领域,具体的说是基于FPGA的SPI FLASH控制器及其设计方法。
背景技术
传统SPI FLASH控制器,应用场景如附图1所示,软件通过APB接口向FPGA配置指令;FPGA解析指令类型,得到SPI指令、地址、数据,然后产生SPI时序,输出到SPI接口上;SPI输出接口连接到SPI FLASH。同时,FPGA接收SPI FLASHD 的返回数据,进行缓存处理,等待软件读取。
上述FPGA(Field-Programmable Gate Array)是现场可编程逻辑器件。APB(Advanced Peripheral Bus),是***总线,该总线协议是ARM公司提出的AMBA总线结构之一,已成为一种标准的片上总线结构。SPI(Serial Peripheral Interface),是串行外设接口,是一种高速的,双全工,同步的通信总线,在芯片的管脚上只占四根线。FLASH或FLASH内存,是一种长寿命的非易失性存储器,在断电情况下仍能保持所存储的数据信息;数据删除不是以单个字节为单位,是以固定区块为单位,区块大小一般为256KB到20MB。
可见,传统SPI FLASH控制器从APB接口到SPI接口的转换,也就是SPI FLASH控制器的实现,是利用FPGA内部IP完成。这样,传统SPI FLASH控制器就需要额外购买FPGA中的IP,会极大增加项目成本。所述IP即IP核,全称是知识产权核(intellectual propertycore),是指某一方提供的、形式为逻辑单元、芯片设计的可重用模块。因此,目前急需开发一种用于控制SPI FLASH的设计方案,来实现快速简洁低成本控制SPI FLASH。
发明内容
本发明针对目前技术发展的需求和不足之处,提供基于FPGA的SPI FLASH控制器。
本发明所述基于FPGA的SPI FLASH控制器,解决上述技术问题采用的技术方案如下:所述基于FPGA的SPI FLASH控制器,其结构包括:
标志寄存器,通过软件配置标志寄存器flag,用于标志SPI FLASH的指令类型;
FPGA,接收并缓存软件通过APB接口发送的指令;包括的核心逻辑件为若干FIFO、一个状态机FSM、一个SPI时序产生模块(SPI_GEN模块);
FIFO,用于接收软件通过APB配置下来的寄存器的值;包括FLAG_FIFO :用于接收软件通过APB配置下来的当前标志寄存器的值;
状态机,接收FLAG_FIFO发送的标志寄存器的值,根据标志寄存器的内容,决定读取对应FIFO;同时接收SPI FLASH的读返回信息,将读返回信息缓存到FIFO,等待软件读取;
SPI时序产生模块,将FIFO读出数据依次转换为SPI时序,通过SPI接口输出给SPIFLASH。
具体的,通过软件配置指令寄存器、地址寄存器、写个数寄存器、读个数寄存器和写数据寄存器。
具体的,FPGA内部设置CMD_FIFO:用于接收软件通过APB配置下来的指令寄存器的值;FPGA内部设置ADDR_FIFO :用于接收软件通过APB配置下来的地址寄存器的值;FPGA内部设置WR_CNT_FIFO:用于接收软件通过APB配置下来的写个数寄存器的值;FPGA内部设置RD_CNT_FIFO:用于接收软件通过APB配置下来的读个数寄存器的值;FPGA内部设置WR_DATA_FIFO:用于接收软件通过APB配置下来的写数据寄存器的值;
同时,FPGA内部设置RV_DATA_FIFO:用于接收SPI FLASH读返回的数据。
具体的,初始状态,若FLAG_FIFO为非空,同时当前cmd配置完毕;则从IDLE状态到RD_FLAG状态;
读FLAG_FIFO状态,读出当前指令的类型,若CMD_FIFO为非空,则从RD_FLAG状态跳转到RD_CMD状态;
读CMD_FIFO状态,并且将cmd发送到spi总线上;若当前flag只包含cmd,则在发送完cmd到spi总线之后,将跳转到IDLE状态;若当前flag包含cmd和读返回数据,则在发送完cmd到spi总线之后,将跳转到RV_RD_DATA状态,接收flash的返回数据;若当前flag包含cmd和addr,则在发送完cmd到spi总线之后,将跳转到RD_ADDR状态;
读ADDR_FIFO状态,将addr发送到spi总线上;若当前flag只包含cmd+addr,则在发送完cmd和addr到spi总线之后,将跳转到IDLE状态;若当前flag只包含cmd+addr+wr_data,则在发送完cmd和addr到spi总线之后,将跳转到RD_WR_DATA状态;若当前flag只包含cmd+addr+rd_data,且当前cmd不包含dummy clock虚拟时钟,则在发送完cmd和addr到spi总线之后,将跳转到RV_RD_DATA状态;若当前flag只包含cmd+addr+rd_data,且当前cmd包含dummyclock,则在发送完cmd和addr到spi总线之后,将跳转到WAIT状态;若当前flag只包含cmd+addr+rd_data,且当前cmd包含dummy clock,则在发送完cmd和addr到spi总线之后,将跳转到WAIT状态。
具体的,在RD_WR_DATA状态下,读WR_DATA_FIFO状态,并且按照配置的写数据的个数,依次将要写入FLASH的数据,发送到spi总线上,然后跳转到IDLE状态;
在RV_RD_DATA状态下,按照配置的读数据的个数,接收flash的读返回数据,并且将返回数据写入对应的缓存RV_DATA_FIFO,供APB总线来读取,然后跳转到IDLE状态;
在WAIT状态下,等待N个时钟周期,然后跳转到RV_RD_DATA状态,此时对应的cmd为0x0b或者是0x0c。
本发明还提出基于FPGA的SPI FLASH控制器的设计方法,实现过程包括:
步骤一,分析SPI FLASH的指令类型,根据SPI FLASH的指令类型软件配置标志寄存器;
步骤二,FPGA中核心逻辑件FIFO接收软件通过APB配置下来的寄存器的值;
FPGA中设置FLAG_FIFO :用于接收软件通过APB配置下来的当前标志寄存器的值;
步骤三,FLAG_FIFO将当前标志寄存器的值发送给FPGA内部的状态机,状态机根据标志寄存器的内容,获知SPI FLASH的具体指令类型,决定读取对应FIFO;
同时,状态机接收SPI FLASH的读返回信息,将读返回信息缓存到FIFO,等待软件读取;
步骤四,将从FIFO读出数据通过SPI时序产生模块转换为SPI时序,通过SPI接口输出给SPI FLASH。
具体的,所述步骤一,软件还配置有指令寄存器、地址寄存器、写个数寄存器、读个数寄存器和写数据寄存器。
具体的,所述步骤二,FPGA内部CMD_FIFO接收软件通过APB配置下来的指令寄存器的值;FPGA内部ADDR_FIFO接收软件通过APB配置下来的地址寄存器的值;FPGA内部WR_CNT_FIFO接收软件通过APB配置下来的写个数寄存器的值;
FPGA内部RD_CNT_FIFO接收软件通过APB配置下来的读个数寄存器的值;FPGA内部WR_DATA_FIFO接收软件通过APB配置下来的写数据寄存器的值;FPGA内部RV_DATA_FIFO接收SPI FLASH读返回的数据。
本发明所述基于FPGA的SPI FLASH控制器及其设计方法,与现有技术相比具有的有益效果是:本发明基于FPGA逻辑设计,使用很少的逻辑资源,自主实现SPI FLASH控制器,完成从APB接口到SPI接口的转换,避免使用FPGA内部IP;实现方法简单,只占用很少的FPGA逻辑资源,减少了***复杂度,不需要额外购买FPGA IP的费用,极大降低了项目成本。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术内容,下面对本发明实施例或现有技术中所需要的附图做简单介绍。显而易见的,下面所描述附图仅仅是本发明的一部分实施例,对于本领域技术人员来说,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,但均在本发明的保护范围之内。
附图1为传统SPI FLASH控制器的示意图;
附图2为基于FPGA的SPI FLASH控制器的示意框图;
附图3为所述FPGA内部状态机读取FIFO的流程图。
具体实施方式
为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具体实施例,对本发明的技术方案进行清查、完整的描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下获得的所有实施例,都在本发明的保护范围之内。
实施例1:
本实施例提出基于FPGA的SPI FLASH控制器,其结构包括:
标志寄存器,通过软件配置标志寄存器flag,用于标志SPI FLASH的指令类型;
具体的,SPI FLASH的具体指令类型共分六种,包括:
类型1:只包含指令代码
软件需配置标志寄存器(flag)的值为0001;
类型2:包含指令代码+地址
软件需配置标志寄存器(flag)的值为0011;
类型3:包含指令代码+写数据
软件需配置标志寄存器(flag)的值为0101;
类型4:包含指令代码+写地址+写数据
软件需配置标志寄存器(flag)的值为0111;
类型5:包含指令代码+读地址+读数据
软件需配置标志寄存器(flag)的值为1011;
类型6:包含指令代码+读数据
软件需配置标志寄存器(flag)的值为1001;
当前SPI FLASH指令的具体类型,软件通过配置标志寄存器来告知FPGA。
FPGA,接收并缓存软件通过APB接口发送的指令;包括的核心逻辑件为若干FIFO、一个状态机FSM、一个SPI时序产生模块(SPI_GEN模块);
FIFO,用于接收软件通过APB配置下来的寄存器的值;包括FLAG_FIFO :用于接收软件通过APB配置下来的当前标志寄存器的值;
状态机,通过FLAG_FIFO获取标志寄存器的值,根据标志寄存器的内容,获知SPI FLASH的具体指令类型,决定读取对应FIFO;同时接收SPI FLASH的读返回信息,将读返回信息缓存到FIFO,等待软件读取;所述FIFO(First Input First Output)是先入先出队列。
SPI时序产生模块,将FIFO读出数据依次转换为SPI时序,进而通过SPI接口输出给SPI FLASH。
本实施例基于FPGA的SPI FLASH控制器,通过软件配置标志寄存器来标志SPIFLASH的指令类型;在FPGA逻辑内部设计核心逻辑FIFO、状态机和SPI时序产生模块,通过FIFO接收软件通过APB配置下来的当前标志寄存器的值,状态机根据标志寄存器的值,获知当前SPI FLASH的具体指令类型,进而决定读取哪些FIFO,并通过SPI时序产生模块将读取数据转换为SPI时序,通过SPI接口输出给SPI FLASH;同时,通过状态机接收SPI FLASH的读返回信息,并缓存到FIFO,等待软件读取。可知,本发明实现方式简单,只占用很少的FPGA逻辑资源,不需要使用FPGA的IP资源,不需要额外购买FPGA IP的费用,极大降低了项目成本。
本实施例还提出基于FPGA的SPI FLASH控制器的设计方法,实现过程包括:
步骤一,分析SPI FLASH的指令类型,根据SPI FLASH的指令类型软件配置标志寄存器;
具体的,当前SPI FLASH指令的具体类型,软件通过配置标志寄存器来告知FPGA;
步骤二,FPGA中核心逻辑件FIFO接收软件通过APB配置下来的寄存器的值;
具体的,FPGA中设置FLAG_FIFO :用于接收软件通过APB配置下来的当前标志寄存器的值。
步骤三,FPGA内部的状态机根据标志寄存器的内容,获知SPI FLASH的具体指令类型,决定读取对应FIFO;
同时,状态机接收SPI FLASH的读返回信息,将读返回信息缓存到FIFO,等待软件读取;
步骤四,将从FIFO读出数据通过SPI时序产生模块转换为SPI时序,通过SPI接口输出给SPI FLASH。
实施例2:
本实施例提出的基于FPGA的SPI FLASH控制器,是本发明的另一个具体实施方式,在实施例1基于FPGA的SPI FLASH控制器的基础上,还包括指令寄存器、地址寄存器、写个数寄存器、读个数寄存器和写数据寄存器。
具体的,通过软件配置指令寄存器、地址寄存器、写个数寄存器、读个数寄存器和写数据寄存器。
对应的,附图2所示,FPGA内部设置CMD_FIFO:用于接收软件通过APB配置下来的指令寄存器的值;FPGA内部设置ADDR_FIFO :用于接收软件通过APB配置下来的地址寄存器的值;FPGA内部设置WR_CNT_FIFO: 用于接收软件通过APB配置下来的写个数寄存器的值;FPGA内部设置RD_CNT_FIFO: 用于接收软件通过APB配置下来的读个数寄存器的值;FPGA内部设置WR_DATA_FIFO:用于接收软件通过APB配置下来的写数据寄存器的值。
同时,FPGA内部设置RV_DATA_FIFO:用于接收SPI FLASH读返回的数据。
各个FIFO接收软件通过APB配置下来的寄存器的值,并发送给状态机FSM,状态机根据标志寄存器的值决定读取哪个FIFO,并通过SPI_GEN模块转换为SPI时序,发送给SPI接口传输给SPI FLASH。
所述状态机,根据标志寄存器的内容,获知SPI FLASH的具体指令类型,决定读取上述对应FIFO;同时接收SPI FLASH的读返回信息,将读返回信息缓存到FIFO,等待软件读取。具体操作过程,与本实施例基于FPGA的SPI FLASH控制器的设计方法可以相互参考。
本实施例还提出基于FPGA的SPI FLASH控制器的设计方法,是本发明基于FPGA的SPI FLASH控制器的设计方法的另一种具体实施方式,在实施例1基于FPGA的SPI FLASH控制器的设计方法的基础上,所述步骤一,软件还配置有指令寄存器、地址寄存器、写个数寄存器、读个数寄存器和写数据寄存器。
相应的,FPGA内部设置CMD_FIFO:用于接收软件通过APB配置下来的指令寄存器的值;FPGA内部设置ADDR_FIFO :用于接收软件通过APB配置下来的地址寄存器的值;FPGA内部设置WR_CNT_FIFO: 用于接收软件通过APB配置下来的写个数寄存器的值;FPGA内部设置RD_CNT_FIFO: 用于接收软件通过APB配置下来的读个数寄存器的值;FPGA内部设置WR_DATA_FIFO:用于接收软件通过APB配置下来的写数据寄存器的值。
同时,FPGA内部设置RV_DATA_FIFO:用于接收SPI FLASH读返回的数据。
所述步骤二,FPGA内部CMD_FIFO接收软件通过APB配置下来的指令寄存器的值;FPGA内部ADDR_FIFO接收软件通过APB配置下来的地址寄存器的值;FPGA内部WR_CNT_FIFO接收软件通过APB配置下来的写个数寄存器的值;
FPGA内部RD_CNT_FIFO接收软件通过APB配置下来的读个数寄存器的值;FPGA内部WR_DATA_FIFO接收软件通过APB配置下来的写数据寄存器的值。
如附图3所示,所述步骤三,FPGA内部的状态机根据标志寄存器的内容,获知SPIFLASH的具体指令类型,决定读取对应FIFO;具体实现过程包括:
初始状态,若FLAG_FIFO为非空,同时当前cmd配置完毕;则从IDLE状态(空闲状态)到RD_FLAG状态;
读FLAG_FIFO状态,读出当前指令的类型(共6种),如CMD_FIFO为非空,则从RD_FLAG状态跳转到RD_CMD状态;
读CMD_FIFO状态,并且将cmd发送到spi总线上;若当前flag只包含cmd,则在发送完cmd到spi总线之后,将跳转到IDLE状态;若当前flag包含cmd和读返回数据,则在发送完cmd到spi总线之后,将跳转到RV_RD_DATA状态,接收flash的返回数据;若当前flag包含cmd和addr,则在发送完cmd到spi总线之后,将跳转到RD_ADDR状态;
读ADDR_FIFO状态,将addr发送到spi总线上;若当前flag只包含cmd+addr,则在发送完cmd和addr到spi总线之后,将跳转到IDLE状态;若当前flag只包含cmd+addr+wr_data,则在发送完cmd和addr到spi总线之后,将跳转到RD_WR_DATA状态;若当前flag只包含cmd+addr+rd_data,且当前cmd不包含dummy clock虚拟时钟,则在发送完cmd和addr到spi总线之后,将跳转到RV_RD_DATA状态;若当前flag只包含cmd+addr+rd_data,且当前cmd包含dummyclock,则在发送完cmd和addr到spi总线之后,将跳转到WAIT状态;若当前flag只包含cmd+addr+rd_data,且当前cmd包含dummy clock,则在发送完cmd和addr到spi总线之后,将跳转到WAIT状态。
在RD_WR_DATA状态下,读WR_DATA_FIFO状态,并且按照配置的写数据的个数,依次将要写入FLASH的数据,发送到spi总线上,然后跳转到IDLE状态。
同时,状态机接收SPI FLASH的读返回信息,将读返回信息缓存到FIFO,等待软件读取;
具体的,在RV_RD_DATA状态下,按照配置的读数据的个数,接收flash的读返回数据,并且将返回数据写入对应的缓存RV_DATA_FIFO,供APB总线来读取,然后跳转到IDLE状态。
在WAIT状态下,等待N个时钟周期,然后跳转到RV_RD_DATA状态,此时对应的cmd为0x0b或者是0x0c。(不同型号的flash,有可能此状态下对应的N和cmd不同)。
以上应用具体个例对本发明的原理及实施方式进行了详细阐述,这些实施例只是用于帮助理解本发明的核心技术内容,并不用于限制本发明的保护范围,本发明的技术方案不限制于上述具体实施方式内。基于本发明的上述具体实施例,本技术领域的技术人员在不脱离本发明原理的前提下,对本发明所作出的任何改进和修饰,皆应落入本发明的专利保护范围。

Claims (10)

1.基于FPGA的SPI FLASH控制器,其特征在于,其结构包括:
标志寄存器,通过软件配置标志寄存器flag,用于标志SPI FLASH的指令类型;
FPGA,接收并缓存软件通过APB接口发送的指令;包括的核心逻辑件为若干FIFO、一个状态机FSM、一个SPI时序产生模块;
FIFO,用于接收软件通过APB配置下来的寄存器的值;包括FLAG_FIFO :用于接收软件通过APB配置下来的当前标志寄存器的值;
状态机,接收FLAG_FIFO发送的标志寄存器的值,根据标志寄存器的内容,决定读取对应FIFO;同时接收SPI FLASH的读返回信息,将读返回信息缓存到FIFO,等待软件读取;
SPI时序产生模块,将FIFO读出数据依次转换为SPI时序,通过SPI接口输出给SPIFLASH。
2.根据权利要求1所述基于FPGA的SPI FLASH控制器,其特征在于,通过软件配置指令寄存器、地址寄存器、写个数寄存器、读个数寄存器和写数据寄存器。
3.根据权利要求2述基于FPGA的SPI FLASH控制器,其特征在于,所述FPGA内部设置CMD_FIFO:用于接收软件通过APB配置下来的指令寄存器的值;FPGA内部设置ADDR_FIFO :用于接收软件通过APB配置下来的地址寄存器的值;FPGA内部设置WR_CNT_FIFO:用于接收软件通过APB配置下来的写个数寄存器的值;FPGA内部设置RD_CNT_FIFO:用于接收软件通过APB配置下来的读个数寄存器的值;FPGA内部设置WR_DATA_FIFO:用于接收软件通过APB配置下来的写数据寄存器的值;
同时,所述FPGA内部设置RV_DATA_FIFO:用于接收SPI FLASH读返回的数据。
4.根据权利要求3所述基于FPGA的SPI FLASH控制器,其特征在于,初始状态,若FLAG_FIFO为非空,同时当前cmd配置完毕;则从IDLE状态到RD_FLAG状态;
读FLAG_FIFO状态,读出当前指令的类型,若CMD_FIFO为非空,则从RD_FLAG状态跳转到RD_CMD状态;
读CMD_FIFO状态,并且将cmd发送到spi总线上;若当前flag只包含cmd,则在发送完cmd到spi总线之后,将跳转到IDLE状态;若当前flag包含cmd和读返回数据,则在发送完cmd到spi总线之后,将跳转到RV_RD_DATA状态,接收flash的返回数据;若当前flag包含cmd和addr,则在发送完cmd到spi总线之后,将跳转到RD_ADDR状态;
读ADDR_FIFO状态,将addr发送到spi总线上;若当前flag只包含cmd+addr,则在发送完cmd和addr到spi总线之后,将跳转到IDLE状态;若当前flag只包含cmd+addr+wr_data,则在发送完cmd和addr到spi总线之后,将跳转到RD_WR_DATA状态;若当前flag只包含cmd+addr+rd_data,且当前cmd不包含dummy clock虚拟时钟,则在发送完cmd和addr到spi总线之后,将跳转到RV_RD_DATA状态;若当前flag只包含cmd+addr+rd_data,且当前cmd包含dummyclock,则在发送完cmd和addr到spi总线之后,将跳转到WAIT状态;若当前flag只包含cmd+addr+rd_data,且当前cmd包含dummy clock,则在发送完cmd和addr到spi总线之后,将跳转到WAIT状态。
5.根据权利要求4所述基于FPGA的SPI FLASH控制器,其特征在于,在RD_WR_DATA状态下,读WR_DATA_FIFO状态,并且按照配置的写数据的个数,依次将要写入FLASH的数据,发送到spi总线上,然后跳转到IDLE状态;
在RV_RD_DATA状态下,按照配置的读数据的个数,接收flash的读返回数据,并且将返回数据写入对应的缓存RV_DATA_FIFO,供APB总线来读取,然后跳转到IDLE状态;
在WAIT状态下,等待N个时钟周期,然后跳转到RV_RD_DATA状态,此时对应的cmd为0x0b或者是0x0c。
6.基于FPGA的SPI FLASH控制器的设计方法,其特征在于,实现过程包括:
步骤一,分析SPI FLASH的指令类型,根据SPI FLASH的指令类型软件配置标志寄存器;
步骤二,FPGA中核心逻辑件FIFO接收软件通过APB配置下来的寄存器的值;
FPGA中设置FLAG_FIFO :用于接收软件通过APB配置下来的当前标志寄存器的值;
步骤三,FLAG_FIFO将当前标志寄存器的值发送给FPGA内部的状态机,状态机根据标志寄存器的内容,获知SPI FLASH的具体指令类型,决定读取对应FIFO;
同时,状态机接收SPI FLASH的读返回信息,将读返回信息缓存到FIFO,等待软件读取;
步骤四,将从FIFO读出数据通过SPI时序产生模块转换为SPI时序,通过SPI接口输出给SPI FLASH。
7.根据权利要求6所述基于FPGA的SPI FLASH控制器的设计方法,其特征在于,所述步骤一,
软件还配置有指令寄存器、地址寄存器、写个数寄存器、读个数寄存器和写数据寄存器。
8.根据权利要求7所述基于FPGA的SPI FLASH控制器的设计方法,其特征在于,所述步骤二,
FPGA内部CMD_FIFO接收软件通过APB配置下来的指令寄存器的值;FPGA内部ADDR_FIFO接收软件通过APB配置下来的地址寄存器的值;FPGA内部WR_CNT_FIFO接收软件通过APB配置下来的写个数寄存器的值;
FPGA内部RD_CNT_FIFO接收软件通过APB配置下来的读个数寄存器的值;FPGA内部WR_DATA_FIFO接收软件通过APB配置下来的写数据寄存器的值;FPGA内部RV_DATA_FIFO接收SPI FLASH读返回的数据。
9.根据权利要求8所述基于FPGA的SPI FLASH控制器的设计方法,其特征在于,初始状态,若FLAG_FIFO为非空,同时当前cmd配置完毕;则从IDLE状态到RD_FLAG状态;
读FLAG_FIFO状态,读出当前指令的类型,若CMD_FIFO为非空,则从RD_FLAG状态跳转到RD_CMD状态;
读CMD_FIFO状态,并且将cmd发送到spi总线上;若当前flag只包含cmd,则在发送完cmd到spi总线之后,将跳转到IDLE状态;若当前flag包含cmd和读返回数据,则在发送完cmd到spi总线之后,将跳转到RV_RD_DATA状态,接收flash的返回数据;若当前flag包含cmd和addr,则在发送完cmd到spi总线之后,将跳转到RD_ADDR状态;
读ADDR_FIFO状态,将addr发送到spi总线上;若当前flag只包含cmd+addr,则在发送完cmd和addr到spi总线之后,将跳转到IDLE状态;若当前flag只包含cmd+addr+wr_data,则在发送完cmd和addr到spi总线之后,将跳转到RD_WR_DATA状态;若当前flag只包含cmd+addr+rd_data,且当前cmd不包含dummy clock虚拟时钟,则在发送完cmd和addr到spi总线之后,将跳转到RV_RD_DATA状态;若当前flag只包含cmd+addr+rd_data,且当前cmd包含dummyclock,则在发送完cmd和addr到spi总线之后,将跳转到WAIT状态;若当前flag只包含cmd+addr+rd_data,且当前cmd包含dummy clock,则在发送完cmd和addr到spi总线之后,将跳转到WAIT状态。
10.根据权利要求9所述基于FPGA的SPI FLASH控制器的设计方法,其特征在于,在RD_WR_DATA状态下,读WR_DATA_FIFO状态,并且按照配置的写数据的个数,依次将要写入FLASH的数据,发送到spi总线上,然后跳转到IDLE状态;
在RV_RD_DATA状态下,按照配置的读数据的个数,接收flash的读返回数据,并且将返回数据写入对应的缓存RV_DATA_FIFO,供APB总线来读取,然后跳转到IDLE状态;
在WAIT状态下,等待N个时钟周期,然后跳转到RV_RD_DATA状态,此时对应的cmd为0x0b或者是0x0c。
CN201711373989.0A 2017-12-19 2017-12-19 基于fpga的spi flash控制器及其设计方法 Active CN108052750B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711373989.0A CN108052750B (zh) 2017-12-19 2017-12-19 基于fpga的spi flash控制器及其设计方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711373989.0A CN108052750B (zh) 2017-12-19 2017-12-19 基于fpga的spi flash控制器及其设计方法

Publications (2)

Publication Number Publication Date
CN108052750A true CN108052750A (zh) 2018-05-18
CN108052750B CN108052750B (zh) 2024-02-02

Family

ID=62133890

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711373989.0A Active CN108052750B (zh) 2017-12-19 2017-12-19 基于fpga的spi flash控制器及其设计方法

Country Status (1)

Country Link
CN (1) CN108052750B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109635401A (zh) * 2018-12-04 2019-04-16 中国航空工业集团公司西安航空计算技术研究所 一种动态可配置存储控制器设计方法
CN112835648A (zh) * 2021-02-25 2021-05-25 中国科学院西安光学精密机械研究所 一种基于fpga的芯片内部寄存器高可靠配置方法
CN113409861A (zh) * 2021-06-28 2021-09-17 芯天下技术股份有限公司 阈值电压的获取***、传递方法、装置、设备及存储介质
CN113419985A (zh) * 2021-06-15 2021-09-21 珠海市一微半导体有限公司 Spi***自动读取数据的控制方法及spi***
CN114116431A (zh) * 2022-01-25 2022-03-01 深圳市明源云科技有限公司 ***运行健康检测方法、装置、电子设备及可读存储介质
CN114490460A (zh) * 2022-03-31 2022-05-13 成都启英泰伦科技有限公司 一种用于asic的flash控制器及其控制方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014175891A (ja) * 2013-03-11 2014-09-22 Seiko Epson Corp コンフィグレーション装置、コンフィグレーション方法、およびプロジェクター
CN105955783A (zh) * 2016-05-09 2016-09-21 浙江大学 一种基于fpga控制的远程fpga逻辑代码的下载方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014175891A (ja) * 2013-03-11 2014-09-22 Seiko Epson Corp コンフィグレーション装置、コンフィグレーション方法、およびプロジェクター
CN105955783A (zh) * 2016-05-09 2016-09-21 浙江大学 一种基于fpga控制的远程fpga逻辑代码的下载方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
赵庆平等: ""基于FPGA的SPI接口Flash控制器设计及其在存储配置数据中的应用"", 《吉林大学学报(理学版)》 *
马宏锋主编: "《微机原理与接口技术 基于8086和Proteus仿真》", 31 December 2016, 西安电子科技大学出版社 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109635401A (zh) * 2018-12-04 2019-04-16 中国航空工业集团公司西安航空计算技术研究所 一种动态可配置存储控制器设计方法
CN112835648A (zh) * 2021-02-25 2021-05-25 中国科学院西安光学精密机械研究所 一种基于fpga的芯片内部寄存器高可靠配置方法
CN112835648B (zh) * 2021-02-25 2022-03-25 中国科学院西安光学精密机械研究所 一种基于fpga的芯片内部寄存器高可靠配置方法
CN113419985A (zh) * 2021-06-15 2021-09-21 珠海市一微半导体有限公司 Spi***自动读取数据的控制方法及spi***
CN113409861A (zh) * 2021-06-28 2021-09-17 芯天下技术股份有限公司 阈值电压的获取***、传递方法、装置、设备及存储介质
CN113409861B (zh) * 2021-06-28 2024-02-02 芯天下技术股份有限公司 阈值电压的获取***、传递方法、装置、设备及存储介质
CN114116431A (zh) * 2022-01-25 2022-03-01 深圳市明源云科技有限公司 ***运行健康检测方法、装置、电子设备及可读存储介质
CN114490460A (zh) * 2022-03-31 2022-05-13 成都启英泰伦科技有限公司 一种用于asic的flash控制器及其控制方法
CN114490460B (zh) * 2022-03-31 2022-06-28 成都启英泰伦科技有限公司 一种用于asic的flash控制器及其控制方法

Also Published As

Publication number Publication date
CN108052750B (zh) 2024-02-02

Similar Documents

Publication Publication Date Title
CN108052750A (zh) 基于fpga的spi flash控制器及其设计方法
CN101859289B (zh) 一种利用片外存储器访问控制器访问外部存储器的方法
US20040054864A1 (en) Memory controller
CN107911391A (zh) 一种基于fpga的axi协议与spi协议转换的方法
CN110297797B (zh) 异构协议转换装置和方法
CN101504692A (zh) 一种验证和测试片上***的***及方法
CN104714907B (zh) 一种pci总线转换为isa和apb总线设计方法
CN203812236U (zh) 一种基于处理器和现场可编程门阵列的数据交换***
CN106294239A (zh) 一种***总线apb总线桥
CN107038040A (zh) 基于pcie的fpga更新***及更新方法
CN102981801B (zh) 一种本地总线数据位宽的转换方法及装置
CN107992390A (zh) 一种基于片上总线的芯片调试方法
CN104077080B (zh) 存储器存取方法、存储器存取控制方法、spi闪存装置及其控制器
US20080195793A1 (en) Microcontroller with memory trace module
CN106571156B (zh) 一种高速读写ram的接口电路及方法
CN110968544B (zh) 一种基于嵌入式自旋转移力矩磁随机存储器的SoC存储***
CN104035898B (zh) 一种基于vliw类型处理器的访存***
CN219574799U (zh) 一种基于amba总线的多总线桥接器及其片上***
CN206975631U (zh) 一种通用输入输出时序处理器
CN115982071A (zh) 一种面向ddr3控制器的片上网络转换接口
CN101950276B (zh) 一种存储器访问装置及其程序执行方法
CN103150262B (zh) 管道式串行接口闪存访问装置
CN201812284U (zh) 一种存储器接口
CN108228517A (zh) I3c电路设备、***及通信方法
KR100438736B1 (ko) 어드레스 라인을 이용해 데이터 쓰기를 수행하는 메모리제어 장치

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant