Giter VIP home page Giter VIP logo

mc-control's Introduction

Memory Controller Design Specification

1. Overview

1.1 Function Description

memory controller实现了对array read/write/refresh的控制,其接口完成了axi bus到array interface之间的转换。

1.2 Feature List

  • 支持array时序可配置
  • 支持array刷新周期可配置
  • 支持axi bus 跨行
  • array 工作频率为 $200MHz$

1.3 Block Diagram

1.4 Interface Description

signal name width direction description
global signal
clk 1 input system clk, 400MHz
rst_n 1 input system reset
axi bus
axi_awvalid input 1 axi aw channel valid
axi_awready output 1 axi aw channel ready
axi_awlen input 6 axi aw channel len
axi_awaddr input 20 axi aw channel address
axi_wvalid input 1 axi w channel valid
axi_wready output 1 axi w channel ready
axi_wlast input 1 axi w channel last
axi_wdata input 64 axi w channel data
axi_arvalid input 1 axi ar channel valid
axi_arready output 1 axi ar channel ready
axi_arlen input 6 axi ar channel len
axi_araddr input 20 axi ar channel address
axi_rvalid output 1 axi r channel valid
axi_rlast output 1 axi r channel last
axi_rdata output 64 axi r channel data
apb bus
apb_pclk input 1 apb clock
apb_prst_n input 1 apb reset
apb_psel input 1 apb select
apb_pwrite input 1 apb read/write indication
apb_penable input 1 apb enable
apb_paddr Input 16 apb addr
apb_pwdata input 32 apb write data
apb_pready output 1 apb ready
apb_prdata output 32 apb read data
array interface
array_banksel_n output 1 array select
array_raddr output 14 array row address
array_cas_wr output 1 array column address strobe for write
array_caddr_wr output 6 array column address for write
array_cas_rd output 1 array column address strobe for read
array_caddr_rd output 6 array column address for read
array_wdata_rdy output 1 array write data indication
array_wdata output 64 array write data
array_rdata_rdy input 1 array read data indication
array_rdata input 64 array read data

1.5 Timing

Write without cross row

Write with cross row

Read without cross row

Read with cross row

2. axi_slave

2.1 Function Description

本模块用于接受和处理AXI总线数据,将数据存储到fifo中并整合为frame输出给array controller模块。同时该模块也接收array controller模块发送的读数据,并将读数据发送到AXI总线上。

2.2. Feature List

  • 支持burst跨行

2.3 Interface Description

signal name width direction description
axi_slave interface
axi_awvalid input 1 axi aw channel valid
axi_awready output 1 axi aw channel ready
axi_awlen input 6 axi aw channel len
axi_awaddr input 20 axi aw channel address
axi_wvalid input 1 axi w channel valid
axi_wready output 1 axi w channel ready
axi_wlast input 1 axi w channel last
axi_wdata input 64 axi w channel data
axi_arvalid input 1 axi ar channel valid
axi_arready output 1 axi ar channel ready
axi_arlen input 6 axi ar channel len
axi_araddr input 20 axi ar channel address
axi_rvalid output 1 axi r channel valid
axi_rlast output 1 axi r channel last
axi_rdata output 64 axi r channel data
Internal frame
axi_frame_data output 87 frame data
axi_frame_valid output 1 handshake valid signal
axi_frame_ready input 1 handshake ready signal
array_rdata input 64 handshake read data
array_rvalid input 1 handshake read data valid signal
Configure interface
mc_work_en input 1 mc_en control
注:一个frame位宽为87bits, 组成如下:
index description
[86] start of frame(sof)
[85] end of frame(eof)
[84] wr_flag
[70:83] row_addr
[64:69] col_addr
[63:0] wdata

2.4 FSM Diagram

axi_slave模块通过状态机来实现读写状态的仲裁。从IDLE状态跳出,通过aw,ar通道fifo的空信号控制。Idle_ctrl_sig = {arfifo_empty,awfifo_empty}。写入读取轮次进行,由prio_flag信号控制。状态机图如下。

