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 读写操作详解

  1. 读取数据时间需要24ns,200M的时钟频率,5个cycle就可以完成读取数据。针对于读数据操作,如果Flash没有准备好读数据,可以通过拉低hready信号进行延长读数据的时间,但是延迟周期不能超过16个cycle。延迟周期越多会降低总线的利用率,因为hready拉低表示没有有效的数据传输。

    对于读取操作(read access),利用AHB总线传输,解析地址,根据地址驱动Flash_ctrl,进行控制Flash。
  2. 写操作,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控制器的架构设计的更多相关文章

  1. 基于 Angularjs&Node.js 云编辑器架构设计及开发实践

    基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...

  2. 微软&中科大提出新型自动神经架构设计方法NAO

    近期,来自微软和中国科学技术大学的刘铁岩等人发表论文,介绍了一种新型自动神经架构设计方法 NAO,该方法由三个部分组成:编码器.预测器和解码器.实验证明,该方法所发现的架构在 CIFAR-10 上的图 ...

  3. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  4. 基于Repository模式设计项目架构—你可以参考的项目架构设计

    关于Repository模式,直接百度查就可以了,其来源是<企业应用架构模式>.我们新建一个Infrastructure文件夹,这里就是基础设施部分,EF Core的上下文类以及Repos ...

  5. 基于token的多平台身份认证架构设计

    基于token的多平台身份认证架构设计 1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...

  6. GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台

    部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...

  7. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  8. 基于laravel4.2的相关架构设计

    项目组不久前引进了laravel框架,本人参与了laravel的调研和项目架构设计.个人认为项目架构中基于laravel的有些设计还是比较实用和有借鉴性的,现将一些设计分享给大家,希望能和大家共同学习 ...

  9. 基于Hadoop的大数据平台实施记——整体架构设计[转]

    http://blog.csdn.net/jacktan/article/details/9200979 大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底 ...

  10. 基于Hadoop的大数据平台实施记——整体架构设计

    大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.好像一夜之间我们就从互联网时代跳跃进了大 ...

随机推荐

  1. 【scikit-learn基础】--『监督学习』之 岭回归

    岭回归(Ridge Regression)是一种用于处理共线性数据的线性回归改进方法.和上一篇用基于最小二乘法的线性回归相比,它通过放弃最小二乘的无偏性,以损失部分信息.降低精度为代价来获得更实际和可 ...

  2. DBeaver连接国产数据库OceanBase,以及Python连接,解决ModuleNotFoundError: No module named '_jpype'

    DBeaver连接OceanBase 参考:https://www.modb.pro/db/365929 用户名的格式为: 数据库用户名@租户名#集群名 Python连接OceanBase 参考:ht ...

  3. Android 蓝牙使用

    原文地址: Android 蓝牙使用 - Stars-One的杂货小窝 公司项目需求需要实现监听蓝牙耳机连接,且要获取蓝牙耳机电量功能,翻了不少官方文档,记录下技术调研代码 注:本文没有研究蓝牙配对功 ...

  4. Baby_Step_Gaint_Step(BSGS) 算法

    \(BSGS\) 算法,又称 "北(\(B\))上(\(S\))广(\(G\))深(\(S\))" 算法,"拔山盖世"算法,可以在 \(O(\sqrt{n})\ ...

  5. String 类和 STL (Standard Template Library)

    目录 一. string 类 1. 构造字符串 2. string类输入 3. 使用字符串 4. 其他string类方法 5. 字符串种类 一. string 类 很多应用程序都需要处理字符串.C语言 ...

  6. spring-mvc 系列:拦截器和异常处理器(HandlerInterceptor、HandlerExceptionResolver)

    目录 一.拦截器的配置 二.拦截器的三个抽象方法 三.多个拦截器的执行顺序 四.基于配置的异常处理器 五.基于注解的异常处理器 一.拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 ...

  7. AOC萌新探索:搭建和体验在线AOC环境

    摘要:AOC是一个做网络设备自动化运维以及三方设备纳管的一个能力平台. 本文分享自华为云社区<AOC萌新探索之旅第一期--在线AOC环境初体验>,作者:oysterzz. 接触AOC没多久 ...

  8. 云图说 | 华为云医疗智能体EIHealth,AI赋能基因组研究

    摘要: 华为云医疗智能体面为基因组研究,提供高性能.高可靠性.高性价比的基因测序计算.存储和AI能力. 本文分享自华为云社区<​​​​​​​​​​​​​​[云图说]第230期 医疗智能体:AI赋 ...

  9. 为啥JS/TS里都会有"use strict"

    摘要:在日常JS/TS项目开发过程中,经常会在文件开头看到"use strcit"字样,这里的"使用严格"是什么意思? 本文分享自华为云社区<JS/TS里 ...

  10. 第三方测评:GaussDB(for Redis)稳定性与扩容表现

    摘要:本文将通过采用Redis Labs推出的多线程压测工具memtier_benchmark对比测试下GaussDB(for Redis) 和原生Redis的特性差异 本文分享自华为云社区<墨 ...