생존 보고

사실 여러가지 이유로 2010년에는 2월 설날이 올때까지 신년이 아니라 생각하기로 하고 잠수탈 생각이었습니다. 🙂
결심~! 이런것은 아니고 (글 안쓰는 것도 결심인가.. 쯧쯧..), 새로운 일에 적응하는 과정과 정신 없는 육아와 졸업을 위해 노력하고 있는 안사람의 바쁨과 책 번역 와중에 정신의 여유를 가지고 글을 쓸 수 있다는 것이 어느 순간 호사스러운 일이 되는 상황이 된 것뿐이지요. 그러다보니, ‘사실 나의 2010년은 음력으로 시작해요~’ 라는 말도 안되는 이유를 붙일까.. 라는 생각이 든 것이지요 🙂

그러다 글을 쓰게 된 이유는 왠지 2010년 1월 archieve가 0 이 떠 있으면 한참 후에 log없는 삶이었나.. 라는 생각이 들것 같은 느낌과 착하게도 일 열심히 하라고 딸래미와 같이 친정에 가준 마누라님(올레~ 상황이랄까요..) 덕분에 잠시 시간이 생겼다는 것 정도..

여하튼, 잘 살고 있습니다. 🙂
바쁜 만큼 기쁜일이 많고 스카이 스포츠 형식으로 평점을 매기자면 “babyworm (7); lively” 정도는 줄 수 있을 것 같습니다.

아.. 글을 쓰게 된 중요한 이유 중에 하나는 좋은 블로그를 발견해서 입니다. babyworm 추천 1월의 블로그 정도로 할까요?

http://recipes.egloos.com/

역시 세상에 고수는 널렸어요.
소위 이야기하는 실력도 있고 글빨도 있는 분이군요. 언젠가 저도 저의 언어로 좋은 내용을 담은 글을 쓸 수 있는 날이 있으면 좋겠네요.

아.. 빼먹고 안썼는데..
이번에 나온 iPad는 좀 실망이죠.
ARM instruction 기반의 프로세서에서 항상 강조하는 것이 성능 대비 전력소모인데, 1GHz 동작 속도에서 10시간 동작이라니.. Intel UltraThin 계통에서 이미 이룬일이라 별로 임펙트가…
물론, LCD나 기타 다른 부분의 전력 소모가 더 많을테니.. 라고 프로세서는 별로 중요하지 않다고 이야기할 수 있습니다. 하지만, 그런 명제를 걸게되면 전력 대비 성능이 좋은 프로세서를 쓰는 의미가 없어지지요.
애플이 PA-semi를 인수하여 만든 결과물 치고는 좀 실망스럽지만, 그래도 뭐 좋아지기는 하겠죠.

완벽 잡담..

네이밍이라는 것이 아주 중요하다고 생각합니다.
회사에서도 학교에서도 네이밍이란 것이 중요하다고 생각하고 있는데, 이건 저만 그런것이 아니고 H&P 책의 저자이기도 한 David Patterson교수의 주장이기도 합니다.
좋은 이름, 부르기 좋은 이름을 만들고 좋은 뜻을 만드는 것이 중요하다는 거죠.

오늘의 완벽 잡담은 이 네이밍에 대한 이야기입니다. ^^;

자주 가는 사이트에 가끔 “한국에 절대 진출이 불가능한… “이라는 글이 올라오는데, 오늘은 우리말로 부르면 약간 많이 그런 이름을 가진 가수가 소개되었습니다. 제 생각으로도 절대 진출 불가 아닐까 싶습니다.

이런 비슷한 것이 JOT note 같은 건데(욕 아닙니다.. ^^; jot down 이라는 것은 메모하다는 의미로 아주 아주 많이 사용되는 구문이죠. ), 메모 노트 프로그램인데.. 참..노트도 있구요.. 여하튼 어감이 그래서 우리나라에서는 사용하기 어려울 것 같습니다.

