首页 > 其他分享 >FPGA:spi_flash读写测试

FPGA:spi_flash读写测试

时间:2024-01-15 17:34:58浏览次数:30  
标签:WIRE FPGA flash FIFO spi INPUT 管脚 数据 时钟

SIP_FLASH逻辑设计

  1. 需求
SPI读写flash,最大4mbit,实现给定地址,长度可完成存储数据读取。 本设计包含指令:RSR-1、PP、SE、BE、READ。 用户接口:

Port name

Direction

Type

Description

clk_sys

INPUT

WIRE

输入系统时钟

rst_sys

INPUT

WIRE

输入系统复位

rd_en

INPUT

WIRE

flash读使能

wr_en

INPUT

WIRE

flash写使能

chip_es_en

INPUT

WIRE

flash片清除信号

rd_sr

INPUT

WIRE

读flash状态寄存器

sr_data

OUTPUT

WIRE

读寄存器输出值

data_i

INPUT

[31:0]

写FIFO,32位数据信号

data_vld_i

INPUT

WIRE

写FIFO,数据有效信号

wr_almostfull_o

OUTPUT

WIRE

写FIFO,fifo满信号

wr_datacnt_o

OUTPUT

WIRE

写FIFO,计数

data_o

OUTPUT

REG

读FIFO,数据输出

data_o_en

INPUT

WIRE

读FIFO,数据使能信号

rd_empty_o

OUTPUT

WIRE

读FIFO,高有效表示FIFO内数据为空。

rd_almostfull_o

OUTPUT

WIRE

读FIFO,almost_full信号,当信号为1,表示FIFO内存仅剩50个数存储量。

rd_datacnt_o

OUTPUT

WIRE

FIFO内存数据计数。

length_i

INPUT

[15:0]

写数据总长度,16位宽最大为2mbit。

address_i

INPUT

[23:0]

写数据初始地址

addr_vld

INPUT

WIRE

数据地址和数据长度有效信号

  物理层接口:

Port name

Direction

Type

Description

si_io

input

wire

SPI输入数据线,MOSI

so_io

output

 reg

SPI输出数据线,MOSO

cs_io

output

reg

片选信号,低有效

用户接口时序: 1)       读使能与写使能以及片擦除使能均有效两个时钟周期,下图仅展示读使能。   2)       写入数据时序如下图所示:     3)       当full_o信号为1时,暂停数据写入,等待full_o信号置0后,继续写入数据。     4)       读数据时序如下图:     5)              读数据时,empty为0时数据有效。如下如:     6)       数据长度、起始地址信号时序如下:       状态机:     Figure 1 SPI_FLASH 状态机   总结: 1)       尝试配置 FLASH 管脚时,会发现 CCLK 管脚是不可配置的,这实际上是因为 CCLK_0 管脚在内部已经被占用,我们必须通过其他方式获取/设置,这里使用原语控制CCLK_0。读SR1寄存器,在读写操作前后均需要发出都寄存器指令检测FLASH是否能够继续下一步操作,主要检测WEL和WIP位。 2)       SO_IO并不是一定随着时序在发送结束后立即置高。是否为一不影响后续指令操作,一切看状态寄存器。 3)       PP操作时,若给定地址不是页头地址,当数据写数据超过当前页区域时,后续数据将从当前页区域首地址继续写数据。而读书则自动做地址偏移。
  1. Flash命令和SPI协议时序