axi_slave 含有五个状态,具体描述如下:

  1. IDLE: 当ar,aw的fifo均为空时,IDLE状态保持。当ar,aw的fifo均不为空时,状态跳转收信号prio_flag控制。当prio_flag为高时,跳转WADDR状态,反之跳转到RADDR状态。当ar通道对应fifo为空时,且aw通道对应非空时,跳转WADDR状态,反之,跳转RADDR状态。

  2. WADDR: 在此状态,读取aw通道fifo数据,包含base address 和len。之后跳转到WDATA。

  3. WDATA: 在此状态,读取w通道fifo数据,整合成frame并发送。在此状态需要完成的任务有,通过counter确定当下数据为burst中的第几个数据;计算当下数据对应的地址;计算eof,sof;整合成frame发送。当一个burst发送结束,跳转到IDLE状态。

  4. RADDR: 在此状态,读取ar通道fifo数据,包含base address 和len。之后跳转到RADDR_SEND。

  5. RADDR_SEND:将读地址整合成frame,发送给array controller模块,burst发送结束后,等待接受读数据,接受完全部读数据后,跳转到IDLE.

2.5 Timing

write with no cross row (len = 4)

Write with cross row (len = 4)

Read with no cross row (len = 4)

Read with cross row

3. array_ctrl

3.1 Function Description

此模块接受axi_slave 的frame数据,实现memory读写,刷新操作。

3.2 Feature List

  • 支持array接口时序可配置
  • 支持刷新周期可配置
  • array 工作频率200MHz

3.3 Block Diagram

模块array_ctrl含有五个子模块。各子模块功能如下:

  • fsm_ctrl:实现状态跳转和frame的分发
  • array_wr_ctrl:输出写控制信号给array_if_sel模块。
  • array_rd_ctrl:输出读控制信号给array_if_sel模块。
  • array_rf_ctrl:输出刷新控制信号给array_if_sel模块。
  • array_if_sel:接收读写,刷新控制信号,并根据sel信号进行选择输出。

3.4 Interface Description

signal name direction width Description
global signal
clk input 1 input clk signal 400MHz
rstn input 1 reset signal negative
cm_en input 1 mc enable signal
axi_slave_interface
axi_frame_data input 87 axi frame data
axi_frame_valid input 1 axi frame valid
axi_frame_ready output 1 axi frame ready
array_rdata output 64 array read data to axi_slave
array_rvalid output 1 array read valid to axi_slave
memory array interface
array_banksel_n output 1 array bank select
array_raddr output 14 array row address
array_cas_wr output 1 array column address strobe for write
array_caddr_wr output 6 array column address for write
array_cas_rd output 1 array column address strobe for read
array_caddr_rd output 6 array column address for read
array_wdata_rdy output 1 array write data indication
array_wdata output 64 array write data
array_rdata_rdy input 1 array read data indication
array_rdata input 64 array read data
apb configure interface
mc_trc_cfg input 8 mc array interface tRC configure
mc_tras_cfg input 8 mc array interface tRAS configure
mc_trp_cfg input 8 mc array interface tRP configure
mc_trcd_cfg input 8 mc array interface tRCD configure
mc_twr_cfg input 8 mc array interface tWR configure
mc_trtp_cfg input 8 mc array interface tRTP configure
mc_rf_start_time_cfg input 28 mc array interface refresh start time configure
mc_rf_period_time_cfg input 28 mc array interface refresh duration configure

3.5 fsm_ctrl submodule

3.5.1 Function description*

实现了axi frame数据分发和状态控制。

3.5.2 Feature List

  • fifo 缓存frame数据

3.5.3 Interface Description

