50
보안 회로 설계 모델심 설치 & Verilog testbench 기초문법 Dong Kyue Kim Hanyang University [email protected]

보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

보안 회로 설계

모델심 설치 & Verilog testbench 기초문법

Dong Kyue Kim

Hanyang University

[email protected]

Page 2: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치

Page 3: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

33

ModelSim

• ModelSim

– Made by Mentor

– HDL simulator

• VHDL, Verilog, System Verilog and optional SystemC

– HDL에 의해 합성될 회로의 동작 과정과 결과 예상

• ModelSim Student Edition Download Link– https://www.mentor.com/company/higher_ed/modelsim-student-edition

Page 4: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

설치파일 다운로드 과정-1

4

– ModelSim Student Edition Download Link에서 학교메일을 포함한 정보 작성

Page 5: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

설치파일 다운로드 과정-2

5

– 정상적인 download 신청이 끝나면 아래와 같은 메시지 출력됨

Page 6: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

설치파일 다운로드 과정-3

6

– 메일을 통해 다운로드 링크를 받을 수 있음.

Page 7: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

– 다운받은 설치파일은 다른 컴퓨터에 공유가 불가능(이후 발급받을 라이센스와 연동됨)

모델심 설치과정-1

7

Page 8: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 라이센스 설정 - 1

8

– 라이센스 신청을 위한 정보 입력

Page 9: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 라이센스 설정 - 2

9

– 메일을 통한 라이센스 발급

Page 10: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 라이센스 설정 - 3

10

– 모델심이 설치된 폴더에 라이센스 파일 저장

Page 11: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치 확인 - 1

11

– 정상적으로 켜지는 모델심 확인

Page 12: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치 확인 - 2

12

– 새 프로젝트의 생성

Page 13: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치 확인 - 3

13

– 프로젝트 폴더 생성 및 지정

Page 14: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치 확인 - 3

14

– 프로젝트 폴더 생성 및 지정

Page 15: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치 확인 - 4

15

– 파일의 추가

Page 16: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치 확인 - 5

– 컴파일 정상동작 확인

16

Page 17: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치 확인 - 6

– Simulation 열기

17

Page 18: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 설치 확인 - 7

– Simulation 동작 확인

18

Page 19: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

모델심 튜토리얼

• Product Tutorial

– 튜토리얼 소개 동영상: https://www.mentor.com/products/fv/multimedia/modelsim-essentials

– 튜토리얼 문서 경로

• 다음강의에서 튜토리얼 내용설명 예정(모델심 사용법)

19

Page 20: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 소개

Page 21: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 소개

• Testbench란

– verilog로 설계한 논리 회로를 시뮬레이션 하기 위해서 사용

– 검증할 회로에 대해서 입력값(인풋)을 주어서, 그 때의 출력값(아웃풋)을관측하여 제대로 동작되는지 확인할 수 있음

21

검증대상회로input output

Page 22: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

4

Testbench 프로그램 구조

• module 선언 : module의 이름 정의

• 신호 및 변수 선언 : 입력 신호 및 지역 변수 선언

• 검증대상 호출

• 신호 입력을 통해 검증대상의 결과 확인

– initial, task 문을 이용하여 작성

• endmodule

module 선언신호 및 변수 선언검증대상 호출

신호 입력

endmodule

Page 23: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

• Testbench 형식

– Ex) DES testbench

23

Testbench 소개

Page 24: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

• Testbench 형식

– Ex) DES testbench

24

Testbench 소개

module 모듈이름; // 포트 목록은 쓰지 않는다.

Page 25: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

• Testbench 형식

– Ex) DES testbench

25

Testbench 소개

시뮬레이션 할 대상이 되는 입력값은 reg 또는 wire로

출력값은 wire로 선언한다.

ex) clk, start, reset 신호 그리고 암호화할 입력값과 key값을 reg로,

암호화 된 출력값과 완료신호 done은 wire로 선언해주었다.

Page 26: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

• Testbench 형식

– Ex) DES testbench

26

Testbench 소개

검증하고 싶은 모듈을 호출하고 포트를 연결해 준다.

포트를 연결 할 때는 인자 순서대로 연결할 수 있으며,

또는 순서에 상관없이 이름에 각각 할당할 수도 있다.

Page 27: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

• Testbench 형식

– Ex) DES testbench

27

Testbench 소개

검증하고 싶은 모듈을 호출하고 포트를 연결해 준다.