1.1.  Flash指令   写使能(WREN)需要在PP、SE、BE、操作前将wel写使能处于锁存状态。 . 1.2.  SPI时序 1.2.1.     READ(Read Data Bytes) 作用:读取数据; 时序图(SPI mode):   1.2.2.     SE(Sector Erase) 作用:将扇区所有数据擦除即全“1”;在发送SE之前需要发送WREN将WEL位设置; 时序图(SPI mode):   1.2.3.     CE(Chip Erase) 作用:将FLASH上所有数据擦除即全“1”;在发送之前需要发送WREN将WEL位设置; 时序图(SPI mode):   1.2.4.     PP(Page Program) 作用:对内存写0;在发送之前需要发送WREN将WEL位设置;若发送的数据超过256Bytes,它会将最后256Bytes发送到FLASH;若发送的数据不超过256Bytes,数据将发送到请求的地址; 时序图(SPI mode):
  1. 仿真以及时序对齐:
      Spi读FIFO数据,初始设计时序逻辑的spi_clk下降沿触发32位宽的fifo_dout左移一位,由于spi写数据时为连续写入,导致从fifo中读出数据时无法及时触发读rd_en使能,所以写入数据始终为初始数据;       修改为组合逻辑,设置spi_clk 的上升沿信号(spi_pos)和下降沿信号(spi_neg),组合逻辑中触发32位宽数据fifo_dout的移位以及从FIFO中读数据。 跨时钟域处理:对于clk_sys时钟域的读写指令信号,通过打三拍的方式在spi_clk慢时钟域抓取。   仿真: 写数据仿真;   读数据仿真;     FLASH时钟原语配置: STARTUPE2 #(        .PROG_USR              ("FALSE"),        .SIM_CCLK_FREQ  (0.0) ) STARTUPE2_inst(        .CFGCLK                   (cfgclk),        .CFGMCLK        (cfgmclk),        .EOS                    (eos),        .PREQ                 (),        .CLK                   (0),        .GSR                   (0),        .GTS                    (0),        .KEYCLEARB           (1),        .PACK                 (1),        .USRCCLKO             (usrcclk),        .USRCCLKTS           (0),        .USRDONEO             (1),     .USRDONETS          (0) ); CFGCLK,配置逻辑主时钟,仅在配置时有输出,在 master 模式下也一直存在(存疑;根据后面的测试,文档所说的 Persist Enabled 应当指的是 Master 模式下一直使能/连接,但除了配置的时候存在时钟,其他时候为无效的高电平;在配置了 USRCCLK 时,在 FPGA 配置结束后三个 clk 该时钟将切换到 USRCCLK)。Configuration mode 是根据 M[2:0] 管脚配置的,最常用的是 M[2:0]=001 对应的 Master SPI 配置模式,笔者开发板即本模式,Master 模式下 CCLK 由 FPGA 输出给 FLASH 的 SCK;   EOS,End Of Start,指示 FPGA 配置的结束;   CFGMCLK,配置内部振荡器时钟,是从内部的一个锁相环输出的 65MHz 时钟(不是很准,笔者输出到 GPIO 用示波器看过,那块板子的 ~68MHz);   USRDONEO,输出到FPGA 的 DONE_0 管脚。一般而言,在硬件设计中会在这个管脚挂一个 LED 灯,以指示 FPGA 完成配置开始运行;   USRDONETS,控制 DONE 管脚的三态门,1 将设置为高阻,0 将会把用户给入的 USRDONEO 输出到 DONE_0 管脚;   USRCCLKO,在配置完成后,驱动 CCLK_0 管脚的用户自定义时钟。在配置完成后,前三个时钟周期用于切换时钟源,且不会被输出,但如果使用了 EMCCLK 管脚,则 EMCCLK 信号会出现在 CCLK 管脚上,直到过渡到用户自定义时钟;   USRCCLKTS,控制 USRCCLKO 的三态门;   GTS,全局三态门使能,要用户自定义 CCLK/DONE 等,此管脚必须置低。  

标签:WIRE,FPGA,flash,FIFO,spi,INPUT,管脚,数据,时钟
From: https://www.cnblogs.com/Arkam-xie/p/17965880

