Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
모델심 설치
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
설치파일 다운로드 과정-1
4
– ModelSim Student Edition Download Link에서 학교메일을 포함한 정보 작성
설치파일 다운로드 과정-2
5
– 정상적인 download 신청이 끝나면 아래와 같은 메시지 출력됨
설치파일 다운로드 과정-3
6
– 메일을 통해 다운로드 링크를 받을 수 있음.
– 다운받은 설치파일은 다른 컴퓨터에 공유가 불가능(이후 발급받을 라이센스와 연동됨)
모델심 설치과정-1
7
모델심 라이센스 설정 - 1
8
– 라이센스 신청을 위한 정보 입력
모델심 라이센스 설정 - 2
9
– 메일을 통한 라이센스 발급
모델심 라이센스 설정 - 3
10
– 모델심이 설치된 폴더에 라이센스 파일 저장
모델심 설치 확인 - 1
11
– 정상적으로 켜지는 모델심 확인
모델심 설치 확인 - 2
12
– 새 프로젝트의 생성
모델심 설치 확인 - 3
13
– 프로젝트 폴더 생성 및 지정
모델심 설치 확인 - 3
14
– 프로젝트 폴더 생성 및 지정
모델심 설치 확인 - 4
15
– 파일의 추가
모델심 설치 확인 - 5
– 컴파일 정상동작 확인
16
모델심 설치 확인 - 6
– Simulation 열기
17
모델심 설치 확인 - 7
– Simulation 동작 확인
18
모델심 튜토리얼
• Product Tutorial
– 튜토리얼 소개 동영상: https://www.mentor.com/products/fv/multimedia/modelsim-essentials
– 튜토리얼 문서 경로
• 다음강의에서 튜토리얼 내용설명 예정(모델심 사용법)
19
Testbench 소개
Testbench 소개
• Testbench란
– verilog로 설계한 논리 회로를 시뮬레이션 하기 위해서 사용
– 검증할 회로에 대해서 입력값(인풋)을 주어서, 그 때의 출력값(아웃풋)을관측하여 제대로 동작되는지 확인할 수 있음
21
검증대상회로input output
4
Testbench 프로그램 구조
• module 선언 : module의 이름 정의
• 신호 및 변수 선언 : 입력 신호 및 지역 변수 선언
• 검증대상 호출
• 신호 입력을 통해 검증대상의 결과 확인
– initial, task 문을 이용하여 작성
• endmodule
module 선언신호 및 변수 선언검증대상 호출
신호 입력
endmodule
• Testbench 형식
– Ex) DES testbench
23
Testbench 소개
• Testbench 형식
– Ex) DES testbench
24
Testbench 소개
module 모듈이름; // 포트 목록은 쓰지 않는다.
• Testbench 형식
– Ex) DES testbench
25
Testbench 소개
시뮬레이션 할 대상이 되는 입력값은 reg 또는 wire로
출력값은 wire로 선언한다.
ex) clk, start, reset 신호 그리고 암호화할 입력값과 key값을 reg로,
암호화 된 출력값과 완료신호 done은 wire로 선언해주었다.
• Testbench 형식
– Ex) DES testbench
26
Testbench 소개
검증하고 싶은 모듈을 호출하고 포트를 연결해 준다.
포트를 연결 할 때는 인자 순서대로 연결할 수 있으며,
또는 순서에 상관없이 이름에 각각 할당할 수도 있다.
• 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));
• Testbench 형식
– Ex) DES testbench
28
Testbench 소개
initial문을 통해
입력신호와
input 데이터를 넣어 준다.
Testbench 기본 문법(1)컴파일러 지시어
6
Test Program 작성 방법 – Initial / fork~join
• Initial 문
– 문장 블록을 처음부터 끝까지 한번만 순차적(sequential) 실행
– 시뮬레이션 할 때만 사용
• fork ~ join
– 순차 처리 블록인 begin ~ end와 비교되는 병렬 처리 블록
– 시뮬레이션 할 때만 사용
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
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단위/해상도
7
Test Program 작성 방법 – delay / clock
• clock 생성
– always 문을 이용하여 clk을 미리 정의
always#(50) clk = ~clk;
initial…
Ex) compile error 뜸 Ex) 올바른 사용
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에 대한 상대적인 지연
Testbench 기본 문법 [컴파일러 지시어]
• clock 생성예제
35
parameter를 선언하여 clock을 생성한 예제
50us 지났을 때 반전되도록 함
5
Testbench 기본 문법 [컴파일러 지시어]
• define
– C언어의 #define과 거의 같다.
– `define으로 정의된 문장을 참조할 대에도 ` 기호가 필요하다.
Ex) `define SIZE 10 // `SIZE 를 10으로 사용한다.
`define END $stop // `END를 $stop 으로 사용한다.
Ex) `define ABC #1
…
`ABC data = 0;
• `include
– 텍스트 삽입
• C언어의 #include와 거의 같으며 파일 전체의 내용을 삽입할 경우에 사용된다.
• 다른 verilog소스 파일을 현재 소스파일에 추가하는 용도
Ex) `include “GLOBAL.V”//GLOBAL.V 파일을 삽입
`include “PARTS/COUNT.V”//PARTS 폴더의 COUNT.V파일을 삽입
37
Testbench 기본 문법 [컴파일러 지시어]
Testbench 기본 문법(2)시스템 태스크
Testbench 기본 문법 [시스템 태스크]
• Simulation의 실행을 제어하는 system task
– stop / finish
• $stop
– 시뮬레이션을 중단한다.
– 다시 시작 가능함
• $finish
– 완전히 시뮬레이션을 종료한다
– 종료를 묻는 대화 창에서 취소 시, 다시 시작 가능하다.
39
13
System Task – Example stop / finish
• Test Stimulus
일단중단
종료여부 물어봄계속할 수 있다
종료 혹은 중단
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
14
System Task – Example display / monitor
• Test Stimulus
값이 변할 때마다 계속출력
START 문구를 한번 출력
START 출력
값이 변할 때마다계속 출력한다.
12
System Task
• 파일 입/출력 system task
– readmemh / readmemb / writememh / writememb
– h : 16진수 b : 2진수
– 작성 방법
ex) reg[7:0] data[0:7];
$readmemh(“파일 이름”, data) ;
15
System Task – Example readmem
한 줄에 들어가는 자료의 크기는
reg의 크기를 넘을 수 없다.
read에서는 배열에 크기가 text의 전체 줄 수 이상이어야 한다.
(write는 반대)
Testbench 기본 문법 [시스템 태스크]
45
• 포맷된 파일출력이 가능한 system task
– C언어와 비슷하다.
– $fopen(filename);
• 파일을 열고 descriptor 리턴
– $fclose([descriptor]);
• 파일을 닫음, descriptor 생략 시 모든 파일 닫힘
– $fdisplay(descriptor, “…”);
• descriptor파일에 “…”출력하고 한 줄 띄움, 다음 줄에 출력
– $fwrite(descriptor, “…”);
• descriptor파일에 “…”출력, 같은 줄에 출력
– $fmonitor(descriptor, “…”);
• 등록된 parameter의 변화가 있을 때만 출력
ex)
Testbench 기본 문법(3)반복문&task문
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
Testbench 기본 문법 [루프문]
• forever루프 / disable문
– forever 루프는 무한 루프이다.
– disable문은 이름이 있는 블록이나 태스크를 끝낼 때 사용한다.
ex1)
ex2)
ex3)
48
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문 호출
Testbench 기본 문법 [Task]
• Task문 변수
– Task문에서는 내부 변수를 사용할 수도 있고,
Global 변수를 사용할 수도 있다.
ex) 내부변수 사용 Global변수 사용
50