基于AHB_BUS SRAM控制器的设计-01

基于AHB Bus SRAM控制器的设计

1.课程目标

  • 接到一个需求要设计SRAM或者I-cache等,需要问后端要一个Memory
  • Memory Compiler是由后端工程师完成的,Memory Compiler类似于DesignWare进行配置(输入参数,输出需要的SRAM)
  • 文档体系非常重要,需求文档\架构文档\微架构文档\Design Spec

2.AHB-SoC芯片架构图


  • CPU负责SoC的调度,CPU赋予SoC可编程的特点,CPU是执行程序的(程序员)
  • DW IP(DesignWare IP)是非常通用的IP(输入参数,可以得到相应的IP),功能简单,UART,GPIO,I2C.....可能是购买IP送的
  • My IP就是自研IP,Ext_SRAM controller逻辑复杂一些
  • PFlash是非易失的,SRAM是易失的
  • Soft IP提供的是RTL代码,需要自己进行综合,然后进行后端设计
  • Hard IP固核
  • IO MUX就是进行引脚的复用
  • Mem Bist是后端的内容,进行内建自测试
  • APB总线上只有一个master就是Bridge,其他模块全部都是slave
  • System Controller也是slave,其中有一些寄存器,需要控制时钟开启和关断需要slave接口
  • CPU是一个master
  • DMA既是Master又是slave,DMA需要有两个master接口,一个用来读,一个用来写;DMA需要有slave接口,CPU通过slave接口配置其中的寄存器
  • SD Host需要使用slave接口进行配置,知道当前工作在哪种工作模式下;需要master,如果从外部数据暂时存储到FiFo中,通过SD Host将FiFo中的数据,存储到内部的SRAM中
  • MemBist模块进行内建子测试,会产生测试信号进行测试
  • Boot:上电之后,系统有些组件需要进行配置(初始化)才能使用,这个过程就是boot
  • 中断程序:module发送中断给CPU,CPU通过中断处理程序处理中断

3.各个功能模块的地址空间

4.AHB-SoC芯片架构图

4.1 PAD

4.2 Power & Pin

4.3 Layout

  • 周边类似砖块的是固核,摆放位置影响时序;memory通常摆在四周

4.4 Package

5.AHB-SRAM控制器的系统设计需求

  • 需求(市场\算法\产品)-->架构(架构师)-->拆解module
  • SRAM作为系统的缓存,CPU的I-cache(接口)和D-cache需要通过总线访问存储体,比如需要通过总线访问指令的存储体,所以在SoC中需要有一个地方存储代码和运算的数据,数据量少,可以存储在寄存器中,如果数据量多可以存储在memory中
  • SRAM是由Memory Controller生成的,不需要由自己完成,我们需要完成的是SRAM控制器,控制SRAM的读写
  • SRAM作为AHB Slave的形式存在

5.1 特性

  • CPU中的一些load&store,就是数据的加载和存储,有三种形式byte,halfword,word
  • SRAM单周期读写,体现在总线上,AHB有延迟访问的特性,SRAM在T0时候读取SRAM,在T1的时候就将数据返回,这样总线的利用效率高,缺点是系统的时序不太好
  • 低功耗设计,经常使用clock gating,power gating,在开启寄存器的时候加使能信号控制
  • SRAM的低功耗主要考虑:sram memory的读写时的功耗与standby状态时的功耗,当不使用sram时,使其处于standby

5.2 思路整理

  • 首先是一个AHB slave-->需要AHB_Slave_Interface

  • 需要SRAM,将SRAM划分为很多个bank,根据架构中的SRAM是64kbyte的,所以,每个bank的width = 8bit,depth = 16k

  • 每个memory在一个时钟内,只需要进行读或写操作即可

  • 将memory的初步规格反馈给后端,如果后端人员返回信息延迟交大或者depth太大,生成不了;或许会将每个bank进行拆分,深度变为8k

  • 现在可以将AHB的的读写时序转换为SRAM的控制信号,可以单独设置一个模块,可以将AHB的配置信息转换为对于memory的控制信息

  • 可以将reg2ctrl集成到AHB_Slave_Interface中

  • AHB_Slave_Interface中也有一些寄存器,需要进行配置一些状态,通过接口模块与AHB总线进行交互