포트를 연결 할 때는 인자 순서대로 연결할 수 있으며,

또는 순서에 상관없이 이름에 각각 할당할 수도 있다.

Ex)module adder(x, y, c_out, c_in, sum); // ... endmodule // 위치에 의한 포트 연결adder adder1(inp1, inp2, carry_out, carry_in, sum_out); // 이름에 의한 포트 연결adder adder2(.sum(sum_out), .c_out(carry_out), .c_in(carry_in), .x(inp1), .y(inp2));

Page 28: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

• Testbench 형식

– Ex) DES testbench

28

Testbench 소개

initial문을 통해

입력신호와

input 데이터를 넣어 준다.

Page 29: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법(1)컴파일러 지시어

Page 30: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

6

Test Program 작성 방법 – Initial / fork~join

• Initial 문

– 문장 블록을 처음부터 끝까지 한번만 순차적(sequential) 실행

– 시뮬레이션 할 때만 사용

• fork ~ join

– 순차 처리 블록인 begin ~ end와 비교되는 병렬 처리 블록

– 시뮬레이션 할 때만 사용

Page 31: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [컴파일러 지시어]

• `timescale

31

`timescale 1ns/10ps

module testbench ;

reg X, Y ;

wire C, S ;

initial begin

• delay 입력

– 직접적 숫자로 입력

• Ex) #50, #200

– parameter 이용

• Ex) parameter STEP = 100; … parameter로 미리 정의

#STEP … STEP에 정의된 값인 100이 들어감

`timescale 1step단위/해상도 ms : (밀리/초)10^-3Ms : (마이크로/초)10^-6ns : (나노/초)10^-9ps : (피코/초)10^-12fs : (펨토/초)10^-15as : (아토/초)10^-18

Page 32: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

32

`timescale 1ns/10ps

module testbench ;

reg X, Y ;

wire C, S ;

initial begin

X = 0 ; Y = 0 ; #5.5 ;

X = 0 ; Y = 1 ; #5.55 ;

X = 1 ; Y = 0 ; #5.555 ;

X = 1 ; Y = 1 ; #5.5555 ;

$stop ;

end

endmodule

= 5.5ns delay = 5500ps delay

= 5.55ns delay =5550ps delay

= 5.555ns delay불가능

= 5.5555ns delay불가능

해상도를 바꿔야 함`timescale 1ns/100fs

Testbench 기본 문법 [컴파일러 지시어]

ms : (밀리/초)10^-3Ms : (마이크로/초)10^-6ns : (나노/초)10^-9ps : (피코/초)10^-12fs : (펨토/초)10^-15as : (아토/초)10^-18

• `timescale

`timescale 1step단위/해상도

Page 33: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

7

Test Program 작성 방법 – delay / clock

• clock 생성

– always 문을 이용하여 clk을 미리 정의

always#(50) clk = ~clk;

initial…

Ex) compile error 뜸 Ex) 올바른 사용

Page 34: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

8

Test Program 작성 방법 – delay/clock 예제

• 절대적인 지연

always

#(50) clk = ~clk;

initial

begin

clk=0; reset=1; x=0;

#50 reset=0; x=1;

#50 x=1;

#50 x=0;

#50 x=0;

#50 x=1;

#50 $finish;

end

clock생성

초기값

입력값의변화

종료

always

#(50) clk = ~clk;

initial

begin

clk=0; reset=1; x=0;

@(posedge clk)

#10 x=1;

#10 x=0;

end

• clock에 대한 상대적인 지연

Page 35: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [컴파일러 지시어]

• clock 생성예제

35

parameter를 선언하여 clock을 생성한 예제

50us 지났을 때 반전되도록 함

Page 36: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

5

Testbench 기본 문법 [컴파일러 지시어]

• define

– C언어의 #define과 거의 같다.

– `define으로 정의된 문장을 참조할 대에도 ` 기호가 필요하다.

Ex) `define SIZE 10 // `SIZE 를 10으로 사용한다.

`define END $stop // `END를 $stop 으로 사용한다.

Ex) `define ABC #1

`ABC data = 0;

Page 37: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

• `include

– 텍스트 삽입

• C언어의 #include와 거의 같으며 파일 전체의 내용을 삽입할 경우에 사용된다.

• 다른 verilog소스 파일을 현재 소스파일에 추가하는 용도

Ex) `include “GLOBAL.V”//GLOBAL.V 파일을 삽입

