ModelSim 사용법 1. ModelSim-Altera 를이용한 Function/RTL 시뮬레이션 1.1. 테스트벤치를사용하지않는명령어기반시뮬레이션 1.1.1. 시뮬레이션을위한하드웨어 A B S C 그림 1. 반가산기 1.1.2. 작업디렉토리 - File - Change Directory 를클릭하여작업디렉토리지정. 1.1.3. 소스파일작성 - 모델심편집기나기타편집기가능 - New - Source - Verilog - 그림 3과같이반가산기코드작성 그림 2. 소스파일생성 - 1 -
그림 3. 반가산기소스코드 1.1.4. 라이브러리생성및소스파일컴파일 (a) 라이브러리생성모델심은하드웨어소스파일을시뮬레이션하기위해라이브러리를요구한다. vlib은라이브러리생성명령어로써, 수행후그림 4와같이작업디렉토리에 work가생성된다. Command: vlib < 라이브러리이름 > vlib work 그림 4. 라이브러리생성 (b) 소스파일컴파일소스파일생성후, 콘솔창을이용하여컴파일과시뮬레이션을수행한다. 본예제는반가산기로써하나의 halfadder.v 파일만존재하기때문에아래와같은명령어로콘솔에서컴파일을수행한다. 만일여러개의파일들이있다면모든파일에대한컴파일이필요하다. Command: vlog < 소스파일 > vlog halfadder.v - 2 -
1.1.5. 시뮬레이션 (a) VSIM 시뮬레이터를호출하여모듈에존재하는모든오브젝트 (input, output, reg, wire) 들을그림 5 와같이오브젝트 window에적재한다. 최상위모듈을적재하면하위모듈은자동으로적재된다. - 모듈이름 : 소스파일의이름 ( 여러개의모듈이존재하는경우, 최상위모듈이름 ) Command: vsim < 모듈이름 > vsim halfadder 그림 5. VSIM 시뮬레이터를통한오브젝트적재 (b) 오브젝트윈도우에서실제시뮬레이션이필요한오브젝트들을 Wave 윈도우에시그널로추가한다. 아래 add 명령어는모듈에포함된모든오브젝트들을추가하는것이며, 특정오브젝트만추가할경우 add wave halfadder/s와같이명시적으로이름을기재한다. 그림 6은반가산기의모든오브젝트들을추가한경우이다. Command: add wave < 오브젝트이름 > add wave halfadder/* - 3 -
그림 6. Wave 윈도우에시그널추가 (c) Wave 윈도우의시그널값설정. 테스트벤치파일을사용하지않기때문에각입력시그널에대해서시간별로입력값설정이필요하다. 시간뒤에단위를지정하지않으면, 기본적으로 ps 단위가된다. 출력은입력값들에의해결정된다. Command: force < 오브젝트 name> < 값1> < 시간1>, < 값2> < 시간2>,..., < 값n> < 시간n> force halfadder/a( 또는 a) 0 0, 1 10, 0 20 force halfadder/b 0 0, 0 10, 1 20 (d) 시뮬레이션실행. run 명령을종료시간과함께기술하여시뮬레이션을시작한다. 그림 7은 100ps 까지시뮬레이션이실행된결과이다. Command: run < 종료시간 > run 100-4 -
그림 7. 시뮬레이션실행 (e) 시뮬레이션재실행 Command: restart (f) 시뮬레이션종료 Command: quit -sim - 5 -
1.2. 테스트벤치를사용하지않는 GUI 기반시뮬레이션 1.2.1. 프로젝트및소스파일생성 (a) 작업디렉토리지정 1.1.2와동일 (b) 프로젝트생성메뉴 New - Project 선택. 그림 8의다이얼로그박스에서, 프로젝트이름과 Default Library Name 작성. 본예제에서는반가산기를생성하기위해, 프로젝트이름을 halfadder로작성하고라이브러리는기본 work를사용. OK 버튼을클릭. 그림 8. 프로젝트생성 (c) 소스파일 ( 설계모듈 ) 생성소스파일이있는경우 : 그림 9(a) 에서 Add Existing File 선택하여작업디렉토리에서소스파일선택. 소스파일이없는경우 : Create New File 선택. 그림 9(b) 에서파일이름을 halfadder( 또는 halfadder.v) 로기재하고파일타입은 Verilog를선택. 완료프로젝트생성결과하면그림 10과같이빈소스파일을포함하는프로젝트생성. (a) (b) 그림 9. 프로젝트에소스파일추가 - 6 -
그림 10. 프로젝트에파일추가 (d) 소스파일작성. - 파일이름에서마우스오른쪽버튼을클릭하여 Edit 선택. 프로젝트오른쪽에 Edit 윈도우생성. 그림 3과같이반가산기코드작성. 1.2.2. 소스파일컴파일작성된파일을저장하고그림 11에 1에표시된컴파일아이콘클릭 ( 또는메뉴에서 Compile - Compile All 선택 ). 1.2.3. 시뮬레이션 (a) 컴파일이완료후, 그림 11의 2에표시된시뮬레이션아이콘클릭 ( 또는메뉴에서 Simulate - Start Simulation 선택 ). 그림 12의 Start Simulation 다이얼로그박스에서 work 라이브러리를확장하여 halfadder 모듈을선택하고 OK 버튼클릭하면그림 13과같이시뮬레이션을위한오브젝트적재작업이완료된다. - 7 -
❶ ❷ 그림 11. 컴파일및시뮬레이션 그림 12. Start Simulation - 8 -
❶ ❷ 그림 13. VSIM 시뮬레이터를통한오브젝트적재 (b) 시뮬레이션이필요한오브젝트들을드래그하여 Wave 윈도우에시그널로추가. (c) force 명령어를통해각입력시그널에값설정. 그림 13에서시뮬레이션종료시간설정 (1번) 후, 시뮬레이션시작 (2번). - 9 -
1.3. 테스트벤치를사용한 GUI기반 Function 시뮬레이션 - 작업디렉토리와프로젝트생성은 1.2.1의 (a),(b) 와같은순서로수행 - 1.2.1의 (c) 에서반가산기와그림 14의테스트벤치소스파일이 (tb_halfadder.v) 존재. module tb_halfadder; reg a, b; wire s, c; initial begin a = 1'b0; b = 1'b0; #10 a = 1'b1; #10 a = 1'b0; b = 1'b1; end halfadder u1 (.a(a),.b(b),.s(s),.c(c) ); endmodule ` 그림 14. 반가산기테스트벤치파일 - 그림 9 에서 Add Existing File 을선택하여 halfadder.v 와 tb_halfadder.v 파일을추가. 1.3.1. 소스파일컴파일 - 그림 15 와같이반가산기와테스트벤치소스파일이추가되었으면메뉴에서 Compile - Compile All 그림 15. 소스파일컴파일 - 10 -
1.3.2. 시뮬레이션 (a) Simulate - Start Simulate( 또는시뮬레이션아이콘 ) 선택 (b) 그림 12의 Start Simulation 다이얼로그박스가나타나면 work 라이브러리하위에 halfadder와 tb_halfadder가포함된것을볼수있다. 명령어기반시뮬레이션과달리테스트벤치파일을클릭하고 OK 버튼클릭. 그림 16과같이최상위모듈 tb_halfadder가하위에반가산기를인스턴스로포함한다. 시뮬레이션에필요한오브젝트들을 wave 윈도우로드래그한후그림 16의 run 아이콘 (1번) 을클릭하면시뮬레이션이시작된다. 시뮬레이션은아이콘왼쪽에표시된시간에종료된다. ❶ 그림 16. VSIM 시뮬레이터를통한오브젝트적재 그림 17. 시뮬레이션결과 - 11 -
2. ModelSim-Altera 를이용한 Gate-Level Timing 시뮬레이션 2.1. 설계파일 Counter 그림 18. 카운터블록도 2.2. Gate-Level Timing 시뮬레이션에필요한파일 1) Netlist 파일 : *.vo 2) Standard Delay Format Output File(SDF): *.sdo 2.3. Gate-Level Timing 시뮬레이션을위한 Quartus II 프로젝트생성 1) 프로젝트생성 File - New Project Wizard 3) 디렉토리지정및프로젝트이름 (Top-Level Entity와동일 ) 입력 그림 19. 프로젝트생성 (1/5) - 12 -
4) 소스파일이존재하는경우 그림 20에서 Browse하여존재하는소스파일을프로젝트에추가 5) 소스파일이없는경우 그림 20에서 Next 클릭 그림 20. 프로젝트생성 (2/5) 6) 사용할디바이스선택 ( Family: Cyclone II, Specific Name: EP2C35F672C8 ) 그림 21. 프로젝트생성 (3/5) - 13 -
7) Gate-Level Timing 시뮬레이션을위한 Tool과 HDL 타입설정 Tool name: ModelSim-Altera Format: Verilog HDL 그림 22. 프로젝트생성 (4/5) 8) 카운터소스파일생성 File - New Design File - Verilog HDL File 선택 그림 23. 소스파일생성 - 14 -
2.4. Timing 시뮬레이션을위한 Netlist 파일생성 - Netlist 파일생성을위한 Quartus II 프로젝트설정 1) 프로젝트설정 Assignments - Settings Category에서 Simulation 선택. 그림 24에서 Tool name과 EDA Netlist Writer settings 내용확인 그림 24. Netlist 파일저장위치지정 9) NetiveLink settings에서테스트벤치설정 ( 이전에테스트벤치파일작성이완료되어야함 ) 그림 25에서 Test Benches 클릭 그림 26에서 New 선택 그림 27과같이테스트벤치이름과 Top Level Module 이름작성 테스트벤치에사용된인스턴스이름작성 시뮬레이션종료시간설정 테스트벤치파일추가 (Browse 사용 ) - 15 -
그림 25. 테스트벤치컴파일 그림 26. 테스트벤치추가 - 16 -
그림 27. 테스트벤치설정 10) ModelSim-Altera 경로설정 Tools - Option 그림 28과같이 EDA Tool Options에서 ModelSim-Altera가설치된경로확인 그림 28. ModelSim-Altera 경로설정 - 17 -
11) 프로젝트컴파일 그림 25에서 Run gate-level simulation automatically after compilation을클릭하면컴파일완료후자동으로 ModelSim-Altera로시뮬레이션된다. 12) 생성된 Netlist 파일 (counter.vo) 과 SDF(counter_v.sdo) 확인 다음디렉토리에저장 : "Quartus II 프로젝트디렉토리 \simulation\modelsim" 그림 29. 생성된 Netlist 와 SDF 파일 - 18 -
2.5. ModelSim-Altera 프로젝트생성 - Run gate-level simulation automatically after compilation을사용하지않고 ModelSim-Altera를독립적으로실행하여시뮬레이션. 1) 작업디렉토리변경 (counter.vo, counter_v.sdo가생성된디렉토리 ) 2) work 라이브러리생성 File - New - Library 3) 프로젝트생성 File - New - Project 그림 30. 라이브러리생성 그림 31. 프로젝트생성 4) 그림 32의 Add Existing File으로파일추가 "Quartus II 프로젝트디렉토리 \simulation\modelsim" 의 Netlist 파일 (counter.vo). "Quartus II 프로젝트디렉토리 " 의테스트벤치파일 (tb_counter.v). 그림 32. 소스파일추가 - 19 -
2.6. 컴파일 1) 프로젝트에추가된 Netlist와테스트벤치컴파일 2) 두개의파일사이에종속성이있는경우, 컴파일순서는시뮬레이션에영향을미친다. 때문에종속성이명확하지않으면그림 33의프로젝트탭에서오른쪽마우스버튼을클릭하여그림 34의 Auto Generate를사용한다. 그림 33. 컴파일 그림 34. 컴파일순서 - 20 -
그림 35. 컴파일완료 2.7. 시뮬레이션 1) Simulate - Start Simulate 2) 그림 36의 Library 탭클릭, Search Libraries ( -L ) 에서사용하는 FPGA 디바이스라이브러리를선택. 제공되는라이브러리는 VHDL과 Verilog 버전존재. Verilog는다음과같이 디바이스이름 _ver 라이브러리를사용한다. 예를들어, CycloneII는 cycloneii_ver를추가한다. 그림 36. 디바이스라이브러리추가 - 21 -
3) 라이브러리가추가되면 Design 탭을클릭하여그림 37과같이테스트벤치를선택한다. OK 버튼을누르면테스트벤치모듈내에존재하는모든오브젝트들이적재된다. 그림 37. 시뮬레이션 4) 시뮬레이션이필요한오브젝트들을 wave 창으로드래그한다. 5) 그림 13의종료시간 (1번) 을설정하고 run 아이콘 (2번) 을클릭하거나 run < 종료시간 > 명령어로시뮬레이션을시작할수있다. 6) Netlist와 SDF 파일을이용하여카운터에대한 Gate-Level Timing 시뮬레이션결과는그림 38과같다. 그림 38. 카운터에대한 Gate-Level 시뮬레이션 - 22 -