基于AHB总线的sram控制器设计

本文详细介绍了AHB-SRAMC的设计原理和实现过程,包括SRAM控制器如何实现SRAM存储器与AHB总线的数据信息交换,支持8位、16位和32位的SRAM数据读写操作,以及SRAM单周期读写等功能。文章还深入探讨了AHB总线传输模式与SRAM不匹配的问题解决方案,以及Verilog语言的具体实现细节。

AHB-SRAMC介绍

SRAM在整个系统中作为缓存,SRAM控制器实现SRAM存储器与AHB总线的数据信息交换,其一端连接AHB总线,另一端连接SRAM(8k*8两个bank),将AHB总线上的读写操作转换成标准的SRAM读写操作(将控制信号和地址信号及数据信号进行转化,并将其发送给相应的SRAM存储器,进行实际的数据存取)。
在这里插入图片描述
AHB-SRAMC设计规格

  • 支持8位、16位和32位的SRAM数据读写操作;
  • 支持SRAM单周期读写(直接影响Soc性能);
  • 支持在多块SRAM组成的存储器中,根据不同地址系统选择一块或者多块SRAM。未被选中的SRAM则处于 low power standby状态。(低功耗)

主要注意2个问题:

  • AHB总线传输,数据位宽有 8/16/32的传输模式,而sram不一定支持。这里采用4个sram来实现,每块sram对应一个byte。
  • AHB总线时序和sram时序的转化。AHB总线数据传输具有地址周期和数据周期,AHB的地址和控制信号发送完毕后,下一个周期才发送数据,而sram的写时序是同时输入地址和数据,所以这里对AHB的地址和控制信号做打拍处理。

具体模块设计

sramc_top是顶层模块作为SRAM的控制器,包括ahb_sram_if和sram_core 两个模块。其中ahb_sram_if 连接sram控制器到AHB总线并且生成SRAM的控制信号(SRAM的地址,读写信号,片选信号等);sram_core包含了8个sram并作为sram的顶层,并包含了DFT和BIST部分。

Top: sramc_top:作为顶层模块,连接ahb_sram_if和sram_core模块。
在这里插入图片描述

信号描述:

Signal I/O width source Descriptions
hclk input 1 Clock source Bus clock
sram_clk input 1 Clock source sram clock
hrestn input 1 Reset controller Reset
hsel input 1 Decoder Slave select AHB control
htranst input [1:0] Master Transfer type:NONSEQ, SEQ,IDLE,BUSY
hwrite input 1 Master Transfer direction
hsize input [2:0] Master Transfer size
hburst input [2:0] Master Burst type
haddr input [31:0] Master Address bus
hwdata input [31:0] Master Write data bus
hready output 1 Slave Transfer done
hresp output 1 Slave Transfer response(status)
hrdata output [31:0] Slave Read data bus

ahb_slave_if

ahb_slave_if模块是连接AHB总线和sram的接口模块,将AHB总线的控制信号、地址信号以及数据信号进行转化,并将其发送给相应的SRAM存储器。

信号描述

Signal I/O Width Source Descriptions
hclk input 1 Clock source Bus clock
hrestn input 1 Reset controller Reset
hsel input 1 Decoder Slave
htranst input [1:0] Master Transfer type:NONSEQ, SEQ, IDLE,BUSY
hwrite input 1 Master Transfer direction:1-write 0-read
hsize input [2:0] Master Transfer size: byte (8-bit), halfword (16-bit) or word (32-bit). max :1024bit
hburst input [2:0] Master Burst type:SIGNAL,INCR1/4/8/16,WAPR4/8/16
haddr inpu [31:0] Master Address bus
hwdata input [31:0] Master Write data bus
sram_q0-q7 input [7:0] sram sram output data
hready output 1 Slave Transfer done
hresp output [1:0] Slave Transfer response(status): OKAY ,ERROR,RETRY ,SPLIT
hrdata output [31:0] Slave Read data bus
sram_w_en output 1 sram write enable :write:0;read:1
sram_addr_out output [12:0] sram address
sram_wdata output [31:0] sram write data
bank0_csn output [3:0] sram bank0 select
bank1_csn output [3:0] sram bank1 select

Verilog实现

module ahb_slave_if(

  //input signals
  input			hclk,
  input			hresetn,
  input			hsel,
  input			hwrite,
  input			hready,
  input	[2:0]	hsize,
  input [1:0]	htrans,
  input [2:0]  	hburst,   // hard code -> parameter
  input [31:0] 	hwdata,
  input [31:0] 	haddr,
  
  //output signals
  output		  	hready_resp,
  output [1:0]	hresp,
  output [31:0]	hrdata,
  
  //sram output
  input [7:0]	 sram_q0, // 8bits
  input [7:0]	 sram_q1,
  input [7:0]	 sram_q2,
  input [7:0]	 sram_q3,
  input [7:0]	 sram_q4,
  input [7:0]	 sram_q5,
  input [7:0]	 sram_q6,
  input [7:0]	 sram_q7,
  
  //sram control signal
  output		sram_w_en,      // 0:write, 1:read
  output [12:0]	sram_addr_out,
  output [31:0] sram_wdata,     //写sram数据
  output [3:0]	bank0_csn,      //四字节可以单独写入
  output [3:0]	bank1_csn
  );

  //-------------------------------------------------------
  //internal registers used for temp the input ahb signals
  //-------------------------------------------------------
  //temperate all the AHB input signals
  reg        hwrite_r;
  reg [2:0]  hsize_r ;    
  reg [2:0]  hburst_r;
  reg [
评论 35
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值