지금은 몇번의 이름 변경을 통해서 SoC Forum 정도로 바뀌었지만, 예전에 우리나라 비메모리 반도체 기업체들의 협회도 참 어감이 그랬더랬다.. ASIC Design Association.. 줄여서 ADA…  (아마도 어감이 별로라서 이름을 바꾼것이 아닐까? ^^;)
물론, 내외부에서 ‘에이다’로 불러줄 것을 요청받았습니다만, 다들…

또 지금은 사라졌지만, 국내 IP 유통의 1세대라 볼수 있는 System Integration and IP Authoring Center 도 그 줄임말로 이야기가 많았죠. 줄임말은 당연히 SIPAC.
물론, 당연히 내외부에서 ‘싸이펙’으로 불러줄 것을 요청 받았습니다만, 다들….

여기서 또 옆길로 빠지자면 SIPAC이 사라진 것에 대해서는 여러가지 이유가 있습니다만.. 사실 전 개인적으로 바른 정책적 판단이었는지는 의문입니다. 물론, IP를 담당하는 기관이 SIPAC과 ETRI 산하의 기관으로 나뉘어져 있었으니 통합할 필요가 있었을 것인데..
통합에 의하여 사라진 것이 아니라 SIPAC을 KIPEX라는 기관으로 이관하였을 뿐이고, KIPEX라는 기관도 이번에 저희쪽의 프로세서 지원 센터 쪽으로 통합 운영되는 것으로 가닥이 잡혔지요.(물론, 저희는 IP 유통에 관여하지 않고 단지 특허청에서 만든 IP에 대한 보급만 관여하게 됩니다.)

IP 유통이라는 것이 실제적으로 빈번하게 일어나고 있지만, 대부분 기업대 기업으로 일어납니다. 물론, 정보는 D&R 과 같은 사이트를 통해서 정보를 얻은 후 기업간에 거래가 일어나는 경우가 많습니다. 즉, IP 유통이라는 건 아마도 돈을 벌수 있는 모델이 없을 것이라 보는데, 이것이 기업체에 의해서 운영되었을 때는 음.. 글쎄요..

실제적으로 IP 유통이 원활하게 이루어지려면, 표준화된 IP 보호 장치가 필요한데, IEEE 등에서 노력 중입니다만, 아직 실무에서 보급되지는 않은 상태이니 시간이 좀 더 필요하겠지요. 아.. 또 옆길의 옆길로 빠졌군요..
다시 돌아오면, SIPAC 같은 기구는 비영리 기관으로 학교의 IP를 위탁 받아서 정비하고, 상용화 가능성을 모색할 수 있는 형태의 기관으로 커 나갔으면 어땠을까 하는 생각이 있습니다. 예전처럼 단순 유통이 아니구요.. 🙂  

다시 네이밍 이야기로 돌아와서..

Core-A의 네이밍은 상당히 좋아요. 붙여쓰면 Corea도 되고 (물론 의도했겠지요?)
이름처럼 좋은 코아가 되길 바랍니다. 아직은 창출 사업쪽에서 비지니스를 위해서 필요한 것에 대한 인식이 부족하신 듯 한데, 저희 센터 쪽에서 적극적인 feedback이 있어야 겠지요..

EISC의 경우 네이밍이 의미상으로는 적절한데, RISC/CISC와 같은 거대 담론에 휩쓸리기 쉽게 네이밍 된 것이 못내 아쉽습니다.
EISC의 경우는 compressed code RISC 형식을 가지고 있는 프로세서인데, 코드 밀도와 메모리 접근에 대하여 최적화되면서 몇몇 CISC적인 요소가 추가되었다는 특징이 있습니다.
그래서 RISC+CISC = EISC 라는 마케팅 용어가 만들어졌던 걸로 추정하는데(이 당시에는 제가 EISC 프로세서 설계 프로젝트에 처음 참여하던 시기라서요 ^^;), 학계에서는 이런 부분에 대해서 매우 꼼꼼하기 때문에 당연히 맹공을 받았지요.. ^^;
학계쪽으로는 compressed code RISC의 일종이라는 점을 강조했으면 좀 유연하게 풀었을 텐데요..

그래도, 뭐 어찌보면 무관심보다야 논란이 더 좋죠 ^^; (마케팅에서는 그걸 노렸을지도..)
당시에 회사에서 적절히 대처하지 못한것이 못내 아쉬울 뿐인거죠 ^^