Note:memory并不是划分的越小越好,memory划分的越小,面效比越差,实现总的SRAM占的面积越大

  • 寄存总线控制信号和地址信号,ahb的信号需要进行打拍处理
  • sram control signals generator -- 产生sram控制信号
  • sram_data_out--sram中输出数据的集合(8片mem)
  • 8k是深度,8是宽度
    SRAM协议相关的接口

5.3 SRAM存储体生成

  • Memory compiler -- 输入规格(深度\宽度\主频等参数),生成一个符号的模型

5.4 AHB Slave接口

  • split信号在这里是不需要使用的,因为是单周期的读写

5.6 AHB 时序接口

5.7 SRAM接口

*sram接口时序类比于FiFo,sram是同步电路,读写都是通过时钟驱动的

  • tckh -- 高电平占时间;tckl -- 低电平占时间
  • CEN -- memory开启信号(只有在读写的时候开启),低电平有效的信号是以n为结尾的
  • WEN -- 指示读写信号(低电平为写操作,高电平为读操作)
  • A[j] -- 地址(读写数据的地址),与memory的深度有关,8k地址是13bit
  • D[i] -- Data_in,8bit
  • Q[i] -- 数据输出(和寄存器的命名很像)
    如何将2beat信号转化为1beat逻辑?

6.设计文档体系

  • 架构设计文档
    描述架构,表述模块的初级划分,尽量能够划分到二级模块或者三级模块,顶层模块可以看作是一级模块,其中直接集成的模块为二级模块

  • 微架构设计文档
    包含所有module的划分,而且要和RTL代码中的模块划分一致;一般根据微架构设计文档进行RTL Coding;
  • 集成文档
    集成时的接口

6.1 架构设计文档

  • 功能列表
    从需求的基础上,在硬件的基础上进行硬件的扩展,保证功能列表比较全
  • 软硬件划分
    有的模块在不同的模式下需要使用软件进行寄存器配置,配置寄存器
    在进行一些IP设计的时候,IP需要进行不同模式下的工作,就需要配置一些寄存器,需要配置哪些寄存器,地址范围是多少,配置顺序是怎样的,就需要通过软件进行配置;CPU通过I-cache读取指令配置寄存器
  • 软硬件协同工作
    明确哪些工作是软件做的,哪些工作是硬件做的
  • 硬件模块功能描述

6.2 SRAM控制器功能列表

  • CPU的load和store指令,支持byte,word,halfword的操作
  • 支持单周期的读写(如果读写的access time超过一个周期就不能支持单周期读写),前提已经确认过读访问时间和写访问时间
  • 支持低功耗工作,本身是做设计的基本要求,将存储体划分为多块bank

6.3 SRAM控制器软硬件模块划分

无,AHB的读写请求可以直接转换为SRAM的读写访问,一次就可以完成指令,不需要与软件进行配合

6.4 SRAM控制器的软硬件协同工作描述

6.5 SRAM控制器模块功能描述(硬件模块)


  • bist是不需要进行体现在模块划分框图中的
  • 需要将大概的信号连起来
  • bist和dft:芯片中会有一些memory和standcell,如果没有dft和bist接口,流片回来如何确保芯片的功能是正确的?直接通过function进行测试,测试范围不够完全(流片回来之后,功能可能还没有开发完成,function模式进行测试,测出来的覆盖率是不好的,有一定的潜在风险),需要通过dft进行测试筛选,dft可以测试core中的器件是不是好的,dft可以将寄存器进行连接(可以使用mux),输入激励之后,可以对寄存器之间的组合逻辑进行测试
  • bist是内建自测试,在硬件内部产生激励和结果,进行测试
  • bist适合对于standcell进行测试,memory通常都是大块固核,固核也有时钟驱动,但是读写时序和扫描链的差异比较大,如果想要memory可测,可以将memory接到顶层,灌激励,速率较低
  • bist测试针对与mem测试,dft针对于standcell或者组合逻辑和时序逻辑(器件)进行测试
  • 在芯片内部集成硬件,这个硬件可以输出激励给memory,还可以从memory接收输入并进行比较结果是不是正确



