flash读写模块说明

1. 主要内容

特性:

  • 支持仿真
  • 支持ILA+VIO调试
  • 使用vivado版本2019.2

目录:

  • 设计文件
    • test_top.v:调试顶层
      • flash_ctrl:设计flash读写模块,内容与flash_rw.v相同,增加了仿真支持
    • flash_rw.v:设计flash读写模块
    • test_top.xdc:全局物理约束
    • flash_ctrl_para.vh:参数配置文件
  • 仿真文件
    • env.v:仿真顶层,用于连接
    • test_25Q128JVxIM.v:W25Q128 FLASH模型
    • Text:W25Q128 FLASH模型初始化数据

2. 如何仿真/调试

仿真/测试过程

仿真

  1. 取消SIMULATION_MODE注释,并对DEBUG_MODE进行注释
  2. 把env.v仿真文件设为顶层
  3. 运行功能仿真,并使用tb_env.v波形配置文件

*注意:全部写入1152字节可能会仿真过慢,可以修改此处`JTM_NUM为其他数值

image-20221106202659977

调试

  1. 取消DEBUG_MODE注释,并对SIMUDEBUG_MODE进行注释
  2. 把test_top.v设计文件设为顶层
  3. 生成bitstream

3. Flash Controller

注意:

  • NEXT状态是在指令切换之间的过渡态,因为CS_N需要一个由高到低的过程来开启一个新指令
  • WAIT状态为检查WIP的状态,只有WIP为0才能进行页编程、擦除等操作

重要寄存器:

  • counter:执行指令周期计数器,提示当前是该状态的第几个周期
  • SPI
    • send:发送指令寄存器,只在counter=0时正确显示
  • 读Flash
    • read_buff:存放位移读数据
    • read_byte:每byte捕获读数据,深度为1bytes 7,6,5,4,3,2,1,0
    • read_8bytes:每byte捕获读数据,深度为8bytes 高位字节—>低位字节
  • 写Flash
    • write_byte_cnt:写flash字节计数器,提示当前写入flash的是第几个字节
    • write_addr_buff:写flash地址累加器,提示当前写入flash的字节的地址

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!