signal name direction width Description
global signal
clk input 1 input clk signal 400MHz
rstn input 1 reset signal negative
mc_en input 1 mc enable signal
mc_rf_start_time_cfg input 28 mc array interface refresh duration configure
mc_rf_period_time_cfg input 28 mc array interface refresh start time configure
axi_slave_interface
axi_frame_data input 87 axi frame data
axi_frame_valid input 1 axi frame valid
axi_frame_ready output 1 axi frame ready
array_rdata output 64 array read data to axi_slave
array_rvalid output 1 array read valid to axi_slave
write ctrl interface
axi_wframe_data input 87 axi wframe data
axi_wframe_valid input 1 axi wframe valid
axi_wframe_ready output 1 axi wframe ready
input 1 write_finish_sig
read ctrl interface
axi_rframe_data input 87 axi rframe data
axi_rframe_valid input 1 axi rframe valid
axi_rframe_ready output 1 axi rframe ready
read_finish_sig input 1 read_finish_sig
refresh interface
refresh_finish_sig input 1 refresh_finish_sig
refresh_start_sig output 87 refresh_start_sig

3.5.4FSM Diagram

本模块状态机含有五个状态。再IDLE状态下,刷新请求优先级最高。读操作请求(rd_req)和写操作请求(wr_req)取决于fifo中读取frame的读写标志。具体状态说明如下:

  • IDLE:在此状态时,刷新请求拥有最高优先级。rf_req 为高是,跳转REFRESH状态。如果刷新请求为低,则根据fifo中frame的读写只是,产生读写请求信号,分别跳转对应读写状态。
  • WRITE:在此状态,执行写操作,写操作进行时,如果刷新计数器达到刷新请求值,则rf_req_wait为高,在WRITE执行结束后,进入REFRESH状态,否则进入IDLE状态。
  • READ:在此状态,执行写操作,读操作进行时,如果刷新计数器达到刷新请求值,则rf_req_wait为高,在WRITE执行结束后,进入REFRESH状态,否则进入IDLE状态。
  • REFRESH:在此状态进行刷新操作,操作结束后,返回IDLE状态。

刷新时,时序图如下:

3.6 array_wr_ctrl submodule

3.6.1 Function Description

此模块根据apb时序配置,完成写操作

3.6.2 Feature List

  • array 时序接口可配置

3.6.3 Interface Description

signal name direction width Description
global signal
clk input 1 input clk signal 400MHz
rstn input 1 reset signal negative
fsm ctrl interface
axi_wframe_data input 87 axi wframe data
axi_wframe_valid input 1 axi wframe valid
axi_wframe_ready output 1 axi wframe ready
write_finish_sig input 1 write_finish_sig
array interface
frame_data input 64 frame data
array_banksel_n output 1 bank select (negative)
array_raddr output 8 row address
array_cas_wr output 1 write column address strobe
array_caddr_rd output 6 write column address
array_wdata_rdy output 1 write data inidcate
array_wdata input 64 write data
configure signal
tSRADDR input 8 tSRADDR counter maximum
tRCD input 3 tRCD counter maximum
tWR input 3 tWR counter maximum
tRP input 3 tRP counter maximum

3.6.4 FSM Diagram

本模块含有七个状态,具体说明如下

  • IDLE:当接受到sof和valid信号时,跳转到SRADDR状态
  • SRADDR:此状态结束后,banksel信号拉低。
  • RCD:rol-col-delay状态。当计时器达到mc_trcd_cfg-1时,判断是否为eof,如果eof为高,跳入WLAST状态,否则跳入WRITE_DATA_SEND状态
  • WRITE_DATA_SEND:在此状态,发送列地址和对应写数据。当eof和ready信号为高时,此时应该发送最后一个数据,跳转到WLAST状态。
  • WLAST: 在此状态,发送最后一个数据,然后跳转到WR 状态。
  • WR:判断是否满足tWR和tRAS的最小保持时间。如果满足,跳到RP状态。
  • RP:当tRP_cnt达到mc_trp_cfg-1时,跳回IDLE状态。

3.6.5 Timing

One data frame

Continuous Frame

Valid Discontinuous

Cross Row

3.7array_rd_ctrl submodule

3.7.1 Function Description

此模块根据apb时序配置,完成读操作

