Using FPGAs as a base for designing network interface cards(NICs) is becoming popular due to its short development cycle and good performance. However, the current hardware description languages(HDLs) and high-level synthesis (HLS) tools used for developing FPGA-based NICs lack easy programmability and room for performance micro-optimizations. We use ShakeFlow, a functional HDL, to solve this issue. Using ShakeFlow, we implement 2 NIC designs: Corundum, a NIC design written using an HDL; and EasyNet, a NIC design written using an HLS tool. We aim to show that the NIC design implemented with ShakeFlow has a smaller code size than that implemented with an HDL, thereby showing its greater readability; and uses fewer resources than that implemented with HLS due to being able to explicitly describe hardware behavior. The evaluation shows that the two designs implemented in ShakeFlow have identical network throughputs compared to the original designs. We reduce the code size by 26% compared to the design implemented with an HDL. The resource consumption increased by 0.7%, but we expect this to decrease when ShakeFlow’s network APIs and the NICs’ implementations are optimized in the future.
네트워크 인터페이스 카드(NIC)를 구현하는 여러 아이디어 중 설계 가능 논리 소자(FPGA)를 이용하는 디자인은 설계 사이클 및 성능 면에서 이점을 가진다. 그러나 FPGA 기반 NIC을 설계하기 위해서 사용되는 현재 하드웨어 기술 언어 및 고수준 합성 기술의 경우 프로그래밍 난이도 및 성능 최적화의 면에서 NIC을 기술하기에 부적합하다. 본 연구는 이를 해결하는 함수형 하드웨어 기술 언어인 ShakeFlow를 이용하여 NIC을 설계하며, 각각 하드웨어 기술 언어와 고수준 합성으로 작성된 NIC 설계인 Corundum과 EasyNet을 ShakeFlow로 구현하였다. 구현 결과 하드웨어 기술 언어와 비교해 라인 수가 줄어들어 가독성이 향상되고, 고수준 합성과 비교해 명시적으로 논리를 기술한다는 이점으로 FPGA 자원 사용량이 감소함을 보이고자 하였다. 실험 결과 두 구현 모두 기존 설계와 동일한 네트워크 성능을 보였다. 또한 하드웨어 기술 언어 설계와 비교하여 코드 라인 수가 26% 감소하였다. 고수준 합성 설계 대비 FPGA 자원 소비량은 0.7% 증가하였으나, 차후 ShakeFlow의 API 및 NIC의 세부적 구현을 추가로 최적화하여 자원 소비량을 기존 설계 대비 감소시킬 수 있을 것으로 기대한다.