Bist测试(built in self test)

	function模式下,SRAM正常被总线访问
		ADDR
		CEN -- 片选使能
		WEN -- 写使能
		OEN -- 输出使能
		wdata -- 写数据
	bist模式下,bist模块发出信号对SRAM进行访问
		ADDR
		CEN -- 片选使能
		WEN -- 写使能
		OEN -- 输出使能
		wdata -- 写数据
		
	function模式下的信号和bist模式下的信号进行mux
	在bist_test信号的使能下输出给SRAM
	
	SRAM会有输出,这个输出会给到function的rdata和bist的rdata
	bist模块接收到rdata之后,会将rdata进行比对,比对完成之后会输出
	比对结果,bist_fail和bist_done

	bist模块也是由一堆组合逻辑和时序逻辑组成的,这些组合逻辑也需要进行dft测试
	bist模块产生的信号(输入和输出)都是要和SRAM进行打交道的
	在dft模式下,SRAM是不会正确的进行开启和关闭的,SRAM开启需要CEN,WEN,OEN信号的配合,在dft模式下,这些信号根据覆盖率进行驱动,信号在SRAM中是走不通的
	在dft模式下,走跳过SRAM的路径,在SRAM周边做一些逻辑,比如使用异或门,在输入的mux信号做一个旁路,经过一个打拍处理(避免出现组合逻辑环),然后输出在dft-test信号下输出bypass路径的输出
  • 插入寄存器,避免组合逻辑环(存在一条路径,不经过任何时序逻辑,从输入到输出再到输入),插入寄存器可以打断组合逻辑环
  • 有组合逻辑环在进行综合的时候会失败

6.6 附

  • sram_clk可以看做是hclk向后延迟50%占空比(半个时钟周期)
  • 对于写数据操作,将AHB总线的address phaze打一拍,将address phaze和data phaze进行对齐,对齐之后,可以拿到写使能,写数据和地址,进行写操作
  • 对于读数据操作,将AHB总线的address phaze打一拍,将address phaze和data phaze进行对齐,对齐之后,进行单周期操作,在当前周期就可以得到读数据
  • 利用AHB中线的数据打拍操作和sram_clk是hclk取反,进行单周期的操作

7.微架构设计文档

  1. 功能框图
  2. 各模块详细描述
  • 模块框图
  • 信号描述
  • 模块功能定义

7.1 SRAM控制器架构框图

  • 列出信号线的位宽
  • AHB控制信号转换为SRAM控制信号,如果信号转换比较复杂可以单独设置模块
  • SRAM输出信号
  • 子模块可以细化架构图
  • bank0(4个mem),bank1(4mem),进行低功耗设计和降低深度

7.2 SRAM控制器各个模块详细描述



信号描述(不同公司有不同的命名规范)
1. AHB相关的信号



  • 信号描述可以按照模块相关性进行描述,也可以按照输入输出方向进行描述
  • 指明地址位宽,SRAM地址位宽,位宽与深度有关,8k寻址使用13bit;深度为8k就表示要有8k个地址,使用13位二进制进行表示
  • 在描述AHB_Slave_Interface中,SRAM输出是AHB_Slave_Interface输入
  • sram_w_en--读写信号
  • sram_o_en--这个信号拉高,才能进行输出
  • bank0_csn\bank1_csn--每个bank有四个memory,所以是4bit位宽,选择bank0或bank1中的memory
  • sram_addr_out--总线发送到sram中的地址信号,8k--13bit,广播到8个mem中,每个mem接收到的地址都是一样的
  • sram_wdata--写sram的数据信号,广播到bank0和bank1,根据选择bank0和bank1写入选中的bank0或者bank1

2. SRAM相关信号


  • SRAM接收AHB_Slave_Interface的输出
  • bist_test和dft_test和顶层模块相连
  • 输出信号有bist_fail,bist_done,sram_q0-sram_q7

3. sram bist接口

  • 包含sram实体和bist产生逻辑

4. bist module

  • 产生bist逻辑,bist本身是如何产生激励的逻辑

5. 顶层信号列表

  • AHB输入输出
  • dft和bist相关的输入和输出

7.3 描述微架构图

  • AHB时序的处理
  • 如何将AHB信号转换为SRAM信号
  • 如何生成片选信号
posted @ 2023-03-10 02:24  Icer_Newer  阅读(1008)  评论(0编辑  收藏  举报