Xilinx/Vivado

How to use HDL Parameters for Interface Inference in a RTL Module

mouessee 2023. 2. 21. 15:58
728x90
반응형

 

 

 

 Introduction

 

 

Block Design에서의 Add IP의 각 Symbol을 보면 아래의 그림과 같이...

Input pins, Output pins에 대하여 각각의 Interface 별로 묶여있는 것을 확인할 수 있습니다.

(아래 캡처화면의 Red-Box 부분을 보아주세요.)

 

AXI-Stream FIFO

 

여기서 User가 정의한 나만의 Bus Interface도 가능할까요? 라는 생각이 떠오르지 않나요?

Vivado는 User가 정의한 Bus Interface (adder_input)를 Block design에서 아래와 같은 모습으로 묶을 수 있는 기능을 제공하고 있습니다.

 

test_v1_0

 

다음은 이러한 기능을 사용하는 방법에 대하여 설명하겠습니다.

 

 

 

728x90
반응형

 

 

 

Test를 위한 PC 사용환경은 다음과 같습니다.

 

 

아래 내용에서 사용된 Source Code 파일입니다.

test_mod.vhd
0.00MB

아래 내용에서 사용된  Vivado Project 파일입니다.

prj_v20_1.zip
0.02MB

 

 

 

 User가 만든 Bus Interface를 Block design에 정의하는 방법

 

 

1.

User Design에 사용할 Soure Code("test_mod.vhd")는 아래와 같습니다.

우선 아래의 Source Code를 이용하여 간단한 Vivado Project를 생성합니다.

 

test_mod.vhd

 

 

2.

아래와 같이 Add Module to Block Design을 합니다.

하지만 이러한 상태로는 우리가 원하는 "adder_input"이라는 이름의 Bus Interface로 묶이지 않습니다.

이를 위하여 "adder_input"이라는 이름의 Bus Interface를 Vivado가 알수 있도록 설정을 하여야만 가능합니다.

 

Add Module to Block Design 01

 

 

3.

나만의 Bus Interface를 정의하기 위하여는 Source Code에 "X_INTERFACE_INFO"라는 attribute를 사용하여야 합니다. 아래의 Code를 보아주세요.

 

X_INTERFACE_INFO

"adder_input"이라는 name의 user interface를 define하였으며, "adder_input" bus는 "a_in", "b_in", "c_in" 등 3개의 signal로 구성되었음을 알 수 있습니다.

 

 

4.

"adder_input"이라는 name의 user interface를 define한 전체 souce code("test_mod.vhd")는 다음과 같습니다.

 

test_mod.vhd

 

 

5.

여기서 한가지 더 작업을 하여야만 합니다.

Tools 메뉴의 Create Interface Definition을 click합니다.

 

Create Interface Definition 01

 

 

6.

아래와 같이 Name으로 "adder_input"을 Type하세요.

그리고 Location으로 현재 Vivado 프로젝트 폴더의 하위폴더로  "ip_repo"로 지정합니다.

("ip_repo" 폴더가 존재하지 않아도 됩니다. 자동으로 생성할지?에 대한 Window가 나타납니다. 이 경우 OK Button을 click합니다.)

이 후, 새로 나타난 "Interace-add_input v1.0" Window를 확인할 수 있습니다.

 

Create Interface Definition 02

 

 

7.

아래와 같이 "Interace-add_input v1.0" Window에서 "a_in", "b_in", "c_in"에 대하여 설정합니다.

(앞으로 "adder input"이라는 이름의 Bus Interface는 "a_in", "b_in", "c_in"을 가지게 됩니다. 각 signal의 Width는 각각의 signal이 1 bit이기 때문에 "1"로 설정합니다.)

이 후, Save Button을 click합니다.

 

Create Interface Definition 02

 

 

8.

인제 다시 한번 아래와 같이 Add Module to Block Design을 합니다.

드디어 우리가 원하는 "adder_input"이라는 이름의 Bus Interface로 묶여져 보이는 것을 확인할 수 있습니다.

 

Add Module to Block Design 02

 

 

9.

여기서 한 가지 더 알아 보아야 부분이 있습니다.

경우에 따라 "adder input"이라는 이름의 Bus Interface가

아래의 캡처화면처럼

Symbol의 왼 쪽, 혹은 오른 쪽에 표현될 수 있도록 조정할 필요성이 보이게 됩니다.

 

test_v1_0

 

test_v1_0

 

 

10.

Block Design에서 Symbol의 왼쪽 혹은 오른 쪽에 표현될 수 있도록 하려면 "X_INTERFACE_MODE"라는 attribute를 사용하여야 합니다.

아래의 Source Code는 Symbol의 왼 쪽에 구현되도록 할 때의 Example Source Code입니다.

 

X_INTERFACE_MODE

 

test_v1_0

 

 

11.

아래의 Source Code는 Symbol의 오른 쪽에 구현되도록 할 때의 Example Source Code입니다.

 

X_INTERFACE_MODE

 

test_v1_0

 

 

 


 

지금까지 User가 만든 Bus Interface를 Block design에 정의하는 방법에 대하여 알아보았습니다.
여러분의 FPGA 설계에 조금이라도 도움이 되었으면 합니다.
오늘도 좋은 하루 되세요.

(공감, 구독, 댓글은 저에게 힘이 됩니다!)

 

 

 


Reference

 

UG994 (v2020.1) June 3, 2020 - Designing IP Subsystems Using IP Integrator

 

 

 


Feb 21, 2023

Posted By: Mouessee

 

 

 

Xilinx 본사는 한국 내에 Corporate and Sales Distributor로 MAKUS를 두고 있습니다.
Xilinx 국내 Corporate and Sales Distributor인 MAKUS는 XIlinx FPGA Device를 기술영업을 통해 판매하며 기술지원이 가능합니다.
MAKUS www.makus.co.kr

 

 

 


관련 BLOG

------------------------------

------------------------------

 

728x90
반응형