zoukankan      html  css  js  c++  java
  • Norflash控制器的Verilog建模之二(仿真)

      前言:经过几天修改,norflash控制器基本已经完成,通过仿真。完整的norflash包含2个模块:直接操作硬件的norflash_ctrl.v与控制ctrl模块的驱动norflash_driver.v。目前只具备扇区块擦除、单字节写、单字节读。

      设计思路

      norflash_driver模块:可以根据外部控制脉冲信号(可以是按键、开关、其他模块产生的脉冲信号)控制其在每个脉冲下产生相应的“指令、读写地址、待写数据、norflash请求”4种信号。指令可以预先用一个lut存储。用这种方式操作norflash_ctrl模块有点类似中断,在时间上安排未必是完整紧凑的。另外一种方式利用norflash_ctrl模块产生的ack信号反馈到本地模块激发产生“相应的指令、读写地址、待写数据、norflash请求”4种信号,以这种方式操作在时序上是紧凑的,即提高了模块使用效率。后者这种操作方式之前也在I2C控制器建模里多次使用过。

      norflash_ctrl模块:内置指令译码器根据norflash_driver总线上的“指令、norflash请求”2个信号在检测到norflash请求信号后锁存译码指令产生供给状态机使用的状态转移信号(do_sector,do_byte_rd,do_byte_wr)。其余状态转移按照3段式状态机建模编写。

      注意事项

      (a)扇区块擦除时序:根据手册可以获得扇区块地址,地址是地址总线的高9位。擦除指令周期一共6个,在此之后并不可以立即写入,需等待擦除操作实际进行完毕。扇区块擦除大概需要0.7秒,整块擦除需要45秒。

      (b)写操作时序:4个周期,norflash是支持任意地址访问,不像nandflash最小的读写单位是块。需要注意手册里有提到写时序图里地址线是在we_n下降沿锁存,写数据是在we_n上升沿锁存写入器件。这一点习惯和sdram、sram不太一样。

      (c)读操作时序:1个周期,类似sram,给出地址和使能oe就可以得到数据,相比写时序,速度快了不止1、2个数量级吧。

      未解决疑惑

      (a)不论是整块擦除还是扇区擦除,擦除完毕之后存储单元是0xff,手册没说明(还是我没看到)是否支持“1次块擦除+该块连续写”,在下一步硬件测试时候要尝试一下。

      最后给出仿真图,目前为了完成主要功能的建模,在driver模块指令比如“擦写和写”之间并未按照手册给出0.7秒的等待擦写等待。ps晚上6点飞机回校,先这样吧。

        

  • 相关阅读:
    stm32f103和stm32f407的GPIO口模式设置以及相互对应的关系
    基于STM32单片机实现屏幕休眠后OLED屏幕滚动效果
    基于51单片机的超声波模块HC-SR04的使用
    用51单片机控制L298N电机驱动模块
    学习笔记——51单片机 单片机与单片机之间的通讯
    基于51单片机的电子密码锁—1
    LCD1602学习调试
    基于51单片机,通过定时器实现的时钟程序
    有进度条圆周率计算
    python turtle 学习笔记
  • 原文地址:https://www.cnblogs.com/loadomain/p/3292866.html
Copyright © 2011-2022 走看看