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点飞机回校,先这样吧。
Norflash控制器的Verilog建模之二(仿真)的更多相关文章
- Norflash控制器的Verilog建模之一
摘要:今天驱动一款SPANSION公司生产的norflash——S29AL032D70,没有别的参考资料,大致了解一下norflash的内部cmos电路架构以及其用途之后,直接看手册吧. 如何看手册: ...
- Norflash控制器的Verilog建模之三(測試)
前言:回校了,辦好手續就著手寫測試篇.初步的norflash控制器已經完成,通過硬件測試.目前的norflash完成扇区块擦除.单字节写.单字节读3个功能.博文最后附上源码. 总结:和之前的博文一样, ...
- I2C控制器的Verilog建模之二
前言:接着上一篇的I2C写操作,今天要实现一个I2C的读操作.虽然在ADV7181B配置内部寄存器时没有必要使用到读操作,但是为了进一步确认寄存器是否在I2C写模块下被正确配置,这一步是必不可少的. ...
- SDRAM控制器的Verilog建模之一
前言:作为经典存储器的三剑客中的flash和sram已经建模测试过了,虽然现在都已经ddr2,ddr3,667MHZ.1333MHZ的天下了,但是接下这周来准备写一下sdram的controller. ...
- I2C控制器的Verilog建模之三(完结版)
前言:终于到了测试篇,不过悲剧了一下.按照之前<二>里面的思路,在顶层用一个复用器驱动读写独立模块的I2C总线确实失败.虽然综合过去了,不过警告里已经说明:底层的2个原本是inout三态口 ...
- 异步SRAM控制器的Verilog建模
前言:sram顾名思义静态随机存储器,分为asram异步型和ssram同步型.这里驱动DE2上一块ISSI公司的512KB的asram. 设计思路:因为实际应用中单字节读写效率不高,所以本设计中仿照s ...
- VGA逐行扫描控制器的Verilog建模
前言:因为VGA是一种模拟图像传输数据接口,所要将数字信号用DAC转换成模拟量.本文用的一款ADI公司高精度的视频IC,实则一款高带宽的视频DAC.因为VGA时序较为简单,并且网上的VGA驱动基本大同 ...
- I2C控制器的Verilog建模之一
前言:之前申请了ADI公司的一款ADV7181CBSTZ的视频解码芯片,正好原装DE2板子安的是同系列的ADV7181BBSTZ.虽然都是ADV7181的宗出,但是寄存器配置等等还是有些诧异,引脚也不 ...
- verilog 代码分析与仿真
verilog 代码分析与仿真 注意:使用vivado 自带的仿真工具, reg和wire等信号需要赋予初始值 边沿检测 module signal_test( input wire cmos_pcl ...
随机推荐
- 上传到github!
今天课上在冯老师的带领下终于在github上成功上传了东西但是还有很多没用的东西,慢慢研究改进! https://github.com/Hxy94264/GitHubTest https://gith ...
- ubuntu安装opencv
ubuntu版本是12.04 ,opencv的版本是2.4.9 其实官网有教程的,http://docs.opencv.org/doc/tutorials/introduction/linux_ins ...
- C语言数据结构之 简单选择排序
算法:设所排序序列的记录个数为n.i取1,2,-,n-1,从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出排序码最小的记录,与第i个记录交换.执行n-1趟 后就完成了记录序列的排序. 编译器: ...
- oracle删除用户及表空间,导入用户和数据
drop user xxx cascade; drop tablespace xxx including contents and datafiles; create tablespace xxx d ...
- 解决java使用https协议请求出现证书不信任问题(PKIX path building failed)
解决https请求时出现pkix path building fail错误 方法 将submail.cer 安全证书导入到java中的cacerts证书库 (sumail是我从https://api. ...
- MFC的几处坑
本人愚笨,一个滚动条控件还让我研究了几天,记录下成果. 1. GetScrollRange();获取滚动条的范围,个人觉得用意不大. GetScrollLimit();获取滚动按钮活动的范围 Scro ...
- Maximum Depth of Binary Tree
二叉树最大深度的递归实现. /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNo ...
- PetaPoco 批量插入数据
网上找的代码,还没经过验证 /// <summary> /// Bulk inserts multiple rows to SQL /// </summary> /// < ...
- C/C++变量名与值的问题
首先说明变量名是不占空间的. 变量:用来标识一块内存空间,这块内存区域的值一般是可以被该的. 而const常量通常限定这一块内存区域的值是不可被更改的. 变量名:只是一个标识符,并不占内存空间.在c的 ...
- sqldeveloper
阅读文档:e12152-08 preferences 首选项,参数 panes 窗格 tabs 标签,选项卡 pin 别针,钉住 detach,move,dock 分离,移动,停靠 find data ...