오늘은 맑음

Vivado Tutorial / Vivado 시작하기 본문

Tools/Vivado

Vivado Tutorial / Vivado 시작하기

자전거 타는 구구 2021. 4. 10. 21:25
반응형

Vivado를 설치하셨다면, 실행해봅시다.

기본적으로 clk, reset, wire, reg에 대한 개념은 알고 계시다는 가정 하에 진행하겠습니다.

 

오늘은 간단한 덧셈기를 만들고 testbench를 통해 시뮬레이션을 수행해보도록 하겠습니다.

메인 화면은 아래와 같습니다.

create project를 눌러 프로젝트를 생성해줍니다.

Project 이름을 짓고 원하는 location에 생성해줍니다.

우리는 RTL을 테스트 할 예정이므로 RTL Project를 선택합니다.

기존에 사용하던 파일이 있다면 Add File을, 바로 코드 파일을 추가하실 예정이면 Create File을 눌러줍니다.

지금은 Next를 누르겠습니다.

Constraints 파일은 Synthesis/Implementation등 시뮬레이션 이후 단계에서 사용하는 파일입니다.

I/O 정보/를 포함해서 다양한 정보들을 담고 있습니다. 지금은 필요 없으니까 Next!

여기는 타겟 보드와 칩셋을 선택할 수 있습니다.

보드를 선택하시려면 Boards로 변경하고, 칩셋 모델을 선택하시려면 칩셋에 적힌 넘버를 보고 선택하시면 됩니다. 

시뮬레이션만 진행하신다면 문제가 없겠지만, power를 재거나 LUT/BRAM등 자원 사용량을 보고 싶으신 경우에는 타겟 칩셋/보드를 선택하셔야 합니다.

Finish!!

위와 같이 Design Source라는 프로젝트가 생겼고, 하위로 Constraints, Simulation Source, Utility Source가 생겼습니다.

우리는 Design Source를 생성할 예정이므로 좌측에 Add Source를 선택!

Add or create design sources를 선택하고 Next를 누릅니다.

파일 네임을 작성하고 OK를 누릅니다. 저는 adder라고 정했습니다.

그리고 Next!

다음과 같이 Design Source에 adder가 추가되었습니다.

adder는 모듈 네임이고, (adder.v)가 실제 파일의 이름입니다.

 

정말 멋있는 adder가 작성되었습니다!

8-bit a와 8-bit b가 입력되고, c에 더해져 출력되는 형식입니다.

posedge에 CLK에 동기화 되며 negedge에 nRST에 동기화 됩니다.

 

한 번 합성도 진행해볼까요? Synthesis를 눌러줍니다.

Option에서는 CPU의 성능(thread)에 따라 Number of jobs를 늘려 빠르게 합성을 수행할 수 있습니다.

 

Synthesis가 완료 되면 다음 작업을 선택하게 됩니다.

살포시 cancle을 눌러줍니다.

cancle을 눌러도 위의 작업은 언제든지 진행할 수 있습니다.

테스트벤치를 작성하겠습니다. 이번에는 Simulation Source를 선택합니다.

아까와 동일한 방법으로 tb_adder.v파일을 생성합니다.

이제 sim_1 아래에 아까 작성한 adder와 tb_adder가 생겼습니다.

한번 tb를 작성해볼까요?

 

처음은 빈 파일이지만 당황하지 않고 작성을 시작합니다.

module tb_adder();아래에 작성합니다.

 

input data는 계속 값을 담고 저장해야 하므로 reg로 선언합니다.

output은 wire로 선언해서 연결해줍니다.

 

위의 initial문은 nRST과 a, b값을 설정합니다.

initial문은 여러개를 사용해도 되므로 원하면 모든 값을 따로 설정하셔도 됩니다.

하나의 initial문 안에서 여러개의 데이터를 컨트롤 한다면 그 데이터들은 그 initial문 안에서 순차적으로 실행 됩니다.

하지만 두 개 이상의 initial에 나눠서 test를 수행하면 서로 다른 initial문은 병렬적으로 실행될 수 있습니다.

 

아래에 CLK을 나눈 이유는 병렬적으로 수행하기 위해서입니다.

CLK은 지속적으로 high와 low로 토글되어야 하는데 CLK이 다른 값들과 함께 컨트롤 된다면 nRST 또는 a, b를 변경하기 위해 사용한 delay가 CLK에 영향을 끼치게 됩니다.

따라서 CLK은 다른 initial문에서 작성했습니다.

 

testbench는 작성하기 나름입니다.

system task를 이용하거나 for문을 이용해서 반복작업을 수행할 수도 있습니다.

 

 

위와 같이 testbench를 작성한다면 위와 같이 tb안에 adder가 포함됩니다.

 

.

이제 좌측 메뉴에서 Run Simulation을 선택하고 Run Behavioral Simulation을 선택합니다.

이제 Simulation 화면이 다음과 같이 나왔습니다.

위의 박스쳐진 아이콘을 눌러줍니다.

 

짠! 위와 같이 CLK이 10ns마다 high/low로 토글됩니다.

nRST이 low인 동안 c가 0으로 유지됩니다.

nRST이 20ns 후에 high로 변경되고, 50ns 후에 a와 b가 입력됩니다.

그리고 c에 더해진 값이 저장되어 출력됩니다.

 

시그널을 우클릭 하면 Radix와 color도 변경해서 볼 수 있습니다.

default Hexa를 Decimal로 변경했습니다.

 

이번에는 간단한 adder를 작성하고, testbench를 통해 시뮬레이션을 진행해보았습니다.

 

반응형

'Tools > Vivado' 카테고리의 다른 글

Vivado Tutorial / Vivado WebPACK Edition 설치  (3) 2021.04.10
Vivado HLS Tutorial(HLS 기초)  (7) 2019.12.12
Vivado HLS(High Level Synthesis)  (0) 2019.12.12
Comments