目录

  • 1、N25Q128A芯片解读
  • 2、N25Q128A读写时序
  • 3、整体设计思路架构
  • 4、verilog读写Flash驱动设计
  • 5、verilog读写Flash控制器设计
  • 6、FIFO缓存设计
  • 7、串口输出Flash读取数据
  • 8、vivado工程介绍
  • 9、上板调试验证并演示
  • 10、福利:工程源码获取

1、N25Q128A芯片解读

N25Q128A的参数有很多,作为FPGA开发者,需要关注如下参数:

1、4KBytes为1个Sector(扇区);
2、16个Sector(扇区)是1个Block(块)64KBytes;
3、容量为16M=128Mbite字节,共有256个Block,4096个Sector;

这三个参数直接决定了你怎么组织数据的读写操作,比如你的数据量很小,则考虑写入1个Sector(扇区),如果你的数据量很大,则考虑写多个Sector(扇区);
N25Q128A按照读写速度分为标准、Quad/Dual三种,这里只介绍标准版,学fpga就是这样,先把最基础的搞懂再去研究高级的,一步步扎实点兄弟。。。

标准模式下只需用到4个引脚:
时钟QSPI_CLK:25M即可,对于Flash来说,上升沿采集数据,下降沿输出数据;对于FPGA来说,则是下降沿输出数据,上升沿采集数据。。。我看到csdn上有人给出的代码居然直接有always @( negedge QSPI_CLK) 这样的写法,真是为这样的大佬感到震惊,感觉在校本科生也知道这样写不好吧。。。
片选信号QSPI_CS:低电平有效;
数据输出信号:QSPI_DQ1;
数据输入信号:QSPI_DQ0;
硬件原理图部分如下:

N25Q128A在本设计中需要用到的指令如下:

parameter CMD_NULL               =   8'h00  ;  //空操作
parameter CMD_RD_DEVICE_ID       =   8'h9F  ;  //读ID
parameter CMD_WR_DISABLE         =   8'h04  ;  //写禁止
parameter CMD_WR_ENABLE          =   8'h06  ;  //写使能
parameter CMD_PAGE_PROGRAM       =   8'h02  ;  //页编程
parameter CMD_RD_DATA            =   8'h03  ;  //读数据
parameter CMD_SECTOR_ERASE       =   8'h20  ;  //扇区擦除
parameter CMD_RD_STATUS_REGISTER =   8'h05  ;  //读状态寄存器

状态寄存器描述如下:

在写入指令或地址之前,需要读bit0为,确保其值为0才可操作;
其他的去看数据手册吧,太多了也写不完;

2、N25Q128A读写时序

N25Q128A读写本质上都一样,发送指令或发送指令加地址,则完成了读写操作;具体的对应关系如下,仅限本设计用到的:

/*                name                      instruction  cmd  addr  rd  wr
读芯片信息        CMD_RD_DEVICE_ID           9F          √          √
写禁止/写使能     CMD_WR_DISABLE/WR_ENABLE   04/06       √
页编程(写数据)  CMD_PAGE_PROGRAM           02          √     √        √
读数据            CMD_RD_DATA                03          √     √    √
扇区擦除          CMD_SECTOR_ERASE           20          √     √
读状态寄存器      CMD_RD_STATUS_REGISTER     05          √          √
空指令            CMD_NULL                   00
*/

3、整体设计思路架构

整体设计思路架构如下:

1、VIO模拟按键:
启动一次QSPI读写操作,高电平有效;
2、QSPI读写驱动:
verilog代码实现,根据输入的指令和地址输出/输入QSPI数据;
3、QSPI读写操作:
读ID–>块擦除–>写入256个字节数据到Sector0–>读出256个字节数据–>缓存FIFO;
4、缓存FIFO:
缓存读出的256个字节数据,等待串口读取;
5、串口发送:
读取缓存FIFO数据,发送上位机显示;

4、verilog读写Flash驱动设计

