Cyclone III series의 FPGA 중에서 가장 큰 FPGA가 달려 있는 board입니다.
이 보드는 USB 지원에 약간 문제가 있었습니다. 원래의 계획은 USB를 이용하여 PC에서 test data를 전달하고 그것을 board에서 동작시키는 것이 목적이었습니다만, USB 지원이 쉽게 되지 않았습니다. Board 설명에서는 FPGA Configuration을 위한 USB Blaster도 지원하고, 일반 USB를 지원하여 PC와 연결할 수 있다고 나오는데, 정작 Board에는 USB Type-B connector가 하나 뿐입니다. Board 내부의 Altera Max CPLD를 이용하여 USB Blaster 기능과 사용자의 USB 기능을 switching할 수 있도록 되어 있는 것 같은데, 정작 USB를 직접 사용하는 design example을 제공해 주지도 않습니다. 어떻게든 가능하게 만들 수는 있겠지만, 시간이 없어서 USB를 사용하겠다는 생각은 포기하고 다른 방법을 사용했습니다.
Altera FPGA는 수년 전에 Startix II를 한번 사용해 봤을 뿐인데, 그 때도 그다지 자세히 살펴보지는 않았습니다. Cyclone III를 사용하면서 좀 자세히 살펴 봤는데, Xilinx의 Spartan-3에 비해 아래와 같은 장점이 있는 것 같습니다.
(1) Hardwired multiplier 갯수
Xilinx의 Spartan-3의 경우 18x18 multiplier와 accumulator 등이 내장된 DSP block이라는 hardwired logic이 있는데 Cyclone III는 18x18 multiplier만 hardwired logic으로 들어 있습니다. 대신 비슷한 가격대의 device를 비교하면 Cyclone III가 월등히 많은 multiplier가 들어 있습니다. 이번에 테스트한 IP도 FIR Filtering이 필요해서 multiplier를 사용했는데 Cyclone III가 이런 부분의 사용에서는 유리할 것으로 보입니다.
(2) PLL
FPGA에는 clock에 관련된 hardwired module을 제공해서 clock synthesize나, delay 조정등을 할 수 있도록 되어 있습니다. Altera와 Xilinx에서 제공하는 clock module의 기능이 너무 복잡해서 모든 feature를 비교할 경우는 모르겠지만, 단순히 입력 clock의 frequency를 multiply하고 divide하는 기능만 보면 Altera의 cyclone III가 Xilinx의 spartan-3보다 뛰어납니다. Cyclone III의 경우 512배의 multiply와 divide를 지원하는데 반해 Spartan-3는 32배씩만 지원합니다. 물론 Cyclone III의 경우도 PLL의 동작 조건 등을 만족시키려면 512배를 완전 자유롭게 사용하지는 못합니다만, 좀 더 자유로운 편임은 분명합니다. 이번 테스트에서도 clock divide 값으로 143을 써야하는 경우가 있었는데, PLL 한 개만 사용해서 깔끔하게 끝나더군요.
- SOPC를 이용한 NIOS II system
Xilinx에서는 "따라해 보세요" 스타일의 문서를 제공해서 그것만 읽으면 쉽게 따라할 수 있는데, Altera는 그런 문서가 없어서 Altera에서 제공하는 video를 보고 따라해 봤습니다.
(1) SOPC Builder
Xilinx에서 제공하는 Platform Studio와 비슷한 기능이 있는 tool입니다. NIOS II CPU Subsystem을 GUI 환경에서 만들 수 있도록 합니다. 다른 점이 있다면 Platform Studio는 FPGA Top을 만들어 주는 대신 SOPC는 module을 만들어 줍니다. 즉, FPGA Top은 Schematic Editor를 사용하거나 아니면 HDL을 이용하여 사용자가 직접 묶도록 되어 있습니다. 불편한 대신 장점이 있는데 FPGA 하나에 서로 다른 CPU Subsystem을 여러개 넣는 것도 가능한 것으로 보입니다. 즉 NIOS II CPU를 여러개 독립적으로 넣어서 구동하는 것도 쉽게 가능한 것으로 보입니다.
약간 불편한 점이라고 하면 MegaWizard와 같이 project를 만들지 않고 그냥 IP 형태로 만들어 두는 것은 지원하지 않는 것 같습니다. Quartus II에서 project를 만들어야 SOPC를 띄울 수 있도록 되어 있습니다. 사용한 버젼이 9.1이었는데 추후 버젼에서는 개선될 지 모르겠습니다.
그리고 사용자 IP를 BUS(Altera는 Avalon이라는 BUS 사용)에 붙이려면 어떻게 해야 하는지, Wizard나 아니면 쉬운 예제같은 것을 찾기 힘들었습니다. 모든 문서 자료를 꼼꼼하게 살피면 당연히 가능하겠지만, 쉽게 찾을 수는 없었습니다. 대신 IP 테스트를 위해서 필요했던 enable/reset 관련 몇개의 signal을 BUS에 붙이는 대신 그냥 GPIO에 연결해서 가볍게 해결했습니다. 이런 부분은 Top을 사용자가 만들수 있으므로, Xilinx에 비해서 훨씬 쉽게 느껴졌습니다.
(2) NIOS II EDS(Embedded Design Suite)
Xilinx SDK와 동일한 기능을 제공하는 tool로, NIOS II CPU용 software를 만들 수 있도록 해 줍니다. Xilinx와 마찬가지로 Eclipse 기반으로 동작하고, JTAG(USB Blaster)을 이용하여 debugging합니다. Eclipse 기반의 IDE를 사용해 본 사람이라면 크게 문제 없이 적응할 수 있습니다. EDS만 관련된 것은 아니지만, 콘솔로 UART를 사용하지 않고, JTAG(USB Blaster)를 사용하도록 되어 있다는 점이 독특합니다. Software에서 printf 등으로 출력한 결과를 eclipse 환경에서 창이 하나 열리면서 보여주는 형태로 되어 있습니다. 따라서 보드에 시리얼 연결 등의 기능이 없어도 디버깅에 무리가 없습니다.
사용하는 중에 약간의 문제가 있었는데, EDS를 이용하여 build한 software binary와 FPGA configuration bitstream을 어떻게 합치는지 찾을 수 없었습니다. Xilinx SDK에서는 기본적으로 software binary와 bitstream을 합쳐서 FPGA download하는 방법으로 진행되므로 합쳐진 bitstream을 쉽게 찾을 수 있는데, NIOS II EDS는 hardware bitstream을 별도로 download한 후에 software binary는 추후에 download하는 방식이라서 합치려면 별도의 작업을 통해서 해야 할 것 같습니다. 그런데 몇가지 문서를 살펴 봐도 software binary를 bitstream(sof 파일)과 합치는 방법에 대해서는 자세히 나와 있지 않는 것 같습니다. 좀더 깊게 조사하면 방법을 찾을 수 있었겠지만, 결국에는 합치지 못했습니다. 어짜피 IP 테스트용이니까 별로 상관이 없었습니다.
- 기타
- 마치며
참고로 개발한 IP는 Cyclone III FPGA Development Kit에서 잘 동작했습니다.