Bank Interleaving 찾다가 아래의 사이트를 발견하고 이를 정리한다.
메모리 대역폭을 높이는 방법 중 Bank Interleaving 만 잘 모르것 같다.
- 메모리의 버스 폭(width)를 늘리는 방법. ( 이미 정해져 있을 거라고 본다)
- 메모리의 operating_clock을 높이는 방법 ( 한계가 있으며, DDR의 Chip 확인)
- 메모리에 interleaving을 적용하여 대역폭을 높이는 방법.
Interleave는 일반적으로 저장장소를 몇개로 나누어 이를 동시에 접근하도록 하는 것이다.
Bank Interleaving
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부분을 잘보자.
- 8bit DataBus DRAM x 4
- 16bit DataBus DRAM x 2
- 32bit DataBus DRAM x 1
- 16bit DataBus DRAM x 1 (TI는 지원)
상위에서 설명한 DLL을 Clock을 Overclock을 해서 사용하는 방법인데, 별로 권장할 사항은 아닌 것 같다.
1.2. Bank Interleaving로 성능향상
최근에 알게된 정보이며, 가장 관심을 가지고 있는 기능이다.
- DRAM의 기본동작
예를 들면, 0x11001100 Bank 선택과 함께 Column Address 와 Row Address Read/Write Command와 Refresh Time 으로 동작한다.
그래서 SoC는 이를 Physical Address를 DRAM Address로 변경하는 작업이 필요하다.
(SRAM에 Refresh Time이 필요없다)
- Bank Interleaving 의 기본이해
Embedded에서는 1~4개 정도의 DRAM을 주로 사용하며, 각각의 Bank 수를 따지면 상당수의 Bank가 존재한다,
이 Bank들을 각각 개별로 접근하고 지속적으로 순차적으로 읽고 쓴다면 성능이 향상이 된다는 개념이 바로 Bank Interleaving 이다.
물론 여기에도 한계는 존재하며, 그 이상의 Interleave는 필요가 없을 것이다.
- 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의 갯수는 상충관계에 있기 때문에 이는 정해놓고 이용하는 것이 옳을 것이다.
Memory 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 개념
TI의 EMIF Memory Config로 S/W Leveling
http://processors.wiki.ti.com/index.php/AM335x_EMIF_Configuration_tips
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://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)
Dynamic Memory Manager (DMM)/TILER
- 6.1.1 Overview
- 6.1.3 Functional Block Diagram
- 6.2.1.6 Section Mapping
- 6.2.1.6 Section Mapping
- Figure 6-7. 128B and 256B Interleaving
- Figure 6-8. 512KB and 1KB Interleaving
- 7.2.4 DDR2/DDR3 Memory Controller Subsystem Overview
- Figure 7-3. DDR2/DDR3 Subsystem Block Diagram
- 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 한 것이며, 기본 개념은 아래에서 확인을 하자.
Interleved memory
https://en.wikipedia.org/wiki/Interleaved_memory
https://en.wikipedia.org/wiki/Interleaved_memory#/media/File:Interleaving.gif
위 그림은 개념만을 익히는 것으로 하고, 실제 AM487x 시리즈의 예를 보겠다.
- Address Mapping (Bank Interleaving)
정확히 말해서 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
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
- RSIZE: Row Address's size
- PAGESIZE: Column Address's size
- IBANK: DRAM의 실제 BANK
- EBANK: DRAM의 갯수
3. Burst Mode (prefetch buffer)
Burst Mode는 기본적으로 read or write command 한번에 몇번의 data를 보내는 방식이다. 이 기능은 오래전부터 존재했지만, 아래와 같이 buffer의 크기에 따라 진화해 가고 있으며, 변화해 가고 있다.
- DDR의 prefetch buffer system의 변화
- DDR : 2bit prefetch buffer system (2 words)
- DDR2 : 4bit prefetch buffer system (4 words)
- DDR3 : 8bit prefetch buffer system (8 words)
Prefetch의 buffer size는 각각의 Data를 보낼 수 있는 능력을 말하며,DDR3일 경우 연속으로 8번까지 보낼수 있다.
https://en.wikipedia.org/wiki/Prefetch_buffer
- BC4 (burst chop)
BC4는 처음 4번은 전송하고 나머지 4번은 Mask 처리하는 방식인것이다.
*DDR3에서는 BL4 대신 BC4를 사용
http://www.rampedia.com/index.php/define-burst_chop
- AM437x 인 경우
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
- 아래 문서를 참고하도록
* 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의 소비를 줄일 수 있다.
- DLL(Delay-Locked Loop) 과 PLL(Phase-Locked Loop)
일단 간단히 설명정리를 하면 PLL은 VCO기반으로 Phase 겹쳐서 증폭 목적으로 사용하는데, DLL은 주로 보면, DRAM의 Timing의 보정을 목적으로 한다.
사용되는 목적이 다른 것 같으며, 상위 글과 아래의 글을 읽어보면, DLL의 경우 위상차를 찾아 이 타이밍을 개선하는 것이다.
쉽게말해, 지연시간이 감지하고 이를 DRAM Timing 보정하는 것이다.
http://blog.naver.com/force1206/220359308301
http://blog.naver.com/circlebird/60057431287
이곳에서 자세한 PLL과 DLL에 대한 것을 다루는 것은 나도 세부적으로 잘 모르기에 더 찾아봐야 하겠지만,
http://blog.naver.com/force1206/220359308301
http://blog.naver.com/circlebird/60057431287
이곳에서 자세한 PLL과 DLL에 대한 것을 다루는 것은 나도 세부적으로 잘 모르기에 더 찾아봐야 하겠지만,
PLL은 온도 와 환경 그리고, VCO에 따라 성능이 달라진다고 한다.
DDR SDRAM은 온칩 DLL(delay-locked loop)을 이용하여 DQS와 이에 상응하는 DQS를 클럭 아웃 시킴으로써 이들이 잘 일치하도록 하며, 전압 및 온도가 변화할 경우 서로를 추적할 수 있다
http://www.eetkorea.com/ARTICLES/2006OCT/PDF/EEKOL_2006OCT16_INTD_STOR_TA_05.PDF?SOURCES=DOWNLOAD
DDR SDRAM은 온칩 DLL(delay-locked loop)을 이용하여 DQS와 이에 상응하는 DQS를 클럭 아웃 시킴으로써 이들이 잘 일치하도록 하며, 전압 및 온도가 변화할 경우 서로를 추적할 수 있다
http://www.eetkorea.com/ARTICLES/2006OCT/PDF/EEKOL_2006OCT16_INTD_STOR_TA_05.PDF?SOURCES=DOWNLOAD
- DRAM-1 Module RAM의 구성과 Type 및 각 용어 설명