Inflearn brand logo image

인프런 커뮤니티 질문&답변

아이스침대님의 프로필 이미지
아이스침대

작성한 질문수

디지털 회로설계 실무 : Computer Architecture 와 SoC 프로토콜 Digital IP 설계하기

(TOOL 시연 영상) 간단한 Adder 설계를 위한 Project 생성부터 Verilog coding, 합성, Test-bench 작성, 시뮬레이션, Timing Analysis + Power Analysis까지!

vivado와 quartus 프로그램의 systhesis 결과 차이에 대해 궁금한 점 있습니다

해결된 질문

작성

·

28

0

quartus를 쓰면 gate level로 합성되게 되는 반면에, vivado를 쓰면 주로 LUT형태로 합성이 되는데 왜 그런지 궁금합니다!

 

그리고 vivado에서 power, timing 분석하려고 하는데, power는 잘 뜨는데, 각 port마다의 timing이 아무것도 안나옵니다. vivado에서는 어떻게 설정해야하는지 궁금합니다.

답변 2

0

안녕하세요, 답변 남겨드립니다.

우선 Vivado와 Quartus에서 합성 결과가 다르게 보이는 이유는 두 툴이 타깃하는 FPGA 아키텍처의 차이 때문입니다. Quartus는 Intel FPGA(구 Altera) 계열을 대상으로 하고, Vivado는 Xilinx FPGA 계열을 대상으로 합니다. Intel FPGA는 내부 구조가 “Adaptive Logic Module (ALM)” 기반으로, 하나의 ALM 안에 여러 개의 기본 게이트 수준 연산이 가능하도록 설계되어 있습니다. 따라서 합성 결과 리포트에서 주로 게이트 레벨(Netlist 형태) 로 자원을 보여주는 반면, Xilinx FPGA는 내부에 “Look-Up Table (LUT)” 기반 구조가 핵심이기 때문에 합성 결과가 LUT 단위로 표현됩니다. 결국 같은 RTL 코드라도 합성기가 해당 FPGA의 기본 연산 블록(Primitive)을 기준으로 맵핑하기 때문에 Quartus는 게이트 기반, Vivado는 LUT 기반 결과를 기본적으로 제공합니다. 예를 들어, 4입력 AND 게이트를 합성하면 Quartus에서는 여러 개의 NAND/OR 게이트로 최적화된 ALM 단위로 보고되지만, Vivado에서는 6-input LUT 하나에 매핑되어 “LUT1 개 사용”이라고 표시됩니다.

다음으로 Vivado에서 타이밍 분석 시, Power는 잘 뜨는데 각 포트별 타이밍이 안 나오는 이유는 타이밍 제약(Constraint) 을 충분히 주지 않았기 때문일 가능성이 큽니다. Vivado의 타이밍 분석 엔진(Static Timing Analysis, STA)은 SDC 형식의 제약을 기반으로 동작합니다. 대표적으로 create_clock 제약을 통해 입력 클럭의 주기를 정의해야 하고, 외부 입출력(IO)에 대해서는 set_input_delay, set_output_delay 제약을 명시해야 각 포트 경로의 Setup/Hold 타이밍을 계산할 수 있습니다. 만약 클럭 정의만 하고 IO 제약을 주지 않으면 내부 레지스터 경로에 대해서만 타이밍 분석이 수행되고, 외부 포트 기준의 타이밍 리포트는 공란으로 나타날 수 있습니다.

실제 현업에서는 다음과 같이 설정합니다. 예를 들어 100MHz 클럭을 입력으로 사용하는 경우

create_clock -name clk -period 10 [get_ports clk]
set_input_delay -clock clk 2.0 [get_ports data_in]
set_output_delay -clock clk 3.0 [get_ports data_out]

위와 같이 제약을 주면 Vivado의 Report Timing Summary에서 각 포트별 Setup/Hold 타이밍을 확인할 수 있고, Worst Negative Slack(WNS)이나 Total Negative Slack(TNS)도 포트 기준으로 계산됩니다. 특히 Xilinx FPGA 프로젝트에서는 XDC (Xilinx Design Constraints) 파일에 이러한 내용을 기술하는 것이 필수적입니다.

정리하면, Quartus와 Vivado의 합성 결과 차이는 FPGA 벤더별 내부 아키텍처 차이에서 기인하고, Vivado에서 포트 타이밍이 안 보이는 문제는 IO 타이밍 제약이 설정되지 않았기 때문입니다. 현업에서는 보통 Synopsys SDC 포맷을 기준으로 입력 지연, 출력 지연, 멀티사이클 경로 등을 꼼꼼히 제약해 STA를 돌리는 것이 기본입니다.

0

안녕하세요, 인프런 AI 인턴입니다. 아이스침대님.

Vivado와 Quartus의 합성 결과에 대한 차이점과 Vivado에서의 타이밍 설정에 대한 질문을 주셨군요. 이 두 가지 측면에서 자세히 설명드리겠습니다.

1. Vivado와 Quartus의 합성 결과 차이

Quartus는 Altera(현재는 Intel)의 FPGA 개발 툴이고, Vivado는 Xilinx(현재는 AMD로 통합됨)의 FPGA 개발 툴입니다. 각각의 툴은 자사의 FPGA 아키텍처에 맞춰 최적화되어 있으며, 그 결과 다음과 같은 차이를 보입니다:
- Quartus: 게이트 레벨의 합성 도구로, FPGA 내부에서 각각의 논리 게이트(AND, OR, NOT 등)와 같은 기본 요소를 기반으로 회로를 구현합니다. 이는 전통적인 ASIC 설계와 유사한 방식입니다.
- Vivado: Xilinx FPGA에서의 합성은 주로 Look-Up Table(LUT) 형태로 이루어집니다. LUT는 FPGA의 프로그램 가능한 소자이며, 다양한 입력 조합에 대해 미리 설정된 출력을 제공할 수 있는 유연한 구조입니다. 따라서 LUT를 활용하여 복잡한 로직을 효율적으로 구현할 수 있습니다.

두 툴은 FPGA의 구조적 차이에 따라 이와 같이 다른 방식으로 회로를 합성하게 됩니다.

2. Vivado에서 타이밍 설정

Vivado에서 특정 포트의 타이밍 정보가 나타나지 않는 경우에는 다음 사항을 확인해 보세요:
- 클럭 제약 설정: 타이밍 분석을 위해서는 클럭 제약이 올바르게 설정되어 있어야 합니다. SDC 파일에서 create_clock 명령어가 제대로 적용되어 있는지 확인하세요.

  create_clock -name my_clock -period 10.0 [get_ports my_clock]
  • 포트 제약 확인: 원하는 포트가 타이밍 분석 대상에 포함되도록 제약이 설정되어 있는지, 각 포트의 타이밍 관련 속성이 제대로 설정되어 있는지 확인하세요.
  • Compilation: 타이밍 분석을 위한 최신 컴파일이 완료되었는지 확인합니다. 마지막으로 전체 프로젝트를 재컴파일하는 과정이 필요할 수 있습니다.
  • Timing Reports: 타이밍 레포트 생성 시 올바른 경로 및 조건이 설정되었는지 확인하고, 레포트를 수동으로 생성하여 확인해 보세요.

관련된 도움을 받을 수 있는 링크로는 다음을 추천드립니다:
- Vivado에서 Timing Constraints 설정하기
- Xilinx Vivado 타이밍 분석 방법

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

아이스침대님의 프로필 이미지
아이스침대

작성한 질문수

질문하기