이상 오늘의 완벽 잡담 끝..

마이크로 프로세서에 관심 있으신 분을 위한 글.

이 글은 예전에 쓴 “프로세서/비메모리 반도체 설계를 희망하시는 분들께“라는 글과 연관성이 있습니다. 단지 프로세서 설계를 희망하시는 분들께 유용할 수도(?) 있는 내용 위주로 쓰여졌다는 것만 다르겠습니다.

일단 마이크로 프로세서라는 분야에 대해서 설명이 필요할 것으로 봅니다. 학교에서 마이크로 프로세서 구현에 대한 연구는 EE(전자공학)에서 이루어지는 것이 대부분이며, 기업체의 경우 embedded microprocessor는 상당히 많은 업체에서 상용화에 도전하고 있습니다.

하지만, 마이크로 프로세서라는 분야는 그 특성상 몇몇 ISA(명령어 셋 아키텍쳐) 들이 그 점유율을 크게 가져가는 경우가 많기 때문에, 독자적인 ISA를 지닌 마이크로 프로세서를 만들어서 성공한다는 것은 매우 어렵습니다. 이는 사용할 수 있는 프로그램의 수가 많고, 개발자 pool이 튼튼한 프로세서가 계속하여 성장한다는 당연한 이야기(eco-system이라고 보통 표현되는..) 때문입니다.

일례로 PC/서버 계통에서는 x86 ISA가 완전하게 시장을 장악했다고 해도 과언이 아니며, 그 이외의 ISA가 들어오기는 매우 어려울 것으로 봅니다. (그런 측면에서 저는 ARM이 PC 마켓 – netbook이라 불리는 부분에 있어서도..-에서 점유율을 가져 오기는 매우 어려울 것으로 생각하고 있습니다.)

국내에서는 자체 ISA를 가진 프로세서를 설계하는 회사도 거의 없을 뿐 아니라, 이를 지원해 줄 수 있는 컴파일러와 OS를 만드는 회사도 거의 없습니다. 여러가지 여건 상 마이크로 프로세서를 하시는 분들께는 좋지 않은 여건이지요

그럼에도 기업체에서는 학교에서 마이크로 프로세서를 선택하신 분들에 대한 요구가 적지 않은 데요.. 그 이유는 마이크로 프로세서를 만들기 위함이라기보다, 마이크로 프로세서를 이루고 있는 여러 가지 기술을 기반으로 다른 기술에 적응이 빠르다는 장점 때문입니다. 마이크로 프로세서를 만드시는 분들은 소프트웨어와 하드웨어, 모델링 등에 어느 정도 넓은 지식을 갖추어야 하며, 하드웨어에 있어서도 연산기, 제어 유닛, 버스, 캐시 등에도 어느 정도 이상의 지식을 갖추어야 하는데 이런 폭넓은 지식들이 다양한 설계를 하는데 좋은 밑바탕이 되기 때문입니다.

특히 마이크로 프로세서를 공부한다는 건 제어와 연산, 메모리 접근을 최적화 시키는 데 있어서 상당히 깊은 지식을 얻게 되는데, 이러한 지식은 여러 종류의 프로세서 – video, multimedia, audio, network processor등-에 아주 유용하게 사용할 수 있는 기반을 갖추게 된다는 걸 의미합니다.

대충 마이크로 프로세서를 공부한다는 것이 어떤 의미인지는 설명 드렸으니, 그럼 프로세서를 하려면 뭐를 봐야 하느냐 하는 문제에 대해서 설명하겠습니다.

프로세서를 만드는 건 1) 상위 레벨 모델을 기반으로 작업하는 것, 2) RTL 수준까지의 설계, 3) gate 수준에서의 설계 정도로 나누어 생각해 볼 수 있겠습니다. 세 가지 모두 어느 정도 갖추어야 하겠습니다만, 학교에서 논문을 쓰기 위해서는 1)번을 잘해야 하고, 칩을 보고 싶으면 2)번을 잘해야 하고, 우리나라 회사에서 적응하기 쉬우시려면 3)번도 잘해야 합니다.

