새 보드 지원을 추가하는 방법

1단계: 보드 데이터시트에서 정보 수집하기

먼저 보드의 데이터시트에서 다음 정보를 찾아야 합니다:

2단계: 제약 파일 작성하기

다음으로 제약 파일에 FPGA 핀 번호를 지정해야 합니다. ICE40의 제약 파일은 .pcf 확장자를 사용하고, ECP5의 제약 파일은 .lpf 확장자를 사용합니다(문법도 다릅니다!). 제약 파일은 BOARDS 하위 디렉터리에 있습니다. 사용하는 보드와 같은 FPGA 제품군의 제약 파일에서 시작하여 핀 번호를 수정하십시오.

3단계: PLL

PLL은 보드의 클록을 다른 주파수로 변환하는 FPGA 내부의 특수 블록입니다. Femtorv32는 RTL/PLL/femtopll.v에 있는 래퍼 모듈 femtopll을 사용하며, 이 모듈은 RTL/PLL/pll_xxx.v에 있는 보드별 구현으로 연결됩니다.

가장 먼저 할 수 있는 일은 RTL/femtosoc_config.v에 PASSTHROUGH_PLL을 정의해서 보드의 고유 주파수로 시작하는 것입니다. 이렇게 하면 RTL/femtosoc.v에서 보드의 클록 pclk가 프로세서 클록 clk에 직접 연결됩니다. 또한 NRV_FREQ를 보드의 주파수로 정의해야 합니다(115200 보(baud)로 시리얼 통신을 하는 데 쓰이는 UART가 이 값에 의존합니다). 보드의 클록이 너무 빠르다면 카운터를 사용해 분주할 수 있습니다.

이것이 동작하면, 그다음에는 주파수를 세밀하게 조정할 수 있는 실제 PLL을 대신 쓰고 싶어질 것입니다. 여러분의 보드와 가장 비슷한 것을 복사하는 것부터 시작하십시오. 매직 값을 찾을 때 쓸 수 있는 유틸리티가 (다행히도!) 몇 가지 있습니다. ICE40에서는 icepll -i inputfreq -o outputfreq를 사용하고, ECP5에서는 ecpll -i inoutfreq -o outputfreq -f tmp.v를 사용하십시오. 더 좋은 방법도 있습니다. 이 작업을 자동으로 해 주는 스크립트를 제가 만들어 두었습니다.

 $ cd RTL/PLL
 $ ./gen_pll.sh FPGA_type board_freq > pll_boardname.pll

여기서 FPGA_type은 ICE40 또는 ECP5이고, board_freq는 보드의 고유 주파수입니다. 이 스크립트가 모든 매직 값을 생성해 줍니다! 그런 다음 femtopll.v를 편집해서 새 파일을 포함하는 구문을 추가해야 합니다.

ICE-40 관련 참고 사항: 생성된 파일을 편집해서 SB_PLL40_CORE를 SB_PLL40_PAD로, .REFERENCECLK를 .PACKAGEPIN으로 바꿔야 할 수도 있습니다. 이에 대한 자세한 설명은 여기에서 볼 수 있습니다.

4단계: RTL/femtosoc_config.v

파일 끝에 여러분의 보드에 맞게 ICE40 또는 ECP5를 정의하는 규칙을 추가하십시오.

5단계: Makefile

여러분의 보드에 맞는 yosys 및 nextpnr 옵션과 BOARD, BOARD.synth, BOARD.prog 타깃을 담은 새 BOARDS/board.mk를 만들어야 합니다. 여러분의 보드와 가장 비슷한 것을 복사한 다음 거기에 맞게 수정하는 것부터 시작하십시오.

6단계: 커뮤니티

트위터에서 여러분의 이야기를 들려주십시오! PR도 환영합니다!