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 [

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