3.7.2 Feature List

  • array 时序接口可配置

3.7.3 Interface Description

signal name direction width Description
global signal
clk input 1 input clk signal 400MHz
rstn input 1 reset signal negative
fsm ctrl interface
axi_wframe_data input 87 axi wframe data
axi_wframe_valid input 1 axi wframe valid
axi_wframe_ready output 1 axi wframe ready
read_finish_sig input 1 read_finish_sig
read_data output 64
array interface
array_banksel_n output 1 bank select (negative)
array_raddr output 8 row address
array_cas_rd output 1 read column address strobe
array_caddr_rd output 6 read column address
array_rdata_rdy output 1 read data inidcate
rdata input 64 read data
configure signal
mc_trc_cfg input 8 mc array interface tRC configure
mc_tras_cfg input 8 mc array interface tRAS configure
mc_trp_cfg input 8 mc array interface tRP configure
mc_trcd_cfg input 8 mc array interface tRCD configure
mc_twr_cfg input 8 mc array interface tWR configure
mc_trtp_cfg input 8 mc array interface tRTP configure

3.1.4 FSM Diagram

本模块含有七个状态,具体说明如下

  1. IDLE:当接受到sof和valid信号时,跳转到SRADDR状态
  2. SRADDR:此状态结束后,banksel信号拉低。
  3. RCD:rol-col-delay状态。当计时器达到mc_trcd_cfg-1时,判断是否为eof,如果eof为高,跳入WLAST状态,否则跳入WRITE_DATA_SEND状态
  4. READ_DATA_SEND:在此状态,发送列地址和对应写数据。当eof和ready信号为高时,此时应该发送最后一个数据,跳转到WLAST状态。
  5. RLAST: 在此状态,发送最后一个数据,然后跳转到WR 状态。
  6. RTP:判断是否满足tWR和tRAS的最小保持时间。如果满足,跳到RP状态。
  7. RP:当tRP_cnt达到mc_trp_cfg-1时,跳回IDLE状态。

3.1.5 Timing

No cross row

4 data frame with cross row

1 data frame

3.8refresh_task submodule

3.8.1 Function Description

此模块根据apb时序配置,完成刷新操作

3.8.2 Feature List

  • 根据apb的时序配置,完成刷新操作

3.8.3 Interface Description

signal name direction width Description
refresh task      
clk input 1 system clk 400MHz
rstn input 1 system reset
mc_rf_start_time_cfg input 28 refresh start time
mc_rf_period_time_cfg input 28 refresh period time
mc_trc_cfg input 8 trc config
mc_trp_cfg input 8 trp config
rf_start input 1 start signal
rf_finish input 1 refresh finish signal
array_banksel_n output 1 assay select signal
array_raddr output 14 array row address

3.8.4 FSM Diagram

此模块状态机含有三个状态。

  • IDLE: 当收到刷新开始信号时,跳入UP_ADDR状态.
  • UP_ADDR: 无条件跳转到REFRESH状态
  • REFRESH:当收到刷新结束信号跳回idle。

3.8.5 Timing

  1. mc_apb_cfg

mc apb 寄存器配置如下:

offset address register type field register signal name default
0x00 mc_work_ctrl [0] mc_en 1'b0
[31:1] reserved 31'h0
0x04 mc_timing_ctrl0 [7:0] mc_trc_cfg 8'd0
[15:8] mc_tras_cfg 8'd0
[23:16] mc_trp_cfg 8'd0
[31:24] mc_trcd_cfg 8'd0
0x08 mc_timing_ctrl1 [7:0] mc_twr_cfg 8'd0
[15:8] mc_trtp_cfg 8'd0
[31:16] reserved 8'd0
0x0C mc_timing_ctrl2 [27:0] mc_rf_start_time_cfg 28'h0000000
[31:28] reserved 4'd0
0x10 mc_timing_ctrl3 [27:0] mc_rf_period_time_cfg 28'h16E3600
[31:28] reserved 4'd0

mc-control's People

Contributors

taleman1997 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.