일단, 프로세서에는 다양한 스펙트럼이 존재합니다. 일례로 프로세서의 구조, 분기 예측, pipeline의 형태, 새로운 연산기나 명령어 적용, 값의 예측 등에 따른 performance변화나 전력 소모의 변화를 연구하게 되는데, 이런 것을 할 때 마다 실제 칩을 설계를 하게 되면 졸업할 수 있는 분이 없으실 테니 일반적으로 C 수준의 simulator를 이용하게 됩니다.

이러한 연구에 들어가기 위해서는 앞에서 이야기 된 S/W가 어떻게 컴파일 되어서 프로세서에게 인식되는지에 대한 이해(ISA)와 더불어 프로세서를 구성하는 여러 가지 요소 – pipeline, cache, virtual memory –에 대한 이해가 있어야지 연구가 진행될 수 있겠습니다. 생각보다 기본적인 데이터 통신이나 데이터 구조에 대한 이해는 아이디어를 얻어내는데 아주 많은 도움을 줍니다. 또한, 많은 경우에 수학적 모델을 세워야 할 필요가 있으므로, 수학적 모델에 대해서도 알아두실 필요가 있습니다.전력 측정 등을 하게 되면 당연히 기본적인 전자회로에 대한 이해는 필수적일테구요

이러한 상위 수준의 모델을 이용한 연구에 가장 널리 사용되는 것은 simplescalar라는 시뮬레이터지요. 이 시뮬레이터는 alpha 아키텍쳐에 기반을 두고 처음에 만들어졌는데 구조가 유연해서 ARM 버전도 있고, (EISC 버전도 있고..) 전력 측정을 위한 simplepower라던지 여러 variation들이 있습니다. 여러분들이 연구를 진행할 때도 마찬가지로 해당 시뮬레이터에 자기의 아이디어를 적용시켜 modify하고 성능을 보는 형태로 연구를 진행하고, 논문을 쓰는 거죠. 이런 일을 위해서는 기본적으로 “C/C++ 와 기본적인 데이터 구조 및 알고리즘에 대해서는 어느 정도 이상 할 줄 알아야 합니다.” 몇 번 말씀 드렸습니다만, 이쪽 분야 엔지니어에게 있어서 C/C++은 그냥 언어나 다름 없습니다.

두 번째로 자신의 idea가 어느 정도 확정되었으면, 이것을 RTL(register transfer level)로 설계(보통 verilogHDL이나 VHDL을 사용합니다.)해서, 논리 합성이라는 과정을 거쳐야 합니다. 이때 아이디어가 좋았고, 아키텍쳐가 좋았어도 논리 회로에 대한 기본적인 이해가 없다면 좋은 회로를 만들어내기 어렵습니다. 따라서, “논리 회로에 대한 이해“와 “RTL 설계를 위한 언어 – verilog든 VHDL이던“는 기본적으로 필요합니다.

세 번째로 gate 수준의 설계는 국내 대기업에서 프로세서 작업을 할 때 많이 사용되는데요..(gate 수준의 최적화를 많이 하시니..) 저는 이 분야에 교양적인 지식 밖에 없어서 조언을 드릴 부분이 매우 작습니다. J

아.. 책 이야기를 빼 놓았군요.

저는 Architecture에 있어서는 처음 시작하신다면 Hennessy & Patterson의 computer organization & design이라는 책이나 M.Mano의 책으로 시작하시는 것이 무난하다고 봅니다. 이후에 Hennessy & Patterson의 책(CAQA라 불리는)과 Flynn의 책을 추천해 드리고 싶습니다. 쉽게 읽힐 분량도 아니고, 쉽게 읽히는 내용도 아닙니다만 꼭 한번은 완독 하시길 바랍니다. 깊이 있게 보다는 넓게 보시고 싶으시다면 Sima의 책(advanced computer architecture)도 추천해 드릴만 합니다.

설계의 교양이라는 점에 있어서는 ASIC이라는 책을 보시고 난 이후에 Chinnery의 Closing the Gap Between ASIC and Custom이라는 책도 괜찮습니다. 상당히 괜찮은 관점을 보여줍니다.