使用三段式状态机实现;根据输入的指令或地址完成对应读写操作;
代码比较长,这里就不粘贴了,需要源码的兄弟可联系我;
顶层接口部分如下:

module helai_flash_driver #(parameter SYS_CLK_M = 200,  //系统时钟parameter SPI_CLK_M = 25 //QSPI时钟
)(input             clk            ,input             rst_n          ,input             i_flash_start  , //启动驱动,高电平有效input      [ 7:0] i_flash_cmd    ,  //输入指令input      [23:0] i_flash_addr   ,    //输入地址input             i_flash_dqout  ,  //N25Q128A输出output reg        o_flash_dqin   ,    //N25Q128A输入output            o_flash_csn    ,    //N25Q128A片选output reg        o_flash_cmd_ok ,    //单次读写操作完成output reg [ 7:0] o_flash_rx_data,    //输出数据output reg        o_flash_rx_de    //输出数据有效,高有效
);

5、verilog读写Flash控制器设计

使用三段式状态机实现;状态机步骤如下:

//第一步:读ID,发送CMD_RD_DEVICE_ID指令
//第二步:读ID完成,进入写禁止,发送CMD_WR_DISABLE指令
//第三步:进入写使能,发送CMD_WR_ENABLE指令
//第四步:进入页擦除,发送CMD_SECTOR_ERASE指令
//第五步:进入读状态寄存器,发送CMD_RD_STATUS_REGISTER指令
//第六步:进入写使能,发送CMD_WR_ENABLE指令
//第七步:进入页写,发送CMD_PAGE_PROGRAM指令
//第八步:进入读状态寄存器,发送CMD_RD_STATUS_REGISTER指令
//第九步:进入读状数据,发送CMD_RD_DATA指令

代码比较长,这里就不粘贴了,需要源码的兄弟可联系我;

6、FIFO缓存设计

fifo缓存读出的256字节数据,等待串口读取,很简单,不多说;

7、串口输出Flash读取数据

波特率自由配置,很简单,不多说;给出顶层接口如下:

module uart_transfer #(parameter SYS_CLK_M = 200,parameter UART_CLK  = 115200
)(input         clk         ,input         rst_n       ,input  [ 7:0] txd_data    ,input         txd_data_vld,output        txd_data_rdy, output reg    txd_uart
);

8、vivado工程介绍

开发板:Xilinx Artix7开发板;
开发环境:vivado2019.1;
输入:VIO;
输出:串口;

9、上板调试验证并演示

视频演示:

FPGA纯verilog代码读写N25Q128A QSPI

10、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料如下:获取方式:私,或者看下面的名片。
网盘资料如下:

FPGA纯verilog代码读写N25Q128A QSPI Flash 提供工程源码和技术支持相关推荐

  1. FPGA纯verilog代码实现图像对数变换,提供工程源码和技术支持

    目录 1.图像对数变换理论 2.log系数的matlab生成 3.FPGA实现图像对数变换 4.vivado与matlab联合仿真 5.vivado工程介绍 6.上板调试验证并演示 7.福利:工程代码 ...

  2. FPGA基于GS2971/GS2972实现SDI视频收发 提供工程源码和技术支持

    目录 1.前言 2.我目前已有的SDI编解码方案 3.GS2971/GS2972芯片解读 GS2971解读 GS2972解读 4.详细设计方案 5.vivado工程1解读 硬件逻辑工程 软件SDK工程 ...

  3. FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持

    目录 1.前言 2.目前主流的FPGA图像缩放方案 3.本方案的优越性 4.详细设计方案 5.vivado工程详解 6.上板调试验证并演示 7.福利:工程源码获取 1.前言 代码使用纯verilog实 ...

  4. FPGA纯vhdl实现MIPI CSI2 RX 4K视频解码输出,OV13850采集,提供工程源码和技术支持

    目录 1.前言 2.Xilinx官方主推的MIPI解码方案 3.纯Vhdl方案解码MIPI 4.vivado工程介绍 5.上板调试验证 6.福利:工程代码的获取 1.前言 FPGA图像采集领域目前协议 ...

  5. FPGA实现CSI-2 解码MIPI视频 2line 720P分辨率 OV5647采集 提供工程源码和技术支持

    目录 1.前言 2.Xilinx官方主推的MIPI解码方案 3.纯Vhdl方案解码MIPI 4.vivado工程介绍 5.上板调试验证 6.福利:工程代码的获取 1.前言 FPGA图像采集领域目前协议 ...

  6. FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持

    目录 1.前言 2.设计思路和框架 3.vivado工程详解 4.上板调试验证并演示 5.福利:工程代码的获取 1.前言 FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片,比如典型 ...

  7. FPGA找工作写简历,你离高薪offer只差一个高端项目,提供工程源码和技术支持

    这里写目录标题 1.前言 2.你或许很菜 3.工程源码 4.技术支持 5.工程源码和技术支持获取方式 1.前言 如果你是即将毕业的学生或是想转行做FPGA的工程师,你都会面临一个问题,那就是找工作,找 ...

  8. FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持

    目录 1.前言 2.JPEG-LS图像压缩理论 3.JPEG-LS图像压缩性能介绍 4.JPEG-LS图像压缩时序介绍 5.JPEG-LS图像压缩输出压缩流 6.工程源码和仿真 7.福利:工程代码的获 ...

  9. FPGA解码4line MIPI视频 IMX291/IMX290摄像头采集 提供工程源码和技术支持

    目录 1.前言 2.Xilinx官方主推的MIPI解码方案 3.我已有的MIPI解码方案 4.纯Vhdl代码解码MIPI 5.vivado工程介绍 6.上板调试验证 7.福利:工程代码的获取 1.前言 ...

最新文章

  1. 6426C Lab3 部署证书和管理注册
  2. 华为云苏嘉:如何整合预训练模型和知识图谱做医疗推理?
  3. Free Online SQL Formatter
  4. linux 常用命令集
  5. linux php c 扩展,linux下编写php5.6的C扩展模块(双向链表)
  6. Unity3d发布web版无法连接数据库
  7. 监控服务器Nagios之一 概述及安装
  8. PaddleOCR-release-2.3\deploy\cpp_infer\src识别中文时出现乱码
  9. 我的世界基岩版json_我的世界基岩版app_我的世界基岩版app下载_我的世界基岩版安卓版下载-新手游网...
  10. [CQOI2011]放棋子
  11. 【web前端期末大作业】html在线网上书店 基于html制作我的书屋(23页面)
  12. php函数体用return,php递归函数使用return问题
  13. python 快递分拣小程序
  14. python录入数据,python处理写入数据教学教程
  15. MAC欺骗-通过思科模拟器实现
  16. Apache域名跳转----配置rewrite模块
  17. 商城APP软件开发要素有哪些
  18. 半导体器件物理【1】量子理论扫盲——从Planck到态叠加原理
  19. 电脑突然连不上WiFi?按步骤检查
  20. 年会必备:18套年会快闪PPT

热门文章

  1. 云存储服务broker系统(九)——桶标签及桶日志管理
  2. Parallels Desktop Business Edition 13.2.0虚拟机破解版
  3. 产研团队任务管理工具:盘点国内外9款知名任务管理系统软件
  4. 研究者将在IEEE机器人与自动化国际会议上展示小型机器人RoboFly,利用激光无线提供动力
  5. 解决Unity模型贴图反转的问题
  6. DBUtils学习记录(传智播客视频)
  7. 无纸化、自动化、智能化|WMS系统升级你的仓储管理模式
  8. 学习——信号调制识别(一)
  9. Messari年度报告-2022
  10. ZYNQ-Linux学习笔记(2)-在Xilinx SDK中建立Linux应用程序