7/31/2015

DRAM-2 Memory의 성능향상 방법 Bank Interleaving 과 Burst Mode 및 DLL

1. Memory 성능 향상 방법  

Bank Interleaving 찾다가 아래의 사이트를 발견하고 이를 정리한다.
메모리 대역폭을 높이는 방법 중 Bank Interleaving 만 잘 모르것 같다.

  1. 메모리의 버스 폭(width)를 늘리는 방법.           ( 이미 정해져 있을 거라고 본다)
  2. 메모리의 operating_clock을 높이는 방법          ( 한계가 있으며, DDR의 Chip 확인)
  3. 메모리에 interleaving을 적용하여 대역폭을 높이는 방법.

Interleave는 일반적으로 저장장소를 몇개로 나누어 이를 동시에 접근하도록 하는 것이다.

 http://blog.naver.com/signal97/197538037

1.1. Memory Data Bus Bandwidth 조절 

가장쉬운 방법이며, 사실 회로도를 봐도 성능이 더 나을 것이라는 것을 쉽게 파악이 가능하다.
하지만 주의사항이 있다. 왜냐하면 본인의 SOC가 정확히 어디까지 Bandwidth 까지 지원이 되는지를 정확히 파악을 하고 사용해야 하기때문이다.

우선 기본적인 SOC의 경우 외부 32Bit RAM Data Bus 아래와 같이 지원을 한다면, 1번이 가장 좋을 것이다.
TI의 경우 1번을 미지원하는 저렴한 SoC를 보면 외부는 32bit이지만, 내부 Memory Interface는 16bit를 사용하기 때문에 별소용이 없다.
그리고, 더불어 DRAM의 사용으로 인한 Power 소비와 가격 문제 및 부피 등을 고려해야 할때가 있으므로, SoC Memory Interface부분을 잘보자.


  1. 8bit DataBus DRAM  x 4 
  2. 16bit DataBus DRAM x 2
  3. 32bit DataBus DRAM x 1 
  4. 16bit DataBus DRAM x 1  (TI는 지원)

상위에서 설명한 DLL을 Clock을 Overclock을 해서 사용하는 방법인데, 별로 권장할 사항은 아닌 것 같다.

1.2. Bank Interleaving로 성능향상 

최근에 알게된 정보이며, 가장 관심을 가지고 있는 기능이다.

  • DRAM의 기본동작  
DRAM은 Physical Address를 사용하지 않기 때문에 처음 Bank 단위로 선택하고 CAS 와  RAS를 사용한다.
예를 들면, 0x11001100 Bank 선택과 함께 Column Address 와 Row Address Read/Write Command와 Refresh Time 으로 동작한다.
그래서 SoC는 이를 Physical Address를 DRAM Address로 변경하는 작업이 필요하다.
(SRAM에 Refresh Time이 필요없다)


  • Bank Interleaving 의 기본이해 
1개의 DRAM 안에는 8개 정도의 Bank가 있고, 이는 DRAM에 따라 다를 수 있으니 확인하자.
Embedded에서는 1~4개 정도의 DRAM을 주로 사용하며,  각각의 Bank 수를 따지면 상당수의 Bank가 존재한다,
이 Bank들을 각각 개별로 접근하고 지속적으로 순차적으로 읽고 쓴다면 성능이 향상이 된다는 개념이 바로 Bank Interleaving 이다.
물론 여기에도 한계는 존재하며, 그 이상의 Interleave는 필요가 없을 것이다.


  • Bank Interleaving의 동작 및 사용방법 
일반적으로 Physical 주소를 접근한다고 하면 동일한 1개의 Bank를 선택하고 순차적으로 저장하겠지만, Bank interleaving을 사용하면,
SoC는 CS(Chip Select)선택이 된 후 , 각 개별 Bank를 선택하여 Read/Write를 진행을 한다.
한마디로 데이타를 분할하고 개별 Bank에 빠르게 거의동시에 접근이 가능하는 것이다. 
이는 Memory Controller에서 설정을 변경으로 순차적으로, 각 Bank를 이용한다면 아래와 같이 1개의 DRAM에서 약간의 성능의 향상 볼수 있겠지만, 많은 성능 향상은 기대하기 힘들다.
DRAM의 Latency( Precharge time 등)을 줄이기 용도일 뿐 , Bank Interleaving 이용을 해도 많은 성능향상은 기대하기가 힘들다.

