基于AHB_BUS的eFlash控制器的架构设计
eFlash控制器的架构设计
1.架构设计思路分析
1.1 含有的模块分析
- eFlash控制器是一个基于AHB的slave,所以需要一个AHB_slave_if处理AHB的信号。AHB_slave_if与AHB总线进行交互,对主设备的请求进行处理,还可以设置一些内部的寄存器,对AHB发送过来的信号进行解析。
- AHB_slave_if除了处理AHB总线的信号,还需要配置一些寄存器,这些寄存器的作用是产生一些控制指令发送给Flash_ctrl,Flash_ctrl将指令转换为Flash的控制信号,对Flash进行读写。
- 将256kbyte的eFlash拆分成两块Flash(Flash0和Flash1),每一块Flash都是128kbyte,拆分之后可以通过片选及地址信号,选择性的读写擦除其中一个,有利于低功耗设计。
- 存在两个Flash,所以需要设计一个模块对于两块Flash进行控制,可以将这个控制Flash的模块单独设置一个Flash_ctrl模块。在SRAM控制器中,由于SRAMC的控制信号可以通过AHB信号转换为SRAM的控制信号,控制信号生成和转换的过程集成在AHB_sram_if中;这里Flash的控制信号相对比较复杂,所以单独设置Flash_ctrl进行Flash的控制。
1.2 Flash_ctrl信号分析

- Flash_ctrl接收AHB_slave_if模块发送过来的命令(cmd)和数据(cmd_payloads)。
cmd表示读写擦操作(read/write/prog/page erase/mass erase)。
cmd_payload表示于操作对应的信号,比如cmd是写操作,就要有写数据wdata,写到哪一页page_num,写的地址addr... - Flash_ctrl接收到AHB_slave_if发送的命令之后,生成具体的Flash控制信号发送给Flash0或者Flash1。发送的信号主要有xadr,yard,xe,ye,se,erase,prog,mas1.din等。
- Flash收到Flash_ctrl发送过来的控制信号之后,如果是读操作,Flash0或者Flash1会返回读数据(dout),Flash_ctrl接收到读数据之后,会进行汇总,通过一个mux将dout发送给AHB_slave_if,然后再作为hrdata返回给AHB总线。
1.3 读写操作控制
- 读操作,从前门的文档中可以知道,从Flash读取数据速度较快,大概需要24ns的时间,如果使用200M的时钟,时钟周期是5ns,读取Flash的数据需要5个cycle的时间。5个cycle时钟周期相对来说时间比较短,可以通过AHB总线,拉低hready_out(这里使用的是hready_ctrl)信号,延迟5个cycle,就可以将数据读出。
为了延迟5个cycle,Flash_ctrl模块需要返回一个hready_ctrl给AHB_slave_if,表示dout是不是有效的。读的时候,AHB发起请求之后需要5个cycle得到数据,AHB发起请求之后可以进行等待,需要将hready_ctrl拉低5个cycle之后再拉高。读的时候可能只需要几个cycle就可以读出数据。 - Flash_ctrl模块除了要返回dout之外,还需要返回一个标志操作结束的信号finish。

- 对于写操作和擦除操作,操作的时间较长。写的时间单位是微秒级的,擦除的时间单位是毫秒级的,假设对应于200M的时钟频率,时钟周期是5ns,那么写和擦除的操作都要耗费上千个周期。所以不能通过拉低hready_out的方式进行写和擦除,这样会大大降低AHB总线的效率。写和擦除往往是通过发起中断的方式进行操作。
- 如果写或这擦除操作完成之后,Flash_ctrl会发送finish信号给AHB_slave_if,AHB_slave_if接收到finish信号之后,会发送中断给中断控制器(CPU),CPU或者中断控制器之后,就可以根据中断响应程序进行响应。

1.4 读写操作详解
- 读取数据时间需要24ns,200M的时钟频率,5个cycle就可以完成读取数据。针对于读数据操作,如果Flash没有准备好读数据,可以通过拉低hready信号进行延长读数据的时间,但是延迟周期不能超过16个cycle。延迟周期越多会降低总线的利用率,因为hready拉低表示没有有效的数据传输。
对于读取操作(read access),利用AHB总线传输,解析地址,根据地址驱动Flash_ctrl,进行控制Flash。 - 写操作,Tnvs = 5us,200M时钟频率,需要1000个周期进行建立时间,所以写一笔数据耗费的时间非常的长。所以写操作和擦除操作不适合使用读操作的方式。写操作,使用中断的形式进行,配置AHB_slave_if中的一些寄存器,配置的内容主要有:配置写谁(main block or information block),配置写地址,配置写的区间,配置setup time和hold time。所以AHB_slave中存在配置中断的中断寄存器。
配置完成之后,AHB_slave_if发起一个enable信号或者start信号,写命令和数据通过cmd和cmd_payload给到Flash_ctrl,Flash_ctrl根据状态机(Flash_ctrl中的模块)按照时序图将数据写入Flash。写完之后,Flash_ctrl发送一个finish信号给到AHB_slave_if。AHB_slave_if拿到finish信号之后,可能进行额外的判断,比如判断是否开启了中断屏蔽,中断屏蔽开启,AHB_slave_if就不发出中断,如果中断屏蔽关闭,就发出中断。如果发出中断,CPU通过中断服务程序对中断响应,CPU进行下一步操作,此时中断是一直拉高的。如果要CPU需要写寄存器,将中断清除。
3、擦除操作和写操作的执行差不多,都需要进行配置寄存器,配置擦除的地址,页数等。
1.5 寄存器的配置
AHB_slave_if中需要实现一些寄存器
1、config寄存器,其中包括地址addr,setup时间和hold时间。
2、中断使能寄存器(int_en),将中断开关打开,finish来了之后需要中断打开,让中断能够发出。
3、状态寄存器(status),记录当前是哪个操作(写或者读)完成了。还需要设置一些寄存器,记录error状态,当前如果处于boot模式下,需要进行读写的保护,在boot期间,对于boot区间写擦的操作,就用寄存器将这个错误状态进行记录。后续如果发起中断给CPU,CPU会发现非法操作进行,进入中断服务程序进行排查。

