프로세서 설계자?

우리나라에서 마이크로 프로세서를 설계하는 직종을 선택한 것이 간혹 미친짓이 아닌가 생각되는 경우가 있다.

국내에 프로세서를 하는 랩이 몇개나 있을까?
그 졸업생들중에 프로세서관련 일을 하는 사람은 몇명이나 될까?
많은 사람들은 꿈을 버릴수밖에 없다. 우리나라에는 프로세서를 만드는 회사가 거의 없으니까..

프로세서를 만드는 것은 프로세서 자체를 만든다는 의미도 있지만, 이건 전체의 20%도 안되고, 그 프로세서를 위한 컴파일러, OS, 프로그램, 개발환경을 모두 만들어야 한다는 뜻이다.

이 모든것이 경쟁력있게 갖추어지는데 몇년이나 걸릴까?

ARM은 몇년도에 처음 ARM1이 나왔는지 아는 사람? embedded에서 성공한 ARM6, ARM7전까지 ARM을 알고 있던 사람이 몇이나 되려나?

내가 다니고 있는 회사는 이런 무모한짓을 하는 회사이고, 나는 그 무모한 짓을 하는 사람이다.
벌써 7년전인가.. 한창 졸업논문 완성하고 이곳 저곳 논문을 발표하러 돌아다니던 시절에 우리 랩에 새로운 프로젝트에 대한 제의가 들어왔고, 그 내용이 바로 지금 내가 하고 있는 일이다.
국내에서 최초로 자체 명령어 셋을 가진 “상용” 프로세서를 만들어 보자는..
그리고, 그 의지와 열정에 이끌려 이 회사에 들어와서 벌써 지금에 이르렀다..

그간 정말 많은 일이 있었다..
한때 우리 회사는 SoC계의 기린아로 총망받다가, 이유없는 모함과 모략으로 순식간에 좌초될뻔도 했고, 그 와중에 수많은 능력있는 엔지니어들이 발길을 돌려야만 했다.
(물론, 이 모함에 대해서는 모두 진실이 밝혀졌지만.. 몇년의 시간은 누구에게 보상 받을 것이가..)

정말 무모한 짓이다.. 프로세서를 만든다는 것은..
컴퓨터 아키텍쳐.. 컴퓨터 시스템 공학을 전공한 나로서는 가장 해보고 싶은 일을 하고 있는 것이지만, 정말 무모한 모험이다.
그래서, 더욱 즐겁다.

내가 더 노력해야지 더 많은 컴퓨터 아키텍트를 꿈꾸는 후배들에게 많은 기회가 있겠지!
지금은 그냥 뛰어보자.. 노력하자..

verilog PLI 배우기(2); VPI handle

지난번에 이야기하고, 너무 많은 시간이 지났군요..
acc_, tf_ 와 다르게 VPI는 handle이라는 데이터 구조체를 이용하여 verilog simulator의 데이터 구조체에 접근합니다.

acc_, tf_ 의 경우에도 handle(정확히는 handle이라 부를만한 것)이 없는 건 아니지만, verilog simulator의 실제적인 데이터 object에 직접 접근한다는 개념이 강했습니다. 따라서, 필요한 object의 형태, 크기등의 여러가지 정보를 하나 하나 챙겨봐야 했지요.
하지만, VPI는 handle이라 불리는 복합적인 데이터 구조체를 이용하고, 이를 기반으로 편하게 verilog simulator의 데이터에 접근할 수 있습니다.

verilog VPI의 handle은 다음과 같이 선언하면 됩니다. (이를 위해서 vpi_user.h 가 include되어야 하는 건 당연하겠죠?)

vpiHandle  myhandle;

handle은 verilog simulator와 PLI루틴과의 관계를 정립할때 여러가지 형태를 가질 수 있도록 되어 있는데,  기본적으로 1-to-1 관계, 1-to-many관계, many-to-one의 관계로 나뉠수 있습니다.