왜냐하면, DRAM의 Bank의 Latency(즉 precharge Time 등) 과 Bank Interleaving의 갯수는 상충관계에 있기 때문에 이는 정해놓고 이용하는 것이 옳을 것이다.

  https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EC%9D%B8%ED%84%B0%EB%A6%AC%EB%B9%99

  • Bank Interleaving 개념 
이글을 읽어보면, Bank Interleaving 통하여, Precharge Time도 줄일수 있다고 한다.
  http://www.kbench.com/?q=node/8417

2. TI의 Memory 설정방법 

관련내용은 AM437x


  http://processors.wiki.ti.com/index.php/AM335x_EMIF_Configuration_tips


  • DM8148

  http://processors.wiki.ti.com/index.php/DM814x_Overview
  http://www.ti.com/lit/ds/sprs647e/sprs647e.pdf

TMS320DM8127 and TMS320DM814x DaVinci™ Digital Media Processors TRM (Rev. G)

  http://www.ti.com/lit/ug/sprugz8g/sprugz8g.pdf

Dynamic Memory Manager (DMM)
- 1162
- Figure 7-3. DDR2/DDR3 Subsystem Block Diagram

2.1 TI의 Bank Interleaving 

TI 경우 Address mapping을 어떻게 하느냐에 따라 결정이 Bank Interleaving이 동작이 된다.
DRAM 인 경우 Cols , Bank , Row Addr 을  Command 처럼 사용하지만 내부는 logical로 사용)
CPU에 따라 다르지만, bus width 변경이 되는 것이 있지만, 안되는 것도 많은
특히 예전 AP들  AM437x는 OCP Interface를 사용하여 변경이 가능하지만, 변경을 하여도 속도가 2배로 증가되지는 않음.
(오히려, 관련 Threshold 설정이나, 다른 설정변경)






상위의 Bank당 8개식 Bank Interleaving 한 것이며, 기본 개념은 아래에서 확인을 하자.

   https://en.wikipedia.org/wiki/Interleaved_memory
   https://en.wikipedia.org/wiki/Interleaved_memory#/media/File:Interleaving.gif

위 그림은 개념만을 익히는 것으로 하고, 실제 AM487x 시리즈의 예를 보겠다.

  • Address Mapping (Bank Interleaving)

Bank interleaving을 제대로 사용하기 위해서는 Logical address을 RAM 주소로 Mapping을 제대로 이해해야한다.

정확히 말해서 OCP Address -> RAM 주소 변환이다. (OCP TI의 Device)

Address Mapping은 DRAM의 Read or Write Operation 순서가 Read or Write Command 다음에 Cols 과 Bank가 바로 필요하기에 우측에 항상 먼저 Cols과 필요한 Bank수를 기록하는 방식으로 Mapping을 한다.

그리고 이는 결정적으로 Bank interleaving의 갯수를 결정을 짓는다.

  • AM473x EX-1
REG_IBANK_POS(칩내부 뱅크)와 REG_EBANK_POS(외부 칩)는 위치를 결정하며,
Column Address 항상 맨 우측간다. 그리고, 그 다음 Bank Address Mapping과 CS(EBANK)
가 Mapping되어 총 4bit의 Address가 Mapping되어 16개의 Bank interleaving 가능

(CS(EBANK): 1bit  IBANK:3bit))

  • AM473x EX-2

위와 동일하지만, IBANK: 2bit 와 CS:1bit  Mapping이 Column Address 다음 Mapping되어
Bank Interleaving은 8개 밖에 지원을 못한다.
자세한 내용은 데이타시트


  • DM385
  1. RSIZE:  Row Address's size
  2. PAGESIZE: Column Address's size
  3. IBANK: DRAM의 실제 BANK
  4. EBANK: DRAM의 갯수 






