현대 RISC, SoC Design 왕좌인, ARM의 SoC design Architecture에 대해 먼저 알아보겠습니다.

ARM이라는 회사가 익숙하지 않으신 분들이 많으실겁니다. Acorn Compueters에서 나온, Advanced RISC Machine이 ARM입니다.
여러분은 이 회사를 매일 간접적으로 접하실거에요. 왜냐하면, 아이폰이든, 갤럭시든(퀄컴, 엑시노스), 맥북이든(M1) 다 ARM의 구조를 쓰거든요.
모바일 AP를 제외하고도, 자동차에 들어가는 ECU(Engine Control Unit)나 전투기의 항공전자장비… 일상에 쓰는 가전들도 ARM의 구조를 많이 씁니다. (Cortex series)
“왜 요즘은 거의 다 ARM을 쓰나요?”라는 질문을 한다면, 당연히 “검증되었고, 효율 때문에 그렇습니다.” 라고 말할 수 있습니다.

처음 컴퓨터가 개발될 때에는 ‘스위칭소자에 전선들과 전자소자들이 연결’로 되었어요. 간단한 로직이지만 복잡한 연산에서 인간을 대신하기 위해 만들어졌습니다. 근데 이때의 컴퓨터로는 기능을 추가하거나 수정하는게 매우 어려웠어요.
이 구조에서 ‘폰 노이만 구조’로 발전하게 되요.. CPU, 메모리, 프로그램이 나눠져서 설계된 형태에요.
아래의 사진은 제가 만들었던 폰노이만 구조 8bit CISC MCU입니다.

8bit_MCU
자세한 동장 방식은 여기에.. http://recipes.egloos.com/4982170

이전 구조에서는, 컴퓨터로 새로운 기능을 구현하려면…하드웨어를 처음부터 다시 설계하거나, 이 회로를 어떻게 수정해야하지 고민하면서 수정해야했어요. 그러나 폰노이만 구조에서는, 회로를 처음부터 다 설계할 필요 없이, 메모리 블록에 새로 프로그램즉, 명령어만 잘 조합해서 넣어주면 완성입니다.
여기서 말하는 이 명령어는 프로그래밍 랭귀지의 커맨드가 아니에요.컴퓨터 구조를 만들 때, 입출력 포트들을 만들고, 그 사이에 동작구조를 만들어요.이 동작구조의 구현은, 콤비네이션 로직, 시퀀셜 로직 같은 것들을 조합해서 구현합니다.
명령어는 이 입력포트들에 대해 1 혹은 0을 넣는 것이에요. 그러면, 데이터를 읽거나, 더하거나, 저장하는.. 이런 기능들을 만들 수 있고, 이런 기능이 명령어로 정의되는거에요. 이 메모리가 지금의 소프트웨어와 비슷합니다.아마 이 때부터 소프트웨어 개발자가 태동한 것 같아요.
처음에 폰 노이만 구조로 할 때는 괜찮았어요.그런데, 프로그램이 복잡해지면서 문제가 생겼어요. 폰노이만 구조에서는, 데이터 메모리와 명령어 메모리가 한 통로로 들어와서 병목현상이 일어납니다. 그래서 데이터 버스를 2개로 나눈 ‘하버드 구조’로 발전하게 됩니다. 현대에는 이 두 구조를 많이 쓰고있고요! 현재 새롭게 연구중인 구조는 뉴런을 본뜬 ‘뉴로모픽 구조’입니다.

대략적인 차이.
von vs har
좀 더 엄밀하게 본다면,
von vs har

CPU를 개발하다보니까~ IBM은 각 명령어들이 모두 통일된 시간 지연의 갖는게 더 효율적이라는 것을 알게됩니다.

명령어 길이를 일치시키면, 파이프라인이라는 기법을 사용할 수 있어요.파이프라인이 미적용된, 기존의 컴퓨터에서는 1번부터 3번까지 1초씩 연산해서 3초가 걸리는 명령어를 2번 넣으면, 6초가 필요했어요.그러나 파이프라인을 적용시키면,첫 명령어가 1번에서 2번으로 갔을때, 두번째 명령어가 1번에서 실행됩니다. 그래서 이 시간이 4초로 단축됩니다.

Computer Organization & Design책에 있는 설명 그림이 아주 표현력이 좋습니다.

빨래를 하면,

빨래 작업 : {세탁기 -> 건조기 -> 옷 정리 -> 옷장} 순으로 일이 작업 되잖아요?

von vs har

기존의 non-pipeline에서는 빨래 작업1이 끝나야, 다음 빨래 작업 2를 수행 할 수 있었습니다.

저녁 6시에 빨래를 시작했는데, 새벽 2시에 빨래가 끝났네요.

von vs har

pipeline을 쓰면 아래 그림처럼, 빨래 작업 1의 세탁기 작업이 끝나서 건조기로 들어가면, 빨래작업2의 옷이 세탁기로 들어갈 수 있는 것이에요!

저녁 6시에 빨래를 시작했는데, 저녁 9시 30분에 빨래가 끝났어요!

von vs har

pipeline
기존에 명령어들간의 시간 차이가 생겼던 이유를 설명하기위해 명령어의 예를 든다면,1번 명령어 : 데이터를 읽는다. 2번 데이터를 읽고 더한다. 3번 명령어 : 데이터를 읽고 더하고 저장한다. 이런식으로 명령어들의 종류가 정말 다양하고, 어떤 명령어는 짧고, 어떤 명령어는 길었어요.
그래서 새로운 명령어 구조를” RISC (Reduce Instruction Set Architecture)라 부르고, 예전 구조는 이름이 없었는데, 복잡하니까 씨스크로 하자고 정해서 (Complex Instructuon Set Architecture)로 부르기로 합니다..
리스크가 대부분의 상황에서 빠르지만, 단점으로는 아래와 같습니다.

1.중간중간에 계속 값을 저장해줘야하기 때문에 플립플롭(기억장치)을 더 넣어주면서 크기가 커집니다.

2.씨스크에서 한번만 하면 끝나는 명령어의 경우엔, 리스크는 여러번 처리를 해야하기 때문에 오히려 느릴 수도 있습니다.

3.명령어 길이를 제한해놨기 때문에, 긴 명령어를 짜거나, 한번에 큰 범위의 점프 (몇번째 코드에서 다른 몇번째 코드로 가는 것)를 할 수 없습니다.

씨스크와 리스크의 각자 장점이 있는데, 아마 대부분은 리스크로 바뀔 것 같고, 일부 영역만 씨스크로 남을 것 같습니다.보통은 리스크가 더 좋지만, 씨스크가 좋은 경우가 있다는걸 기억해두세요. 현재 리스크 시장은 암의 독주인데, 역사가 짧은 오픈소스인 리스크파이브 아키텍쳐도 빠르게 발전중이라, 기대가 되네요.