`include “PARTS/COUNT.V”//PARTS 폴더의 COUNT.V파일을 삽입

37

Testbench 기본 문법 [컴파일러 지시어]

Page 38: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법(2)시스템 태스크

Page 39: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [시스템 태스크]

• Simulation의 실행을 제어하는 system task

– stop / finish

• $stop

– 시뮬레이션을 중단한다.

– 다시 시작 가능함

• $finish

– 완전히 시뮬레이션을 종료한다

– 종료를 묻는 대화 창에서 취소 시, 다시 시작 가능하다.

39

Page 40: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

13

System Task – Example stop / finish

• Test Stimulus

일단중단

종료여부 물어봄계속할 수 있다

종료 혹은 중단

Page 41: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [시스템 태스크]

• Simulation에서 결과를 display하는 system task

– Transcript에 출력됨

• $time

– 시뮬레이션의 현재 시간을 나타낸다.

• $display

– C언어의 printf와 용법이 비슷하다.

– 시뮬레이션 실행 시 실행창에 내용 1회 출력한다.

– 변수 값, 문자열, 수식 등을 출력하는 용도로 사용한다.

– ex) $display(“ i = %d”,i );

• $monitor

– 연결한 레지스터나 와이어의 값이 변할 때마다 그 값을 계속해서 출력한다.

– ex) $monitor($time, “ %d%dmin %d%dsec”, highM, lowM, highS, lowS);

41

Page 42: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

14

System Task – Example display / monitor

• Test Stimulus

값이 변할 때마다 계속출력

START 문구를 한번 출력

START 출력

값이 변할 때마다계속 출력한다.

Page 43: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

12

System Task

• 파일 입/출력 system task

– readmemh / readmemb / writememh / writememb

– h : 16진수 b : 2진수

– 작성 방법

ex) reg[7:0] data[0:7];

$readmemh(“파일 이름”, data) ;

Page 44: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

15

System Task – Example readmem

한 줄에 들어가는 자료의 크기는

reg의 크기를 넘을 수 없다.

read에서는 배열에 크기가 text의 전체 줄 수 이상이어야 한다.

(write는 반대)

Page 45: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [시스템 태스크]

45

• 포맷된 파일출력이 가능한 system task

– C언어와 비슷하다.

– $fopen(filename);

• 파일을 열고 descriptor 리턴

– $fclose([descriptor]);

• 파일을 닫음, descriptor 생략 시 모든 파일 닫힘

– $fdisplay(descriptor, “…”);

• descriptor파일에 “…”출력하고 한 줄 띄움, 다음 줄에 출력

– $fwrite(descriptor, “…”);

• descriptor파일에 “…”출력, 같은 줄에 출력

– $fmonitor(descriptor, “…”);

• 등록된 parameter의 변화가 있을 때만 출력

ex)

Page 46: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법(3)반복문&task문

Page 47: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [루프문]

• for문ex) for( i=0; i<=15; i=i+1 ) begin

#50; A=A+1;

end

• repeat(반복 회수)ex) repeat(10) begin

$display(“i = %d”, i );

i = i + 1 ;

end

• while 루프ex) i = 0 ;

while(i<10) begin//while(참조건)일 때 실행

$display(“i = %d”, i );

i = i + 1 ;

end47

Page 48: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [루프문]

• forever루프 / disable문

– forever 루프는 무한 루프이다.

– disable문은 이름이 있는 블록이나 태스크를 끝낼 때 사용한다.

ex1)

ex2)

ex3)

48

Page 49: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [Task]

• Task문

– 같은 패턴의 동작을 여러 번 반복해서 사용할 수 있다.

49

ex)

task write_reg;

input addr;

input data;

begin

#25 A = addr;

#25 DIN = data;

#25;

end

endtask

<기본 형식>

task 태스크이름 ;

input 선언

begin

end

endtask

ex)

always@(negedge CLK)

write_reg(A,B);

<기본 형식>

태스크이름(인수1, …, 인수N)

• Task문 호출

Page 50: 보안회로설계esslab.hanyang.ac.kr/uploads/security_circuit_design... · 2019-03-21 · –verilog로설계한논리회로를시뮬레이션하기위해서사용 –검증할회로에대해서입력값(인풋)을주어서,

Testbench 기본 문법 [Task]

• Task문 변수

– Task문에서는 내부 변수를 사용할 수도 있고,

Global 변수를 사용할 수도 있다.

ex) 내부변수 사용 Global변수 사용

50