3. Burst Mode (prefetch buffer)

Burst Mode는 기본적으로 read or write command  한번에 몇번의 data를 보내는 방식이다. 이 기능은 오래전부터 존재했지만, 아래와 같이 buffer의 크기에 따라 진화해 가고 있으며, 변화해 가고 있다.

  • DDR의 prefetch buffer system의 변화
    1. DDR  :   2bit prefetch buffer system  (2 words)
    2. DDR2 :  4bit prefetch buffer system  (4 words) 
    3. DDR3 :  8bit prefetch buffer system  (8 words)

Prefetch의 buffer size는 각각의 Data를 보낼 수 있는 능력을 말하며,
DDR3일 경우 연속으로 8번까지 보낼수 있다.

      https://en.wikipedia.org/wiki/Prefetch_buffer
 

  • BC4 (burst chop)
DDR3의 새기능이지만, 내용을 보면 별다른기능이 아니다, 위에서 봤듯이 DDR2->DDR3로 변화하면서, 8bit buffer system에 맞게 BL4를 BL8 포맷에 변화한 기능이다.
BC4는 처음 4번은 전송하고 나머지 4번은 Mask 처리하는 방식인것이다.

          *DDR3에서는 BL4 대신 BC4를 사용 
 
     http://www.rampedia.com/index.php/define-burst_chop


  • AM437x 인 경우 

EMIF는 기본적으로 Burst Mode로 동작을 하는 것 같다. .
AM437x 인 경우,
            EMIF4D_READ_WRITE_EXECUTION_THR
             write or read를 사용하는 burst 수?                    

DDR3의 새기능 : burst chop은 8 burst 하는 아키텍처에서, BL4은 맞지 않기에, BL4를 새롭게 구현한 기능으로 , 4번을 동작하고, 나머지 4번을 Mask 처리하는 기능으로 BL4 대신 BC4을 사용한다.

             



 MT41K512M8RH의 Datasheet 로 DDR3에서는 BL4 대신 BC4 or BL8사용 



추가로, odering을 맘대로 변경이 가능

http://forum.falinux.com/zbxe/index.php?document_srl=530529&mid=hardware
http://forum.falinux.com/zbxe/index.php?document_srl=530859&mid=hardware


* DDR3L SDRAM (MT41K512M8)  4Gb_DDR3L_2133.pdf
* New Features of DDR3 SDRAM : E1503E10.pdf                                          
* AM437x ARM® Cortex™-A9 Processors Technical Reference Manual: spruhl7c.pdf


4. DLL(Delay -Locked Loop) 

100MHz -> 133MHz 변경 166MHz 변경
          (이것은 DRAM의 Marking을 확인하고, 시도 )
   현재 DDR인 경우 거의 기본 CLOCK을 133MHz로 사용하는 걸로 기억

PLL에 과 유사하며, DRAM에 제공되는 내부 CLOCK이다,
현재 AM437x인 경우, CLOCK을 두 가지 모드로 동시에 제공을 하며 이는 Power Consumption 을 줄이기 위해서 사용을 한다. 예를 들면 한 CLOCK은 133 사용 , 또 다른 CLOCK은 266사용으로 동시에 사용하므로써, 내부 PLL을 재 설정이 필요 없이 RAM의 CLOCK을 변경하고 Power Comsumption의 소비를 줄일 수 있다.

      https://en.wikipedia.org/wiki/Delay-locked_loop
      http://blog.naver.com/force1206/220359308301
      http://blog.naver.com/circlebird/60057431287


DDR SDRAM은 온칩 DLL(delay-locked loop)을 이용하여 DQS와 이에 상응하는 DQS를 클럭 아웃 시킴으로써 이들이 잘 일치하도록 하며, 전압 및 온도가 변화할 경우 서로를 추적할 수 있다

http://www.eetkorea.com/ARTICLES/2006OCT/PDF/EEKOL_2006OCT16_INTD_STOR_TA_05.PDF?SOURCES=DOWNLOAD



댓글 없음 :