원하는 FPGA핀으로 시그널을 정의해서 뽑아 보려면, ucf 파일을 건드려야 한다.
물론 친절하게 GUI로 띄워서 클릭으로 선택할 수도 있지만, 기본적인 것은 알아야~~
기본적인 단어 내용은 아래 글을 참고하자.
https://velog.io/@kyoung99u/Xilinx
예제로 보는 것이 가장 쉽다. 추상적인 내용은 보기도 이해도 어렵다.
# ==== Clock Source ====
NET "clock" LOC = "C9" | IOSTANDARD = LVCMOS33;
NET "clock" PERIOD = 5ns HIGH 40%;
# ==== Slide Switches (SW) ====
NET "reset" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP ; # SW1
(from http://www.ce.rit.edu/studentresources/reference_materials/561/Spartan3E_FPGA_User%20Guide.pdf)
어려운 것은 없다.
단, 시그널 명은 합성하는 top의 시그널 명과 일치 시켜야 한다.
LOC는 핀 이름을 잘 보고 원하는 것을 정확하게 쓰면 되고
예제IOSTANDARD = LVTTL or LVCMOS33 이렇게 쓰고 있는데 그냥 통째로 이 구문을 안쓰고 돌리는 것이 대부분일 것이다. 붙이는 칩들이 옛날 칩을 쓰는 것이 아니라면
즉, NET "reset" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP ; # SW1 <- 이렇게 사용하자.
마지막 파워온시에 기본 값을 줄 수 있는
PULLUP or PULLDOWN은 유용할 듯 하다.
그리고, ucf 본연의 의무는 핀 할당도 있지만 여러가지 constraint를 주는 것이 목적이다.
결국 타이밍 정보를 여기에 정의해서 사용해야 한다.
복잡하니 이것은 다음에~~