어떠한 시스템을 설계했을때 중요한게 무엇일까?
Core를 담당하는 HW자체의 설계도 분명히 중요하지만, 이 하드웨어 코어까지 Data를 transfer하는 과정또한 Core 설계 못지않게 중요하다.
하드웨어에서 계산이 빠르 끝난다고해도 이 하드웨어까지 데이터를 옮기는데 걸리는 시간이 cpu에서 계산하는 시간보다 길다면 아무리 하드웨어에서의 연산이 빠르다고 해도 이용할 가치가 전혀 없는 과정이기 때문이다.
그렇기 때문에 오늘은 on chip interconnect에 관해 포스팅을 해보겠다. (내용이 길어질 것 같아 해당 부분은 part를 나눠서 포스팅 할 것 같다.)
CPU가 memory나 Usb, UART등의 IO port와 data를 주고 받는것(Load/ Store)은 memory mapped io방식을 사용하기 때문에 CPU가 직접 access하는것은 비효율적이다.
Memory mapped 방식이란 외부 장치에 memory address를 부여해서 load, store시
1. 주소 주기
2. data 전송
위 과정 반복
data N개를 전송하려면 이 주소를 주고 받는 과정이 N만큼 늘어나기 때문에 속도가 현저히 느려진다.
위 과정의 비효율적인 전송구조를 해결하기위해서 DMA라는 (direct memory access)방식을 사용하게 된다.
DMA란 load/stroe 전용 processor로 DMA controller가 특정 memory영역에 있는 값을 읽어서 다른 memory로 보내게 된다. Data 이동하는 일을 CPU대신에 DMA controller라는 block이 전담하게 되므로 이 시간동안 CPU는 다른 일을 할 수 있게되어 기존 cpu만을 이용한 data transfer과정보다 훨씬 더 효율적이게 된다.
DMA를 이용한 data transfer과정시 data는 Burst 단위로 전송하는게 일반적인데, Burst단위는 추후 AXI를 설명할 때 설명하도록 하겠다. 주소를 한 번 보내고 data를 burst단위로 연속적으로 보내기 때문에 CPU에 비해 더욱 빠르게 Data를 주고 받을 수 있구나 정도로 지금은 이해하면 된다.
On chip interconect의 가장 흔한 예시는 BUS인데 크게 proprietary와 standard로 나눌 수 있다.
Proprietary는 회사만의 전용 Bus이고,
Standard는 chip밖으로 나갈 때 다른 회사의 block을 붙여야하기 때문에 inteface에 대한 표준을 미리 정해서 사용하게 되고, 이것을 standard bus라고 부른다.
Custom bus -> Shared bus -> Hierarchical bus -> Bus matrix -> Networks on chips 순서대로 bus는 진화하였으며, 순서대로,
1. 회사에서 전부 만들기 때문에 Standard가 없다.
2. 각 block들을 전용으로 만드는 회사가 맣아져 shared bus로 하나의 wire를 공유했고, 각 block들을 붙여서 사용해야하기 때문에 standard interface의 필요성이 이때부터 등장하였다. / 여러 cpu가 동시에 wire를 사용할 수 없기 때문에 속도 penalty가 존재하였다.
3. Bus를 각각 운용할 수 있으며, path를 열어 다른 bus간 access가 가능해졌다.
4. Crossbar bus/switch등 가능한 모든 path를 지원하게 되었다.
...
진화과정은 위에서 보는것과 같은데 여기서 핵심은 여러 회사에서 각기 다른 block을 제작하게 되고, bus에서 맞물리려면 Interface가 표준화되야한다는 것이다.
Bus라는 것은 컴퓨터 내부 부품간 또는 컴퓨터간 data를 transfer하는 통신 시스템이라고 정의할 수 있다.
On chip bus는 on chip interconnect 중 가장 간단하고 많이 쓰이는 형태로,
bus parameter로 Topology와 protocol 두가지가 있다.
topology는 어떻게 연결할건지, (shared, hierachical bus,,,)
protocol은 통신규약으로 어떻게 전송할건지에 관한 내용이다. (burst length, ...)
Bus를 알기 위해 가장 중요한 개념인 Master와 Slave를 알아야 하는데,
Master는 data transfer를 시작할 수 있는 권한을 가지고 있는 부분으로 Processor, Dma controller, IO(USB)등이 있다.
Slave는 이에 응답하는 부분들로 Memory, DMA controller, IO(UART)등이 있다.
그림으로 한 눈에 보면 다음과 같다.
Arbiter: 현재 Bus에 Access하는 master 결정하는 부분
Decoder: 현재 Read/Write하는 slave 결정하는 부분
Bridge: 2개 이상의 bus 연결/끊기에 관여
금일 soc 포스팅은 여기에서 마무리하고 다음 포스팅에서 interconnect관련해서 이어서 하겠다.
'공부 > Accelerator Design' 카테고리의 다른 글
4. Interconnect_2 (0) | 2025.01.12 |
---|---|
2. For advanced performance of Hardware (0) | 2025.01.02 |
1. Clock & Timing _ Violation (1) | 2024.12.30 |
Preview (1) | 2024.12.29 |