相关文章

  • ★教程4:FPGA/MATLAB/Simulink联合应用开发入门与进阶X例——前言★教程3:simulink学
        专业即算法,算法即数学,数学即万物。从事MATLAB算法仿真工作15年,从事FPGA系统开发工作12多年。擅长解决各种算法仿真、建模、通信、图像处理、AI、智能控制等。 1.无线基带,无线图传,编解码2.机器视觉,图像处理,三维重建3.人工智能,深度学习4.智能控制,智能优化目录1.FPG......
  • ★教程4:FPGA/MATLAB/Simulink联合应用开发入门与进阶X例——目录
    1.订阅本教程用户可以免费获得本博任意1个博文对应代码;2.本课程的所有案例(部分理论知识点除外)均由博主编写而成,供有兴趣的朋友们自己订阅学习使用。未经本人允许,禁止任何形式的商业用途;3.本课程我们更侧重于各种实例的完整设计介绍。更全面的介绍FPGA,MATLAB,Simulink的联合开发应......
  • Python: spire.doc
     #encoding:utf-8#版权所有2024涂聚文有限公司#许可信息查看:#描述:#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python3.11#Datetime:2024/1/1310:21#User:geovindu#Product:PyCharm#Project:pyBaiduAi#F......
  • Fpga开发笔记(一):高云FPGA芯片介绍,入手开发板套件、核心板和底板介绍
    前言  FPGA作为一种逻辑芯片,硬件架构独特,具有并行性、低延时性和灵活性等特性,应用领域广泛。  FPGA市场主要玩家是英特尔、AMD、莱迪思、Microchip、Achronix等;国内厂商包括复旦微电、紫光国微、安路科技、东土科技、高云半导体、京微齐力、京微雅格、智多晶、遨格芯等。 ......
  • 基于FPGA的电子琴设计(按键和蜂鸣器)---第一版---郝旭帅电子设计团队
    本篇为各位朋友介绍基于FPGA的电子琴设计(按键和蜂鸣器)----第一版。功能说明:外部输入七个按键,分别对应音符的“1、2、3、4、5、6、7”,唱作do、re、mi、fa、sol、la、si。当某个按键按下时,蜂鸣器发出对应的声音----1.默认发出0.2秒(可以调整)。2.蜂鸣器发出对应的中音。使用平台:本次设计......
  • 春秋云镜 Hospital WP
    fscan先扫描39.101.178.126:22open39.101.178.126:8080open[*]aliveportslenis:2startvulscan[*]WebTitlehttp://39.101.178.126:8080code:302len:0title:None跳转url:http://39.101.178.126:8080/login;jsessionid=1B14C65F6F2FBDDB6219E0E9C43CCB61[*......
  • Flashduty 案例分享 - 途游游戏
    Flashduty 作为功能完备的事件OnCall中心,可以接入云上、云下不同监控系统,统一做告警降噪分派、认领升级、排班协同,已经得到众多先进企业的认可。我们采访了一些典型客户代表,了解他们的痛点、选型考虑和未来展望,集成本系列文章,以飨读者。本次有幸在邹老板支持下访谈到途游资......
  • LLM增强LLM;通过预测上下文来提高文生图质量;Spikformer V2;同时执行刚性和非刚性编辑的
    文章首发于公众号:机器感知LLM增强LLM;通过预测上下文来提高文生图质量;SpikformerV2;同时执行刚性和非刚性编辑的通用图像编辑框架LLMAugmentedLLMs:ExpandingCapabilitiesthroughComposition本文研究了如何高效地组合现有的基础模型以实现新功能的问题,文章提出了CALM(Comp......
  • 基于FPGA的数字钟设计---第三版---郝旭帅电子设计团队
    本篇为各位朋友介绍基于FPGA的数字钟设计---第三版。功能说明:在数码管上面显示时分秒(共计六个数码管,前两个显示小时;中间两个显示分钟;最后两个显示秒)。利用按键可以切换24/12小时制(默认24小时制)。led1的亮灭表示24小时制(亮)还是12小时制(灭)。led2的亮灭表示上午(亮)还是下......
  • 理解 Apache ShardingSphere 的 SPI,以及为何它比 Dubbo 更简单
    为什么学习ShardingSphere的SPI?你可能已经熟悉Java和Dubbo的SPI(ServiceProviderInterface)机制,所以你可能会想:“为什么要学习ShardingSphere的SPI机制呢?”原因非常简单:ShardingSphere的源代码更简单、更容易适应。ShardingSphere的SPI机制执行非常顺畅,日常操作所......