원하는 FPGA핀으로 시그널을 정의해서 뽑아 보려면, ucf 파일을 건드려야 한다.
물론 친절하게 GUI로 띄워서 클릭으로 선택할 수도 있지만, 기본적인 것은 알아야~~
기본적인 단어 내용은 아래 글을 참고하자.
https://velog.io/@kyoung99u/Xilinx
[Xilinx] UCF (User Constraints File)
User Constraints File (UCF) 사용자 constraints를 기술하기 위한 AXCII text 파일이다. 모듈 포트 신호들이 어떻게 물리적인 핀에 연결되어야 하는지 기술한다. 즉, 선언한 I/O 포트를 Push button과 User LED로 연
velog.io
예제로 보는 것이 가장 쉽다. 추상적인 내용은 보기도 이해도 어렵다.
# ==== 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를 주는 것이 목적이다.
결국 타이밍 정보를 여기에 정의해서 사용해야 한다.
복잡하니 이것은 다음에~~