1.6 Flash_ctrl中有一个状态机和计数器


2.eFlash架构设计文档





基于AHB_BUS的eFlash控制器的架构设计的更多相关文章
- 基于 Angularjs&Node.js 云编辑器架构设计及开发实践
基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...
- 微软&中科大提出新型自动神经架构设计方法NAO
近期,来自微软和中国科学技术大学的刘铁岩等人发表论文,介绍了一种新型自动神经架构设计方法 NAO,该方法由三个部分组成:编码器.预测器和解码器.实验证明,该方法所发现的架构在 CIFAR-10 上的图 ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- 基于Repository模式设计项目架构—你可以参考的项目架构设计
关于Repository模式,直接百度查就可以了,其来源是<企业应用架构模式>.我们新建一个Infrastructure文件夹,这里就是基础设施部分,EF Core的上下文类以及Repos ...
- 基于token的多平台身份认证架构设计
基于token的多平台身份认证架构设计 1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...
- GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台
部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...
- GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...
- 基于laravel4.2的相关架构设计
项目组不久前引进了laravel框架,本人参与了laravel的调研和项目架构设计.个人认为项目架构中基于laravel的有些设计还是比较实用和有借鉴性的,现将一些设计分享给大家,希望能和大家共同学习 ...
- 基于Hadoop的大数据平台实施记——整体架构设计[转]
http://blog.csdn.net/jacktan/article/details/9200979 大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底 ...
- 基于Hadoop的大数据平台实施记——整体架构设计
大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.好像一夜之间我们就从互联网时代跳跃进了大 ...
随机推荐
- java,类、实例化、构造方法、this关键字、方法重载
编写类的步骤: 1.定义类名 2.编写类的属性 3.编写类的方法 public 访问修饰符,表示在整个项目中都可以调用,也可以用其他词 使用class关键字来定义类,如下,定义一个Cat类 给了属性 ...
- HP LoadRunner 11.00安装+破解+汉化
里面包含多个破解码,最高支持6.5w个并发: https://blog.csdn.net/xianjie0318/article/details/78625980
- ASR项目实战-架构设计
一般而言,业务诉求作为架构设计的输入. 需求清单 对于语音识别产品而言,需满足的需求,举例如下: 功能需求 文件转写. 长文件转写,时长大于60秒,小于X小时,X可以指定为5. 短文件转写,时长小于6 ...
- vulnhub - lazySysAdmin - writeup
信息收集 可以看到目标开放了常见的22, 80, 139, 445, 3306这个6667的服务少见. root@kali tmp/lazySysAdmin » arp-scan -I eth1 -l ...
- Istio 为服务指定协议
1.背景 Istio 默认支持代理所有 TCP 流量.包括 HTTP.HTTPS.gRPC 以及原始 TCP 协议.但为了提供额外的能力,比如路由和丰富的指标,必须确定协议.协议可以被自动检测或者手动 ...
- Windows环境下为Android编译OpenCV4.3
Windows环境下为Android编译OpenCV4.3 踩了三四天的坑,今天终于顺利跑通了,原来是toolchain的问题,外网的教程大多都是用opencv source里的toolchain,会 ...
- .NET技术分享日活动-202202
2022年02月19日下午,个人组织举办了山东地区的第四次.NET技术分享日活动.主要包含.NET常用技术.低代码.大前端.大数据和工作流等五个技术领域. 本次技术分享日活动面向了山东地区广大的.NE ...
- 详解ZooKeeper在微服务注册中心的应用
本文分享自华为云社区<SpringCloud ZooKeeper 详解,以及与Go.Rust等非Java服务的集成>,作者: 张俭. ZooKeeper,是一个开源的分布式协调服务,不仅支 ...
- 华为云弹性云服务器ECS搭建FTP服务实践
摘要:在使用华为弹性云服务器ECS搭建FTP服务的时候,经常会遇到搭建完成后无法访问的问题.本篇通过演示windows IIS搭建FTP方法,讲解ftp主动模式.被动模式原理来说明无法访问的原因及解决 ...
- 一图看懂华为云CodeArts Link六大特性
本文分享自华为云社区<一图看懂华为云CodeArts Link六大特性,带你体验一站式跨平台数据互联>,作者:华为云PaaS服务小智 . 能够打破不同研发工具之间的壁垒,实现数据的无缝集成 ...