개발 편의성을 위한 소소한 Tips/03 FPGA 설계

Vivado mcs 파일 만들고 Prom 에 영구 박제하기 (Memory Configuration File) Alveo Card 기준.

반응형

 

출처: www.xilinx.com/support/documentation/sw_manuals/xilinx2020_2/ug908-vivado-programming-debugging.pdf

 

글을 보시기 전에..

보드마다 설정하는 방법이 다릅니다.

해당글은 Alveo Card 기준입니다.

Intro

FPGA 개발을 할때는 JTAG 을 이용해서 .bit 파일을 FPGA 에 write 하여 바로바로 Test 를 합니다.

하지만 이 방법은 FPGA 의 전원이 Off 되면 날아가기 때문에 (휘발성) 매번 새롭게 .bit 파일을 Write 해야합니다.

 

HW 부분의 개발이 어느정도 완료가 되면, JTAG 을 통해서 굳이 매번 Write 해줄 필요가 없습니다.

비휘발성 메모리 영역에 Write 를 해놓으면 됩니다.

그 비휘발성 영역은 "PROM" 이었습니다. 그래서 MCS file 을 "PROM image" 라고 부릅니다.

그 과정을 설명합니다.

 

Test 환경 (다른 버전들도 방법은 크게 다르지 않을꺼에요.)

  • Vivado 2019.2 / 2020.1
  • Target board : Alveo U200 / U50

과정

0. .bit 파일을 준비합니다.

Implementation 하기 전에 다음 부분을 .xdc 에 추가해야 합니다.

그렇게 해서 Bit file 을 생성합니다.

# Bitstream Configuration
# ------------------------------------------------------------------------------
set_property CONFIG_VOLTAGE 1.8                        [current_design]
set_property BITSTREAM.CONFIG.CONFIGFALLBACK Enable    [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE           [current_design]
set_property CONFIG_MODE SPIx4                         [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4           [current_design]
set_property BITSTREAM.CONFIG.EXTMASTERCCLK_EN disable [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 63.8          [current_design]
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES        [current_design]
set_property BITSTREAM.CONFIG.UNUSEDPIN Pullup         [current_design]
set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR Yes       [current_design]

 

Implementation 이 끝나면 생성이 되어져 있겠죠?

 

 

1. 사용하고 있는 FPGA 의 PROM Memory Part 와, mcs file 을 wrtie 할 start address 를 정보를 검색하셔야 합니다. (중요)

저는 Alveo U200 을 사용중입니다.

2. Create mcs file ( .bit -> .mcs )

 

write_cfgmem Tcl 명령을 사용하여 .mcs 또는 .bin 프로그래밍 파일을 만듭니다.

이 파일은 구성 메모리 장치를 프로그래밍하는 데 사용됩니다.

write_cfgmem -format mcs -interface bpix16 -size 128 \
 -loadbit "up 0x0 top.bit" -file top.mcs

여기서 주의할 점은, 

1. .bit 파일의 생성경로를 정확하게 맞춰야 합니다.

불안하시면 tcl console 창에서, .bit 가 있는 폴더로 이동합니다. (linux 명령어와 동일함.)
저 폴더 안에, .bit 파일이 있어서 여기까지 이동했습니다.

2. 시작 Address 를 맞춰야 합니다.

앞에서 0x01002000 이라고 했습니다.

3. interface 를 맞춰야 합니다. (다음 링크 참고 forums.xilinx.com/t5/Alveo-Accelerator-Cards/Alveo-Flash-Documentation/td-p/1144430
제가 Test 했던 보드는 Alveo 입니다. 하여 다음과 같이 해야합니다.

write_cfgmem -force -format mcs -interface spix4 -size 128 -loadbit "up 0x01002000 ${bitstream_dir}/${proj_name}.bit" -file "${bitstream_dir}/${proj_name}.mcs"

write_cfgmem -format mcs -interface spix4 -size 128  -loadbit "up 0x01002000 top.bit" -file top.mcs

 

그 다음 Tcl Console 명령어를 칩니다.

성공적으로 mcs 파일이 생성 되었습니다.

 

3. Connect to the Hardware Target in Vivado

다음과 같이 Open HardWare Manager 를 열어서, 가지고 있는 FPGA 와 연결합니다.  

4. Prom Part 추가. (Add Configuration Memory Device )

아래 xcu200_0 위치에서 마우스 우클릭 후 Add Configuration Memory Device 를 선택합니다.

그리고 나서 문서에서는 적절한? 것을 고르라고 합니다.


여기서 아무거나 선택하면 안되구요.. 여러분의 FPGA 에 맞는 Configuration Mermory Part 를 잘 선택해야합니다,

저는 Alveo U200 이기 때문에, www.xilinx.com/support/answers/71756.html 링크를 찹고해서 Memory Part 를 찾았습니다.

선택합니다. (TODO Zybo Z7-20 찾아보기)

 

그러면 다음과 같이 Configurable Memory Device 가 추가가 된 것을 확인 할 수 있습니다. 

그리고, Program 을 바로 할껀지 물어봅니다.

 

OK 를 눌러도 되지만! Cancel 누릅니다. 다른 mcs 파일을 Program 하려면 다음 과정이 필요합니다. (정리하는 측면에서)

 

5. Prom 에 mcs 파일 Program 하기

다음과 같이 생성한 Memory 를 마우스 우클릭 후, Program Configuration Memory Device 를 클릭합니다.

앞에서 생성했던 .mcs 파일을 선택 후 OK 를 눌러 줍니다.

 

프로그래밍 중.

 

Step 1 write 이후 Step 2 write 를 합니다. (Alveo U200 이 덩치가 커서 그런지.. 아주 오래 걸리네요; 체감상 15분?)

6. Boot from Configuration Memory Device.

 

이제 Program 까지 완료를 했다면, 처음 전원이 on 되고 어디서 Booting 할지 선택해야합니다.

당연히 여기선 앞선 절차에서 작업했던 Prom 이 되겠습니다.

 

Target Board 에 마우스 우클릭 후, Boot from Configuration Memory Device 를 클릭합니다.

 

 

이제 완료가 되었습니다.

FPGA 의 전원을 껏다가 키면, prom 에 올렸던 bit file 이 동작하는 것을 확인할 수 있습니다. :)

마무리

뭔가 복잡하긴 한데, 한번 해보니까 감이 오네요. 천천히 따라서 해보면 되구요.

보통 안되는 이유는 PROM Memory Part 와, mcs file 을 wrtie 할 start address 이 부분을 주의해서 진행하면 될 것 같아요.

그럼 재밌는? FPGA 생활 하세요. :)

반응형