3년전 처음으로 Vivado를 접했을 때는 익숙해져 있던 ise에서 너무 많이 바뀌어서 적응하기가 어렵더군요.
더구나 arm core가 내부에 들어와 있으니 어떻게 대해야 할지 ise와 개념적으로 바뀌어 버렸으니 좀 황당한 느낌이었습니다.
제가 20여년전 처음 fpga를 사용할 때는 schematic을 사용하여 디자인 했습니다. flip-flop과 logic gate들을 이용해서 회로를 설계했지요. 심지어는 counter도 flip-flop을 이용해서 만들어 썼습니다.
그러다 gate수가 많아지면서 vhdl과 같은 언어를 사용하지 않을 수가 없었습니다. 처음에 vhdl을 이용해서 프로그래밍 할 때는 프로그래밍이라기 보다는 머릿속에서 schematic을 떠올리고 그것을 vhdl로 표현하는 방식으로 사용했습니다.
vhdl이라는 의미가 hardware description language이니 틀리게 사용한 것은 아닌 것 같습니다.
하지만 점점 더 집적도가 높아졌고 나중에는 진짜 programming이라는 개념으로 대하게 되더군요.
C를 이용해서 cpu프로그램을 하는 것과 vhdl을 이용해서 fpga 설계하는 것을 병행하다 보면 둘이 너무 유사해서 C를 작성하다가 vhdl를 타이핑하고 거꾸로 하기도 하다가 혼자 웃곤 합니다.
vivado는 처음 vhdl로 넘어올 때 보다 더 큰 변화로 다가왔습니다.
fpga를 대하는 태도는 ASIC의 한 형태로 보는 ic design의 측면이 있고 hardware로서의 측면이 있는 것 같습니다. 물론 high level synthesis를 통해서 C language로 작성된 함수를 fpga로 이식하는 기능까지 있지만 저는 주로 하드웨어 엔지니어로서 꽤 큰 fpga를 사용해서 조금 복잡하지만 cpu가 처리하기에는 속도나 안정성이 요구되는 기능을 구현하는 일을 했기 때문에 거기까지는 사용할 일이 없었습니다.
vivado에서 arm core를 내장한 zynq나 microblaze를 사용해서 desig할 때 처음 부딪혔던 어려움은 cpu를 fpga에서 어떻게 사용하는가의 문제였습니다. axi bus에 대한 개념을 잡기가 너무 어려웠는데 asic design을 했던 친구의 도움을 받으니 개념이 잡히더군요. axi bus를 공부하기 위해서 수없이 검색하고 AMBA bus규격집을 들고 이걸 어떻게 다 읽나 하고 걱정하던 때가 떠오릅니다. 물론 다 읽을 필요가 전혀 없었습니다.
그 다음 어려움은 linux를 올리는 일이었습니다. 8bit CPU를 사용해서 장비를 만들기도 했지만 OS를 사용한 작업은 늘 소프트웨어 엔지니어와 함께 일했기 때문에 linux와 관련된 작업이 저에겐 저 경계너머에 있는 세상이었습니다.
그런데 그것도 닥치고 절실하니 하게 되더군요. 한달여를 씨름한 끝에 SD CARD에 이미지를 굽고 부팅에 성공하여 hellow world가 터미널에 떴을 때 얼마나 기뻤는지 모릅니다. 덕분에 머리털이 많이 빠졌었습니다.
그리고 FPGA를 디자인 하면서 FPGA의 가장 큰 제약은 메모리의 크기였던 것 같습니다. 비디오 처리 알고리즘을 FPGA에 넣는 작업을 할 때 엄청 비싼 DPRAM을 붙여서 썼던 기억이 납니다. 그런데 이제는 ddr-3메모리를 붙일 수 있게 되었으니 FPGA의 한계는 없는 것 같다는 생각이 듭니다. 물론 가격문제가 남고 그래서 저가의 대량생산 제품에는 맞지 않지만 어차피 저같은 사람은 대량생산 제품보다는 부가가치가 높은 장비를 만들 수 밖에 없는 것 같으니 FPGA는 제가 엔지니어로 일하는 동안 늘 저와 함께 하게 될 것 같습니다.
ps 클리앙에 엔지니어분들이 많다고 알고 있어서 일하면서 느꼈던 것을 써보았습니다. 다른 분야에서 일하시는 분들께는 죄송합니다.
물론 저는...하드웨어는 도저히 아니구나 싶었습니다ㅎㅎㅎㅎ
하드웨어 하시는 분들 대단하셔요 @@
지금은 사정상 펌웨어쪽을 하고 있지만 얼마전 까지는 ASIC과 FPGA를 했었습니다. 저도 어린편이라 1092님처럼 verilog를 먼저 했습니다. 그러다 이회사에서는 기회가생겨서 Schmatic base로 설계된 회로를 FPGA에 올려보는 잡도 해 봤는데요 상위언어만 하다 하위 Schematic으로 설계된 회로도 몇백장을 보니 참 어떻게 구현한건지 신기하기도 하더군요. Gate로 래치를 구현해 놓았는데 FPGA로옮기니 딜레이타임이 조금 틀어져서 조금 애먹었던 경험도 해봤네요. 특이하게 상위에서 하위로 간케이스라 좋은경험한것 같습니다. 저보다 한참 선배신것같은데 정말 반갑습니다.
저는 회사에서 FPGA를 VHDL로 코딩하는 세대였어요.
대학원에서는 HLS를 배워서 HLS 주로 활용하는 쪽으로 돌아섰어요. 회사는 또 이것들과 크게 관련없는곳으로 다시 취직했네요. FPGA가 한국에서는 여전히 수요가 많이 없어서 대우가 박하지만 미국에서는 참 연봉 많이 받는 좋은 분야라는 걸 많이 느끼고 온 유학 기간이었네요.
계속적으로 새로운 기술에 대한 탐구는 엔지니어에게 정말 중요한 요소인거 같아요!!
저도 zedboard에 HLS를 이용해서 처음 "Hello world"를 만들어 냈던 날을 잊을 수 없네요 ㅎㅎ
그 뒤로는 보드에 sobel filter등 다양한 알고리즘을 쉽게 구현할 수 있게 되어서 참 기뻤어요... (저도 그때 머리가...)
또 petalinux도 올리고 그걸 이용해서 단순 프로그램 올리고 하는 것도 참 재밌었네요..
AXI 휴.. 처음에는 진짜 먼지 했는데... 엔지니어가 신경쓸 부분이 아니었네요 ㅎㅎ
여튼 너무 비슷한 직무 하고 계신 분을 보니 참 반갑습니다!!