CN108052750A - 基于fpga的spi flash控制器及其设计方法 - Google Patents
基于fpga的spi flash控制器及其设计方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 26
- 238000013461 design Methods 0.000 title claims abstract description 22
- 230000007704 transition Effects 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- LHMQDVIHBXWNII-UHFFFAOYSA-N 3-amino-4-methoxy-n-phenylbenzamide Chemical compound C1=C(N)C(OC)=CC=C1C(=O)NC1=CC=CC=C1 LHMQDVIHBXWNII-UHFFFAOYSA-N 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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控制器及其设计方法。
背景技术
传统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。
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)
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)
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逻辑代码的下载方法 |
-
2017
- 2017-12-19 CN CN201711373989.0A patent/CN108052750B/zh active Active
Patent Citations (2)
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)
Title |
---|
赵庆平等: ""基于FPGA的SPI接口Flash控制器设计及其在存储配置数据中的应用"", 《吉林大学学报(理学版)》 * |
马宏锋主编: "《微机原理与接口技术 基于8086和Proteus仿真》", 31 December 2016, 西安电子科技大学出版社 * |
Cited By (9)
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 |