각각은 말 그대로 verilog simulator의 객체를 PLI함수에서 볼때 어떻게 볼지에 대한 내용입니다. 이건 예제를 하나씩 보면서 배우면 되겠지요.

우선, verilog simulator에 접근해서 handle을 얻어와야 합니다.
이러한 동작은 vpi_handle(), vpi_iterate(), vpi_scan()과 같은 함수를 통하여 이루어집니다.
이 중에 vpi_handle()은 one-to-one관계를 만들어냅니다.

object_handle = vpi_handle(형태, 인자);

위의 함수는 형태와 대상 핸들명을 정하고 이에 맞는 핸들을 얻어오는 것입니다.
이때 형태를 vpiModule로 하면 verilog simulator의 모듈을 얻을 수 있겠고, callback 함수의 핸들을 얻으려면 vpiSysTfCall를 형태로 지정하면 되겠습니다.

vpiSysTfCall 의 경우 우리가 정의할 시스템 콜에 대하여 적용가능합니다.
즉, 우리가 시스템 콜을 정의하고, 이것을 verilog simulator에서 사용하는 경우에 이 형태가 vpiSysTfCall이 되는 것이겠죠. 따라서, 만일 우리가 verilog simulator에서 호출된 PLI함수에 어떤 전달 인자가 나왔는지 확인하려면 기본적으로 vpiSysTfCall이라는 형태의 handle을 받아야 합니다.

받아들인 핸들로부터 전달 인자(이것도 역시 핸들입니다.)를 추출하는 건 vpi_iterate() 함수를 사용합니다.
vpi_iterator는 여러개의 핸들을 몽창~ 추출하는 함수죠.(사실 핸들들을 몽창 이라기 보다, 여러 객체가 존재하는 하나의 핸들이라고 하는 것이 더 맞다고 생각합니다만…)

iterator는 C++, 특히 STL을 사용하시는 분들은 잘 아시겠지만, 반복자라 이야기하는 것은 여러 연속된 데이터를 순회하면서 데이터를 끄집어내는 형태의 데이터 구조를 뜻합니다. (뭐 예를 들어, linked list도 iterator요, array도 iterator죠.. 즉, 하나의 포인터로 순회하면서 여러개의 데이터에 접근 가능한 모든 데이터 형태를 일반화한 말..이라고 하면 좀 쉬울라나요? 더 어려울 라나요?)

자 간단하게 이 부분 까지의 코드를 만들어 볼까요?

 

vpiHandle  myhandle, arghandle;
// 시스템 콜 핸들을 얻어옵시다~
myhandle = vpi_handle(vpiSysTfCall, NULL);  
arg_handle = vpi_iterator(vpiArgument, myhandle);

이런식이죠.. 이제 다음에는 조금 더~ VPI의 모델에 대해서 알아보죠~

박사?

간혹.. 간혹 이런 생각이 든다..

배우고, 연구하는 사람이란 열정이 있어야 하고, 학문하는 즐거움을 알아야 한단다. 예전에는 밤 새워 일을 하는 것이 즐거웠다.. 아니, 일하는 것이 즐거워서 밤을 샜다는 것이 맞겠다.
그런데, 요즘엔 어느순간부터 일이 정말 일로 변해버렸다.
참 이상한 것이 열심히 일할때는 오히려 즐거운데, 문득 문득 일하다가 괜히 딴짓을 한다는 거다. 집중력의 문제인건가.

박사학위란것을 받는 것은 모든것이 예전과 같은데, 단지 나를 부를때 호칭에 ‘박사’라는 것이 붙는다는 것만 다르다.
그것을 알고 있는데, 내가 박사란 호칭으로 불리울 만큼 깊이 있는 지식이 있는가!

어찌보면, 이 블로그도 매너리즘에 빠지지 않으려는 발악이라고 할수 있다.

더 많이 읽고, 더 깊이 읽고, 더 생각하고, 더 경험해야만 하겠다.
그리고, 블로그 관리도 열심히~