RTL Design에 있어서는 (VerilogHDL이나 VHDL과 같은 HDL을 아신다는 가정하에 – verilog에 관련된 책은 예전에 제가 추천한 적이 있습니다. ) Reuse Methodology Manual을 “반드시” 읽어보시길 권하고 싶습니다. 학교에서 짜여진 코드가 생각보다 구닥다리 코딩 스타일을 가지고 있는 경우가 많습니다. Software engineering과 마찬가지로 하드웨어에서도 요즘 중요한 문제는 HDL코드의 readability와 reusability 입니다. 아주 critical 한 부분이 아니라면 약간 타이밍과 면적에 손해를 보더라도 요즘 코딩 스타일을 따르시는 것이 지속적으로 코드를 갱신 할 수 있습니다.

Verification에 있어서는 Comprehensive functional verification이라는 책을 권해 드리고 싶습니다. SoC 시리즈 입문서이기도 하고 잘 쓰여진 책입니다.

마지막으로 마이크로 프로세서를 만드시려는 분들께 한가지만 더..

마이크로 프로세서를 만들 때 가장 중요한 것이며, 가장 간과하기 쉬운 것이 ISA 입니다. 사실 ISA의 설계가 마이크로 프로세서에 있어서 절반 이상이라고 봅니다. 마이크로 프로세서에 있어서 ISA는 이 프로세서가 지향하고 있는 점(철학이라고 하면 좀 거창하고…)을 가장 잘 표현합니다. 학교에 계신 많은 분들은 “어떻게 하면 쉽게 프로세서가 설계 될 것인가?”라는 관점에서 ISA를 설계하시는 경우도 많지요 ^^; 또한, 어떤 프로세서의 경우는 표면적으로 지향하는 바와 ISA가 전혀 매칭이 안되는 경우도 있구요.

EISC의 경우는 ISA를 설계할 때 다양한 실험을 통해서 “프로그램의 크기와 메모리 접근이 가장 줄어들도록 하려면 어떻게 해야 하는가?” 라는 관점에서 모든 명령어 셋이 설계 되었습니다. 이는 임베디드에서는 프로그램의 크기 = cost라는 공식이 성립하기 때문이기도 하고, processor와 memory간의 속도 차가 점점 벌어질 것이라는 관점, memory접근으로 인하여 발생하는 전력 소모의 문제 등을 고려하여 잡은 목표입니다(EISC의 요즘 마케팅 포인트 중의 하나가 energy efficient microprocessor 이지요). 이를 위하여 다양한 실험이 수행되었고, 이중에 가장 적합하다고 생각하는 명령어 형태가 결정된 것이지요. 한 비트 한 비트 설계가 쉽게 이루어진 것은 아니고, 모두 의미가 있지요. 이후에 추가된 DSP 확장 명령어들도 각기 다양한 DSP 커널을 분석하고 이를 기반으로 ISA가 정해졌고, 구현할 때도 이런 부분이 고려되었습니다. 이런 목표 하에 설계되어 명령어의 형태가 일반적인 compressed code RISC들 보다는 약간 더 복잡하고, 이는 디코더 복잡도를 높이는 단점으로 바뀝니다. 달리 이야기하면, ISA를 설계할 때 어떤 결정은 어떤 면에서는 장점이 되지만, 다른 측면에서는 단점이 되는 부분이 있으니 조심해서 결정해야 할 부분이 많은 거죠.

마이크로 프로세서를 공부하고자 하시는 분들께 마지막으로 말씀 드리자면, 최소한 1년 정도는 넓게 공부하시고, 되도록 책을 많이 읽으시라는 “아주 지극히 일반적인” 말씀만을 드릴 수밖에 없네요. ^^; 또 한가지는 프로세서를 하실 분들은 DSP, 데이터 통신에 대해서는 어느 정도 알고 계신 것이 여러모로 도움이 됩니다.

결론 없는 “공부하세요”라는 글이 되었군요. 아.. 요즘 나 왜 이래.. orz