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. SpringBoot 这么实现动态数据源切换,就很丝滑!

    大家好,我是小富- 简介 项目开发中经常会遇到多数据源同时使用的场景,比如冷热数据的查询等情况,我们可以使用类似现成的工具包来解决问题,但在多数据源的使用中通常伴随着定制化的业务,所以一般的公司还是会 ...

  2. 【C#】【System.Linq】一些便捷的数据处理方法(Range、Select)

    因为用习惯了Python中一些便捷的方法,随即查询C#中有没有类似的. 一.Range()方法 在Python中,range(Start,End,Step)可以直接生成一个可迭代对象,便用于需要循环多 ...

  3. Python——第一章:注释、变量、常量

    python中的注释有2种: 1.单行注释 单行注释用# #这是一个单行注释 快捷键用Ctrl+/全选多个内容可以多行快速注释,也可以快速去掉注释符# 比如快速将全选的所有行注释掉--加# 2.多行注 ...

  4. 【推荐】Helix 常用命令与设置

    目录 Helix常用命令 配置 编辑器 [editor]字段 [editor.statusline] 字段 [editor.lsp] 字段 [editor.cursor-shape] 字段 [edit ...

  5. 开心自走棋:使用 Laf 云开发支撑数百万玩家

    先介绍一下开心自走棋 开心自走棋是一款剑与魔法的烧脑自走棋游戏.以著名的魔幻世界观为蓝本,采用了轻松可爱的画面风格,精致细腻的动画和特效来还原魔兽之战. 现在市面上自走棋游戏多是 PvP 玩法为主,而 ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题

    文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题 三.对于一个按升序排列的包含 n 个元素的有序数组 A 来说,HEAPSORT 的时间复杂度是多少?如果 A 是降序 ...

  7. C#数据结构与算法系列(十六):时间复杂度(上)

    1.时间频度 介绍: 一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,他花费时间越多.一个算法中的语句执行次数称为语句频度或时间频度 举例说明: 比如计算1-100所有数字 ...

  8. 地图服务器GeoServer的安装与配置

    目录 1.安装配置Java 2.安装配置Tomcat 3.安装配置GeoServer GeoServer提供了多种安装配置方式,但是本质上GeoServer是一个基于Java Web的项目,因此我们理 ...

  9. Python中的cls语法

      在Python中,cls 是一个用于指代类本身的约定性名称,通常用作类方法(class method)中的第一个参数.cls 类似于 self,它是对类的引用,而不是对实例的引用.cls 通常在类 ...

  10. 为AR&VR黑科技:以“自由视角”360度尽展舞台唯美

    摘要:看华为的黑科技,如何用"自由视角"让观众感受舞台"风暴"的魅力所在. "风暴"降临 2021年1月9日晚上,我坐在电视机前,等待湖南卫 ...