Table of Contents Chapter 1 Introduction Download a Free PDF Reader With Search

Similar documents
MAX+plus II Getting Started - 무작정따라하기

ISP and CodeVisionAVR C Compiler.hwp

Orcad Capture 9.x

강의10

Remote UI Guide

,,,,,, (41) ( e f f e c t ), ( c u r r e n t ) ( p o t e n t i a l difference),, ( r e s i s t a n c e ) 2,,,,,,,, (41), (42) (42) ( 41) (Ohm s law),

슬라이드 1

Install stm32cubemx and st-link utility

Microsoft Word - Armjtag_문서1.doc

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

NTD36HD Manual

CD-RW_Advanced.PDF

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

슬라이드 1

DE1-SoC Board

PRO1_09E [읽기 전용]

tut_modelsim(student).hwp

Microsoft Word - Modelsim_QuartusII타이밍시뮬레이션.doc

기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

System Recovery 사용자 매뉴얼

Microsoft PowerPoint - AME_InstallRoutine_ver8.ppt

Studuino소프트웨어 설치

Endpoint Protector - Active Directory Deployment Guide

ICAS CADWorx SPLM License 평가판설치가이드

*Revision History 날짜 내용 최초작성 Tel Fax [2] page

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Mentor_PCB설계입문

chapter4

초보자를 위한 C++

_USB JTAG Ver1.0 User's Manual.hwp

untitled

Solaris Express Developer Edition

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

WebPACK 및 ModelSim 사용법.hwp

View Licenses and Services (customer)

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

Oracle VM VirtualBox 설치 VirtualBox에서 가상머신 설치 가상머신에 Ubuntu 설치

Smart Power Scope Release Informations.pages

MPLAB C18 C

슬라이드 1

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

EndNote X2 초급 분당차병원도서실사서최근영 ( )

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

untitled

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

CONTENTS 01 Adobe Photoshop Lightroom을 소개합니다 촬영부터 출력까지 간편한 사진 작업 (Simplify photography from shoot to finish) Adobe Photoshop Lightroom 작업공간(Workspace)

PRO1_02E [읽기 전용]

Libero Overview and Design Flow

MF5900 Series MF Driver Installation Guide

JDK이클립스

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

IRISCard Anywhere 5

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

The_IDA_Pro_Book

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

10X56_NWG_KOR.indd

6. 설치가시작되는동안 USB 드라이버가자동으로로드됩니다. USB 드라이버가성공적으로로드되면 Setup is starting( 설치가시작되는중 )... 화면이표시됩니다. 7. 화면지침에따라 Windows 7 설치를완료합니다. 방법 2: 수정된 Windows 7 ISO

tiawPlot ac 사용방법

PRO1_04E [읽기 전용]

목차 제 1 장 inexio Touch Driver소개 소개 및 주요 기능 제품사양... 4 제 2 장 설치 및 실행 설치 시 주의사항 설치 권고 사양 프로그램 설치 하드웨

1

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

C# Programming Guide - Types

소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를 제공합니다. 제품은 계속 업데이트되므로, 이 설명서의 이미지 및 텍스트는 사용자가 보유 중인 TeraStation 에 표시 된 이미지 및 텍스트와 약간 다를 수

untitled

Chapter 1

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

Week3

Microsoft PowerPoint - System Programming Lab Week1.ppt [호환 모드]

SBR-100S User Manual

Windows 8에서 BioStar 1 설치하기

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

B _00_Ko_p1-p51.indd

PowerPoint Template

JAVA 플랫폼 개발 환경 구축 및 활용

MCM, PCB (mentor) : da& librarian jakup & package jakup & layout jakup & fablink jakup & Summary 2 / 66

Domino Designer Portal Development tools Rational Application Developer WebSphere Portlet Factory Workplace Designer Workplace Forms Designer

APOGEE Insight_KR_Base_3P11

01장

ODS-FM1

슬라이드 1

슬라이드 1

vi 사용법

게임 기획서 표준양식 연구보고서

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

1

00 SPH-V6900_....

Office 365 사용자 가이드

PCServerMgmt7

Index 1. Intro Install Connect Scratch 1.4 (Offline Editor) Scratch 2.0 (Online Editor) Connect f

DocsPin_Korean.pages

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - ICCAD_Digital_lec02.ppt [호환 모드]

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

Transcription:

ModelSim/Questa Tutorial Software Version 10.4 서울시영등포구양평동 3 가이앤씨드림타워 1113 호 www.ednc.com Tel : 02-2069-0099

Table of Contents Chapter 1 Introduction............................................................ 7 Download a Free PDF Reader With Search.................................. 8 Chapter 2 Conceptual Overview.................................................... 9 Design Optimizations................................................... 9 Basic Simulation Flow.................................................. 9 Project Flow.......................................................... 10 Multiple Library Flow.................................................. 11 Debugging Tools...................................................... 12 Chapter 3 Basic Simulation....................................................... 14 Create the Working Design Library........................................ 14 Compile the Design Units............................................... 16 Optimize the Design................................................... 17 Load the Design...................................................... 17 Run the Simulation................................................... 18 Set Breakpoints and Step through the Source............................... 20 Chapter 4 Projects................................................................ 25 Create a New Project.................................................... 25 Add Objects to the Project................................................ 26 Changing Compile Order (VHDL).......................................... 28 Compile the Design...................................................... 29 Optimize for Design Visibility............................................ 30 Load the Design........................................................ 30 Organizing Projects with Folders........................................... 31 Adding Folders........................................................ 31 Moving Files to Folders................................................. 33 Using Simulation Configurations.......................................... 34 Chapter 5 Working With Multiple Libraries.......................................... 37 Creating the Resource Library............................................ 37 Creating the Project..................................................... 39 Loading Without Linking Libraries........................................ 40 Verilog.............................................................. 40 VHDL............................................................... 40 Linking to the Resource Library.......................................... 41 Permanently Mapping VHDL Resource Libraries............................ 42

Chapter 6 Simulating SystemC Designs............................................... 43 Setting up the Environment............................................... 43 Preparing an OSCI SystemC Design........................................ 44 Compiling a SystemC-only Design......................................... 46 Mixed SystemC and HDL Example......................................... 47 Viewing SystemC Objects in the GUI....................................... 50 Setting Breakpoints and Stepping in the Source Window........................ 51 Examining SystemC Objects and Variables................................... 53 Removing a Breakpoint.................................................. 54 Chapter 7 Analyzing Waveforms.................................................... 56 Loading a Design....................................................... 56 Add Objects to the Wave Window.......................................... 57 Zooming the Waveform Display........................................... 58 Using Cursors in the Wave Window........................................ 59 Working with a Single Cursor............................................. 59 Working with Multiple Cursors............................................ 60 Saving and Reusing the Window Format..................................... 61 Chapter 8 Creating Stimulus With Waveform Editor................................... 63 Compile and Load the Design............................................. 63 Create Graphical Stimulus with a Wizard.................................... 64 Edit Waveforms in the Wave Window....................................... 66 Save and Reuse the Wave Commands........................................ 68 Exporting the Created Waveforms.......................................... 69 Run the Simulation..................................................... 70 Simulating with the Test Bench File........................................ 71 Importing an EVCD File................................................. 72 Chapter 9 Debugging With The Schematic Window................................. 74 Compile and Load the Design........................................... 74 Exploring Connectivity................................................ 75 Viewing Source Code from the Schematic................................. 81 Unfolding and Folding Instances........................................ 82 Tracing Events....................................................... 84

Chapter 10 Debugging With The Dataflow Window.................................... 90 Compile and Load the Design............................................ 90 Exploring Connectivity................................................. 91 Tracing Events........................................................ 94 Tracing an X (Unknown)................................................ 98 Displaying Hierarchy in the Dataflow Window.............................. 100 Chapter 11 Viewing And Initializing Memories........................................ 102 Compile and Load the Design............................................ 102 View a Memory and its Contents.......................................... 103 Navigate Within the Memory............................................ 107 Export Memory Data to a File............................................ 108 Initialize a Memory.................................................... 110 Interactive Debugging Commands........................................ 113 Chapter 12 Analyzing Performance With The Profiler.................................. 116 Compile and Load the Design............................................ 116 Run the Simulation.................................................... 117 View Performance Data in Profile Windows................................. 118 View Profile Details.................................................... 121 Filtering the Data...................................................... 121 Creating a Performance Profile Report..................................... 122 Chapter 13 Simulating With Code Coverage.......................................... 124 Compile the Design.................................................... 124 Load and Run the Design................................................ 125 Viewing Coverage Data................................................. 127 Coverage Statistics in the Source Window................................... 130 Toggle Statistics in the Objects Window..................................... 131 Excluding Lines and Files from Coverage Statistics........................... 132 Creating Code Coverage Reports........................................... 133 Chapter 14 Debugging With PSL Assertions.......................................... 136 Run the Design without PSL Assertions.................................... 136 Using Assertions to Speed Debugging..................................... 137 Debugging the Assertion Failure.......................................... 143

Chapter 15 SystemVerilog Assertions and Functional Coverage..................................................... 149 Understanding the Interleaver Design...................................... 149 Run the Simulation without Assertions..................................... 151 Run the Simulation with Assertions....................................... 152 Debugging with Assertions.............................................. 154 Exploring Functional Coverage.......................................... 160 Creating Functional Coverage Reports..................................... 170 Chapter 16 Using the SystemVerilog DPI............................................. 173 Examine the Source Files................................................ 173 Exploring the Makefile................................................. 177 Exploring the windows.bat File.......................................... 179 Compile and Load the Simulation......................................... 180 Run the Simulation.................................................... 180 Chapter 17 Using SystemVerilog DPI for Data Passing.................................. 183 Mapping Verilog and C................................................. 183 Design Files for This Lesson............................................. 184 Examine the Source Files................................................ 186 Explore the Makefile................................................... 186 Explore the windows.bat File............................................ 187 Compile and Load the Simulation......................................... 188 Run the Simulation.................................................... 188 Chapter 18 Comparing Waveforms.................................................. 193 Creating the Reference Dataset........................................... 193 Creating the Test Dataset................................................ 194 Comparing the Simulation Runs.......................................... 195 Viewing Comparison Data............................................... 197 Comparison Data in the Wave Window.................................... 197 Viewing Comparison Data in the List Window.............................. 198 Saving and Reloading Comparison Data................................... 199 Chapter 19 Automating Simulation................................................. 202 Creating a Simple DO File.............................................. 202 Running in Command-Line Mode......................................... 203 Using Tcl with the Simulator............................................ 206

Chapter 20 Getting Started With Power Aware...................................... 209 Create a Working Location............................................. 210 Compile the Source Files of the Design.................................... 210 Annotate Power Intent................................................. 211 Specifying Power Aware Options........................................ 212 Simulate the Power Aware Design....................................... 212 Analyze Results...................................................... 213

Chapter 1 Introduction 아시다시피 ModelSim 과 Questa 는 FPGA/ASIC 을개발하는데있어서꼭있어야하는필수 HDL Simulator 입니다. 사용법도상당히쉽게되어있어서 Tool 에대한사전지식이없어도 편리하고, 익숙하게사용할수있도록많은문서들을같이제공하고있습니다. 해당문서들은 Tool 이설치되면자동으로같이설치가되어영문 PDF, HTML 형태로제공이 되고있고, Windows 환경에서혹은 Linux, Solaris 의 CDE, KDE, GNOME 환경에서보실수있습 니다. 각문서들은아래의표를통해서보실수있습니다. 문서종류파일포맷보는방법 ( Tool 동작시 ) Installation & Licensing Guide Quick Guide (command and feature quickreference) PDF HTML and PDF PDF Help > PDF Bookcase Help > InfoHub Help > PDF Bookcase and Help > InfoHub Tutorial PDF Help > PDF Bookcase HTML and PDF Help > InfoHub User s Manual PDF Help > PDF Bookcase Command Reference Manual PDF Graphical User Interface (GUI) Reference Manual HTML and PDF PDF PDF PDF Help > InfoHub Help > PDF Bookcase Help > InfoHub Help > PDF Bookcase Help > InfoHub Foreign Language Interface Manual OVL Checkers Manager User s Guide Power Aware Simulation User s Manual PDF HTML PDF HTML PDF HTML Help > PDF Bookcase Help > InfoHub Help > PDF Bookcase Help > InfoHub Help > PDF Bookcase Help > InfoHub

Command Help ASCII type help [command name] at the prompt in the Transcript pane Error message help ASCII type verror <msgnum> at the Transcript or shell prompt Tcl Man Pages (Tcl manual) HTML select Help > Tcl Man Pages, or find contents.htm in \modeltech\docs\tcl_help_html Technotes HTML available from the support site Download a Free PDF Reader With Search ModelSim/Questa PDF 문서를보기위해서는 Adobe Acrobat Reader 가필요합니다. Reader 는무료로사용이가능하며, 아래의주소를통해다운로드받으실수있습니다. www.adobe.com

Chapter 2 Conceptual Overview ModelSim/Questa 는 VHDL, Verilog, SystemVerilog, SystemC 그리고 mixed-language 로설계된 Design 을 Simulation 하는제품입니다. 이번챕터에서는 ModelSim/Questa 를통해 Simulation 을진행하는데있어다음 5 가지방법에 간략하게알아보겠습니다. Design Optimizations 최근에발표되는 ModelSim/Questa 의 Default Mode 입니다. Basic Simulation flow - 챕터 3 에서자세히살펴보겠습니다. Project flow 챕터 4 에서자세히살펴보겠습니다. Multiple library flow 챕터 5 에서자세히살펴보겠습니다. Debugging tools 챕처 6 이후부터기능을하나씩살펴보겠습니다. Design Optimizations Basic simulation flow 에대해알아보기전에, Design Optimization 기능에대해확실하게개념을잡는것이중요합니다. ModelSim/Questa 는기본적으로 Optimization Mode 가 Default Mode 로되어있습니다. Optimization Mode 로동작을하면 Simulation Performance 는약 10 배정도의이득을볼수있습니다. 대신에 Simulation 결과를 Wave window 를통해보는데있어서는제약이따르게됩니다. 물론유저분이중요하다고생각되는특정한모듈이나 signals 에대해서는옵션을통해제약을해제할수도있습니다. 따라서, 최선의방법은유저분이 Design 상의정보중어떤것을 Optimization 을하고어떤것을 Optimization 을하지않을것인지결정을하여 Design 을최적화하는것입니다. ModelSim/Questa 에서는위에서언급한내용처럼디폴트모드가 Optimization 모드로되어있고, vopt command 를사용할수도있습니다. vopt command 사용법은 Modelsim/Questa 의 User Manual 중에 Optimization Design with vopt 챕터를보시면자세히나와있습니다. Basic Simulation Flow 유저분이 Design 을 ModelSim/Questa 틀통해 Simulation 을하기위한가장기본적인것들을이번엔살펴볼것입니다. ModelSim/Questa 의 Basic Simulation Flow 는아래의그림을보시면됩니다.

Figure 2-1. Basic Simulation Flow - Overview Lab Creating a working library ModelSim/Questa 에서 Simulation 을진행하기위해서는모든 Design 이 Compile 된 Library 가있어야합니다. 일반적으로새로운 Simulation 을하기위해 Tool 을구동했 으면제일먼저 work 라는이름으로불리는 Working library 를만드는단계입니다. Compiling design files Working library 를만들었으면이제는 Library 에 Design file 을 Compile 해야합니다. Compile 된라이브러리는다른 Platform 에서진행할경우다시 Re-Compile 할필요 없이바로사용이가능합니다. Load and run simulation 모든 Design 이 Compile 이되었으면, Simulator 에 top-level module 을 invoke 합니 다. Design 이성공적으로 load 가되면, Run command 를이용하여 simulation 을진 행합니다. Debug Simulation 진행으로얻어진결과가완벽하지않다면, ModelSim/Questa 의 debug 기능을이용하여 debugging 을합니다. Project Flow Project Flow 는 HDL design 을 Simulation 하는방법중에한가지입니다. Project Flow 를이용하면매우편리하게 Design file 을관리하고 Simulation 결과를지정할수있습니다. 하지만,

ModelSim/Questa 를사용하시면서꼭 Project Flow 를사용할필요는없습니다. Basic Flow 와 Project Flow 중에유저분이편한대로진행하시면됩니다. 아래의그림은 Project Flow 방식의진행순서를보여주고있습니다. Figure 2-2. Project Flow 위의 Flow 처럼 Project Flow 를통한 Simulation 진행순서는 Basic Simulation 과상당히유사 합니다. 하지만다른점도있습니다. 유저분이직접 Working library 는만들필요가없습니다. Project 를만들때자동으 로 Library 가만들어집니다. 작업하고있는 Project 는지속됩니다. ModeSim/Questa 를종료후다시실행할때 최근에작업했던 Project 가자동으로열립니다. Multiple Library Flow ModelSim/Questa 에서 Library 를사용하는방법에는 2가지방법이있습니다. 첫번째는 Design 이컴파일된로컬 library 를사용하는방법과두번째로 Resource library 를사용하는방법이있습니다. Working library 를이용할때만약 Design 의변경이있다면 Recompile 을해주어야합니다. Resource library 는유저가생성할수있으며, 디자인을위해부품역할을할수있도록실리콘공급업체에의해서제공받을수도있습니다

아래의그림은 Multiple Library Flow 를보여주고있습니다. Figure 2-3. Multiple Library Flow Project Flow 를통해진행을할때도 Link to resource libraries 를할수있습니다. Project Flow 를통해진행하고있다면맨위의 Create a working library 단계를 create the project 와 add the testbench to the project 의 2 스텝단계로변경하여진행하시면됩니다. Debugging Tools ModelSim/Questa 에는 Design 을분석하고디버깅할수있는많은기능들을가지고있습니다. Using projects Working with multiple libraries Simulating with SystemC Setting breakpoints and stepping through the source code Viewing waveforms and measuring time Exploring the physical connectivity of your design Viewing and initializing memories Creating stimulus with Waveform Editor

Analyzing simulation performance Testing code coverage Comparing waveform Debugging with PSL assertions Using SystemVerilog assertion and cover directives Using the SystemVerilog DPI Automating simulation

Chapter 3 Basic Simulation 이번챕터에서는 ModelSim./Questa 를통해 Basic Simulation 하기위해아래의단계별로순차 적으로진행을할것입니다. 1. Create the working library 2. Compile the Design Units 3. Optimize the Design 4. Load the Design 5. Run the Simulation 이번챕터부터는예제파일을가지고작업을진행할것입니다. 이번챕터의예제파일은 8bit binary up counter 이며해당파일은 ModelSim/Questa 를설치된경로안에있습니다. Verilog <install_dir>/examples/tutorials/verilog/basicsimulation/counter.v and tcounter.v VHDL <install_dir>/examples/tutorials/vhdl/basicsimulation/counter.vhd and tcounter.vhd 예제파일들은 Verilog 와 VHDL 둘다지원을하고있습니다. 가지고계신 ModelSim/Questa 의 License 에따라해당하는언어예제를선택하시면됩니다. Create the Working Design Library Design 을 Simulation 을하기전에먼저 Library 를만들어 Compile 을해야합니다. 1. 새로운디렉토리를만들어예제파일을그디렉토리에 Copy 합니다. A. ModeSim/Questa 를실행합니다. 단축아이콘을클릭하거나명령프롬프트에 vsim command 를입력하면 ModelSim/Questa 의 GUI 가올라옵니다. GUI 가올라오면 File>Change Directory 를통해 1 번에서만든디렉토리로이동합 니다. 2. Working library 를만듭니다.

A. File>New>Library 를선택합니다 Figure 3-1. The Create a New Library Dialog Box B. 보여지는 Dialog 창에서 Library name 과 Physical name( 실제로만들어지는디렉토리 ) 에 work 라고입력합니다 입력이끝났으면 OK 버튼을클릭합니다. Figure 3-2. work Library Added to the Library Window OK 버튼을클릭하면 Library 윈도우에 library 가만들어진것을확인할수있 습니다. 위에서의작업을 command 로작업을하기위해선아래의 command 를입력해 주면됩니다. vib work vmap work work

Compile the Design Units Work library 가만들어졌으면, 이제 Compile 을할차례입니다. 1. Copy 를한예제파일들을 Compile 을할것입니다. A. ModelSim/Questa 의메뉴중에 Compile>Compile 을선택합니다. 만약에해당하는메뉴가보여지지않으면 Project Flow 상태일수도있습니다. Project Flow 상태이면 File>Close 를선택해주시면 Project 가종료되며원하시는메뉴를선 택할수있습니다. B. Compile 창이열리면 Copy 한 2 개의파일 counter.v tcounter.v 파일을선택하고 Compile 버튼을클릭합니다. 그러면 Work library 안에해당파일이 compile 이됩니다. C. 두개의파일을 Compile 을했으면 Done 버튼을클릭합니다. Figure 3-3. Compile Source Files Dialog Box 2. Compile 한결과를확인할것입니다. A. Library 윈도우를보면 Work library 옆에 + 아이콘이보이실겁니다. + 를클릭하 면 2 개의 Design unit 이보일것입니다.

Figure 3-4. Verilog Modules Compiled into work Library Optimize the Design 1. vopt command 를이용하여 Full visibility 가가능한 Optimize design 을만들것입니다. A. ModelSim/Questa 의 GUI 에서하단부에있는 Transcript 윈도우에아래의 command 를입력합니다. vopt +acc test_counter o testcounter_opt +acc 는 visibility 관련옵션이며, -o 는결과파일이름을지정하는옵션입니다. 주의 : vopt command 를사용할때같은이름으로는결과파일이만들어지지않습니다. Load the Design 1. 이제는 test_counter module 을 Simulator 에 Loading 할것입니다. A. Design loading 은 vsim command 를통해이루어집니다. 전단계에서만들어놓은 Optimize design 을사용하기위해아래의 command 를입력합니다. vsim testcounter_opt Design 이 Load 가되면 Structure 윈도우에해당하는 Design 정보를볼수있습니다.

Figure 3-5. The Design Hierarchy 추가적으로 Objects 와 Process 윈도우가열리게됩니다. Object 윈도우에서는 Structure 윈도우에서선택한 Module 이가지고있는 Data 에대한정보를볼수있습니다. 확인할수있는 Data 는 signals, net, register, constants, variable 과디자인상에서선언된 process, generics, parameters 와 SystemC module 의 Data variable 입니다. Process 윈도우에서는 HDL, SystemC process 정보를 4 가지모드 -Active, In region, Design, Hierarchical- 로보여줍니다. Figure 3-6. The Object Window and Processes Window Run the Simulation 이제 Simulation 을진행하기위한준비단계가끝났습니다. 이제 Wave 윈도우에 signal 을추가 하고 Simulation 을진행할것입니다.

1. Wave 윈도우열기 A. view wave 라는 command 를입력합니다. command 를입력하면화면오른쪽에 Wave 윈도우가나타납니다. 물론 GUI 를통해서도 Wave 윈도우를열수있습니다. View>Wave 를선택하시면마 찬가지고화면오른쪽에윈도우가나타납니다. 2. Wave 윈도우에 Signal 추가하기 A. Structure(sim) 윈도우에서 test_counter 모듈을선택하고마우스오른쪽버튼을클릭하 면팝업메뉴가열립니다. B. 팝업메뉴에서 Add>To Wave>All items in region 을선택하면 Design 의모든 signal 이 Wave 윈도우에추가됩니다. Figure 3-7. Using the Popup Menu to Add Signals to Wave Window 3. Simulation 시작하기 A. Run 아이콘을클릭합니다. Run 아이콘을클릭하면 100ns 만큼 Simulation 이진행되며, 그결과가 Wave 윈도우 에표시됩니다. B. Transcript 윈도우에 500 이라고입력하면, Simulation 은기존의 100ns 에서 500ns 만 큼추가적으로진행되어총 600ns 까지의 Simulation 결과는 Wave 윈도우에서확인 할수있습니다.

Figure 3-8. Waves Drawn in Wave Window C. 메인윈도우나 Wave 윈도우에서 Run-All 아이콘을클릭합니다. 그러면, Simulation 은 Design 상에 Break Verilog 의 $stop 부분까지혹은외부에서 강제로 Break 를걸때까지 Simulation 이진행됩니다. 위의아이콘이 Break 아이콘입니다. Set Breakpoints and Step through the Source 이제는 Debugging 을하기위해 Breakpoint 를 Source code 안에삽입을할것입니다. Break point 를설정하고 Simulation 을진행하면 Simulation 은해당 break point 에서멈춥니다. Break point 는 Source code 중에실행이되는 Line 에설정할수있고, 설정가능한 Line 은 Source 윈도우상에빨간색 Line number 로표시됩니다. 1. Source 윈도우에서 counter.v 코드열기 A. 메인메뉴에서 View>Files 를선택해 Files 윈도우를엽니다. B. Files 윈도우에서는현재진행중인 Simulation 에대한정보가나오며 + 를클릭하면 File 리스트를볼수있습니다. C. File 리스트중에서 counter.v 를더블클릭하면 Source 윈도우에해당파일이열립니 다.

2. Break point 설정하기 A. Source 윈도우에서열린 counter.v 파일의 36번 Line 까지마우스스크롤을이용하여이동합니다. 윈도우의 36번라인에 Line 숫자부분을클릭하면 Line 옆에빨간색공이생기며 Break point 가설정됩니다. Figure 3-9. Setting Breakpoint in Source Window 3. Break point 삭제및활성화, 비활성화시키기 A. break point 가만들어진 Line 에서해당 Line 의숫자부분을다시클릭합니다. 빨간색공이검정색공이되며비활성화됩니다. B. 다시해당 Line 을클릭하면빨간색공이되며활성화됩니다. C. Break point 를삭제하기위해서는해당 Break point 에서마우스오른쪽버튼을클릭 하고 Remove Breakpoint 36 클릭하시면해당 Break point 가삭제됩니다. D. 다시 36 번라인에 Break point 를만들고활성화시킵니다. 4. Simulation 다시시작하기 A. 현재진행하고있는 Simulation 을 Reload 하기위해서는 Restart 아이콘을클릭하면됩니다. Restart 아이콘을클릭하면아래와같은창이나타납니다.

Figure 3-10. Setting Restart Functions B. 전체를체크하고 Restart 버튼을클릭합니다. C. Run-All 아이콘을클릭합니다. 이제 Simulation 은위에서설정한 36 번 Line 에도달할때까지 Simulation 이진행됩 니다. Simulation 이해당 Break point 에도달하면 Simulation 은멈추고해당파일이 Source 윈도우에열리며, 파란색화살표마크가해당 Line 에표시됩니다. Figure 3-11. Blue Arrow Indicates Where Simulation Stopped. 일반적으로 Break point 에의해 Simulation 이멈추면유저들은더많은현상태에 서의더많은정보를얻기를원할것입니다. 이제그정보를얻을수있는여러옵 션에대해살펴보겠습니다. 우선 Object 윈도우를통해 signal value 를확인하겠습니다.

Figure 3-12. Values Shown in Objects Window Source 윈도우에서보여지는 Design 코드상의 highlight 처리된 signal 혹은 parameter, variable 위에마우스포인트를놓으면 Wave Window 에서 cursor 가선택된부분의변수값이노란박스로표시됩니다. Figure 3-13. Hover Mouse Over Variable to Show Value 또한 Design 코드상의 highlight 처리된 signal 혹은 parameter, variable 위에마우스포인트를놓고마우스오른쪽버튼을클릭하여 Examine 을선택하면현재의 Value 가창에표시가됩니다. Figure 3-14. Parameter Name and Value in Source Examine Window examine 라는 command 를입력을해서 Value 를확인할수있습니다. EX) examine count

5. Step command 를활용하기 A. 메인메뉴의아이콘중 step 아이콘을클릭합니다. Step 아이콘은 debugger 기능입니다. Step 아이콘을클릭하거나 step command 를입력하면현재멈추어져있는 Simulation 이 Code 한줄한줄씩실행이되어갑니다. 6. Simulation 종료하기 A. Simulate>End Simulation 을선택하면현재진행중인 Simulation 이종료됩니다.

Chapter 4 Projects 이번챕터에서는 3 장에서진행했던 Simulation 방법을 Project Flow 방식으로진행할것입니다. Project Flow 를통해작업을하면.mpf 파일이만들어지고 Project 는아래와같은정보로구 성됩니다. HDL Source 파일을저장하거나 Reference 경로 Source 파일외에다른문서 (READMEs, Documentation) Local library Reference global library 이번챕터부터는예제파일을가지고작업을진행할것입니다. 이번챕터의예제파일은 8bit binary up counter 이며해당파일은 ModelSim/Questa 를설치된경로안에있습니다. Verilog <install_dir>/examples/tutorials/verilog/projects/counter.v and tcounter.v VHDL <install_dir>/examples/tutorials/vhdl/ projects /counter.vhd and tcounter.vhd 예제파일들은 Verilog 와 VHDL 둘다지원을하고있습니다. 가지고계신 ModelSim/Questa 의 License 에따라해당하는언어예제를선택하시면됩니다. Create a New Project 1. 새로운디렉토리를만들고예제파일은해당디렉토리로 Copy 하기 A. ModeSim/Questa 를실행합니다 단축아이콘을클릭하거나 vsim command 를입력하면 ModelSim/Questa 의 GUI 가 올라옵니다. 만약지난챕터를이어서바로시작하시는경우엔 ModelSim/Questa 가구동되어있 으니다시실행할필요가없습니다. File>Change Directory 에서위에서만든디렉토리로지정합니다. 2. Project 만들기

A. 메인메뉴에서 File>New>Project 를선택합니다. 메뉴를선택하면 Create Project 창이열립니다. 이창에서유저분은 Project name, Project Location-directory, default library name, Modelsim/Questa 설정파일인.ini 파 일등을지정할수있습니다. B. Project name 을 test 로입력합니다. C. Browse 버튼을클릭해서 Project 를저장할디렉토리를지정합니다. D. Default library 이름을 work 로입력합니다. E. OK 를클릭합니다. Figure 4-1. Create Project Dialog Box - Project Lab Add Objects to the Project 앞선순서에서 OK 버튼을클릭하면서 Project 를위한기본적인설정은끝났습니다. 그리고이 제 ModelSim/Questa 의 GUI 상에 Add items to the Project 라는창이나타납니다.

Figure 4-2. Adding New Items to a Project 이창을통해유저분은 Project 에해당하는작업을할수있습니다. 새로운파일 (Create New File) 을만들거나, 기존의파일 (Add Existing File) 을추가하거나, Simulation Configuration 파일 (Create Simulation) 을만들거나, Project 내에디렉토리 (Create New Folder) 를만들수있습니다. 1. 2 개의파일을추가하기 A. Add Existing File 을선택합니다. 파일을추가할때에는 Project 가위치한디렉토리에 Copy 를할수도있고, Project 내에위치경로만지정하는 Reference 방법 2 가지가있습니다. Figure 4-3. Add file to Project Dialog Box B. Browse 버튼을클릭하여 Copy 한 2 개의파일을선택합니다. C. 파일을선택하고 Reference form current location 을선택하고 OK 를클릭합니다. D. Add items to the Project 창이보이면 Close 를통해닫습니다. 이제유저분은 Project 에 2 개의파일을추가하였습니다. 그리고그결과는 Project 탭

을통해서확인할수있습니다. Figure 4-4. Newly Added Project Files Display a? for Status Changing Compile Order (VHDL) Verilog Design 을진행하시는경우이단계를스킵하셔도됩니다. ModelSim/Questa 에서는 VHDL Design 을 vsim command 를이용하여 loading 할때자동적으로 Design 정보를모아서 Loading 이됩니다. 하지만 VHDL Design 같은경우에 Compile 을할때순서에맞추어 Compile 하는것이매우중요합니다. ( 많은파일을가지고 Simulation 을진행하는경우 Order 맞추어 Compile 하는것도큰작업이됩니다.) 하지만, Project Flow 방식으로 Simulation 을진행할경우엔아래의순서대로하시면 ModelSim/Questa 에서자동적으로 Order 에맞추어 Compile 이진행됩니다. 1. Compile order 변경하기 A. Compile>Compile order 를선택합니다. B. Compile Order 창이열리면 Auto Generate 를클릭합니다. Modelsim/Questa 에서 2개의이상의 VHDL 파일을 Auto generate 로 Compile 을하게되면우선하나의파일을 Compile 을하고나서다른파일을 Compile 을하게됩니다. 만약 Compile 을실패하면, 해당파일은순서를맨마지막으로이동시키고나서다른파일을 Compile 하는방법으로 Auto Generate 를하게됩니다. 유저분이직접 Compile order 를지정할수도있습니다. 아래의그림에서처럼파일을선택하고화살표를클릭해서순서를바꿀수있습니다.

Figure 4-5. Compile Order Dialog Box C. 순서를 counter, tcounter 순서로지정하고 OK 버튼을클릭합니다. Compile the Design 1. File Compile 하기 A. Project 윈도우에서마우스오른쪽버튼을클릭하고 Compile>Compile All 을클릭합니 다. Compile 이아무런문제가없이진행되면 Project 창에 Status 의? 가녹색체크마 크로변합니다. 만약 Compile 이실패하면빨간색 X 마크가되고 Transcript 윈도우에 Compile 실패메시지가나타납니다. 2. Design Unit 보기 A. Library 탭을클릭합니다. B. Work library 에서 + 아이콘을클릭하여확대합니다. 확대하여보면 Compile 된 2 개의 Design unit 을확인할수있습니다. 그리고 unit 에 해당하는 Source file 의위치정보가같이보여집니다.

Figure 4-6. Library Window with Expanded Library Optimize for Design Visibility 1. vopt command 를이용하여 Full visibility 를갖는 Library 로 Optimize 하기. A. Transcript 윈도우에아래의 command 를입력합니다. vopt +acc test_counter -o testcounter_opt +acc 는 visibility 관련옵션이며, -o 는결과파일이름을지정하는옵션입니다. 주의 : vopt command 를사용할때같은이름으로는결과파일이만들어지지않습니다. Load the Design 1. test_counter Load 하기. A. 위에서만든 Optimize design 을 vsim command 를이용하여 load 합니다. vsim testcounter_opt 그러면, 아래의그림과같이해당 Simulation 에대한정보를볼수있습니다.

Figure 4-7. Structure(sim) window for a Loaded Design 위의그림을보시면현재진행하고있는 Simulation 은 sim 탭에, 나타나고 Project 탭 에서는 Project 에관한정보를볼수있습니다. 2. Simulation 종료하기 A. Simulate>End Simulation 을선택하고 Yes 를클릭합니다. Organizing Projects with Folders 만약유저분이현재진행하는 Project 에포함되는파일이많은경우엔 Project 안에 Folder 를만들어서계층구조로 File 을정리, 관리할수있습니다. 이렇게만들어진 Folder 실제적으로만들어지는디렉토리가아니라 Project 안에서만보여지는 Folder 입니다. Adding Folders 위에서말한 Folder 추가를해보겠습니다. 1. 새폴더만들기 A. Project 창에서마우스오른쪽버튼을클릭하여 Add to Project>Folder 를선택합니다. B. Folder name 부분에 Design Files 라고입력합니다.

Figure 4-8. Adding New Folder to Project C. 입력이다끝났으면 OK 를클릭합니다. Project 창에 Design Files 라는이름의 Folder 가나타납니다. Figure 4-9. A Folder Within a Project 2. Sub-Folder 만들기 A. Project 창에서마우스오른쪽버튼을클릭하여 Add to Project>Folder 를선택합니다. B. Folder name 에 HDL 을입력합니다. Figure 4-10. Creating Subfolder C. Folder Location 부분에화살표를눌러 Design Files 를선택하고 OK 를클릭합니다. Design Files 의 + 아이콘을클릭하면 Design Files 밑에 HDL Folder 가만들어진것 을보실수있습니다.

Figure 4-11. A folder with a Sub-folder Moving Files to Folders 유저분은위에서 Folder 를만들었습니다. 그럼이제실제로 Folder 에파일들을이동해보겠 습니다. 1. HDL 폴더로파일이동시키기 A. Project 윈도우에서 2 개의파일을전부선택합니다. B. 파일을선택했으면마우스오른쪽버튼을클릭하고 Properties 클릭합니다. C. Place in Folder 를클릭하고 HDL 폴더를선택합니다. D. 선택이끝났으면 OK 버튼을클릭합니다. Figure 4-12. Changing File Location + 아이콘을클릭하시면 Design File 밑에 HDL 폴더가있고 HDL 폴더안에 Design 파일들이추가된것을볼수있습니다.

Project 윈도우상에 Status 가? 로변경이되어있을겁니다. 이것은파일이이동이되었기때문에현재상태를알지못하기때문에? 로표시되는것입니다. Using Simulation Configurations Simulation configuration 은 Simulation 을진행하는필요한 option 들이모여있습니다. 예를들어어떤 Design 을 Simulation 을하는데 resolution time, Hazard option 등을체크하여 Simulation 을진행하였다면, 여러분은 Resolution time 과 Hazard 2개의 Simulation Configuration 을이용하여 Simulation 을진행한것입니다. Project Flow 방식으로진행하면이런 Simulation configuration 을따로저장하여더블클릭하는것만으로자동적으로해당 Option 에맞추어 Simulation 을진행할수있습니다. 1. 새로운 Simulation Configuration 만들기 A. Project 윈도우에서마우스오른쪽버튼을눌러나오는팝업메뉴에서 Add to Project>Simulation configuration 을선택합니다. Figure 4-13. Simulation Configuration Dialog Box

B. Simulation Configuration Name 부분에 counter 이라고입력합니다. C. Place in Folder 부분을클릭하여 HDL 로선택합니다. D. Design 탭에서 Work 앞의 + 아이콘을클릭하여 test_conter 를선택합니다. E. Resolution time 을 ps 로설정합니다. F. Enable optimization 부분의체크를해제합니다. G. Verilog 를사용하는유저는 Verilog 탭을선택하여 Enable hazard checking 을합니다. VHDL 유저는진행을안하셔도됩니다. H. Save 버튼을클릭합니다. 그러면 Project 윈도우 HDL 폴더밑에 counter 라는이름의 Simulation Configuration 이만들어집니다. I. 이제 Status 가? 로표시된파일들을 Compile 하겠습니다. Project 창에서 2 개의파일을전부선택합니다. J. Compile>Compile All 을선택하면해당파일이 Compile 이되고아래와같이 Status 가녹색체크로변하게됩니다. Figure 4-14. A Simulation Configuration in the Project window 2. Simulation Configuration Load 하기 A. 위의단계에서만들어놓은 Simulation Configuration 인 counter 를더블클릭합니다. 위의 Simulation Configuration 을실행하면 Transcript 윈도우에는해당하는 Option 들 이 command 로변경되어보여집니다.

Figure 4-15. Transcript Shows Options for Simulation Configurations 3. Simulation 종료하기 A. Simulate>End Simulation 을선택하면현재진행중인 Simulation 이종료됩니다. B. Project 윈도우에서마우스오른쪽버튼을클릭하여 Close Project 를선택하여 Project 를종료합니다.

Chapter 5 Working With Multiple Libraries 이번챕터에서는 Multiple library 를이용하여 Simulation 하는방법을연습해볼것입니다. 여 러분들은 Design 을 Simulation 하기위해특정 third-party 의 IP, 혹은다른 Library 등과연계 하여 Simulation 을할수도있습니다. 그런경우에대비하여 Resource library 를만들고자신의 Design 와연동하여 Simulation 을 하는것에대해살펴볼것입니다. 이챕터에서예제파일을가지고작업을진행할것입니다. 챕터의예제파일은 8bit binary up counter 이며해당파일은 ModelSim/Questa 를설치된경로안에있습니다. Verilog <install_dir>/examples/tutorials/verilog/libraries/counter.v and tcounter.v VHDL <install_dir>/examples/tutorials/vhdl/ libraries /counter.vhd and tcounter.vhd 예제파일들은 Verilog 와 VHDL 둘다지원을하고있습니다. 가지고계신 ModelSim/Questa 의 License 에따라해당하는언어예제를선택하시면됩니다. Creating the Resource Library Resource library 를만들기전에여러분은 ModelSim/Questa 가설치된디렉토리에있는 modelsim.ini 파일을읽기전용으로만들어주어야합니다. 읽기전용으로변경하셨으면이제아래의절차에따라진행해주시기바랍니다. 1. Resource library 를위한디렉토리만들기 resource library 라는이름으로새로운디렉토리를만들고 <install_dir>/examples/tutorials/verilog/libraries 디렉토리에서 counter 파일을 copy 합니다. 2. Test bench 를위한디렉토리만들기 이제는 Test bench 를위한디렉토리를만들것입니다. testbench 라는디렉토리를만들고 <install_dir>/examples/tutorials/verilog/libraries 디렉토리에서 tcounter 파일을 copy 합니 다. 이제유저분은이번챕터에서 2 개의디렉토리를만들었습니다.

3. 이제 ModelSim/Questa 를실행하고 Change Directory 를 resource library 로지정합니다. A. 만약지난챕터를이어서바로시작하시는경우엔 ModelSim/Questa 가구동되어있 으니다시실행할필요가없습니다. 단축아이콘을클릭하거나 vsim command 를입력하면 ModelSim/Questa 의 GUI 가 올라옵니다. B. File>Change Directory 에서위에서만든디렉토리로지정합니다. 4. Resource library 만들기 A. File>New>Library 를선택합니다. B. Library name 부분에 parst_lib 을입력합니다. Figure 5-1. Creating New Resource Library Library name 부분을입력하면자동적으로 Library Physical Name 부분도채워집니다. 위와같이입력이되었으면 OK 를클릭합니다. 5. Resource Library 에 counter 파일 Compile 하기 A. 메인메뉴의 Compile 아이콘을클릭합니다. B. Library 부분의화살표를클릭하여 parts_lib 을선택합니다.

Figure 5-2. Compiling into the Resource Library C. counter.v 파일을선택하고더블클릭을하거나 Compile 버튼을클릭합니다. D. Done 버튼을클릭합니다. 6. 디렉토리를 test bench 로변경하기 A. File>Change Directory 를선택하고 test bench 디렉토리를선택합니다. Creating the Project Counter 의 test bench 를위한 Project 만들기 1. 프로젝트만들기 A. File>New>Project 를선택합니다. B. Project name 부분을 counter 로선택합니다. C. Project Location 혹은 Default library name 부분은변경하지않습니다. D. OK 를선택합니다. 2. Project 에 test bench 추가하기 A. Add Existing File 을선택합니다. B. Browse 버튼을클릭하고 tcounter.v 파일을추가합니다. 3. Compile 하기 A. tcounter.v 파일을선택하고마우스오른쪽버튼을클릭한후 Compile>Compile

Selected 를선택합니다. Loading Without Linking Libraries 지금과정에서는이전에서만들어놓은 parts_lib library 를 link 를걸어서 Simulation 을진행해볼것입니다. 이과정은 Verilog 과 VHDL 이진행과정이서로다릅니다. Verilog Optimize the Verilog Design for Debug Visibility 1. vopt 를이용하여 full visibility 를가지는 optimize design 만들기 A. Transcript 윈도우에서다음과같이 command 를입력합니다. vopt +acc test_counter o testcounter_opt B. quit sim 을입력합니다. VHDL Optimize the VHDL Design for Debug Visibility 1. vopt 를이용하여 full visibility 를가지는 optimize design 만들기 A. Transcript 윈도우에서다음과같이 command 를입력합니다. vopt +acc test_counter o testcounter_opt 위와같이 command 를입력하면아래와같은 3473 Warning 메시지를보게될것입 니다. 이메시지는 dut counter 에대한정보를읽어오지못해발생하는메시지입니다. Figure 5-4. VHDL Simulation Warning Reported in Main Window B. verror 3473 이라고입력합니다.

verror 은 warning, error 메시지에대해좀더자세한정보를보기원할때사용되는 command 입니다. C. quit sim 을입력합니다. Linking to the Resource Library 유저분이특정한 Library 를 Link 를걸어서 Simulation 을진행하려는경우엔 search library 라는옵션을사용하여 Simulator 를동작시켜야합니다. 1. Simulation 을진행하면서특정한 library 찾기 A. 메인메뉴에서 Simulate 아이콘을클릭하거나 Simulate>Simulate 를클릭합니다. B. work library 에서 + 아이콘을클릭하여 test_counter 를선택합니다. C. Enable optimization 체크박스의체크를해제합니다. D. Library 탭을선택합니다. E. Search Library 에서 Add 버튼을클릭하여 resource library 에 parts_lib 을선택하고 OK 를클릭합니다. 아래의그림처럼 Library 가추가된것을확인할수있습니다. Figure 5-5. Specifying a Search Library in the Simulate Dialog Box F. OK 버튼을클릭합니다.

Permanently Mapping VHDL Resource Libraries 위에서와같이 VHDL Design 을 Simulation 을진행하려고할때마다 Library 를추가해서작업 을하면유저분은상당히많은불편을감수하면서 Project 마다 Link 를걸어주어야합니다. 하지만 ModelSim/Questa 환경설정파일인 modelsim.ini 파일을수정하시면그런불편없이 사용이가능합니다. 1. ModelSim/Questa 가설치된디렉토리로이동합니다. 2. 만약을대비해반드시 Backup 파일을만들어둡니다. 3. Modelsim.ini 파일의읽기전용을해제합니다. 4. 파일을워드패드를이용해 Open 합니다. [Library] 부분에위에서만들었던 parts_lib 을등록합니다. Ex) parts_lib = c:/libraries/parts_lib 5. 파일을저장합니다. 6. 저장한파일을읽기전용파일로변경합니다. 7. Simulation 종료하기 A. Simulate>End Simulation 을선택하면현재진행중인 Simulation 이종료됩니다.

Chapter 6 Simulating SystemC Designs ModelSim/Questa 에서는 SystemC 로설계된 Design 역시 Simulation 을진행할수있습니다. HDL Design 과마찬가지로 Simulation 과 Debugging 환경을제공합니다. 이번챕터에서는먼저 SystemC 로만들어진아주간단한 Basic 이라는 Design 을 Simulation 할것입니다. 그다음엔 HDL 과 SystemC 로구현되어있는 ring buffer 를가지고 Simulation 을진행할것입니다. 예제파일의위치는다음과같습니다. SystemC <install_dir>/examples/systemc/sc_basic SystemC/Verilog <install_dir>/examples/systemc/sc_vlog SystemC/VHDL <install_dir>/examples/systemc/sc_vhdl Setting up the Environment SystemC 를사용하기위해서는 SystemC 관련 License 가있어야합니다. 만약 SystemC 관련 License 가없으시다면이번챕터는진행할수없습니다. 또한 SystemC 를사용하기위해서는다음표에서보여지는 Platform 별 C Compiler 가필요합니다. Table 6-1. Supported Platforms for SystemC Platform/OS Supported compiler versions 32-bit support Intel and AMD x86-based architectures (32- and 64-bit) SUSE Linux Enterprise Server 9.0, 9.1, 10, 11 Red Hat Enterprise Linux 3, 4, 5 gcc 4.0.2, gcc 4.1.2, gcc 4.3.3 VCO is linux (32-bit binary) VCO is linux_x86_64 (64-bit binary) Solaris 8, 9, and 10 gcc 4.1.2 yes no Solaris 10 on x86 gcc 4.1.2 yes yes yes 64-bit support yes Windows XP 1, Vista and 7 Minimalist GNU for Windows (MinGW) gcc 4.2.1 yes no 1. SystemC supported on this platform with gcc-4.2.1-mingw32vc9. 보다자세한정보는 User Manual 의 SystemC 관련부분을살펴보시기바랍니다.

Preparing an OSCI SystemC Design Open SystemC Initiative OSCI 와호환되는 SystemC Design 을 Simulation 을하기위해서는 아래의사항을체크해주셔야합니다. sc_main() 으로선언되어있는함수를 sc_module() 로변경합니다 sc_initialize() 는삭제합니다. 최상위 module 은 sc_module_export 를사용합니다. 1. 디렉토리만들고예제파일복사하기 새로운디렉토리를만들고 <install_dir>/examples/systemc/sc_basic 디렉토리에서파일을 새로운디렉토리로파일을복사합니다. 2. 이제 ModelSim/Questa 를실행하고 Change Directory 를 resource library 로지정합니다. A. 만약지난챕터를이어서바로시작하시는경우엔 ModelSim/Questa 가구동되어있 으니다시실행할필요가없습니다. 단축아이콘을클릭하거나 vsim command 를입력하면 ModelSim/Questa 의 GUI 가 올라옵니다 B. File>Change Directory 에서위에서만든디렉토리로지정합니다. 3. 메인메뉴의 File>Open 를선택하여 ModelSim/Questa 에서제공하는 Text editor 를이용 해 basic_orig.cpp 파일을엽니다. A. 파일은읽기전용일것입니다. Source 윈도우에서마우스오른쪽버튼을클릭하여읽 기전용을해제합니다. B. 아래의그림처럼파일을수정합니다.

Figure 6-1. The SystemC File After Modifications C. 파일을저장합니다. 수정한파일은 sc_basic/gold 디렉토리에있으니복사해서사용해도됩니다. 1. basic_orig.h 파일수정하기 A. 파일은읽기전용일것입니다. Source 윈도우에서마우스오른쪽버튼을클릭하여읽기 전용을해제합니다. B. 그리고아래의그림처럼수정합니다.

Figure 6-2. Editing the SystemC Header File. C. basic.h 로파일을저장합니다. 이파일역시 /sc_basic/gold 에있는파일을카피해서사용해도됩니다. 이제 Simulation 을하기위한파일수정이끝났습니다. Compiling a SystemC-only Design 파일수정이끝났으면이제는파일들을 Compile 해야합니다. ModelSim/Questa 에서는 sccom command 를이용하여 compile 할수있습니다. 1. Work library 만들기 A. Transcript 윈도우에 vlib work 라고입력합니다. 2. SystemC 파일 Compile 하고 Link 하기 A. 계속해서아래의 command 를입력합니다. sscom g basic.cpp B. 컴파일이끝났으면 SystemC object 와 link 를걸어야합니다. 아래의 command 를입 력합니다.

sccom link 이제 Compile 과 link 가성공적으로마무리되었습니다. 이제다음단계에서는 SystemC 와 HDL 이 Mix 되어있는 Design 에대해진행을할것입니다. Mixed SystemC and HDL Example 이제여러분은 HDL Instant 를가지고있는 SystemC Design 을가지고작업을진행할것입니다, 1. 새로운디렉토리만들고파일복사하기 새로운디렉토리를만들고 <install_dir>/examples/systemc/sc_vlog 디렉토리에서파일을새로운디렉토리로파일을복사합니다. VHDL 을사용하시는분은 install_dir>/examples/systemc/sc_vhdl 의파일을새로운디렉토리로카피합니다. 2. 이제 ModelSim/Questa 를실행하고 Change Directory 를 resource library 로지정합니다. A. 만약지난챕터를이어서바로시작하시는경우엔 ModelSim/Questa 가구동되어있 으니다시실행할필요가없습니다. 단축아이콘을클릭하거나 vsim command 를입력하면 ModelSim/Questa 의 GUI 가 올라옵니다 B. File>Change Directory 를통해위에서만든디렉토리로지정합니다. 3. Work library 만들기 A. Transcript 윈도우에 vlib work 를입력합니다. 4. Compile 하기 A. Verilog Transcript 윈도우에 vlog *.v 를입력합니다. B. VHDL Transcript 윈도우에 vcom -93 *.vhd 를입력합니다.

5. Verilog ringbuf 모듈을위해외부모듈선언하기 A. Verilog Transcript 윈도우에 scgenmod map scalar=bool ringbuf>ringbuf..h 를입력합니 다. map scalar=bool 옵션은외부포트를내부논리값으로사용하기위해사용됩니 다. B. VHDL scgenmod ringbuf<ringbuf.h 를입력합니다. 이제 ringbuf.h 파일을열어보면다음과같습니다. Figure 6-3. The ringbuf.h File.

Test_ringbuf.cpp 파일을보면아래와같이 test_ringbuf.h 파일을포함하고있는것을볼수있습 니다. Figure 6-4. The test_ringbuf.cpp File 6. SystemC 파일 Compile 하고 Link 걸기 A. Transcript 윈도우에 sccom g test_ringbuf.cpp 를입력합니다. B. Transcript 윈도우에 sccom link 를입력합니다. 7. Full visibility optimize design 만들기 A. Transcript 윈도우에 vopt +acc test_ringbuf o test_ringbuf_opt 를입력합니다, 8. 디자인 Load 하기 A. Transcript 윈도우에 vsim test_ringbuf_opt 를입력합니다. 디자인이로드가되면서 Process 윈도우나 Objects 윈도우가열릴것입니다. 해당윈 도우는메인메뉴의 View 메뉴를통해서새로운윈도우를열거나닫을수있습니다.

Figure 6-5. The test_ringbuf Design Viewing SystemC Objects in the GUI SystemC 의 Design Object 들은 ModelSim/Questa 의 GUI 상에녹색아이콘으로표시됩니다. 그리고 Object 의종류에따라해당아이콘이사각형, 원혹은다이아몬드형태로표시됩니다. 1. Library 윈도우에서 Objects 보기 A. Library 윈도우에서 work library 앞의 + 아이콘을클릭하여펼칩니다. SystemC Object 는녹색 S 마크로표현됩니다.

Figure 6-6. SystemC Objects in the work Library 2. Wave 윈도우에 Object 추가하기 A. Structure 윈도우 (sim) 에서 test_ringbuf 를선택하고마우스오른쪽버튼을클릭하여 Add>To wave>all items in region 을선택합니다. Setting Breakpoints and Stepping in the Source Window Source 윈도우를통해 HDL 에서 breakpoint 를설정한것과마찬가지로 SystemC 파일에서도 Breakpoint 를설정할수있습니다. ModelSim/Questa 의 C debug 기능을통해작업이이루어 집니다. C Debug 에대해서는유저매뉴얼에서 C Debug 부분을살펴보시면더욱자세히알수 있습니다. 1. C Debug 를이용하여 breakpoint 를사용하기위해서는 ModelSim/Questa 의설정을변경 해주셔야합니다. A. Tools>C Debug>Allow lib step 혹은 Enable auto step 을선택합니다. 2. Breakpoint 설정하기 A. Structure (sim) 탭에서 test_ringbuf 를선택하여 Source 윈도우에 Open 합니다. B. Source 윈도우에서 VHDL, Verilog 상관없이 150 번 line 으로이동합니다. C. 아래의이미지에서보이는것처럼해당 line 에 breakpoint 를설정합니다. Verilog : bool var_dataerror_newval = actual.read() VHDL : sc_logic var dataerror newval = actual.read

Figure 6-7. Active Breakpoint in a SystemC File 3. Simulation 동작하기 A. run 500 을입력합니다. Simulation 이진행을하시면, 기존의 breakpoint 설정하셨던거와마찬가지고해당 Source 윈도우에서해당 line 에화살표가표시되면서 Simulation 이멈추어지며아래 의메시지가 Transcript 윈도우에표시됩니다. # C breakpoint c.1 # test_ringbuf::compare_data (this=0x27c4d08) at test_ringbuf.h:151 Figure 6-8. Simulation Stopped at Breakpoint B. 메인메뉴에서 step 아이콘을클릭합니다. 해당아이콘을클릭하면다음 Statement 도이동을합니다. 다음 Statement 는파일과는상관없이 Simulation 을진행되어가는동안에발생하는

Function 에따로동작하게됩니다. 아래의이미지처럼 sc_signal.h 파일의 440 번 line 으로이동됩니다. Figure 6-9. Stepping into a Separate File C. Continue run 아이콘을클릭하면다시 simulation 이진행되며 breakpoint 에서동작이멈추어집니다. Examining SystemC Objects and Variables SystemC 의 Object 의 value 는 Object 윈도우에서볼수있습니다. 그리고 examine 라는 command 를입력해서도볼수있습니다. 1. sc_signal 의 type 과 value 보기 A. CDBG 프롬프트상태에서 show 를입력하면, Transcript 윈도우에 Design 의 Object 들 의 Type 과 Value 가보여집니다.

Figure 6-10. Output of show Command B. examine dataerror 를입력합니다. True 라는메시지가출력됩니다. 2. SystemC variable Value 보기 A. 위에서와마찬가지로 examine counter 를입력합니다. 32 hffffffff 라는 value 가메시지로표시됩니다. Removing a Breakpoint 1. Source 윈도우로들어가열려있는 test_ringbuf.h 파일에설정된 breakpoint 를제거하기 A. 440 line 에서마우스오른쪽버튼을클릭하여 remove breakpoint 를설정합니다. 2. Simulation 구동하기 A. run 500ns 를입력하고 wave 윈도우에서파형을살펴봅니다.

Figure 6-11. SystemC Primitive Channels in the Wave Window 3. C debugger 종료하기 A. Tool>C Debug > Quit C Debug 을선택하면현재진행중인 C debugger 가종료됩니 다.

Chapter 7 Analyzing Waveforms Simulation 결과는 Wave 윈도우에서확인할수있습니다. Wave 윈도우는 3개의작은창으로구성되어있습니다. Signal 이름을보는 Pathname pane, Value 를확인하는 Value pane, 마지막으로파형이보여지는 Waveform pane 입니다. 이 3개의 Pane 은유저가원하는사이즈로 resize 가가능합니다. Figure 7-1. Panes of the Wave Window Loading a Design 이번에사용할 Design 을기존 Basic Simulation 에서사용했던 Design 을가지고진행을할것 입니다. 1. 이전 Chapter 를진행하시고 ModelSim/Questa 를종료를안했다면, 이어서하면되고, 만 약종료하셨으면, Tool 를새로동작시킵니다.

A. 단축아이콘을더블클릭하거나, vsim 을입력합니다. 2. 디자인 load 하기 A. File>Change Directory 에서기존 Basic Simulation 에서사용했던디렉토리를지정합니 다. B. 디렉토리를지정하면이전에챕터를진행하면서만들어놓았던 work library 가올라와 있는것을볼수있습니다. C. 기존챕터를진행을하며만들어놓았던 optimize design 을 load 합니다. vsim testcounter_opt Add Objects to the Wave Window ModelSim/Questa 에서는 Wave 윈도우로 Object 를추가하는여러가지방법들이있습니다. 이번에는그방법들을하나하나씩연습해보겠습니다. 1. Object 윈도우로부터 Object 추가하기 A. View>Object 를선택하여 Object 윈도우를엽니다. B. Object 윈도우에서한 Object 를선택하고, 마우스오른쪽을클릭하여 Add>To Wave>Signals in Region 를선택합니다. Wave 윈도우가열리면서 Wave 윈도우에선택한 Signal 과같은 region 에있는 signal 들이보여집니다. 2. Wave 윈도우외부로독립시키기 일반적으로 ModelSim/Questa 에서 Wave 윈도우는메인윈도우안에서하나의창으로열립니다. 하지만외부로창을독립시켜단독윈도우로사용하는것도가능합니다. 기본설정역시변경하는것이가능합니다. 기본설정변경은유저매뉴얼에서 Simulator GUI Preference 를참조하시면됩니다. A. Wave 윈도우오른쪽상단의아이콘중에 undock 아이콘을클릭합니다. 아이콘을클릭하면 Wave 윈도우는독립된창으로열립니다. 3. Drag and Drop 을통해서 Object 추가하기 ModelSim/Questa 의여러윈도우 -Structure, Objects ad Locals- 에서 Drag and Drop 을통 해서 Signal 을추가할수있습니다.

A. Wave 윈도우에서 Eidt>Select All 을선택하고 Edit>Delete 를선택하여모든 signal 을 삭제합니다. B. Work space 윈도우의 Structure(sim) 탭에서 instance 를선택하고 drag and drop 으로 wave 윈도우에추가합니다. C. Wave 윈도우에서 Eidt>Select All 을선택하고 Edit>Delete 를선택하여모든 signal 을 삭제합니다. 4. add wave command 사용하여추가하기 A. Transcript 윈도우에 add wave * 를입력합니다. B. Run 500ns 를입력하고 wave 윈도우에서파형을봅니다. Zooming the Waveform Display Wave 윈도우의파형을줌 - 인 / 줌 - 아웃하는여러가지방법에대해알아보겠습니다. 1. zoom 하는여러가지방법알아보기 A. wave 윈도우에서 zoom 아이콘을클릭합니다. B. wave 윈도우의파형부분에서마우스를클릭하고오른쪽아래방향으로드래그합니다. 그러면아래의이미지처럼확대가됩니다. Figure 7-2. Zooming in with the Zoom Mode Mouse Pointer C. View>Zoom>Zoom Last 를클릭합니다. 그러면화면은이전의 zoom 전의화면으로전환됩니다. D. Zoom In 아이콘을클릭합니다.

E. View>Zoom>Zoom Full 을클릭합니다. Using Cursors in the Wave Window 유저분은 Wave window 에서 Cursor 를이용하여 mark 할수있습니다. Wave Window 를처음열면 Cursor 는기본적으로 time 0 에위치하고있습니다. 그뒤에 Wave Window 에서마우스클릭하면해당커서가클릭한위치로이동을하게됩니다. 유저분은또한, Cursor 를여러개추가할수있습니다. Cursor 가움직이지않게 Lock 을하거나지울수도있습니다. Cursor 간의 interval 간격을볼수있습니다. Cursor 를이용하여 Wave 윈도우의다음 Transition 을찾을수있습니다. Working with a Single Cursor 1. 클릭과드래그를통해 Cursor 이동하기 A. Wave Window 의 toolbar 에서 Select Mode icon 을클릭합니다. B. Wave Window 의파형이그려지는부분아무곳이나클릭합니다. 클릭한위치에 Cursor 가나타납니다. Figure 7-3. Working with a Single Cursor in the Wave Window C. Cursor 드래그하면서 Value 확인하기 Cursor 가움직이면 Value 창에서값이변경되는것을볼수있습니다.

2. Cursor 의이름바꾸기 A. Wave 윈도우의 Cursor 창에서 Cursor 1 마우스오른쪽버튼을클릭합니다. B. Text 를 delete 키를이용하여삭제하고 A 를입력합니다. Cursor 의이름이 A 로변경된것을확인할수있습니다. Figure 7-4. Renaming a Cursor 3. Cursor 점프이동시키기 A. Pathname 창에서 counter 를클릭합니다. B. Wave 윈도우의메뉴중에서아래의아이콘을클릭합니다. 선택한 Signal 의 next transition 으로 Cursor 가점프하여이동합니다. C. Wave 윈도우의메뉴중에서아래의아이콘을클릭합니다. 이전의 transition 으로 Cursor 가점프하여이동합니다. Working with Multiple Cursors 1. Cursor 추가하기 A. Cursor 를추가하기위해아이콘을클릭합니다. B. 마우스오른쪽버튼을이용하여새로추가된 Cursor 의이름을 B 로수정합니다. C. Cursor B 를이동하면자동적으로 A 와거리가측정됩니다.

Figure 7-5. Interval Measurement Between Two Cursors 2. Cursor B 고정하기 A. Cursor B 를 56ns 근처로이동시킵니다. B. 마우스오른쪽버튼을클릭하여나온 Pop up 메뉴에서 Lock B 를클릭합니다. 아래의그림처럼 Cursor 가빨간색으로변경되며움직여지지않습니다. Figure 7-6. A Locked Cursor in the Wave Window 3. Cursor B 삭제하기 A. Cursor B 에서마우스오른쪽버튼을클릭하여 Delete B 를선택합니다. Saving and Reusing the Window Format 유저분이 Wave 윈도우를닫아버리시면지금까지 Wave 윈도우에서했던작업 (Signal 추가, Cursor 세팅 ) 같은작업을 Wave 윈도우를열때마다다시작업을해야합니다. 그러나, Save format command 를이용하여 do file 로 format 을저장하면이러한불편없이해당 format 을이용하는것이가능합니다. 1. Format file 저장하기 A. Wave 윈도우에서 File>Save format 을선택합니다.

B. 파일이름을 Wave.do 파일로수정하여저장합니다. C. Wave 윈도우를종료합니다. 2. Format 파일불러오기 A. View>Wave 를선택합니다. B. Wave 윈도우를 Undock 한후에 Wave 윈도우에서 File>Load 를선택합니다. C. 위에서저장했던 wave.do 파일을불러옵니다. D. 저장했을당시의 Signal 들이자동으로추가됩니다. E. Wave 윈도우를종료합니다. F. Simulate>End Simulation 을선택하여현재진행중인 Simulation 을종료합니다.

Chapter 8 Creating Stimulus With Waveform Editor Wave 윈도우에서 waveform Editor 를이용하여 Simulation Stimulus 를만들어서 Simulation 을 진행할수있습니다. 원하는 Simulation time 만큼 Stimulus 를만들어서 Simulation 을진행하 고해당 Stimulus 를저장하여추후에사용할수도있습니다. 이번챕터에서는이전에사용했던간단한 8 bit counter 응이용하여 Simulation 을진행할것 입니다. 예제파일의위치는다음과같습니다. Verilog <install_dir>/examples/tutorials/verilog/basicsimulation VHDL <install_dir>/examples/tutorials/vhdl/basicsimulation 이번챕터에서진행되는 Waveform Editor 는유저매뉴얼의 Generating Stimulus with Waveform Editor 나 Wave Window 를보시면좀더자세히알수있습니다. Compile and Load the Design 1. 새로운디렉토리를만들고 tutorial file 복사하기 이번챕터를진행하기위한 directory 를만듭니다. 그리고 tutorial file 들을새로만든디렉토리로복사합니다. 2. ModelSim/Questa 를실행되었으면 Change directory 를이용하여 1 번과정의 directory 로이동하기 A. 바탕화면의단축아이콘혹은 vsim command 를이용하여 ModelSim/Questa 를구 동합니다. B. File>change Directory 를이용하여 1 번과정에서만든 directory 를지정합니다. 3. Working library 만들고 compile 하기 A. vlib work 를입력합니다. B. 해당파일들을 compile 합니다. Verilog vlog counter.v

VHDL vcom counter.vhd 4. Design Load 하기 A. vsim novopt counter 를입력합니다. 5. Wave 윈도우열기 A. View>Wave 를선택합니다. Create Graphical Stimulus with a Wizard Waveform Editor 에는 Patten Wizard 가포함되어있습니다. 1. Patten Wizard 를이용하여 Clock 만들기 A. Object 윈도우에서 clk 를선택하고마우스오른쪽버튼을클릭하여 Create Wave 를 선택합니다. Figure 8-1. Initiating the Create Pattern Wizard from the Objects Window

B. Patten Wizard 창이열리면 Clock 를선택하고아래의그림과같이설정합니다. Figure 8-2. Create Pattern Wizard C. 두번째창이열리면다시한번아래와같이설정합니다. Figure 8-3. Specifying Clock Pattern Attributes 위와같이설정을하고 Finish 버튼을클릭하면아래와같이 Clock Patten 이만들어집 니다. Figure 8-4. The clk Waveform 2. Wizard 를이용하여또다른 Signal 만들기 A. Object 윈도우에서 reset 를선택하고마우스오른쪽버튼을클릭하고 Create Wave

를선택합니다. B. Patten 타입을 Constant 를선택하시고 Next 를선택합니다. C. Value 에 0 를입력하고 Finish 를클릭합니다. 두번째로만들어진파형이 Wave 윈도우에보여집니다. Figure 8-5. The reset Waveform Edit Waveforms in the Wave Window Waveform Editor 는 Patten Wizard 뿐만아니라 editing 할수있는여러 Command 를제공하 고있습니다. (invert, mirror, stretch edge, cut, etc.) 1. reset 에 Pulse 삽입하기 A. Edit Mode 를활성화하기위해아래의아이콘을클릭합니다. B. Pathnames 에서 reset 를선택합니다. C. Insert Pulse 아이콘을클릭합니다. 혹은, Wave 윈도우에서 reset 를선택하고마우스오른쪽을클릭하여 Wave>Wave Editor>Insert Pulse 를클릭합니다. D. Insert Pulse 를선택하고아래의창과같이입력합니다. Figure 8-6. Edit Insert Pulse Dialog Box OK 를클릭하면 reset 의 100ns 에서 200ns 사이에 High 신호가나타납니다.

Figure 8-7. Signal reset with an Inserted Pulse 2. clk 의 edge 늘리기 A. Wave 윈도우에서 clk 를클릭하고마우스오른쪽버튼을클릭하여 Wave Editor>Stretch Edge 를클릭합니다. B. 창이열리면 Duration 에 50, Time 에 350 를입력하고 OK 를클릭합니다. Figure 8-8. Edit Stretch Edge Dialog Box OK 를클릭하여 300~400ns 사이에 high 가유지되는파형으로변경됩니다. Figure 8-9. Stretching an Edge on the clk Signal 3. Edge 지우기

A. Cursor 를 400ns 근처에놓고 clk 를클릭합니다. B. Delete Edge 아이콘을클릭합니다. 아이콘을클릭하면창이열립니다. 창이열리면 Time 에는 400 ns 를입력하고 OK 버튼을클릭합니다. Figure 8-10. Deleting an Edge on the clk Signal clk 는 400~500ns 사이에있던 edge 가사라지고위와같이파형이나타납니다. 4. Undo 와 Redo 를이용하여 edit 하기 A. Undo 아이콘을클릭합니다. Undo 아이콘을클릭하여 Undo Count 를물어보는창이나타납니다. 1 를입력하고 OK 를클릭하면 Delete Edge 하기전의파형으로돌아갑니다. B. clk 을다시선택하고 Redo 아이콘을클릭합니다. Redo 아이콘을클릭하면마찬가지고 Redo Count 를물어보는창이나타나고, 1 를 입력하면 Delete Edge 가진행된형태로파형이나타납니다. Save and Reuse the Wave Commands ModelSim/Questa 에서작업한 Waveform Stimulus 를특정한 Format 의파일로저장할수있 습니다. 또한 Load 를해서반복적으로사용할수도있습니다. 1. Format File 저장하기 A. Wave command 를저장하기위해 File>Save Format 를선택합니다.

Figure 8-11. Save Format Dialog Box 기본적으로 File 이름은 wave.do 로저장됩니다. B. Yes 를클릭합니다. C. File name 필드에 waveedit.do 를입력하고 Save 를클릭합니다. 이제 Waveform 은 waveedit.do 파일로저장이됩니다. 2. Simulation 종료하고다시 Design 로드하기 A. Simulate>End Simulation 을선택하여 Simulation 을종료합니다. B. 다시 Design 을로드하기위해아래의 Command 를입력합니다. vsim novopt counter 3. Format File 열기 A. View>Wave 를클릭하여 Wave 윈도우를엽니다. B. File>Load 를선택하고앞에서저장했던 waveedit.do 파일을클릭합니다. 이제앞서서저장했던 Wave 파형이 Wave 윈도우에나타난것을확인할수있습니다. Exporting the Created Waveforms 앞에서는 do 파일 format 을저장하는방법을살펴보았으나여기서는 4개의파일 Format 중에원하는형태로저장하는방법을살펴보겠습니다. 1. Created Waveform 을 HDL Test bench 파일 Format 으로저장하기 A. File>Export>Waveform 을선택합니다.

B. Save as 부분을 VHDL Test bench 혹은 Verilog Test bench 를선택합니다. C. End Time 부분은 1000 을입력합니다. D. File Name 에는 export 를입력하고 OK 버튼을클릭합니다. Figure 8-12. The Export Waveform Dialog Box ModelSim/Questa 는현재디렉토리에 export.vhd 혹은 export.v 라는이름으로 test bench 파일을저장합니다. 2. VCD Format 을저장하기 A. File>Export>Waveform 를선택합니다. B. EVCD File 을선택합니다. C. End Time 에 1000 을입력하고 OK 버튼을클릭합니다. ModelSim/Questa 은현재디렉토리에 export.vcd 파일을저장합니다. Run the Simulation Created Waveform 을시작하여원하는 Signal 로의 Edit 작업이끝났으면, 이제 Simulation 을진행하겠습니다. 1. Design Signal 추가하기 A. Object 윈도우에서 count 를선택하고마우스오른쪽버튼을클릭하여 Add>To Wave>Selected Signals 를선택합니다. 2. Simulation 을동작하기

A. ModelSim/Questa 의 Transcript 윈도우에 run 1000 을입력합니다. Simulation 은 1000 ns 까지동작하고그파형은아래와같습니다. Figure 8-13. The counter Waveform Reacts to Stimulus Patterns count 를살펴보면 300 ~ 500 ns 사이엔 clk 이동작하지않았기에 count 가늘어나 지않는것을볼수있습니다. 3. Simulation 종료하기 A. Simulate>End Simulation 을선택하여 Simulation 을종료합니다. Simulating with the Test Bench File 이제부터는앞에서저장을했던 Test bench Format 파일을가지고 Simulation 을진행해보도록 하겠습니다. 1. Test bench 파일 Compile 하고 Load 하기 A. 앞에서저장했던 Test bench File 을 Compile 합니다. Verilog 의경우 vlog export.v VHDL 의경우 export.vhd 를입력해주시면 Compile 됩니다. Compile 이완료되면 Work Library 에 export 모듈의 Library 가보여집니다.

Figure 8-14. The export Test Bench Compiled into the work Library B. Simulation 을하기위해 Transcript 윈도우에아래의 command 를입력합니다. vsim voptargs= +acc export 2. Signal 추가하고 Simulation 진행하기 A. add wave * 를입력합니다. B. run 1000 을입력합니다. Simulation 결과가아래의그림과같이보여집니다. Figure 8-15. Waves from Newly Created Test Bench 3. Simulation 종료하기 A. Simulation 을종료하기위해 Transcript 윈도우에 quit sim 이라고입력합니다. Importing an EVCD File 이제부터는앞에서저장을했던 EVCD Format 파일을가지고 Simulation 을진행해보도록하겠습니다. 1. Counter Design 로드하고 Signal 추가하기

A. Transcript 윈도우에아래의 command 를입력합니다. vsim voptargs= +acc+ counter B. Object 윈도우에서 count 를선택하고마우스오른쪽버튼을클릭하여 Add>To Wave>Selected Signals 를선택합니다. 2. VCD File 불러오기 A. Wave 윈도우에서 File>Import EVCD 를선택합니다. B. export.vcd 파일을더블클릭합니다. Created wave 작업을한파형이아래와같이보여집니다. Figure 8-16. EVCD File Loaded in Wave Window C. Run-All 아이콘을클릭합니다. 아이콘을클릭하면 evcd 파일에서만들었던 1000 ns 까지 Simulation 이진행됩니다. Figure 8-17. Simulation results with EVCD File

Chapter 9 Debugging With The Schematic Window Questa 의 Schematic 윈도우에서는 Design 에서의예상치못한 Output 의원인을추적하여식 별할수있는물리적인연결을살펴볼수있는윈도우입니다. 이윈도우에서는 VHDL Architectures 와 Verilog Modules 의 process, signal, nets, registers 를살펴볼수있습니다. Schematic 윈도우는 2가지의 Design View (Full View, Incremental View) 를제공하고있습니다. Full View 는 Design 의전체 Hierarchy 구조를볼수있습니다. Incremental View 는 Design 의구조를점진적으로살펴볼수있습니다. Incremental View 에서는디자인의의도를쉽게이해할수있게하고, 디자인의 RTL 부분을논리게이트형태로표시합니다. Schematic 윈도우의왼쪽상단부분을클릭하여 View 모드를변경할수있습니다. Figure 9-1. Schematic View Indicator incremental View 은 Design Debugging 에이상적입니다. Incremental View 를이용하면언제 어디서 Signal 의값이변경되었는지 Design 의내부를관찰할수있습니다. 이번챕터에서는 Cache Module 과 Primary Memory 를검증하는 Design 을예제로사용합니 다. 예제파일에대한경로는다음과같습니다 Verilog <install_dir>/examples/tutorials/verilog/schematic VHDL <install_dir>/examples/tutorials/vhdl/schematic 이번챕터에서진행되는내용은유저매뉴얼의 Schematic Window 를보시면좀더자세히알수있습니다. Design Files for this Lesson 이번챕터에서는 Compile 과 Design Load 를 Do 파일을가지고진행할것입니다. 1. 새로운디렉토리를만들고 tutorial file 복사하기

이번챕터를진행하기위한 directory 를만듭니다. 그리고 tutorial file 들을새로만든디렉토리로복사합니다. 2. ModelSim/Questa 을실행되었으면 Change directory 를이용하여 1 번과정의 directory 로이동하기 A. 바탕화면의단축아이콘혹은 vsim command 를이용하여 Questa 을구동합니다. B. File>change Directory 를이용하여 1 번과정에서만든 directory 를지정합니다. 3. WildcardFilter 설정변경하기 A. Transcript 윈도우에아래와같이 command 를입력합니다. set WildcardFilter "Variable Constant Generic Parameter SpecParam Memory Assertion Endpoint ImmediateAssert" 위의 command 를입력하면앞으로 CellInternal 이제거되어 debugging 하는데 있어서모든 signal 을볼수있도록변경이됩니다. 4. Do 파일실행하기 A. do run.do 을입력합니다. run.do 파일은아래의작업들을진행하게됩니다. - Work library 만들기 - vlib work - Design File Compile 하기 - vlog or vcom - Design Optimized 하기 - vopt +acc top -debugdb -o top_opt - Simulator 에 Design 로드하기 - vsim -debugdb top_opt - Wave 윈도우에 Signal 추가하기 - add wave /top/p/* - Design 상의모든 Signal 을 log 에저장하기 - log -r /* - Simulation 진행하기 run all B. Radix 를 Symbolic 으로변경하기 - Transcript 윈도우에 radix symbolic 을입력합니다. Exploring Connectivity

여러분은 Schematic 윈도우를통해서 Module 과 Architecture 의특정 signal, net, register, process 를관찰할수있습니다. 1. Schematic 윈도우열기 A. 메뉴에서 View>Schematic 를선택하거나 Transcript 윈도우에 view schematic 를입 력합니다. Schematic 윈도우는 Incremental View 형태로열립니다. 2. Schematic 윈도우에 Signal 추가하기 A. Structure(sim) 탭에서 p instance 를선택합니다 B. Object 윈도우에서 strb 를선택하여 Dataflow 윈도우로드래그합니다. Figure 9-2. A Signal in the Schematic Window 오렌지색으로강조된 strb 신호를보여줍니다. 위의그림과같이마우스커서를올려놓 으면 tooltip 을통해간략한정보가보여집니다. 3. Module p 의 strb signal 을추적하기 A. strb signal 을선택한후오른쪽마우스를클릭하여 Expand Net to > Readers 를선 택합니다.

Figure 9-3. Expand Net to > Readers 아래의그림과같이확인할수있습니다. Figure 9-4. The p Module 위의그림에서보면 P Module 에서나가는 strb 신호를확인볼수있습니다. 해당신호에마우스를대면화살표아이콘이나타나게됩니다. B. 아래의그림과같이화살표가나오면더블클릭을합니다..

Figure 9-5. Signal Values Overlapped 그러면아래의그림과같이 strb 와연결된부분을확인할수있습니다. Figure 9-6. Expanding the View to Display Readers of strb Signal 4. #NAND#50 process 에서의 test 추적하기 A. Schematic 윈도우에서 embedded window 를불러오기위해 Show Wave 버튼을클릭합니다. B. Schematic 윈도우에서 #NAND#50 게이트를선택하면 Wave Viewer 에자동으로 Signal 들이추가됩니다. C. Wave Viewer 에서 test 를선택하면자동적으로 Schematic 윈도우에 test 가하이라 이트됩니다.

Figure 9-7. Select test signal Schematic 윈도우의 Schematic 부분과 Wave 부분은서로연동되어유기적으로동작이 됩니다. D. Schematic 윈도우에서 test 를선택하면 Wave 부분에서자동으로선택됩니다. E. Expand net to all drivers 버튼을클릭하면, test signal 은 i0 NAND 게이트로 확장되는것을알수있습니다.

Figure 9-8. The test Net Expanded to Show All Drivers 5. #ALWYAS#155 Process 의 oen signal 추적하기 A. oen Signal 핀을선택합니다. B. 마우스오른쪽버튼을클릭하여팝업메뉴에서 Expand Net to > Reader 를선택하면 아래와같이확장된결과가보여집니다. Figure 9-9. Signal oen Expanded to Readers 더욱확장을원하면확장을원하는 Signal 핀을선택하고더블클릭을하거나마우 스오른쪽버튼을이용합니다. s0 를더블클릭하면내부를확인할수있습니다.

Figure 9-10. Sprout oen in the s0 Instance 아래의그림을보게되면신호값이 Overlap 되어쉽게구별되지않습니다. 이런경우 Regenerate button 을클릭하면정리되어값이잘보여지게됩니다. 관측이다끝났으면, Delete All 버튼 할수있습니다. 을클릭하면 Schematic 윈도우를 Clear Viewing Source Code from the Schematic Schematic 윈도우를통해디자인객체의소스코드미리보기를표시할수있습니다 1. Schematic 윈도우에 Signal 추가하기 A. Structure (sim) 윈도우에서 p instance 를선택합니다. B. Schematic 윈도우로드래그앤드랍을합니다. C. Schematic 윈도우에서 #NAND#50 을선택하고더블클릭합니다.

Figure 9-13. Code Preview Window Code Preview 창이열리며 #NAND#50 에해당하는 Source Code 가하이라이 트처리되어서보여집니다. 1. Source editor 에 source code 가보여집니다. 2. Code Preview toolbar 에있는 search 버튼을이용하여특정한 code 를 검색해서볼수도있습니다. D. Code Preview toolbar 를이용하여다양한작업을할수있습니다. 원하는작업을전부마친후에는 Delete All 버튼을클릭하면 Schematic Window 에서진행했 던작업을지울수있습니다. Unfolding and Folding Instances 복잡한 Instance 구조를가지고있는 Design 인경우 Incremental View 에서는 Schematic 윈도 우의사이즈에맞추어 instance 가 folded 되어보여지게됩니다. 1. Incremental View 에서 Folded instance 보기 A. Structure 윈도우의 C module hierarchy 를펼칩니다.

B. 펼쳐진 module 중에 s2 module 을선택하여 Schematic 윈도우를드래그앤드롭을 합니다. Figure 9-14. Folded Instance Fold 된 s2 module 이빨간색점선에파란색블록으로보여집니다. 마우스를 s2 블 록에올려놓으면 text top up 에 FOLDED 라는메시지를볼수있습니다. 2. Fold 된 Instance 펼치기 A. 위의팝업메뉴가나온상태에서마우스오른쪽을클릭합니다. B. 마우스오른쪽버튼을클릭하면나오는팝업메뉴에서 Fold/Unfold to unfold the instance 는선택하면, 아래와같이이미지가편하게됩니다. Figure 9-15. Unfolded Instance 3. s2 Module 의내부살펴보기 A. addr pin 을 s2 Module 내부쪽에서선택하고더블클릭을하면아래의이미지처럼 addr pin 과연결된 gate 와내부 Instance 들이보여지게됩니다.

Figure 9-16. Contents of Unfolded Instance s2 4. s2 Module Fold 하기 A. s2 Module 하이라이트처리된외곽라인에서마우스오른쪽버튼을클릭하여 Fold/Unfold 를선택합니다. Figure 9-17. Instance s2 Refolded 다른 fold module 인 s0, s1 s3 도마찬가지로확인해봅니다. 확인이끝났으면 Delete All 버튼을클릭하여 Schematic 윈도우를 Clear 합니다. Tracing Events Schematic 윈도우는 Event 원인을추적할수있는기능을가지고있습니다. 이 Event Traceback 기능은 Incremental View 모드에서마우스오른쪽버튼을클릭하여나오는팝업메뉴에서사용할수있습니다. Figure 9-18. Event Traceback Menu Options

Event Tracing 기능은현재설정되어있는 Active time 에서시작됩니다. Wave 윈도우에서선택한 Cursor 의 Time Schematic 윈도우 embedded wave viewer 에서선택한 Cursor 의 Time Schematic 윈도우의 Active Time 보통은 Wave 윈도우혹은 Schematic 윈도우의 embedded wave viewer 에서 cursor 로지정된 Active time 을사용하지만, Schematic 윈도우에 Active time label 을설정할수있습니다. 1. Incremental View 에 Active time 표시하기 A. Schematic 윈도우가활성화되어있는상태에서, Schematic > Preferences 를선택 하여옵션윈도우를엽니다. B. 옵션윈도우의옵션중에서 Active Time label 을선택하고 OK 버튼을클릭합니다. Figure 9-19. Selecting Current Time Label Display Option 아래의이미지처럼 Schematic 윈도우의오른쪽상단에 Active time 이표시됩니다. Figure 9-20. CurrentTime Label in the Incremental View

2. Schematic 윈도우에 object 추가하기 A. Structure (sim) 윈도우에서 p 를선택합니다. B. p 를선택한후 Objects 윈도우에서 t_out signal 을 schematic 윈도우로드래그합 니다. 3. Schematic 윈도우의 Wave viewer 열기 A. toolbar 에있는 Show Wave 버튼을클릭합니다. 4. Schematic 윈도우의 Wave viewer 윈도우를통해 process signals 보기 A. Schematic 윈도우에서 #NAND#50 gate ( VHDL Design 에서는 Line_71 ) 를선택합니 다. Wave Viewer 에서는선택한 gate 의 inputs 과 outputs 이정렬되어보여지게 됩니다. 5. Wave viewer 에서 cursor 움직이기 A. Wave viewer 에서 strb signal 을선택하고 cursor 를 465ns 로움직입니다. Schematic 윈도우에서는아래의그림처럼 strb 가 highlight 처리가됩니다.

Figure 9-21. The Embedded Wave Viewer Schematic 윈도우의오른쪽상단부에 cursor 로인해활성화된 465ns 라는시간이 표시됩니다. 6. Event 추적하기 A. Wave viewer 윈도우의파형부분에서마우스오른쪽버튼을클릭하여 pop-up 메뉴 를 Open 합니다. B. pop-up 메뉴에서 Event Traceback > Show Cause 선택합니다. 아래의그림처럼 Source 윈도우가열리면서해당 code 가 highlight 처리됩니다. Figure 9-22. Immediate Driving Process in the Source Window 또한아래그림과같이 Transcript Window 에결과가나타납니다.

Figure 9-23. Result of Trace in Transcript Path Details 를보기위해서는아이콘을클릭합니다. 그러면 Active Driver Path Details 윈도우가아래와같이나타납니다. Active Driver Path Details 윈도우에서는선택한 event 의 sequential process 에대한정보를보여줍니다. Figure 9-24. Active Driver Path Details Window 7. Schematic 윈도우에서 #ASSIGN#25#1 process 에서 strb_r 의 path detail 살펴보기 A. Active Driver Path Details 윈도우에서 strb_r 을선택합니다. B. Active Driver Path Details 윈도우하단에서 Schematic Windows 버튼을클릭합니다. Figure 9-25. Schematic Window Button

이제선택했던 signal 에대해 Detail 한 Path 정보다 dedicate 된 Schematic 윈도우 에아래와같이보여집니다. Figure 9-26. Schematic Path Details Window Wave viewer 에서는 Trace start 부터 end 부분까지보여지게됩니다. 8. 추가적으로계속진행하기전에 Schematic 윈도우 clear 하기 A. Active Driver Path Detail 윈도우를닫습니다. B. Schematic Path Detail 윈도우를닫습니다. C. Original Schematic 윈도우를 Schematic 탭메뉴를이용하여선택합니다. D. Schematic Viewer 윈도우에서 Delete All 아이콘을클릭합니다. E. Schematic Viewer 윈도우의 Wave view 를닫기위해 Show Wave 아이콘을클릭합 니다.

Chapter 10 Debugging With The Dataflow Window Dataflow 윈도우는여러분이 Simulation 을진행하려는 Design 의 Signal 의 Physical 연결상 태를한눈에보여주고 Output 에서 Input 까지 trace 를가능하게해주는기능을제공하고있 습니다. 이번챕터에서는몇몇 memory 를가지고있는 cache 모듈을 test bench 를가지고검증을하 면서 Dataflow 윈도우를살펴볼것입니다. 예제파일의위치는다음과같습니다. Verilog <install_dir>/examples/tutorials/verilog/dataflow VHDL <install_dir>/examples/tutorials/vhdl/dataflow 이번챕터에서진행되는내용은유저매뉴얼의 Debugging with the Dataflow Window 와 Dataflow Window 을보시면좀더자세히알수있습니다. Compile and Load the Design 이번챕터에서는 Compile 과 Design Load 를 Do 파일을가지고할것입니다. 1. 새로운디렉토리를만들고 tutorial file 복사하기 이번챕터를진행하기위한 directory 를만듭니다. 그리고 tutorial file 들을새로만든디렉토리로복사합니다. 2. ModelSim/Questa 을실행되었으면 Change directory 를이용하여 1 번과정의 directory 로이동하기 A. 바탕화면의단축아이콘혹은 vsim command 를이용하여 ModelSim/Questa 을구 동합니다. B. File>change Directory 를이용하여 1 번과정에서만든 directory 를지정합니다. 3. WildcardFilter 설정변경하기 A. Transcript 윈도우에아래와같이 command 를입력합니다. set WildcardFilter "Variable Constant Generic Parameter SpecParam Memory Assertion Endpoint ImmediateAssert" 위의 command 를입력하면앞으로 CellInternal 이제거되어 debugging 하는데 있어서모든 signal 을볼수있도록변경이됩니다.

4. Do 파일실행하기 A. do run.do 을입력합니다. run.do 파일은아래의작업들을진행하게됩니다. i. Work library 만들기 ii. Design File Compile 하기 iii. Design Optimized 하기 iv. Simulator 에 Design 로드하기 v. Wave 윈도우에 Signal 추가하기 vi. Design 상의모든 Signal log 하기 vii. Simulation 진행하기 Exploring Connectivity Dataflow 윈도우의가장큰장점은 Design 의 Physical 연결상태를보여준다는것입니다. 이 제 Dataflow 윈도우의기능들에대해서살펴보겠습니다. 1. Dataflow 윈도우열기 A. View>dataflow 를선택하거나 view dataflow command 를입력하여 dataflow 윈도 우를엽니다. 2. Dataflow 윈도우에 signal 추가하기 A. Structure(sim) 탭에서 p instance 를선택합니다. B. Object 윈도우에서 strb 를선택하여 Dataflow 윈도우로드래그합니다.

Figure 10-1. A Signal in the Dataflow Window 3. Design 관찰하기 A. 위의화면에서 red 로하이라이트처리된부분을더블클릭합니다. 아래의그림처럼 strb 에연결된 process 들이확장되어보여집니다. Figure 10-2. Expanding the View to Display Connected Processes B. #NAND#50 process 의 test signal 의 drive signal 찾기 i. 메인메뉴에서 Show Wave 아이콘을클릭하면 Dataflow 윈도우에 Wave 윈도우가추가되는것을볼수있습니다. ii. #NAND#50 process 를클릭하면추가된 Wave 윈도우에 #NAND#50 에해당하 는 Input, Output 들이정렬되어파형을보여줍니다.

Figure 10-3. Select test signal iii. Wave 에서 test 를선택하면 Dataflow 윈도우에자동적으로해당 signal 이빨 간색으로하이라이트처리되어보여집니다. iv. 하이라이트처리된부분을선택하고더블클릭을하면해당하는 signal 여연결 된모든 driver 들이펼쳐집니다. Figure 10-4. The test Net Expanded to Show All Drivers v. #ALWAYS#155 process 의 oen signal 을선택하고 Expand net to all readers

icon 을클릭하면마찬가지로모든 driver 들이펼쳐집니다. Figure 10-5. The oen Net Expanded to Show All Readers Tracing Events Dataflow 윈도우를통해작업하면생기는또다른이점은 Display 되는 Signal 의 Value 를바로확인하는것이가능한것입니다. Wave 윈도우에서 Cursor 를움직이면 Dataflow 윈도우의 signal 들역시바로바로 Value 가변화는것을확인할수있습니다. 1. Dataflow 윈도우에서더블클릭마우스설정변경하기 A. Wave 윈도우에서 Wave>Wave Preferences 를선택하면해당창이열립니다. B. Double-click will : 메뉴에서 Show Drivers in Dataflow Window 를선택합니다.

Figure 10-6. Wave Window Preferences Dialog Box 2. Dataflow 윈도우로 Object 추가하기 A. Structure(sim) 윈도우에서 p instance 를선택합니다. B. Object 윈도우에서 t_out 를선택하여 Dataflow 윈도우로드래그합니다. C. Show wave 아이콘을클릭하면 Dataflow 윈도우에 Wave 윈도우가추가됩니 다.

Figure 10-7. The Embedded Wave Viewer 3. #NAND#50 의 Input 추적하기 A. Dataflow 윈도우에서 #NAND#50 process 를더블클릭하면 Source 윈도우에서는해당 Source 가아래와같이보여집니다. Figure 10-8. Source Code for the NAND Gate B. Dataflow 윈도우로돌아가면 #NADN#50 의모든 Input, Output 이보여집니다. C. Wave 윈도우에는 t_out 의마지막 transition 에 Cursor 가표시됩니다.

Figure 10-9. Signals Added to the Wave Viewer Automatically D. Tools>Trace>Trace next event 를선택하면 Cursor 가다음 event 로이동합니다. Figure 10-11. Tracing the Event Set 이방식으로디자인의어느부분에서이벤트가발생하고있는지계속해서추적이가 능합니다.

Tracing an X (Unknown) Dataflow Window 는디자인에서알수없는값 (X) 를쉽게추적할수있습니다. Wave Window 를확인하여 X 가나왔을때문제의원인을추적하기위해 Dataflow Window 를사용할수있도록 Dataflow Window 가동적으로 Wave Window 에링크되어있습니다. Dataflow 에서디자인을클릭하면 Wave Window 에해당하는 signal이자동으로나타나게됩니다. 1. Wave Window 와 Dataflow Window 에서 t_out 보기 A. Wave Window 에서 /top/p/t_out 을찾습니다. t_out Signal 은 2066 ns 부터제대로된값과알수없는값이전환하고있습니다. 빨 간색파형은알수없는값을나타냅니다. Figure 10-12. A Signal with Unknown Values B. 2786 ns 에서 t_out signal 을더블클릭합니다. Source code view 가열리면서 t_out 신호를나타납니다. Wave Window 에서 waveform 을더블클릭하면, Dataflow 가자동으로열리면서 t_out 에관련된 process 를표시합니다.

Figure 10-13. Dataflow Window with Wave Viewer C. 커서의위치를보면 2785 ns 에 t_out signal 값을알수없습니다. 2. Unknown 추적 A. 메뉴에서 Tools>Trace>ChaseX 를선택합니다. 디자인에서어느부분부터알수없는값이나왔는지추적하며확장됩니다. 확인해보면 #NOR#49 에서알수없는값이나오는것을 Debugging 할수있습니다. Figure 10-14. ChaseX Identifies Cause of Unknown on t_out

Displaying Hierarchy in the Dataflow Window Dataflow 윈도우에서 Design 의 Signal 연결상태를 Design Hierarchy 를보면서관찰을할수 있습니다. 1. Display option 변경하기 A. Dataflow>Dataflow preferences>options 를선택합니다. Figure 10-15. Dataflow Options Dialog Box B. 창이나타나면 Show 부분에서 Hierarchy 를선택합니다. 2. t_out signal Dataflow 에추가하기 A. Transcript 윈도우에 add dataflow /top/p/t_out 를입력합니다. 이번에는 Hierarchy 구조와함께 Design 정보가보여집니다.

Figure 10-16. Displaying Hierarchy in the Dataflow Window

Chapter 11 Viewing And Initializing Memories 이번챕터에서는 Design 상의 Memory 정보를보는방법과초기화하는방법에대해서살펴 볼것입니다. ModelSim/Questa 에서살펴볼수있는 Memory 의종류는아래와같습니다. reg, wire. And std_logic arrays Integer arrays Single dimensional arrays of VHDL enumerated types other than std_logic 이번챕터에서사용할예제파일의위치는다음과같습니다. Verilog <install_dir>/examples/tutorials/verilog/memory VHDL <install_dir>/examples/tutorials/vhdl/memory 이번챕터에서진행되는내용은유저매뉴얼의 Memory List Window 을보시면더욱자세히알 수있습니다. Compile and Load the Design 1. 새로운디렉토리를만들고 tutorial file 복사하기 이번챕터를진행하기위한 directory 를만듭니다. 그리고 tutorial file 들을새로만든디렉토리로복사합니다. 2. ModelSim/Questa 를실행되었으면 Change directory 를이용하여 1 번과정의 directory 로이동하기 A. 바탕화면의단축아이콘혹은 vsim command 를이용하여 ModelSim/Questa 를구 동합니다. B. File>change Directory 를이용하여 1 번과정에서만든 directory 를지정합니다. 3. Library 만들고 Compile 하기 A. Verilog 의경우 i. vlib work

vlog *.v 를입력합니다. B. VHDL 의경우 i. vlib work vcom -93 sp_syn_ram.vhd dp_syn_ram.vhd ram_tb.vhd 를입력합니다. 4. Design 최적화하기 A. 아래의 Command 를입력합니다. i. vopt +acc ram_tb o ram_tb_opt 를입력합니다. 최적화된 ram_tb_opt 라는최적화된 library 가만들어집니다. 5. Design 로드하기 A. 아래의 Command 를입력합니다. i. vsim ram_tb_opt View a Memory and its Contents Memory 윈도우에서는모든 Memory 리스트를볼수있고, 각 instance 별로 range, depth, width 정보는물론, 해당하는 instance 를더블클릭하면해당 Memory data 를보여줍니다. 1. Memory 윈도우열고 Data 보기 A. View>Memory List 를선택하면아래와같이 Memory 윈도우가열립니다. Figure 11-1. The Memory List Window B. /ram_tb/spram1/mem 을더블클릭합니다. Memory data 윈도우에 mem 의 data 들이보여집니다. Address 와 data 로구별되

어서나타나며, mem 의경우엔 data 가알수없는값인 X 로나타나는것을볼수 있습니다. Figure 11-2. Verilog Memory Data Window 만약 VHDL Design 을진행중이라면해당결과는아래와같이나타납니다. Figure 11-3. VHDL Memory Data Window 2. Simulation 진행하기 A. 메인윈도우에서 run all 아이콘을클릭합니다. Simulation 은 Source code 에서 break 가걸리때까지 Simulation 이진행됩니다. B. Simulation 이진행된후에 /ram_tb/spram1/mem 를더블클릭하면이번에는아래 와같이 mem 에 data 들이들어가있는것을확인할수있습니다.

Figure 11-4. Verilog Data After Running Simulation VHDL Design 경우엔아래와같이나타납니다. Figure 11-5. VHDL Data After Running Simulation 3. 이번에는 /ram_tb/spram1/mem 의 address radix 와같은것을변경해보기 A. Memory 윈도우에서마우스오른쪽을클릭하여 Properties 를클릭합니다. 창이아래와같이나타납니다.

Figure 11-6. Changing the Address Radix B. Address Radix 를 Decimal 로체크를하고, Words per Line 을 1 로저장하고 OK 버 튼을클릭합니다. 클릭하면 VHDL 과 Verilog 에따라아래와같이결과가보여집니다. Figure 11-7. New Address Radix and Line Length (Verilog) Figure 11-8. New Address Radix and Line Length (VHDL)

Navigate Within the Memory Memory 윈도우를통해 Memory 내용을보는것뿐만아니라특정데이터의패턴이나주소값 을이용해원하는부분으로이동을할수도있습니다. 1. 특정주소로이동하기 A. 마우스오른쪽버튼을클릭하여 Goto 선택합니다. B. 아래의그림과같이 30 을입력합니다. Figure 11-9. Goto Dialog Box C. OK 버튼을클릭합니다. D. 30 번지부분이 Memory 윈도우의가장위가되게표시됩니다. 2. 주소를바로수정하기 A. 38 번에해당하는주소부분을더블클릭합니다. B. 100 을입력합니다. Figure 11-10. Editing the Address Directly C. 그러면 100 번지에해당하는주소로이동을합니다. 3. 데이터패턴을이용하여찾기

A. 마우스오른쪽버튼을클릭하여 Find 를선택합니다. B. 아래의창이열리면 Verilog 의경우 11111010 을, VHDL 의경우엔 250 을입력하 고 Find Next 를클릭합니다. Figure 11-11. Searching for a Specific Data Value C. 해당하는데이터로움직이게되고계속 Find Next 를클릭하면그다음값으로이동 이됩니다. D. Close 를클릭하면창이닫힙니다. Export Memory Data to a File Simulation 중에 Memory 의내용을파일로저장할수있습니다. 1. Memory 내용저장하기 A. /ram_tb/spram1/mem 을선택하여 Memory 창에보이게합니다. B. File>Export>Memory data 를클릭합니다.

Figure 11-12. Export Memory Dialog Box C. Address radix 를 Decimal 를선택합니다. D. Data radix 는 Binary 를선택합니다. E. Words per Line 에는 1 를선택합니다. F. Filename 에는 data_mem.mem 를입력하고 OK 버튼을클릭합니다. 그러면현재디렉토리에해당파일이저장이됩니다. 2. relocatable memory pattern file 로저장하기 A. Memory Data Window 에서 /ram_tb/spram2/mem 을선택합니다. B. 오른쪽마우스를누른후 Properties 를선택하여 memory contents 팝업메뉴를엽 니다.

C. Address Radix 를 Decimal 이나 Binary 로선택을한후 close 를누릅니다. D. File>Export>Memory Data 를선택합니다. E. 주소범위를 0 ~ 250 까지지정하고종료합니다. F. 재배치를하기위해 File 포맷을 MTI 나 No addresses 로생성할수있으며, 다른 메모리에사용할수있는패턴을만들수있습니다. G. Address Radix 를 Decimal 로선택하고, Data Radix 를 Binary 로선택합니다. H. Words per Line 을 1 로설정합니다. I. 파일이름을 reloc.mem 으로한후메모리내용을저장합니다. Initialize a Memory ModelSim/Questa 에서는메모리를초기화하는세가지방법 ( 내보낸메모리파일, 채우기패턴, 또는두가지모두에서부터 ) 이있습니다. 먼저파일을통해초기화하는방법을살펴보겠습니다. 1. /ram_tb/spram3/mem 을선택합니다. A. Memory 탭에서 /ram_tb/spram3/mem instance 를더블클릭합니다. Memory 윈도우에 /ram_tb/spram3/mem 이보여지게됩니다. B. Memory 윈도우에서마우스오른쪽버튼을클릭하여 Properties 를선택합니다. C. Address Radix 를 Decimal 로 Data Radix 를 Binary 로변경합니다. Words per Line 은 1 로변경합니다. 2. spram3 를초기화 A. data 아무곳에서마우스오른쪽버튼을클릭하여 Import Data Patterns 을선택합니 다.

Figure 11-13. Import Memory Dialog Box Load Type 은 File Only 가기본설정입니다. B. 파일이름을 data_mem.mem 으로입력합니다. C. OK 를선택합니다. data_mem.mem 에 /ram_tb/spram3/mem 의주소가업데이트됩니다.

Figure 11-14. Initialized Memory from File and Fill Pattern 3. relocatable memory pattern(reloc.mem) 가져오기 A. spram3 의 data 아무곳에서오른쪽마우스를누른후 Import Data patterns 을선 택합니다. B. Load Type 을 both File and Data 로변경합니다. C. 주소범위를 0 ~ 300 으로변경합니다. D. MTI File 포맷인 reloc.mem 을불러옵니다. E. Data Load 는 Increment 로변경합니다. F. Fill Data field 의 incrementing data 를 0 으로설정합니다. G. OK 를선택합니다. H. 251 번라인부터 incrementing data 를확인할수있습니다. Figure 11-15. Data Increments Starting at Address 251 Memory Data Window 창하나를선택하여오른쪽마우스를누른후 Close All 을

선택하여창을닫습니다. Interactive Debugging Commands Memory Data Window 는다양한디버깅을목적으로사용할수있습니다. 1. Memory Instance 를열어 display characteristics 변경 A. Memory List Window 에서 /ram_tb/dpram1/mem 을선택합니다. B. 오른쪽마우스를눌러 Properties 를선택합니다. C. Address 와 Data 의 radix 를 Hexadecimal 로변경합니다. D. Words per line 을 2 로수정합니다. E. OK 버튼을클릭하며 Memory 정보가아래와같이보여집니다. Figure 11-16. Original Memory Content 2. Fill 패턴을이용하여특정 Memory Address 범위 Data 초기화하기 A. /ram_tb/dpram1/mem 을선택하여 Memory 윈도우에보여지게합니다. B. 오른쪽버튼을클릭하여 Change 버튼을클릭하면아래의창이열립니다.

Figure 11-17. Changing Memory Content for a Range of Addresses**OK C. Address 를선택하고위의그림과같이값을입력합니다. D. Fill Type 을 Random 을선택합니다. E. Fill Data 에 0 을입력하고 OK 버튼을클릭합니다. 아래의창과같이 Data 가채워지는것을확인할수있습니다. Figure 11-18. Random Content Generated for a Range of Addresses 4. 원하는 Address 의 Data 를변경하는거도가능합니다. A. 위의그림을보면 0x0000000c 부터 0x0000000e 까지의데이터를바꾸어볼것입니 다.

Figure 11-19. Changing Memory Contents by Highlighting B. 마우스오른쪽버튼을클릭하여 Change 를클릭합니다. C. 창이열리면아래와같이입력을합니다. Figure 11-20. Entering Data to Change**OK Address 부분에 000000c 와 0000000f 를입력하고 Fill Type 엔 Value 를체크하고 Fill Data 에는값을변경할 31 32 33 34 을입력하고 OK 버튼을클릭합니다. Figure 11-21. Changed Memory Contents for the Specified Addresses D. 위와같이값이변경되어짐을확인할수있습니다.

Chapter 12 Analyzing Performance With The Profiler 이번챕터에서사용할 Profiler 기능은시뮬레이션을진행하는동안 Design 코드의각부분뿐만아니라메모리의양을각각의 Function 및 Instances 별비율을보여줍니다. 이정보를사용하면시뮬레이션동안발생하는병목현상을식별하고 Design 코드를최적화하여시뮬레이션시간을줄일수있습니다. 이번챕터에서는 Profiler 기능을사용하는방법과주요정보보기명령을사용하여병목현상을 식별하는방법을설명합니다. 이번챕터에서사용할예제파일의위치는다음과같습니다. Verilog <install_dir>/examples/tutorials/verilog/profiler VHDL <install_dir>/examples/tutorials/vhdl/ profiler 이번챕터에서진행되는내용은유저매뉴얼의 Profiling Performance and Memory Use 와 Tcl and Macros 를보시면더욱자세히알수있습니다. Compile and Load the Design 1. 새로운디렉토리를만들고 tutorial file 복사하기 이번챕터를진행하기위한 directory 를만듭니다. 그리고 tutorial file 들을새로만든디렉토리로복사합니다. 2. ModelSim/Questa 를실행되었으면 Change directory 를이용하여 1 번과정의 directory 로이동하기 A. 바탕화면의단축아이콘혹은 vsim command 를이용하여 ModelSim/Questa 를구 동합니다. B. File>change Directory 를이용하여 1 번과정에서만든 directory 를지정합니다. 3. Library 만들고 Compile 하기 A. Verilog 의경우 i. vlib work vlog *.v 를입력합니다.

B. VHDL 의경우 i. vlib work vcom -93 sm.vhd sm_seq.vhd sm_sram.vhd test_sm.vhd 를입력합니다. 4. Design 최적화하기 A. 아래의 Command 를입력합니다. i. vopt +acc test_sm o test_sm_opt 를입력합니다. 최적화된 test_sm_opt 라는최적화된 library 가만들어집니다. 5. Design 로드하기 A. 아래의 Command 를입력합니다. i. vsim test_sm_opt Run the Simulation 1. Profiler 기능활성화하기 A. Tools>Profile>Performance 를선택하거나 Performance Profiling 아이콘을클릭합니 다. 2. Simulation 진행하기 A. Transcript 윈도우에 run 1ms 를입력합니다. Simulation 이진행이되면서 Transcript 윈도우에아래와같은메시지들이보여집니 다.

Figure 12-1. Sampling Reported in the Transcript View Performance Data in Profile Windows Profile data 는 Ranked, Call Tree, Structural, Design Unit 이라는 4 개의윈도우를통해확인할 수있습니다. 추가적으로 Profile detail 이라는창을제공하고있습니다. 1. Profile Data 확인하기 A. View>Profiling>Ranked Profile 를선택합니다. Ranked 윈도우는각 Function, Instance 별 Profile 결과를아래의그림과같이보여 줍니다. Figure 12-2. The Ranked Window 결과를 Column 을클릭함으로써내림차순이나오름차순으로정렬을할수가있고, 5% 미안의 Instance 들은푸른색으로표시가됩니다. 2. Hierarchical, function-call Profile Data 확인하기

A. View>Profiling>Call Tree Profile 를선택합니다. B. Call tree 윈도우에서마우스오른쪽버튼을클릭하여 Expand All 을선택합니다. Function Call 의 Hierarchy 정보가 Under% Column 에따라보여집니다. Figure 12-3. Expand the Hierarchical Function Call Tree 3. Hierarchy format 에맞추어 Instance Profile Data 확인하기 A. View>Profiling>Structure Profile 을선택합니다. B. Structure Profile 윈도우에서특정 Instance 를선택하고마우스오른쪽버튼을클릭 하여 Expand All 을선택합니다. Structure 윈도우에는 Performance sample 이 Category 형태로분류되어아래의그 림처럼보여집니다. Figure 12-4. Structural Profile Window 4. Design Unit 에의한 Profile Data 보기

A. View>Profiling>Design Unit Profile 을선택합니다. Structure 윈도우와비슷해보이지만, Design Unit 에따라 Hierarchy 정보를가지고 있는형태로보여집니다. Figure 12-5. Design Unit Performance Profile Profile 윈도우들은 Source 윈도우들과 Cross Proving 기능을제공하고있습니다. Profile 윈 도우에서 Function, Instance 를더블클릭하는것만으로그부분에해당하는 Source 윈도 우로바로이동이됩니다. Veilog Design Units Profile 윈도우에서 test_sm.v:105 를선택하고더블클릭합니다. VHDL - Design Units Profile 윈도우에서 test_sm.vhd:201 를선택하고더블클릭합니다. 더블클릭을하면아래의그림처럼 Source 윈도우가보여집니다. Figure 12-6. Source Window Shows Line from Profile Data

View Profile Details Profile 정보에대해보다자세한정보를 Details 윈도우에서볼수있습니다. Ranked 혹은 Call Tree 윈도우에서특정 Function 클릭하거나마우스오른쪽버튼을클릭하여 Function Usage 를선택합니다. Function Usage 를선택하면선택한 instance 의자세한정보가 Profile Details 윈도우에보여집니다. 1. Call Tree 윈도우에서 Details 윈도우열기 A. Tcl_WaitForEvent Function 을선택하고마우스오른쪽버튼을눌러 Function Usage 를선택합니다. Tcl_WaitForEvent Function 을사용한모든 Instance 가 Profile Details 윈도우에나타납니다. Figure 12-7. Profile Details of the Function Tcl_Close 2. Structure 윈도우에서 Details 윈도우열기 A. Structure 윈도우에서 test_sm 을선택하고 Expand All 을선택합니다. 위에서와마찬가지로자세한정보가보여집니다. Figure 12-8. Profile Details of Function sm_0 Filtering the Data 마지막단계로, Toolbar 의 Profilter 를사용하면전체 Simulation 중에서 3% 미만을차지하는 task 정보는 Filtering 할수있습니다. 1. 3% 미만의 Line 찾기

A. Call Tree 윈도우를엽니다. B. Toolbar 의 field 의 under 부분을 3 으로입력합니다. Figure 12-9. The Profile Toolbar C. Refresh Profile Data 버턴을클릭합니다. 아래와같이 3% 이상을가지고있는 Line 들이아래와같이보여집니다. Figure 12-10. The Filtered Profile Data Creating a Performance Profile Report 1. Profile Data 중 Call Tree 리포트만들기 A. Tools>Profile>Profile Report 를선택합니다. B. Profile Report 창이열리면 Type 에 Call Tree 를선택합니다. Performance / Memory data 블록엔 Performance only 를선택합니다. CutOff percent 에는 3 을입력합니다. Write to file 부분엔 calltree.rpt 를입력합니다.

Figure 12-11. The Profile Report Dialog Box 위와같이입력이끝났으면 OK 를클릭합니다. C. 자동적으로저장했던 calltree.rpt 파일이아래의그림같이열립니다. Figure 12-12. The calltree.rpt Report

Chapter 13 Simulating With Code Coverage ModelSim/Questa 에서제공하는 Code Coverage 는 Simulation 이진행되는동안에 executable statements, branches, conditions, expressions 와같은 Code Coverage 정보를 GUI 와 Report 형식으로유저에게제공을합니다. 이번챕터에서사용할예제파일의위치는다음과같습니다. Verilog <install_dir>/examples/tutorials/verilog/coverage VHDL <install_dir>/examples/tutorials/vhdl/ coverage 이번챕터에서진행되는내용은유저매뉴얼의 Code Coverage 를보시면더욱자세한정보를 알수있습니다. Compile the Design 1. 새로운디렉토리를만들고 tutorial file 복사하기 이번챕터를진행하기위한 directory 를만듭니다. 그리고 tutorial file 들을새로만든디렉토리로복사합니다. 2. ModelSim/Questa 를실행되었으면 Change directory 를이용하여 1 번과정의 directory 로이동하기 A. 바탕화면의단축아이콘혹은 vsim command 를이용하여 ModelSim/Questa 를구 동합니다. B. File>change Directory 를이용하여 1 번과정에서만든 directory 를지정합니다. 3. Library 만들고 Compile 하기 A. Verilog 의경우 i. vlib work vlog *.v 를입력합니다. B. VHDL 의경우 i. vlib work

vcom -93 *.vhd 를입력합니다. 4. Coverage 정보를포함하는최적화 Design 만들기 A. 아래의 Command 를입력합니다. i. vopt +cover=bcsxf test_sm o test_sm_opt 를입력합니다. 최적화된 test_sm_opt 라는최적화된 library 가만들어집니다. Load and Run the Design 1. Design 로드하기 A. Transcript 윈도우에 vsim coverage test_sm_opt 를입력합니다. 여러개의 coverage 윈도우들이함께열리는데그중에 Coverage 라는윈도우가아 래와같이열립니다. Figure 13-1. Code Coverage Windows Code Coverage 를수행하게되면 statement, branch, condition, expression, FSM, toggle 과같은분석을진행하게되며, 분석에따라 Code 왼쪽에실행이되었는지 안되었는지 Code Coverage 아이콘을통해확인할수있습니다.

Table 13-1. Code Coverage Icons 분석툴바를통해선택할수있습니다. Figure 13-2. Analysis Toolbar Code Coverage Analysis window 의제목표시줄에서어떤항목을분석하는지확인 할수있습니다. Figure 13-3. Title Bar Displays Current Analysis 2. Simulation 진행하기

A. Transcript 윈도우에 run 1ms 를입력합니다. Simulation 이진행되면 Code Coverage 관련된윈도우에는해당하는정보들이보여지게됩니다. File 탭을살펴보면아래의그림처럼해당파일별 Coverage 결과가나타남을알수있습니다. Figure 13-4. Code Coverage Columns in the Structure (sim) Window View>Coverage 에서 Coverage 관련윈도우들을열수있습니다. Figure 13-5. Coverage Menu Viewing Coverage Data 위에서살펴본 Structure 탭에서살펴보던 Coverage Data 를 Coverage 관련다른윈도우에서도 살펴볼수가있습니다. 1. Structure 윈도우살펴보기 A. Structure(sim) 윈도우를선택하면위에서보았던 Instance 별로 Coverage 정보를볼 수가있습니다. B. File 탭을선택하면이번에는 Design 을구성하고있는 File 별 Coverage 정보를볼 수가있습니다. 또한, Column 부분에서마우스오른쪽버튼을클릭하여원하는정보 만 Display 할수도있습니다.

Figure 13-6. Right-click a Column Heading to Show Column List 해당 Object 가 Check 가되어있으면보여지고 Check 를제거하면 Display 되지 않습니다. 2. Analysis 윈도우살펴보기 A. 상단에 Analysis Type 을선택하여원하는 Code Coverage 분석을볼수있습니다. Figure 13-7. Select Statement Analysis B. File 탭에서다른파일을선택하여원하는타입으로 Code Coverage 분석결과를확 인할수있습니다. C. Source Window 에서해당줄을표시하려면더블클릭합니다. 3. Coverage Details 윈도우살펴보기.

A. 먼저 Analysis Window 에서 Coverage Type 을 Toggle 로변경합니다. B. View>Coverage>Details 를선택합니다. C. Object 를선택하면 Details Window 를통해분석을할수있습니다. Figure 13-8. Coverage Details Window Undocked 4. Instance Coverage 윈도우살펴보기 A. Instance Coverage 윈도우를살펴봅니다. View>Coverage>Instance Coverage 를선택합니다. Instance 윈도우에서는 Instance 들이 Non-hierarchical 로보여지며 Instance 를선택하고더블클릭을하면해당 Source 내용이 Source 윈도우를통해보여집니다. Figure 13-9. Instance Coverage Window

Coverage Statistics in the Source Window 1. Source 윈도우를통해 beh_sram 에대해 Coverage 정보살펴보기 A. File 탭에서 beh_sram.v 파일을더블클릭을하면해당파일이 Source 윈도우에나타납니다. B. 해당파일을아래의그림처럼스크롤합니다. Figure 13-10. Coverage Statistics in the Source Window Source 윈도우를살펴보면 Line 과 Source 내용외에 Hits 와 BC Column 이보입니다. 그내용의의미를아래와같습니다. Table 13-2. Coverage Icons in the Source Window Icon Description 녹색체크마크 한번이상실행되어진라인 빨간 X 한번도실행되지않은라인 녹색 E Coverage 체크를하지않는라인 빨간 Xt 혹은 Xf True 혹은 False 로실행되지않은 Branch 구문 C. Tools>Code coverage>show coverage numbers 를선택합니다. 그러면, Source 윈도우에서해당하는 Coverage 들의실행된숫자가표시됩니다.

Figure 13-11. Coverage Numbers Shown by Hovering the Mouse Pointer Tools>Code coverage>show coverage numbers 를다시선택함으로써정보를안보이게할수도있습니다. Toggle Statistics in the Objects Window Toggle Coverage 는 logic node 들의 transition 을 Check 합니다. 이번 Chapter 를진행하면서앞서서 vlog, vcom command 로 compile 을진행할때, cover x 옵션을살펴보았을것입니다. Toggle Coverage 에대해서는 User Manual 읠 Toggle Coverage 부분을보시면더욱자세히알수있습니다. 1. Objects 윈도우에서 toggle coverage data 보기 A. Structure (sim) 탭에서 test_sm 을선택합니다. B. 만약 Objects 윈도우가열려있지않으면메뉴에서 View > Objects 를선택하면됩 니다. Toggle Coverage SET 을다살펴보기위해서는 column 에서마우스오른쪽버튼을 클릭하여 Show All Columns 를선택하면됩니다.

Figure 13-12. Toggle Coverage in the Objects Window Excluding Lines and Files from Coverage Statistics Coverage 통계에서 exclude Line 혹은 File 을지정할수있습니다. GUI 를이용하거나 TCL file 을이용하여설정이가능합니다. 보다자세한내용은 User s Manual 의 Coverage Exclusions 부 분을살펴보시면보다자세한내용을보실수있습니다. 1. Code Coverage Analysis 윈도우에서 Statement line 제외하기 A. Statement Analysis view 에서 line 을선택하고 pop-up 메뉴에서 Exclude Selected 를선택합니다. 2. Exclude statement 취소하기 A. 마우스오른쪽버튼을클릭하여 Cancel Selected Exclusions 를선택합니다. 3. File 단위로 Exclude 하기 A. Files 윈도우에서 sm.v(vhdl 인경우 sm.vhd) 파일을선택합니다. B. 마우스오른쪽버튼을클릭하여 Code Coverage > Exclude Selected File 을선 택합니다.

Figure 13-13. Excluding a File Using GUI Menus Exclude 를취소할경우마찬가지로오른쪽마우스버튼을클릭하여 Code Coverage > Cancel File Exclusions 를선택합니다. Creating Code Coverage Reports Coverage 결과는 GUI 혹은 command 를통해서 TEXT 혹은 HTML 형태로 Report 할수있습니다. 아래의방법중에하나를선택해서진행하면 GUI 메뉴를통해서 Textual coverage report 를만 들수있습니다. 메뉴바에서 Tools > Coverage Report > Text 를선택합니다. sim 혹은 Files 윈도우에서마우스오른쪽버튼을클릭하면나오는 pop-up 메뉴에서 Code Coverage > Code Coverage Report 를선택합니다. Instance Coverage 윈도우에서마우스오른쪽버튼을클릭하고, pop-up 메뉴에서 Instance Coverage > Code coverage report 를선택합니다. 이와같은방법으로진행하면아래와같이 Coverage Text Report Dialog 창이나타납니다. 이 윈도우를통해아래와같은요소들을선택할수있습니다. All files All instances All design units Specified design unit Specified instance

Specified source file Figure 13-14. Coverage Text Report Dialog Box 원하는요소들을선택하고 OK 버튼을클릭하면 report.txt 파일이만들어집니다. HTML 형태의 Report 를원하면메인메뉴에서 Tools > Coverage Report > HTML 를선택하면아래와같은 창이열립니다.

Figure 13-15. Coverage HTML Report Dialog Box 일반적으로는 coverage report 라는 command 를이용하여 text 형태의 report 를만들수있 고, html 이라는옵션을추가적으로사용하면 html 형태의 report 파일을만들수있습니다. coverage exclusions report 를생성하기위해서는 Tools>Coverage Report>Exclusions 를통 해생성이가능합니다. Figure 13-16. Coverage Exclusions Report Dialog Box

Chapter 14 Debugging With PSL Assertions Design 을 Verification 하는데있어서 Assertions 을이용하면 Verification 의생산성에많은도움이됩니다. Questa 는 Dynamic simulation verification 을위해 Property Specification Language (PSL) 을지원하고있습니다. PSL assertions 을이용하여 Simulation 을진행하면 debugging 을하는데많은장점이있습니다. 이번챕터에서사용할예제파일의위치는다음과같습니다. Verilog <install_dir>/examples/tutorials/psl/verilog/modeling/dram_controller VHDL <install_dir>/examples/tutorials/pslhdl/ modeling/dram_controller 이번챕터에서진행되는내용은유저매뉴얼의 Verification With Assertions and Cover Directives 를보시면더욱자세한정보를알수있습니다. Run the Design without PSL Assertions 1. 새로운디렉토리를만들고 tutorial file 복사하기 이번챕터를진행하기위한 directory 를만듭니다. 그리고 tutorial file 들을새로만든디렉토리로복사합니다. 2. Questa 을실행되었으면 Change directory 를이용하여 1 번과정의 directory 로이동하 기 A. 바탕화면의단축아이콘혹은 vsim command 를이용하여 Questa 를구동합니다. B. File>change Directory 를이용하여 1 번과정에서만든 directory 를지정합니다. 3. Do 파일실행하기 A. do run_nopls.do 라는 command 를입력합니다. 실행시킨 DO 파일은아래와같은작업을진행합니다. i. Working library 생성 ii. Designs, Assertions files 의 compile iii. Design 최적화 iv. Design load

v. Simulation 진행 실행시킨 run_nopls.do 파일을열어서내용을확인하면, vsim command 부분에 voptargs= +acc 와 opt 라는옵션이사용되고있는것을볼수있다. 이내용은 design 을최적화하는데있어서 visibility 를최대한확보를하라는내용이며, -nopsl 옵션은 PSL assertions 을무시하고진행하는의미입니다. Figure 14-1. Transcript After Running Simulation Without Assertions Simulation 이진행되다가위와같은 error 메시지가출력되면 Simulation 이중 단됩니다. Error 를 debugging 하기위해서는우선 Simulation 결과인 Waveform 을확인 하고, Memory contents 를살펴보면서 Error 를확인해야할것입니다. Debugging 시간을단축하기위해서는뭔가 error 를쉽게찾기위한방법이필 요할것입니다. 4. Simulation 을종료합니다. A. quit-sim command 를입력하여 Simulation 을종료합니다. Using Assertions to Speed Debugging Assertion 을통한빠른디버깅을위해서는 assertion failure tracking 디자인을다시불러와야 합니다. 1. 디자인 Load 하기 A. Command 에 vsim-msgmode both asserdebug dram_opt 를입력합니다.

- msgmode both 는 transcript 와 WLF 파일모두에메시지를출력합니다. dram_opt 는시뮬레이션을실행할때사용할최적화된파일의이름입니다. - assertdebug 옵션은 assertion 을실패할경우디버깅을위한옵션입니다 2. WildcardFilter 설정변경하기 Command 에 set WildcardFilter "Variable Constant Generic Parameter SpecParam Memory Endpoint CellInternal ImmediateAssert" 를입력합니다. 이명령어를사용하면 WildcardFilter 의기본목록인 Assertion, Cover, ScVariable 을 제거합니다. 기본적으로디버그환경인시뮬레이터의 log 에 Assertion, Cover Directives, SystemC Variables 가기록됩니다. 3. Assertions window 를통해모든 PSL assertion 보기 A. Command 에 view assertion 을입력합니다. 그럼 Assertion Window 가나타나며, 모 든 PSL assertion 이보여집니다. Figure 14-2. Assertions Window Displays PSL Assertions 4. 모든 assertion 에서 Break 와 Failures 를설정하기. A. View>Coverage>Assertion 을통해 Assertion Window 를활성화합니다. B. Assertions>Configure 를선택합니다.

Figure 14-3. Configure Assertions Dialog Box C. Change on 항목에서 All assertions 을선택합니다. D. Enable 항목에서 On 을선택합니다. E. Action 항목에서 Break 를선택합니다. F. Passes 의 Logging 항목에서 On 을선택합니다. G. OK 버튼을누릅니다. Command 에아래의명령어를입력합니다.

assertion action -cond fail -exec break -r * assertion pass -log on -r * 5. 모든 Assertion signal 을 Wave Window 에추가. A. Assertion Window 에있는모든 assertions 를선택합니다. B. 팝업메뉴를열려면선택한 assertions 를오른쪽마우스로클릭합니다. C. Add Wave>Selected objects 를선택합니다. Wave Window 에보라색삼각형아이콘과함께 Assertion Signal 이나타납니다. Figure 14-4. Assertions in the Wave Window 6. Simulation 진행과결과보기. A. Command 에 run all 을입력합니다. Verilog : Transcript Window 에 dram_cntrl.psl 파일에 assert_check_refresh 의 assertion 이 3100 ns 에 failed 되었다는정보를보여줍니다. Figure 14-5. Assertion Failure Indicated in the Assertions window

시뮬레이션은그시간에정지했습니다. 테스트벤치는 Assertion 을하지않아 267,400 ns 까지 failure 를보고하지않았습니다. (80 배이상빨리 Failure 된 Simulation 시간을보여줍니다.) Figure 14-6. Assertion Failure Shown in the Transcript Window VHDL : Transcript Window 에 dram_cntrl.psl 파일에 assert_check_refresh 의 assertion 이 3800 ns 에 failed 되었다는정보를보여줍니다. 시뮬레이션은그시간에정지했습니다. 테스트벤치는 Assertion 을하지않아 246,800 ns 까지 failure 를보고하지않았습니다. (60배이상빨리 Failure 된 Simulation 시간을보여줍니다.) B. Source Window 에서 dram_cntrl.psl 을클릭합니다. Simulation 이정지된위치를 Source Window(dram_cntrl.psl) 에서파란색화살표가표 시됩니다. -24 번 line 의 check_refresh 의 assertion C. Wave 탭을클릭하여 Wave Window 를엽니다. Wave Window 는 Simulation 이 Break 된시점에서 FAIL 된부분을빨간색삼각형으로 나타냅니다. 녹색삼각형은 Pass 를나타냅니다. Figure 14-7. Assertion Failure Indicated in Wave Window

Waveform 에서파란색부분은비활성된 Assertion 을나타냅니다. 녹색은활성된 Assertion 을나타냅니다. 7. Wave window 를통해 failure 된 Assertion 을디버그창을통해확인. Simulator 를호출하기위해 vsim Command 를입력할때 assertdebug 를사용하여, Wave Window 를통해 Assertion Failure 을디버깅할수있습니다. A. Wave>Assertion Debug 를선택합니다. Verilog : Wave Window 의 assertion 창을보면 Start Time 에 2700 에서 FAIL 생겼다 고보여줍니다. Figure 14-8. The Failed Assertion Details for Verilog Design VHDL : Wave Window 의 assertion 창을보면 Start Time 에 2900 에서 FAIL 생겼다고 보여줍니다.

Figure 14-8. The Failed Assertion Details for VHDL Design 8. Assertions Window 를통해 assertion failure 확인. A. Assertions Window 에서 assert_check_refresh 를선택합니다. 선택하면하이라이트로 표시됩니다. Figure 14-9. Assertion failure indicated in the Assertions window Debugging the Assertion Failure 지금부터 Assertion Failure 를 Debugging 하겠습니다. 1. Assertion fail 된 source code 를확인합니다.(dram_cntrl.psl) 24 번 Line 을보면 Assertion 이 Fail 된부분에파란색화살표로표시됩니다. 이

assertion 은 20 ~ 22 번라인까지정의되어있으며, check_refresh 속성을체크하는것으로구성되어있습니다. check_refresh 속성을보면 reflash signal 이활성화가되려면 memory controller state 가 IDLE 이될때까지기다립니다. 읽기와쓰기를수행할때가장긴부분이 14 cycles 이며, Controller 가 IDLE 일때는 0 cycles 을기다립니다. Controller 가 IDLE 이되면 refresh sequence 는다음사이클에시작됩니다. Figure 14-10. Source Code for Failed Assertion Refresh sequence 는 18 번 Line 에정의되어있습니다. 여기에서 refresh protocol 의핵심 은 entire refresh cycle 를위해 we_n 을 high 로유지해야합니다. 2. Write enable signal 인 we_n 을 Wave Window 를통해확인을해보면, REF1 과 REF2 에 서 high 로유지합니다. A. Wave Window 에서 assertion 을참조하는모든 Signal 을보기위해 assert_check_refresh 를확장합니다. B. Zoom 과 scroll 을통해 Wave Window 에서 we_n 과 mem_state 를확인합니다

Figure 14-11. Examining we_n With Respect to mem_state we_n 이 high 일때, mem_state 의 REF1 은 high 상태이지만, REF2 는 low 인것을쉽게 볼수있습니다. we_n 을더살펴보겠습니다. 3. Dataflow 와 Source window 를이용하여 we_n 확인. A. 메인메뉴에서 View>Dataflow 를선택하여 Dataflow Window 를활성화합니다. B. 메뉴에서 Dataflow>Dataflow Preferences>Options 을선택하면옵션 Dialog Box 가열 립니다. ( 만약에 Dataflow Window 가 Undock 이면, Dataflow Window 메뉴에서 Tool>options 을선택합니다.) C. 옵션 Dialog Box 에서 Show 항목에서 Hierarchy 를체크하지않습니다.

Figure 14-12. Dataflow Options Dialog Box D. Wave Window 에서 we_n 을선택합니다. E. 메인메뉴에서 Add>To Dataflow>Selected Item 을선택합니다. Verilog : Input rw 와 mem_state 를가진 #ASSIGN#104 process 에의해 we_n 이동작하는것을 Dataflow Window 를통해확인할수있습니다. 3100 ns 에서시뮬레이션이정지하였으며, 그시점에서각각의 Signal Value 는노란색으로보여줍니다. mem_state 가 REF2 일때 we_n 이 St0 인것을볼수있습니다. 하지만 we_n 은 St1 이되어야합니다. 이런이유로 assertion failure 이되었습니다. Figure 14-13. Viewing we_n in the Dataflow Window - Verilog VHDL : Input rw 와 mem_state 를가진 line_61 에의해 we_n 이동작하는것을 Dataflow Window 를통해확인할수있습니다. 3800 ns 에서시뮬레이션이정지하였으

며, 그시점에서각각의 Signal Value 는노란색으로보여줍니다. mem_state 가 REF2 일 때 we_n 이 St0 인것을볼수있습니다. 하지만 we_n 은 St1 이되어야합니다. 이런 이유로 assertion failure 이되었습니다. Figure 14-14. Viewing we_n in the Dataflow Window - VHDL F. Source Window 를통해 source code 를확인하기위해 we_n 을동작하는 process 을 더블클릭합니다. Verilog : Source Window 에서 dramcon_rtl.sv 파일의 104 번 Line 에파란색화살표를 확인할수있습니다. 이라인을통해 we_n 이 assign 되었을때, REF2 가 account 되 지않는것을볼수있습니다. Figure 14-15. Finding the Bug in the Source Code - Verilog 106 ~ 107 을보면 refresh cycle 의두 state 를통해 we_n 이 high 로되는예제코 드를확인할수있습니다. VHDL : Source Window 에서 dramcon_rtl.sv 파일의 61 번 Line 에파란색화살표를확 인할수있습니다. 이라인을통해 REF2 가 account 되지않는것을볼수있습니다.

잘못된 assign 을사용하는코드로확인할수있습니다. 65 Line 을통해두 State 를 통해 we_n 이 high 가되는코드를볼수있습니다. Figure 14-16. Finding the Bug in the Source Code - VHDL G. Wildcard filter 를 Default setting 으로되돌리기. set WildcardFilter "default" H. Simulation 을종료합니다. quit-sim command 를입력하여 Simulation 을종료합니다.

Chapter 15 SystemVerilog Assertions and Functional Coverage 이번챕터에서는 Questa 의 SystemVerilog Assertion 과 Functional Coverage 기능을사용하여 기능적인하드웨어검증에대해살펴볼것입니다. error 에도달하기전에얼마나시뮬레이션을진행했는지확인하기위해 assertion failure tracking 을비활성화하여 Design 을 Simulate. assertion failure tracking 을활성화하면 assertion failure 의 error 위치와빠른디버깅 을할때도움이됩니다. 활성화하여다시 Simulation 을진행합니다. test bench 를위해 cover directive 와 covergroup 을사용하여 functional coverage 활 성화. Graphic interface 를사용하는 functional coverage report 생성 이번챕터에서사용할예제파일의위치는다음과같습니다. Verilog /<install_dir>/examples/tutorials/systemverilog/vlog_dut 이번챕터에서진행되는내용은유저매뉴얼의 Verification with Functional Coverage 를보시면더욱자세히알수있습니다. Understanding the Interleaver Design Interleaver 는 Reed Solomon/Viterbi 와같은에러검출및정정방식을돕기위해들어오는데이터의바이트순서를뒤섞습니다. 이챕터에서사용되는 Incoming data 는 sync byte(0xb8, 0x47) 로구성되어있으며, 이어서 packet data 는 203 byte 로되어있습니다. 203 byte 에서이미 Reed Solomon encoder 가 16 byte 를갖고있기때문에, 데이터는 187 byte 로되어있습니다. Figure 15-1. Incoming Data Interleaver 는 0 ~ 11 인 12 level number 가있습니다. 각레벨은처음을제외하고개념적으로

FIFO shift register 로생각할수있습니다. 각 register 의 depth 는이전 level 보다 17 이상입니다. 처음 level(level 0) 은 0 의 depth 를가지며, level 1은 17 의 depth 를가집니다. level 2 는 34. 이렇게순차적으로올라가 11 level 은 187 의 depth 를가집니다. 패킷의 Sync byte 는 level 0 을통해연결됩니다. 바이트가각 level 의 FIFO shift register 로로드될때, byte shift 는해당 level 에따라 Interleaver 에의해출력됩니다. 실제 Register 대신에 single 2KX8 RAM 을 FIFO shift register 를사용하여진행합니다. RAM 은 11개의다른섹션으로구분되며, 각 level 은별도의읽기및쓰기 address register 를가지고있습니다. State machine control 의 level 은 address register 의 level 에의해읽기, 쓰기를결정하며, 실제 RAM address input 을동작합니다. rdy_acpt block 은각각의 interleaver 의각 data in(di) 과 data out(do) 포트를동작하는데사용됩니다. rdy_acpt 라는일반적인블록은각각수신 (DI) 및데이터아웃 (DO) 포트에데이터 interleaver를구동하는데사용됩니다. rdy_acpt 블록을통해간단한 handshake protocol 을구현할수있습니다. 그것에 interleaver Deriver 데이터로부터 upstream 장치의데이터가구동되는경우 ready signal이 (di_rdy) 가 asserted 됩니다. Upstream block 은 rdy 신호와함께데이터를 downstram 이받아 (di_acpt) 신호를 assert 할때까지 asserted 되어야합니다. rdy 와 acpt 신호모두가 Clock 의 rising edge 에서전송될때까지 assert 된것으로간주되지않습니다. rdy_acpt 블록의양쪽이 handshake protocol 을따릅니다. Interleaver 의 block diagram 이보여집니다. Figure 15-2. Block Diagram of the Inteleaver

The Test Bench 아래의그림은 test bench 가연결되는방법을보여줍니다. Stimulus generator 는임의의데이터패킷을생성하고 Driver 에게보냅니다. Test bench 를기반으로하더라도, stimulus generator 는여전히 Transaction based(sv class) 패킷을생성합니다. Advanced Verification Methodology (AVM) 가제공하는큰장점입니다 유저분이완전한객체지향프로그래밍환경으로진행하면 Test bench 를변환할필요없이향상된 transaction level modeling(tlm) 기술을활용할수있습니다. Figure 15-3. Block Diagram of the Test Bench 드라이버는 TLM 패킷들을가지고, 핀레벨신호로변환합니다. 드라이버는장치에전달된패 킷의타이밍을변화시키는 randomization 을사용합니다. 모니터는 DUT 입력및출력핀의레벨활성을가지고 Coverage collector 및 scoreboard 로사 용하기위해다시 transaction 을 activity 로변환합니다. scoreboard 는실제 output 장치와비교하는것이 interleaver 의 "golden" reference 모델에포함되어있습니다. 테스트가완료되면 stimulus generate 의 scoreboard 로부터 feedback loop 가있습니다. coverage collector 는테스트가완료되면 functional coverage 정보를결정하는데도움이됩니다.. 이것은패킷전송을사용할때다른여러 delay value 의종류를측정합니다. 마지막으로 responder( 실제테스트벤치드라이버의일부입니다 ) 는패킷전송에필요한

handshaking ready/accept 신호를제공합니다. Run the Simulation without Assertions 1. 새로운디렉토리를만들고튜토리얼파일복사하기. 새로운디렉토리에 /<install_dir>/examples/tutorials/systemverilog/vlog_dut 를복사합 니다. 2. Questa 를실행하기. A. UNIX shell prompt 에서 vsim 을입력하거나, Window 의 Questa 아이콘을더블클릭합 니다. B. 메인메뉴의 File>Change Directory 를선택하여 step 1 에서생성한디렉토리로변경합 니다. 3..DO File 과함께시뮬레이션실행하기. A. Command 에 do assert.do 를입력합니다. DO File 은시뮬레이션결과를확인하면서일시정지를하고, 컴파일하여디자인을로 드합니다. 그리고 assertion 없이시뮬레이션을실행합니다. ( 만약 Finish Vsim dialog box 가나타나 Are you sure you want to finish? 라고물으면 NO 를클릭하면됩니다.) 유저분은 assertion 과함께 simulation 을다시실행할수있도록 resume 명령어를 입력합니다. 디자인이로드된후 top.sv module 은 $fisish 를찾을때까지시뮬레이션이실행됩니다. 그리고 Transcript Window 를보면 Test Failed massage 가보여집니다. summery 정보를보면 22 packet 이올바르게 scoreboard 에수신되었다는것을나타냅니다. 이것은 self-checking test bench 에서일반적인메시지입니다.

Figure 15-4. First Simulation Stops at Error 이시점에서유저분은일반적으로 test failure 디버깅을위한 waveform 을생성합니다. 그러나그정보는문제의원인에대한정확한 source 를제공하지않습니다. 그렇기때문에 assertion 을사용하여디버깅을해야합니다. Run the Simulation with Assertions 유저분은디버깅을위해 Assertion 을사용하여시뮬레이션을실행하겠습니다. 1. Assertion 을사용하여시뮬레이션을다시실행하기. A. Transcript window 에서 resume 명령어를입력합니다. 2. 디자인로드후에모든 assertion 을 Break on Failure 로구성하기. A. Assertion window 를열기위해 View>Coverage>Assertions 를선택합니다. assertion 에대한 pass 와 failure 을모두사용할수있는지확인합니다. Assertion 기 능이 default 로되어있지않기때문에확인을해야합니다. Wave window 를 Count 와 Visual indication 을통해 Assertion pass 와 failure 를확인 할수있습니다. vsim assertdebug 를통해시뮬레이션을진행할때 assertion 기능을사용할수있 습니다.( 이것은 assert.do file 의명령어에있습니다.) B. Assertions tab 을클릭하여 Assertion Window 를활성화합니다. Assertions 는 menu bar 에표시됩니다.

C. Assertion 이모두선택되었는지확인합니다. Edit>Unselect all D. Command 를입력하여실행합니다. assertion action -cond fail -exec break -r * FPSA Actions 를통해 B 가 break 이며, assertion failure 를확인할수있습니다. (FPSA 는 Failures, passes, starts, antecedents 를보여줍니다 ). Column 을보면 4 문자가표시되는데, 첫번째문자는 Failures, 두번째문자는 Passes, 세번째문자는 Starts, 네번째문자는 Antecedents 입니다. (Actions 는 continue, break, exit, tcl.) 만약에 FPSA 가표시되지않으면열탭을선택하여간격을조정하여볼수있습니다. Figure 15-5. Assertions Set to Break on Failure 3. Wave Window 에 /top/dut/fifo 에관련된모든 assertion 을추가합니다. A. Assertion Window 에서 /top/dut/fifo/assert_push_mutex_check 를선택합니다. B. Shift 키를누른채 /top/dut/fifo/assert_ram_read_check_10 을선택합니다. /top/dut/fifo 에관련된모든 assertion 을선택해야합니다.( 파란색으로표시 ) C. Add>To Wave>Selected Objects 를선택합니다. 선택된 Assertion 이 Wave Window 에 나타납니다. Figure 15-6. Assertions in Wave Window

Debugging with Assertions 시뮬레이션을실행하고 Assertion failure 를디버깅합니다. 1. Assertion failure tracking 을활성화하고시뮬레이션실행. A. Transcript Window 에서 run all 을입력합니다. B. 시뮬레이션이중지되면 run 0 을입력합니다. run 0 명령어는 assertion failure action 이 break 가설정되어있는경우 massage 를출력하는데사용합니다. Break 는 active event queue 에발생합니다. Assertion massage 는 observed region 에 scheduled 되어있습니다. Observed region 은다음 time step 입니다. run 0 은 time step 끝으로이동합니다. 2. Transcript window 를통한 output 확인하기. Assertion failure massage 가 failing expression 을제공하는것을알수있습니다. assertdebug 를 vsim 과함께사용하는경우이기능을사용할수있습니다. (dl 명령은 assert.do 파일에있습니다.) Figure 15-7. Assertion Failure Message in the Transcript 3. Assertion Window 를통해 assertion failure 확인하기. 실패한 assertion 은하이라이트와 1 로볼수있으며, Verilog 디자인의 assertion Failure count 를열을통해확인할수있습니다.

Figure 15-8. Assertions Tab Shows Failure Count 4. fifo_shift_ram_propss.v 소스코드를확인합니다. fifo_shift_ram.v 를확인해보면 44 번라인에 assertion failed 된부분을파란색화 살표로가리킵니다. Figure 15-9. Simulation Stopped at Blue Pointer parameterized property 가선언된 29 번 line 부터시작합니다. A. fifo_shift_ram.v 에서 property 가선언된 29 번라인으로이동합니다. Figure 15-10. Assertion Property Definition Property 를보면 (push[10]) 은같은주기에 assert 되는것을알수있습니다. Ram address bus 는 level 11(waddr[11]) 에대한 write address bus 와같아 야합니다. 그리고 waddr[11] 은 1536 ~ 1722 범위내에있어야합니다. 다음주기입니다. we 는 assert 를하지않습니다.

그리고 waddr[11] 의다음값은 1536 ~ 1722 범위내에있어야합니다. 5. Assertion failure 를보려면 Wave window 를선택하기. A. Wave Window 에서 Edit>Find 를선택하여 search bar 를볼수있습니다. B. Search bar 에서 Search for>value 를선택합니다. Figure 15-11. Search For Value C. Search bar text entry box 에 fail 을입력합니다. 검색은사용자입력으로시작되며, FAIL 값이하이라이트로나타납니다. Waveform 에서빨간색삼각형은 assertion failure 를나타냅니다. Figure 15-12. Inverted Red Triangle Indicates Assertion Failure Assertion 이활성화되면중간에녹색이나타나며, 비활성화인경우파란색선 이나타납니다. Assertion thread 시작은파란색사각형으로나타납니다. 녹색삼각형은 assertion pass 를나타냅니다. vsim 명령어와함께 assertdebug 옵션을사용하면 pass 가표시됩니다.(assert.do 파일을참조하시 면됩니다.) D. Wave window 를 Zoon in 하여 assert_ram_write_check_10 을확인후 [+] 를눌러확 장합니다.

E. addra 와 waddr 신호를선택한후, 오른쪽마우스를클릭하면팝업메뉴가나타나는 데, 팝업메뉴에서 Radix>Unsigned 를선택합니다. Figure 15-13. Setting the Radix waddr[11] 값은 address 범위를벗어나 1723 으로증가했습니다. 범위를벗어나 failing expression 된것은 transcript window 에 assertion violation 에대한내용이보여집니 다. 6. Dataflow window 를통해신호를검사하기. A. waddr[11] 신호를찾아 [+] 를눌러 waddr 신호를확장합니다. Figure 15-14. Diagnosing Assertion Failure in the Wave Window B. waddr[11] 신호를선택한후 Add>To Dataflow>Selected Items 를선택합니다. 그러면선택된신호가 Dataflow Window 에열립니다.

waddr[11] 신호는하이라이트로보여지며, ALWAYS Procedure 블록으로볼수있습니다. Figure 15-15. The waddr11 Signal in the Dataflow Window C. Dataflow Window 에서 ALWAYS 블록을더블클릭합니다. 그러면 fifo_shift_ram.v 의소 스코드가나타나며해당부분을파란색화살표로표시합니다. Figure 15-16. Source Code for the ALWAYS Block waddr[11] 을보면 11 1722 대신 11 1724 로되어있는것을확인할수있습니다. 이것이 에러의원인입니다.

Figure 15-17. Source Code for waddr[11] 7. 시뮬레이션종료하기. A. Command 에 quit sim 을입력합니다. Exploring Functional Coverage SystemVerilog 의 functional coverage 기능을사용하면유저분이만든디자인의 functional level 을확인할수있습니다. 1. 다시 interleaver 로드하기. A. Command 에 do fcov.do 를입력합니다. Interleaver 는 interleaver 되는유효한패킷의수를결정하기위해 80 으로설정된 parameter(pkt_gen_num) 을사용합니다. Scoreboard 는 80 개의패킷이 stimulus generate 와 driver 를멈추고 test controller 를 interleaver 되었다고알려줍니다. 시뮬레이션동안 coverage collector 는여러가지로전송된각패킷에대한 several metrics 와 interleaver 에대한 output 을기록합니다. up_cvg 의소스코드를확인합니다.

Figure 15-18. Covergroup Code 모니터로 upstream transaction 을 capture 하여 transaction 에저장된정보를 covergroup 에기록합니다. Transaction 은 packet payload data, sync byte, 각각의 data payload 의데이터전송시간을포함합니다. SystemVerilog 를 LRM 에의해정의하여만든 auto bins 의기본번호는 (64) 로부터각 각의데이터값을생성하기위해 option.auto_bin_max = 256 을지정합니다. Sync byte 값은 71 과 184 이며, 8 h47 과 8 hb8 입니다. 2. run 0 시뮬레이션이실행될때까지 covergroup 은표시되지않습니다. 이단계는단순히 covergroup 창의 covergroup 을볼수있습니다. 3. Covergroups Window(View>Coverage>Covergroups) 에서 /top/dut/ 를선택하여 [+] 를클 릭하여확장합니다. 그러면 interleave state machine 을모니터하여추가신호인 sm_transitions_cvg 와 sm_cvg 를찾을수있습니다. Figure 15-19. Covergroup Bins

sm_cvg record 는 state machine 이제대로수신데이터를받아적절한상태에서 output 데이터를동작하면서, sm_transitions_cvg 의 state machine transition 을기록합 니다. sm_cvg covergroup 의소스코드를확인해보겠습니다. Figure 15-20. Covergroup sm_svg in_hs 신호와 out_hs 신호는 AND 연산에의해 in_acpt 와 in_rdy, out_acpt 와 out_rdy 로각각 derive 됩니다. idle, load_bypass 일때, 또는 10 개의 state 중하나의 load state 일때 in_acpt 를 assert 하며, send_bypass 나 10 개 state 중하나를보낼때 oup_rdy 를 assert 합니다. State machine 은 idle, load_bypass 또는 10 개의 state 중하나인경우 in_hs 를 assert 합니다. load_bypass 거나 10 개의 state 중하나를보내면마찬가지로 out_hs 를 assert 합니다. in_hs 와 int_state, 그리고 out_hs 와 ini_state 를 Crossing 하여동작을확인할수있습니다.

int_state 의 coverpoint 와 sm_cvg 의 covergroup 모든 bin 을볼수있도록확장합니 다. bin 값은열거된 state 의이름을보여줍니다. Figure 15-21. Bins for the sm_cvg Covergroup 4. ram_cvg covergroup 에서 /top/dut/fifo 를 [+] 버튼을클릭하여확장합니다. Covergroup 의 TYPE sm_cvg 는여러인스턴스를포함하는것을알수있습니다.(INST 로지정 ) A. Covergroup 안에있는인스턴스의이름을마우스오른쪽버튼으로클릭하고, 팝업메뉴 에서 view source 를클릭하여 TYPE ram_cvg 의소스코드를볼수있습니다.

Figure 15-22. Viewing the Source Code for a Covergroup fifo_shift_ram.v 의코드를확인하기위해 source window 를엽니다. Figure 15-23. Source Code for ram_cvg Covergroup Interleaver level 은각레벨에대한별개의 RAM 주소범위와단일 RAM 을사용하여 구현되기때문에, covergroup 에만유효 address 위치를읽고있는지확인합니다. 하나의 Covergroup 이있는것을확인할수있지만, constructor 에전달할때다른 값으로구성되는 11 개의 covergroup instance 가있습니다. Figure 15-24. Covergroup Instances for ram_cvg

covergroup 에 option.per_instance = 1 구문이포함되어있기때문에시뮬레이터는생 constructor 에전달된값만다루고각인스턴스에대해별도의 covergroup 을만듭니 다. TYPE ram_cvg 의 covergroup 은개별 covergroup instance 의모든값의조합입니다. 5. Cover Directives window 를열고 cover directive 에대한소스코드보기. A. View>coverage>cover Directives 를선택하여, Cover Directives window 를엽니다. Cover Directives tab 에는하나의 cover directive 가포함되어있습니다. Figure 15-25. Cover Directive for the Interleaver Design B. Cover directive 를오른쪽마우스버튼으로클릭하고 View Source 를선택합니다. Cover directive 는 interleaver state machine transition tracking 을보여줍니다.

Figure 15-26. Source Code for the Cover Directive System Verilog 디자인에중요한항목을추가하기위해여러가지방법을제공합니다. Wave Window 에 directive 가 hit 했을때표시하는기능을제공합니다. Covergroup 이이벤트가적용되는정확한시간을제공하지는않지만, 일반적으로데이터값을포함하는데훨씬뛰어납니다. SystemVerilog 의 coverage 기능이모두 covergroup 의 oriented value 데이터를샘플링하는시기를결정하기위해 cover directive 를시간적성질을이용하여강력한조합을제공합니다. 6. Wave Window 로 cover directive 를추가합니다. A. Cover Directives Window 로돌아가서 /top/dut/cover_s_interleave_sm 을선택하고 마우스오른쪽버튼을클릭합니다. 그리고 Add Wave>Selected Functional Coverage 를선택합니다. 7. 시뮬레이션을실행하고 functional coverage 정보보기. A. Cover Directive 가기록될수있도록 WildcardFilter 를변경합니다. Command 입력을 통해 Cover 를기본필터링에포함하지않습니다. set WildcardFilter "Variable Constant Generic Parameter SpecParam Memory Assertion Endpoint CellInternal ImmediateAssert" B. Transcript Window 에 run all 을입력합니다. TEST PASSRED 메시지가나올때까지 디자인을실행합니다. Transcript window 에 scoreboard 정보가표시됩니다. Figure 15-27. Scoreboard Information in the Transcript

C. Covergroups window 의 functional coverage 정보를확장합니다. ( 창오른쪽하단의상태표시줄에서와같이 ) interleaver 디자인의전반적인 covergroup 의 coverage 는거의 95% 입니다. No hit covergroup 은 up_delay 이며, 1 번의적은빈도수가있습니다. 현재드라이버는패킷의 payload data 를동작하는한단어사이에적어도하나의 cycle 을 insert 합니다. sm_cvg 는 in_hsxint_state 와 out_hsxint_state 로인해적은 coverage(76.9%) 를보여줍니다. in_hs 신호는 idle, load_bypass 일때, 또는 10 개의 state 중하나의 load state 일때 assert 하며, send_bypass 나 10 개 state 중하나를보낼때 out_hs 신호를 assert 합니다. 이러한빈도수가테스트를더필요로하는영역을가리키도록나타날수있지만, coverage 의부족은실제로적절한동작이이루어졌음을보여주고있습니다.

Figure 15-28. Covergroup Coverage in the Cover Groups Window 유저분은 covergroup 의 sm_trasitions_cvg 를확장해서보면 1461 번 interleaver state transition 된것을볼수있습니다.(idle loop 일때 86 번, bypass loop 일때 1375 번 ) D. Cover Directives Tab 열기. Cover directive count 를보면 1461 번 transition 이된것을확인할수있습니다. Figure 15-29. Cover Directive Counts State Transitions 8. Wave Window 에서 Temporal to count Mode 변경하기. A. 두번째 directive 를선택한후오른쪽마우스버튼을클릭하여 View>Cover Directives>Count mode 를선택합니다.

Figure 15-30. Changing the Cover Directive View to Count View B. Wave Window 를통해 Cover Directive 를확인합니다. 아래에두개의 Cover Directive 이미지가있습니다. 위의그림은 temporal mode 로보았을때이며, 아래의그림은 count mode 로보았을때입니다. 두이미지를비교해보면다른부분을쉽게확인하실수있습니다. 위의그림은시작과끝사이가 1240 ns 이며, 아래의그림에서는 780 ns 를확인할수있습니다. Figure 15-31. First Temporal and Count Mode Views of Cover Directive

Figure 15-32. Second Temporal and Count Mode Views of Cover Directive Creating Functional Coverage Reports 유저께서는 GUI 혹은 command 를통해 functional coverage report 를생성할수있습니다. 1. GUI 를통한 functional coverage report 생성하기. A. Coverage Directives Window 에서오른쪽마우스를클릭하여 Report 를선택합니다. 그 러면 functional coverage report dialog box 가열립니다.

Figure 15-33. Functional Coverage Report Dialog Box B. Report on 항목에서 All coverage items 를선택한후 Covergroups only 로변경합니다. C. Contents 항목에서 Include Covergroups options 을체크합니다. D. OK 를선택하여 fcover_report.txt 파일을만듭니다. GUI 에서진행한내용은 Transcript Window 에나타납니다. coverage report -detail -cvg -comments option -file fcover_report.txt -r / Notepad 를통해만든 report 를확인합니다.

Figure 15-34. The Functional Coverage Report 또한 Tools>Coverage>Report 메뉴를선택하여, textual, html, exclusion coverage report 를생성할수있습니다. File>Quit 를통해종료합니다.

Chapter 16 Using the SystemVerilog DPI 이번챕터에서는 SystemVerilog 를 Direct Programming Interface(DPI) 를사용하여설계하는기본방법에대해알아보도록하겠습니다. foreign language 로작성된 code 와 Verilog Simulation 을 Simulation control flow 방법으로작은디자인부터시작하여보도록하겠습니다. 일반적으로 Verilog Simulation 과인터페이스를하는데사용하는 foreign language 는 C 로작성된코드를사용합니다. 디자인은교차로를만들도록하겠습니다. GUI 를통해디자인을불러오고신호등을나타내는 신호의 waveform 을모니터하겠습니다. 시뮬레이션을실행하고 Verilog 와 C 로작성된함수 를호출하여빛의색상을변경하는방법을해보겠습니다. 이번챕터에서사용할예제파일의위치는다음과같습니다. <install_dir>/examples/tutorials/systemverilog/dpi_basic 이번챕터에서진행되는내용은유저매뉴얼의 Verilog Interfaces to C 를보시면더욱자세히알수있습니다. Examine the Source Files 시작하기전에주요디자인 source file 을살펴보아 simulation flow 를확인하고, DPI 에대한 기본요구사항일부를보도록하겠습니다. Test editor 를통해 tset.sv 를열어확인을해보도록하겠습니다.

Figure 16-1. Source Code for Module test.sv Line 1 test 라는 top-level module 을사용하여모든시뮬레이션을진행할것입니다. Line 3 데이터값빨간색, 녹색, 노란색을포함하는 traffic_signal 이라는새로운데이터유형 을선언합니다. Line 5 새로운 traffic_signal 타입의 object 를선언하고, 이름을 light 로합니다. Line 7-11 리턴값이없는 sv_greenlight 라는 Verilog Functional 을정의합니다. 단순히녹 색값으로 light 를설정합니다. 순서대로 function 이름에 sv_ 를앞에접두사로두고 C 의 Functions 와 SystemVerilog 의 tasks/functions 를구별합니다. Line 13-17 sv_yellowlight 라는 function 을선언하여, 노란색으로 light 를변경합니다. Line 19-23 sv_redlight 라는 function 을선언하여, 빨간색으로 light 를변경합니다.

Line 25-29 Verilog Task 인 sv_waitforred 는단순히 10 ns Delay 합니다. Line 31-33 이라인은 Verilog code 로보이지않습니다. 몇가지추가정보를가지고, export 키워드로시작합니다. 이부분은 export 선언문입니다. Verilog Compiler 를알리기위한기본메커니즘은특별한방식으로처리할필요가있습니다. DPI 의경우특별한처리는지정된 task 또는 function 이 foreign language 로특별한이름이공간에배치되어야표시할수있는것을의미합니다. 이선언문은 SystemVeriog 의 LRM 에정의되어있습니다. 작동방법은간단한규칙에있습니 다. SystemVerilog 의시뮬레이션을실행하고 foreign(c) code 를이용하기위해 DPI 를사용해야 하는경우, Verilog Code( 즉모든 Verilog 코드중심으로전개 ) 를중심으로간주되어야합니다. 이라인에서 GreenLight function 을뺀두가지의신호를보냅니다. Line 35 Import declaration 은 Verilog World 로 foreign(c) world 의코드를불러오는데사용 합니다. 이경우 C world 에서 c_carwaiting 이라는이름의 task 를가져옵니다.(task/function 이발생한위치를추적할수있도록 C_ 접두사를참고 ) 이것은중요한개념입니다. 만약 foreign task/function 을호출하지만, task/function 에해결되지않은참조를할경우시뮬레이션을불러올때에러가표시됩니다. Line 37-42 시뮬레이션을실행하고 light 변화시나리오를통해작은초기블록을사용합니다. 기본적으로 light 시작은 RED out 을기본으로하며, light type 정의가첫번째값입니다. 시뮬레이션이시작되면, 10 ns 를기다린후 sv_grrenlight 기능을통해녹색으로 light 를변경합니다. Verilog world 에서발생하여, sv_greenlight function 을 export 할필요가없습니다. Foreign world 는아무것도수행되지않습니다. 다음으로 10 ns 를기다린후 c_carwaiting 을호출합니다. Import declaration 의이전 discussion 에서 Verilog task 를 import 합니다. C function 을알고있습니다. 작업을호출할때실제로 Foreign world 를통해 stepping 으로일부 C code 를검사해야합니다. 다른소스파일을통해시뮬레이션이진행되는동안무슨일이일어나는지확인을합니다. foreign.c 를 text editor 를통해열어보도록하겠습니다.

Figure 16-2. Source Code for the foreign.c File - DPI Lab Line 1 c_carwaiting 에대한 function 정의입니다. 이것은 int 형으로 0 을반환합니다. Line 3-4 함수내부의문은자동차가교차로의반대편에서대기하고우리가 light 의 변화순서를시작해야한다는것을나타내는메시지를출력합니다. Line 5 SystemVerilog 의 sv_yellowlight Function 을호출합니다. 이함수가종료되면반환될때까지 Verilog 로제어를할수있습니다. Veriog world 를호출하고거기에서 task/function 을실행할수있습니다. export 선언과 Verilog code 를내보내 C code 가 sv_yellowlight 의존재를알고있습니다. 시뮬레이션을 test.sv 파일에서 13 ~ 17 번라인의 sv_yellowlight function 과함께진행합니다. YELLOW 의값으로 light 를변경한후 foreign.c 제어를전달하고 sv_yellowlight function 을호출한후다음라인으로이동합니다. Figure 16-3. The sv_yellowlight Function in the test.sv File Line 6 test.sv 의 25~29 번라인에정의된 sv_waitforred 의 SystemVerilog Task 를 호출합니다. Figure 16-4. The sv_waitforred Task in the test.sv File 이 task 구문은는 10 ns delay 를지정합니다. 이절차와관련된시간 delay 가존재하기때문에 task 구문이있어야합니다. foreign world 에서호출하는경우기본 Verilog 의 task 와 function 에관련된모든규칙이적용됩니다. 독립적으로두개의소스파일 (Verilog compiler 하나와 C compiler 하나 ) 을컴파일한이후에한언어의규칙은다른컴파일러가알수없습니다. Import/export 를결정할때주의하여야합니다.

여기에서주의해야할중요한부분은 foreign(c) world 에서 SystemVerilog sv_waitforred() 작업을호출한것입니다. 시뮬레이션시간을소비할경우 C 는 SystemVerilog 를디자인이나시뮬레이션시간단위에대해아무것도알수가없습니다. 그래서이러한동작을수행하기위해다시 Verilog 를통해호출을해야합니다. sv_waitforred 는시뮬레이션의 10 ns 를가지며, foreign.c 다음행으로진행합니다. 그 리고 C 를다시제어하여반환합니다. Line 7 light 를 RED 로변경하기위해 sv_redlight SystemVerilog Function 을호출합 니다. test.sv 의 Function 을보도록하겠습니다. Figure 16-5. The sv_redlight Function in the test.sv File foreign.c 에서 c_carwaiting Function 의마지막구문입니다. 함수가종료되면반환되어 Verilog 를제어합니다. 시뮬레이터는처음에 C function 을호출하며 test.sv 40 번라인으로반환합니다. 이라인에서는아무것도수행하지않습니다. 시뮬레이션실행의다음행으로내려갑니다. 10 ns 를기다린후 sv_greenlight function 을호출합니다. 이기능은 Verilog world 로변경되며 lignt 가녹색으로변경됩니다. 그러면시뮬레이션이모두종료됩니다. Figure 16-6. Function Calls in the test.sv File Exploring the Makefile Makefile 은 Unix 와 Linux 사용자가컴파일부터디자인을시뮬레이션할때, 한번의명령어를통해모든과정을실행하는데도움이됩니다. Makefile 을통해처음부터실행하거나, 다시실행할경우설정된환경을바로사용할수있는장점이있습니다.

Figure 16-7. Makefile for Compiling and Running on UNIX or Linux Platforms Makefile 을확인해보겠습니다. Line 1-2 vlib command 는컴파일된파일이위치할 work 라이브러리를만듭니다. Line 4-5 vlog command 로 test.sv 파일을컴파일합니다. Line 7-11 and 16-18 gcc command 를통해 foreign.c 를컴파일할컴파일러를호출하고 시뮬레이션하는동안로드됩니다. Line 13-14 vopt command 로디자인을최적화합니다. +acc 옵션을통해 Full Visibility 를 통해디자인을디버깅할수있습니다. o 옵션을통해최적화된디자인의이름을적용합 니다. Line 20-21 vsim Command 를통해최적화된디자인인 opt_test 를시뮬레이터를통해 실행합니다. -sv_lib 옵션을통해 shared object 를시뮬레이션중에불러옵니다. 옵션을사 용하지않으면시뮬레이터는미리정의한 C Function 을찾을수없습니다.

Exploring the windows.bat File windows.bat file 은 window 사용자가사용할수있습니다. Figure 16-8. The windows.bat File for Compiling and Running in Windows - DPI Lab Windows.bat 파일을확인해보겠습니다. Line 1 vlib command 는컴파일된파일이위치할 work 라이브러리를만듭니다. Line 3 vlog command 로 test.sv 파일을컴파일합니다. Line 5 vopt command 로디자인을최적화합니다. +acc 옵션을통해 Full Visibility 를통해 디자인을디버깅할수있습니다. o 옵션을통해최적화된디자인의이름을적용합니다. Line 7 vsim command 에서 gcc command 를사용하여 exports 를 object 를불러옵니다. Line 9 gcc command 로이전 command 를통해서만든 exports.obj 과 foreign.c 소스파 일을 compile 과 link 합니다. o 옵션을통해 foreign.dll 을 Output library 에만듭니다. Line 11 vsim Command 를통해최적화된디자인인 opt_test 를시뮬레이터를통해실행합니다. -sv_lib 옵션은 SystemVerilog 를시뮬레이션에사용할수있도록 C 디자인에대한 foreign.dll library 를 Simulator 에서볼수있도록하는옵션입니다. do add wave light; view source 옵션을통해 light 신호를 wave window 에추가하고, source window 를띄웁니다.

Compile and Load the Simulation 이과정을진행하기위해컴파일을한후 environment 변수를설정하고디자인을로드해야합 니다. 이경우컴파일과로드가한번에수행됩니다. 1. 새로운디렉토리를만들고 tutorial file 복사하기. <install_dir>/questasim/examples/tutorials/systemverilog/dpi_basic 2. 새로운디렉토리로디렉토리를변경한후 environment 변수설정하기. A. Environment 변수는 questa 설치디렉토리에있습니다. B. 윈도우를사용하는경우 gcc-4.2.1-mingw32vc9 compiler 가설치되어있지않은경우 SupportNet (http://supportnet.mentor.com/) 에서다운로드받으실수있습니다. 설치 는 Questa 설치디렉토리에하며, 환경변수 Path 설정을해주어야합니다. C:\<Install_directory>\gcc-4.2.1-mingw32vc9\bin 3. Unix 와 Linux : make utility 를사용하여 compile 과디자인로드를진행합니다. Windows : windows.bat 를더블클릭하여 compile 과디자인로드를진행합니다. Run the Simulation Object Window 의 light object 가어떻게되는지시뮬레이션을진행해보겠습니다. 1. Unix and Linux : 드래그앤드롭을통해 Wave Window 에 light object 를추가합니다. Windows : Wave Window 에이미 light object 가추가되어있습니다. 2. 시뮬레이션모드에서단계별로시뮬레이션을진행할수있습니다. 10 ns 단위마다 light 신호의파형이어떻게변하는지살펴보도록하겠습니다. Object Window 를통해 light object 의초기값 (RED) 을볼수있습니다. 만약 object Window 가열려있지않으면, View>Object 를통해열수있습니다.

Figure 16-9. The light Signal in the Objects Window 3. 10 ns 시뮬레이션진행하기. A. Command 에 run 10 ns 를입력합니다. Object 와 Wave Window 를보면 light 값이 GREEN 인것을확인할수있습니다. B. 여러번시뮬레이션을진행하여변경되는 light 값을확인합니다. Figure 16-10. The light Signal in the Wave Window 4. 시뮬레이션 Restart 하기. A. Restart icon 을클릭합니다. B. Restart dialog box 의 OK 버튼을클릭합니다. 5. 10 ns 시뮬레이션진행하기. A. Command 에 run 10 ns 를입력합니다. 6. test.sv 를 source window 로보기. A. test.sv tab 을선택합니다. 7. Code 를 Step 으로확인하기.

A. Step icon 을클릭하여 source window 에서 test.sv 와 foreign.c code 에서파란색화살표가움직이는것을확인합니다. 이것은시뮬레이션을단계별로 source file 이있는곳을추적할수있습니다. Figure 16-11. Source Code for test.sv 8. 시뮬레이션종료하기. Simulation>End Simulation 을선택하여시뮬레이션을종료합니다.

Chapter 17 Using SystemVerilog DPI for Data Passing 이번챕터에서는 SystemVerilog 에대한 Direct Programming Interface 에대해살펴볼것입니 다. 이전챕터에서는기본인터페이스의요소와방법을간단한함수를만들어 Verilog 와 C 를 호출하였습니다. 이번챕터에서는 Interface 에초점을맞추어살펴보도록하겠습니다. DPI 또한 foreign language 와마찬가지로 Verilog 를 Interface 할수있으며, 이과정에서는 C 를맞추어진행됩니다. Mapping Verilog and C C 에서 Verilog 또는 Verilog 에서 C 로 object 값을보낼때마다그값은이중성을가지게됩 니다. 값을보낼때는함수호출을통해초기화한후값을주고받습니다. C 타입과 Verilog 타입을매핑하는테이블이필요하게됩니다. 다행히 Verilog 와 SystemVerilog 에들어가는대부분의 data 타입은 C 타입과일치하는것을목적으로되어매핑이간단합니다. 그러나매핑중일부는좀더복잡하여 Verilog object 가 C 에매핑되는방법을알고있어야합니다. SystemVerilog 는유저를위해 mapping 을정의하고, 시뮬레이터는이러한이중성을모두처리하도록설정되어있어따로매핑을할필요가없습니다. 예를들어 Verilog 에서 32 bit 메모리에저장되어있는 2-state int 인경우, 값은 0 과 1 로할당되지만 X 또는 Z 는허용되지않습니다. 그렇기때문에 C 의 int 처럼간단하게매핑을할수있습니다. 이챕터에서사용할예제파일의위치는다음과같습니다. <install_dir>/examples/tutorials/systemverilog/data_passing 1. Environment 변수는 questa 설치디렉토리에있습니다. 2. 윈도우를사용하는경우 gcc-4.2.1-mingw32vc9 compiler 가설치되어있지않은경우 SupportNet (http://supportnet.mentor.com/) 에서다운로드받으실수있습니다. 설치는 Questa 설치디렉토리에하며, 환경변수 Path 설정을해주어야합니다. C:\<Install_directory>\gcc-4.2.1-mingw32vc9\bin

이번챕터에서진행되는내용은유저매뉴얼의 Verilog Interfaces to C 와 Verification with Functional Coverage 를보시면더욱자세히알수있습니다. Examine the Source Files 시작하기전에두개의 C function 에대한정의를포함하는 foreign.c 파일을살펴보도록합니다. Figure 17-1. Source Code for the foreign.c File - Data Passing Lab Line 1 dpi_types.h 라는헤더파일을포함하고있습니다. Line 3 정수를출력하는 print_int function 에대한정의입니다. Line 8 svlogic 에따라메시지를출력하는 print_logic function 에대한정의입니다. 이제 System Verilog 의 Source Code 를살펴보도록하겠습니다. Text editor 를이용하여 test.sv 를확인해보겠습니다.

Figure 17-2. Source Code for the test.sv Module Line 3-4 이라인은 Verilog code 처럼보이지않습니다. 이문은 import 선언문입니다. Import declaration 은 Verilog 에서특별하게취급해야할필요가있으므로 compiler 를알리기위해사용됩니다. DPI 의경우특별한처리는지정된 task/function 이 foreign language 에서 SystemVerilog 가 visible 되도록이이름이특별한이름공간에배치될필요가있습니다. 이선언문은 SystemVeriog 의 LRM 에정의되어있습니다. 작동방법은간단한규칙에 있습니다. SystemVerilog 의시뮬레이션을실행하고 foreign(c) code 를이용하기위해 DPI 를사 용해야하는경우, Verilog Code( 즉모든 Verilog 코드중심으로전개 ) 를중심으로간주 되어야합니다. Verilog Code 는 foreign world 에서먼가 access 를하기위해서는 import 가필요합 니다. foreign world 에서 Verilog 를 access 를할때도마찬가지로 export 가필요합 니다. 그래서이라인에 prit_int & print_logic 을통해 import 와 export 를합니다. Line 6-8 두 function 을가지는세변수를선언합니다. int, bit, logic 이세변수는 SystemVerilog 타입으로정의하는방법을참고합니다.

Line 10-31 이초기블록은단순히각 function 을호출하고우리가디자인을실행할때동작을하게됩니다. 각변수값에대해설정합니다. Compile and Load the Simulation 이과정을진행하기위해컴파일을한후 environment 변수를설정하고디자인을로드해야합니다. 이경우컴파일과로드가한번에수행됩니다. 1. 새로운디렉토리를만들고 tutorial file 복사하기. <install_dir>/questasim/examples/tutorials/systemverilog/dpi_basic 2. 새로운디렉토리로변경한후 environment 변수설정하기. 3. Unix 와 Linux : make utility 를사용하여 compile 과디자인로드를진행합니다. Window : windows.bat 를더블클릭합니다. Explore the Makefile Makefile 은 Unix 와 Linux 사용자가컴파일하고디자인을시뮬레이션을실행하는데필요한정보가이단원에포함되어있습니다. Figure 17-3. Makefile for Compiling and Running on UNIX and Linux Platforms Makefile 의다섯가지목표입니다. Line 1-2 vlib command 를통해컴파일된파일이위치할 work library 를생성합니다.

Line 4-5 vlog command 를통해 test.sv source file 을컴파일합니다. Line 7-8 gcc command 를통해 foreign.c source file 을컴파일하며시뮬레이션을하 는동안로드됩니다. 공유객체 (foreign.so) 를작성합니다. Line 10-11 vopt command 를통해디자인을최적화합니다. +acc 옵션을통해 full visibility 로디버깅을할수있습니다. o 옵션을통해최적화된디자인 object 의이름 을변경할수있습니다. Line 13-14 vsim Command 를통해최적화된디자인을사용하여 simulator 를호출합니 다. sv_lib 옵션은시뮬레이션하는동안불러올수있는공유객체를지정합니다. 이옵 션을사용하지않으면, C function 을불러올수없습니다. Explore the windows.bat File Windows.bat file 은 Window 사용자에포함되어있습니다. Figure 17-4. The windows.bat File for Compiling and Running in Windows - Data Passing Lab Window.bat file 은다음과같이컴파일과시뮬레이션을진행합니다. Line 1 vlib command 를통해컴파일된파일이위치할 work library 를생성합니다. Line 3 vlog command 를통해 test.sv source file 을컴파일합니다. Line 5 vopt command 를통해디자인을최적화합니다. +acc 옵션을통해 full visibility 로디버깅을할수있습니다. o 옵션을통해최적화된디자인 object 의이름을변경 할수있습니다. Line 7 gcc command 를통해 foreign.c source file 을컴파일하는데사용합니다. I 옵션을사용하여 include 파일을검색할디렉토리를지정합니다. shared 옵션은출력으로공유라이브러리를생성하는 gcc 를알려줍니다. g 옵션은출력에디버깅 code 를추가합니다. o 옵션은 foreign.dll 이라는출력라이브러리를작성합니다. lmtipli 옵션은 C

에서사용되는모든기능들을해결하기위해시도할때 C/C++ 을포함하는컴파일된 라이브러리를지정하기위해사용됩니다. L 옵션은 l 옵션에지정된라이브러리를검색 할디렉토리를지정합니다. Line 9 두번째 vsim Command 를통해최적화된디자인인 opt_test 를사용할수있도록 simulator 에호출합니다. sv_lib 옵션을통해 SystemVerilog Simulation 을사용할수있도록 C design object 에사용하는 foreign.dll library 를볼수있습니다. do add wave light; view source 옵션을통해 light 신호를 Wave Window 에추가하고 source Window 를통해볼수있습니다. Compile and Load the Simulation 컴파일과디자인을시뮬레이터를통해불러오기위해 Unix 와 Linux 는 Makefile 을사용합니 다. Window 사용자의경우 windows.bat 파일을사용하여진행합니다. 1. 새로운디렉토리를만들고 tutorial file 복사하기. <install_dir>/questasim/examples/tutorials/systemverilog/data_passing 2. 새로운디렉토리로변경한후 environment 변수설정하기. 3. Unix 와 Linux : make utility 를사용하여 compile 과디자인로드를진행합니다. Windows : windows.bat 를더블클릭합니다. Run the Simulation test.sv 모듈이시뮬레이션에로드된후에는시뮬레이션을통해 Step Over Command 를버튼을사용할수있습니다. 이것은단순히 Verilog object 의다른유형의값으로설정하고화면에 print out 을위한 C 를통해데이터를보냅니다. 1. Structure(Sim) window 에서 test instance 를마우스오른쪽버튼으로클릭하고, 나타나는 팝업메뉴에서 View Declaration 을선택합니다. 그리고 source window 를열어 test.sv 의 source code 를확인합니다.

2. Step Over 버튼을클릭합니다. test.sv 의 12 번라인에파란색화살표가표시됩니다. Figure 17-5. Line 12 of test.sv in the Source Window 초기값 0 을가져야하므로 int_var 에아직값이할당되지않았습니다. Object Window 를보면 int_var 값이 0 인것을확인할수있습니다. Figure 17-6. The Value of int_var is Currently 0 3. 다시 Step Over 버튼을클릭합니다. 이 input parameter 로 int_var 를가져온 C function print_int 를호출합니다. 이행이실행된후에 Transcript Window 를보면다음과같은메시지를확인할수있습니다. Just received a value of 0. 4. 다음 Step Over 버튼을클릭하면 Object Window 에 int_var 값이 1 로변화되는것을확인 할수있습니다. 5. 더 Step Over 버튼을클릭하면 Transcript Window 에 1 이출력되는것을확인할수있습 니다. Figure 17-7. The Value of int_var Printed to the Transcript Window 6. 다음두단계에서 (Step Over 버튼을 2 번클릭 ) int_var 가변경됩니다. Positive 와 negative integer 를설정하고올바르게 print 됩니다.

다음으로 7 번라인의 bit 타입으로 bit_var 의값을 print_int 기능을사용하여출력합니다. 또한 0 의초기값을가지고있기때문에 print out 을추측할수있습니다. 7. 다시 Step Over 버튼을클릭하여 Transcript Window 를확인합니다. Figure 17-8. The Value of bit_var is 0. Figure 17-9. Transcript Shows the Value Returned for bit_var 8. bit_var 를 1 로설정하고 transcript window 에서 Step Over 를두번클릭합니다. 9. bit_var 를 X 로설정하고 Step Over 를클릭합니다. 값은 X 로변경되지않습니다. 10. print_int function 을위해 Step Over 를클릭하여 0 의값이 print 되는지확인합니다. 4-state value 를사용해봅니다. Logic 타입의 4-state 가 1 이 22 번라인에할당되어있습니 다. 11. Step Over 를클릭하여 23 번라인으로이동합니다. Object Window 의 logic_var 를보면 1 에서 X 로변경된것을확인할수있습니다. 12. Step Over 를클릭하여 print_int 를호출하고 Transcript window 를통해 logic_var 의값을 출력합니다. 13. logic_var 를 X 로설정하고 Step Over 를클릭합니다. 14. Step Over 를클릭하여 logic_var 를 print 합니다. 26 번라인에화살표가있어야합니다. 0 값대신 X 가인쇄된것을확인할수있습니다. Source Code 를살펴보겠습니다. Import function 을위한 C code 인 foreign.c 를보면 3 번라인에 print_int function 이 integer(int) 를 input 으로하고있습니다. 정수를보내면제대로동작합니다. 이전에 X 와

Z 값을가지는 4-state 타입으로진행하였습니다. SystemVerilog Language 는데이터매핑을정의합니다. 컴파일시 C 의헤더파일을통해 모든 function prototypes, data type definitions 를참조합니다. Makefile 을보면 compile 에 vlog command 에서 dpiheader 를호출하여 argument name 을파일로출력할수있습니다. Compiler 를통해 Verilog source file 을컴파일하고, DPI import/export 를분석하며, imported/exported, functions/task 의 prototype 을정의하여 C 헤더파일을생성하고이과정에서 dpi_types.h 파일을호출합니다. Figure 17-10. The dpi_types.h File 파일의상단에내부 DPI 의정보를볼수있습니다. 25 번라인으로가면 print_int function 에대한 function prototype 을볼수있습니다. Input parameter 는 int 타입입니다. print_logic function 은 prototype 입니다. 이파일은 SystemVerilog Language 일부이며, C 컴파일을위한명령어가포함되어있습니다. svlogic 타입은 unsigned char 입니다.

C source file 에 #include dpi_type.h 를넣었을때, 모든 function prototype 및 data type 을 사용가능하게할수있습니다. DPI 를통해 Verilog 와 C code 를작성할때이파일을 사용하는것이좋습니다. test.sv 파일에서 DPI import 구문을다시확인합니다. print_int 에대한 print_logic 이하나있습니다. vlog compiler 는이구문에서보이는 function 의이름은해당 parameter 와반환값을함께가져오고, 다음 DPI 헤더파일을만듭니다. print_logic function 의경우 input parameter 타입이 logic 입니다. 그래서헤더파일에 svlogic 을넣어 logic 에대응합니다. 이제특정 object 의이중성을정의하고모든것을 C 를해전달합니다. 시뮬레이션으로돌아가서 26 번라인에데이터의특정타입에대한잘못된기능을사용하 고있어 0 에 X 값이잘못들어가는것을확인했습니다. 그래서대신 print_logic function 을사용합니다. 이라인을실행하기위해 Step Over 를클릭합니다. X 값이 print out 됩니다. foreign.c 파일 을확인합니다. Figure 17-11. The Transcript Shows the Correct Value of logic X 기본적으로 4-state 값들은 0, 1, 2, 3 과같이표현됩니다. 이것을유지하기위해 print_logic function 의 switch 문에서참조값은 svdpi.h 파일의 #define d 입니다. C code 에서 DPI 헤더파일을사용하려면이와같이사용할수있으며, 모든것이제대로동작하는것을알수있습니다. 앞으로이동한후, 일부구문을 step 을통해 logic_var 를다른 4-state 값으로설정합 니다. 그후 print_logic 기능을사용하여 print 하여확인합니다. Simulation>End Simulation 을통해종료합니다.

Chapter 18 Comparing Waveforms 이번챕터에서는 Waveform compare 을통해기준이되는신호와테스트신호의타이밍차이 를계산하여비교하는것에대해살펴보도록하겠습니다. Simulation 또는 Dataset 을선택하여비교 특정신호나영역을비교 Compare 실행 Compare 결과보기 이번챕터에서사용할예제파일의위치는다음과같습니다. Verilog <install_dir>/examples/tutorials/verilog/compare VHDL <install_dir>/examples/tutorials/vhdl/compare 이번챕터에서진행되는내용은유저매뉴얼의 Waveform Compare 와 Recording Simulation Results With Datasets 를보시면더욱자세히알수있습니다. Creating the Reference Dataset Reference Dataset 은 Waveform Log File 인.wlf 확장자를가지는파일로 waveform compare 를할수있는 dataset 입니다. Reference Dataset 는미리저장해놓은 data, 현재진행중인 Simulation 의 data, 현재진행중인 Simulation 의일부 data 입니다. 1. 새로운디렉토리를생성하고 Tutorial 파일복사하기. 이번챕터를진행하기위한 directory 를만듭니다. 그리고 tutorial file 들을새로만든디렉토리로복사합니다. 2. ModelSim/Questa 가실행되었으면 Change directory 를이용하여 1 번과정의 directory 로 이동하기. A. 바탕화면의단축아이콘혹은 vsim command 를이용하여 ModelSim/Questa 를구동 합니다. B. File > Change Directory 를이용하여 1 번과정에서만든 directory 를지정합니다.

3. Command 입력하기. Verilog vlib work vlog *.v vopt +acc test_sm -o opt_test_gold vsim -wlf gold.wlf opt_test_gold add wave * run 750 ns quit sim VHDL vlib work vcom -93 sm.vhd sm_seq.vhd sm_sram.vhd test_sm.vhd vopt +acc test_sm -o opt_test_gold vsim -wlf gold.wlf opt_test_gold add wave * run 750 ns quit sim -wlf 명령어는 vsim command 와같이사용할수있으며, default 로출력되는 vsim.wlf 의파일명을변경할수있는명령어입니다. Creating the Test Dataset test dataset 은 Reference dataset 과마찬가지로.wlf 파일이며, Reference dataset 과비교할 대상입니다. Verilog 1. test bench 수정 A. File>Open 으로 test_sm.v 파일을선택하여열기. B. 122 번 line 으로가기. @ (posedge clk) wt_wd('h10,'haa); C. haa 를 hab 로 Data pattern 변경하기. @ (posedge clk) wt_wd('h10,'hab); D. File>Save 로파일저장하기. 2. 수정된파일을다시컴파일한후시뮬레이션하기. vlog test_sm.v vopt +acc test_sm -o opt_test_sm

VHDL vsim opt_test_sm add wave * run 750 ns 1. Test bench 수정 A. File>Open 으로 test_sm.vhd 파일을선택하여열기. B. 151 번 line 으로가기. wt_wd ( 16#10#, 16#aa#, clk, into ); C. aa 를 ab 로 Data pattern 변경하기. wt_wd ( 16#10#, 16#ab#, clk, into ); D. File>Save 로파일저장하기. 2. 수정된파일을다시컴파일한후시뮬레이션하기. vcom test_sm.vhd vopt +acc test_sm -o opt_test_sm vsim opt_test_sm add wave * run 750 ns Comparing the Simulation Runs Comparison Wizard 를통해 waveform compare 를진행을해보겠습니다. 1. Comparison Wizard 를사용하여 comparison 생성 A. Tool>Waveform Compare>Comparison Wizard 선택하기. B. Browse 버튼을클릭하고처음 Simulation 을통해생성된 reference dataset 인 gold.wlf 을선택하여불러옵니다.

Figure 18-1. First Dialog Box of the Waveform Comparison Wizard C. 현재 Simulation 을 test dataset 으로설정하기위해 Use Current Simulation 을선택한 후 Next > 버튼을클릭합니다. D. 모든신호를비교하기위해 Compare All Signals 를을선택한후 Next > 버튼을클릭 합니다. Figure 18-2. Second Dialog Box of the Waveform Comparison Wizard E. Compute Differences Now 를클릭한후, Finish 버튼을클릭합니다. Compare 를수행하고 Waveform Window 에 compare 신호가표시됩니다.

Viewing Comparison Data Comparison data 는 Structure(compare), Transcript, Objects, Wave, List Window 에보여집니다. Compare Window 는비교영역을보여줍니다. Transcript Window 는 reference dataset 과 test dataset 을비교하여차이가생긴횟수가보여 집니다. Objects Window 는 Structure(compare) Window 에서 comparison object 를선택하면비교하여 차이점을보여줍니다. Figure 18-3. Comparison information in the compare and Objects windows Comparison Data in the Wave Window Wave Window 는그래픽포맷으로비교정보를표시합니다. Wave Window 에서타이밍오차가발생하면 pathname 아이콘옆에빨간색 X 표 시가됩니다.

Figure 18-4. Comparison objects in the Wave window 타이밍오차가발생하면 Waveform 에서는다른부분빨간색영역으로표시됩니 다. 또한다른부분의스크롤바위치에빨간색라인이표시됩니다. Annotated 가다른부분은파란색하이라이트로표시됩니다. 아래 6 개의아이콘을통해빠르게다른부분을찾을수있습니다. Figure 18-5. The compare icons 왼쪽아이콘부터설명을드리도록하겠습니다. 첫번째아이콘은가장처음다른영역을찾습니다. 두번째아이콘은기준커서에서이전 Annotate 가다른부분을찾습니다. 세번째아이콘은기준커서에서이전다른영역을찾습니다. 네번째아이콘은기준커서에서다음다른영역을찾습니다. 다섯번째아이콘은기준커서에서다음 Annotate 가다른부분을찾습니다. 여섯번째아이콘은가장마지막다른영역을찾습니다. 특정신호를선택하여아이콘을통해쉽게다른부분을찾을수있습니다. Viewing Comparison Data in the List Window List Window 를통해 Waveform comparison 결과를확인할수있습니다. 1. List Window 에 Comparison Data 추가하기. A. Menu bar 에서 View>List 선택합니다. B. Compare tab 에서 comparison object 인 test_sm 을 List Window 로드래그합니다.

C. 스크롤을내려다른부분을찾습니다. 다른부분은노란색하이라이트로표시되며, annotate 가다른부분은빨간색하이라이 트로표시됩니다. Figure 18-6. Compare differences in the List window Saving and Reloading Comparison Data 유저분은 Comparison Data 를나중에다시보기위해저장하거나불러올수있습니다. Comparison data 를나중에다시불러오려면 2 개의파일을저장해야합니다. 하나의파일에는 오차계산을저장하고, 다른파일에는비교조건을저장합니다. Comparison data 를불러오려면 reference dataset 이열려있어야합니다. 1. Text file 에 comparison data 를저장하기. A. Main Window 에서 Tool>Waveform Compare>Differences>Write Report 를선택합니다. B. Save 를클릭합니다. 그럼현재디렉토리에 compare.txt 파일이저장됩니다. C. Command 에 notepad compare.txt 를입력하면, report 가보여집니다.

Figure 18-7. Coverage data saved to a text file D. report 를분석한후 Notepad 를닫습니다. 2. 다시불러올수있도록 comparison data 파일을저장하기. A. Tools>Waveform Compare>Differences>Save 를선택합니다. B. Save 를클릭합니다. 그럼현재디렉토리에 compare.dif 가저장됩니다. C. Tools>waveform Compare>Rules>Save 를선택합니다. D. Save 를클릭합니다. 그럼현재디렉토리에 compare.rul 이저장됩니다. E. Tools>Waveform Compare>End Comparison 을선택합니다. 3. Comparison data 를불러오기 A. Structure(sim) Window 를활성화한상태에서, File>Open 을선택합니다. B. Files of type 을 Log Files(*.wlf) 로변경합니다.

Figure 18-8. Displaying Log Files in the Open Dialog Box C. Dataset 인 gold.wlf 를선택하여 Open 을클릭합니다. D. Tools>Waveform Compare>Reload 를선택합니다. 기본파일이름을사용하여데이터를저장하고있기때문에 Rules 파일과 Difference 파 일을따로지정하지않으셔도됩니다. Figure 18-9. Reloading Saved Comparison Data E. OK 를클릭합니다. Comparison Data 가 Reload 된것을확인할수있습니다. Wave 나 List Window 에 comparison object 를드래그하여, 비교할수있습니다. F. Command 에 quit sim 을입력하여시뮬레이션을종료합니다. G. Command 에 dataset close gold 를입력하여 dataset 을종료합니다.

Chapter 19 Automating Simulation ModelSim/Questa 는 GUI 메뉴나 Command 입력을통해동작을하게되는데, 하나의명령을 차례대로수행을하게됩니다. 만약반복적인작업을해야할경우, DO File 을사용하여생산 성을향상시킬수있습니다. DO File 은한번에여러개의 command 를수행할수있는스크립트입니다. 간단한반복부터 Tcl 변수나프로그램, 조건부실행에사용됩니다. GUI 에서불러올수있고, Command 를통해실행할수있습니다. Creating a Simple DO File DO File 은 Text File 에 command 를입력하는것으로간단하게생성을할수있습니다. 이번챕터에서는 DO File 생성을통해디자인을불러오거나, Wave Window 에신호를추가하거나, 신호에 Stimulus 를제공하여, 향상된 Simulation 을할수있다. 또한저장된 Transcript 파일을가지고 DO File 을생성할수있습니다. 이번챕터에서진행되는내용은 Reference 매뉴얼의 Saving a Transcript File as a Do file 을보 시면더욱자세히알수있습니다. 1. Basic Simulation 에서만든 directory 로변경하기. 2. DO File 을생성하여 Wave Window 에신호를추가하고, force signal 을적용후에시뮬레 이션실행하기. A. 새로운 DO File 을생성하기위해 File>New>Source>DO 를선택합니다. B. Source Window 에아래의 Code 를입력합니다. vsim testcounter_opt add wave count add wave clk add wave reset force -freeze clk 0 0, 1 {50 ns} -r 100 force reset 1 run 100 force reset 0 run 300 force reset 1 run 400 force reset 0 run 200

3. 파일저장하기. A. File>Save As 를선택합니다. B. 파일명을 sim.do 로입력합니다. 그러면현재디렉토리에파일이저장됩니다. 4. DO File 실행하기. A. Command 에 do sim.do 를입력합니다. 디자인이로드되면서저장된 command 가실행합니다. 그리고 Wave Window 에 Wave 가그려진것을볼수있습니다. Figure 19-1. Wave Window After Running the DO File B. File>quit 를통해종료합니다. Running in Command-Line Mode GUI 없이 DOS/UNIX 에서 Simulation 을실행하기위해 Command-Line Mode 를사용합니다. 여러 Command( 예를들어 vsim, vlib, vlog 등 ) 호출을통해실제독립적으로실행이가능합니다. 또한 Command 를포함하는 DO File 을생성하여, 시뮬레이터를호출할때해당파일을지정 할수있습니다. 1. 이번챕터에서사용할예제파일의위치는다음과같습니다. /<install_dir>/examples/tutorials/verilog/automation/counter.v /<install_dir>/examples/tutorials/verilog/automation/stim.do 만약 VHDL license 가있으신경우 /<install_dir>/examples/tutorials/vhdl/automation 디 렉토리의 counter.vhd 와 stim.do 를사용하시면됩니다. 2. 새로운디자인라이브러리와컴파일을하기위한 Source 파일생성하기. 유저분이 1 단계에서만든새디렉토리에서 DOS/UNIX prompt 에서다음명령을입력합니 다.

A. DOS/UNIX prompt 에 vlib work 를입력합니다. B. 컴파일을하기위해 Verilog 는 vlog counter.v 를입력하고, VHDL 은 vcom counter.vhd 를입력합니다. 3. DO File 생성하기. A. Text editor 를엽니다. B. 파일에아래의내용을입력합니다. # list all signals in decimal format add list -decimal * # read in stimulus do stim.do # output results write list counter.lst # quit the simulation quit -f C. 현재디렉토리위치에파일명을 sim.do 로저장합니다. 4. Counter design unit 최적화하기 A. DOS/UNIX prompt 에아래의내용을입력합니다. vopt +acc counter -o counter_opt 5. Command line mode 를통해 Simulation 을실행합니다. A. DOS/UNIX prompt 에아래의내용을입력합니다. vsim -c -do sim.do counter_opt -wlf counter_opt.wlf -c 는 GUI 를호출하지않고, ModelSim/Questa 를동작합니다. wlf 를통해시뮬레이션결과를.wlf 파일에저장합니다. 이것은디버깅을위해 GUI 에서시뮬레이션결과를볼수있습니다. 6. Output 을 list 로보기. A. counter.lst 를열어시뮬레이션결과를볼수있습니다. Verilog Version 을통해나온 output 을확인할수있습니다.

Figure 19-2. Output of the Counter 만약에 VHDL Version 을사용한경우에출력이약간다를수있습니다. 7. GUI 를통해결과확인하기. 시뮬레이션결과는 counter_opt.wlf 에저장되어, vsim 에 view 옵션을호출하여 GUI 를통 해확인할수있습니다. A. DOS/UNIX prompt 에 vsim view counter_opt.wlf 을입력합니다. GUI 가열리면서 counter_opt 이름을가진 dataset tab 이보입니다. Figure 19-3. The counter_opt.wlf Dataset in the Main Window Workspace B. Counter 를선택하여오른쪽마우스를클릭하고 Add wave 를선택합니다. Waveform Window 에 Waveform 이보여집니다. 8. File>Quit 를선택하여종료합니다.

Using Tcl with the Simulator 이전단계에서는 DO File 을 Tcl Script 로만들어 Simulatioin 을진행하였습니다. Tcl construct 를통해 procedures, conditional operators, math and trig functions, regular expression 등을포함하고있습니다. 이번단계에서는신호의특정값을테스트하고그값이존재하는경우 Wave Window 를확대하고, 북마크를추가하는간단한 Tcl Script 를만들어보겠습니다. 북마크를통해 Wave Window 의특정 zoom 범위와스크롤위치를저장합니다. Tcl Script 는 Main Window 에북마크버튼을생성합니다. 1. Script 생성하기. A. text editor 를통해새로운파일을생성하여아래의구문을입력합니다. proc add_wave_zoom {stime num} { echo "Bookmarking wave $num" bookmark add wave "bk$num" "[expr $stime - 100] [expr $stime + 50]" 0 add button "$num" [list bookmark goto wave bk$num] } 위의 command 를살펴보겠습니다. stime, num 이라는두개의 argument 를가지는새로운 procedure 인 add_wave_zoom 을생성합니다. 현재시뮬레이션시간에서 -100 time 과 +50 time 에 Zoom 범위와북마크를 생성합니다. Main Window 에북마크버튼을생성합니다. B. 구문맨아래에다음구문을추가합니다. add wave -r /* when {clk'event and clk="1"} { echo "Count is [exa count]" if {[examine count]== "8'h27"} { add_wave_zoom $now 1 } elseif {[examine count]== "8'h47"} { add_wave_zoom $now 2 } } 위의 command 를살펴보겠습니다. Wave Window 에모든신호를추가합니다. clk 이 1 인지식별하기위해 when 구문을사용합니다.

count 값을검사하여특정값일경우북마크를추가합니다. C. 기존 Basic Simulation 단계에서만들었던 directory 에 add_bkmrk.do 라는이름으로 Script 를저장합니다. 2. test_count 를로드하여 radix 가 binary 로설정되어있는지확인하기. A. ModelSim/Questa 를실행합니다. B. File>Change Directory 를선택하고, DO File 을저장했던디렉토리로변경합니다. ( 이전 단계의 Basic Simulation 을생성한 Directory) C. Command 에 radix binary 를입력합니다. D. Command 에 vsim testcounter_opt 를입력합니다. 3. DO File 을실행하여디자인진행하기. A. Command 에 do add_bkmrk.do 를입력합니다. B. Command 에 run 1500 ns 를입력합니다. 시뮬레이션이실행되고 DO 파일은두개의북마크를만듭니다. Main Window 의 Toolbar 에북마크버튼 1, 2 가생성됩니다. Figure 19-4. Buttons Added to the Main Window Toolbar C. 버튼을클릭하면 count 가특정값이될때, Wave Window 의 Zoom in 과해당시간에 스크롤되는것을볼수있다. D. File>Quit 를통해종료합니다. 이챕터에서진행되는내용은유저매뉴얼의 Tcl and DO Files 를보시면더욱자세히알수있

습니다.

Chapter 20 Getting Started With Power Aware 이번챕터에서는 RTL 디자인의 Power Aware Simulation (Questa PASim) 실행하는방법에대해 서살펴볼것입니다. Low Power Design intent 를정의하는 Unified Power Format(UPF) 파일작성 사용자정의 Assertions, Power intent UPF File 관리, Power Aware Verification Flow 를통한작업 정확하게 Register Transfer Level(RTL) 에서의 power up/down 및보존동작을 Power Aware retention flip-flop 모델로역할을관찰. 이번챕터의예제는 Test bench 에관련된 Clock-driven memory interleaver 입니다. 디렉토리 위치는 <install_dir>/examples/tutorials/pa_sim/ 입니다. 이예제의경우 example_one 디렉토리에서모든시뮬레이션을실행합니다. Script Files Questa/scripts/directory 에는컴파일과모든시뮬레이션을실행할수있는 DO File 을포함 하고있습니다. compile_rtl.do Compile RTL source

analyze_rtl.do Analyze UPF and extract PA netlist doit_rtl.do Run RTL simulation sim.do Simulation commands Create a Working Location 디자인을시뮬레이션하기전에 work directory 에복사본을만들어라이브러리를생성하고해당라이브러리에소스코드를컴파일해야합니다. 1. 설치디렉토리외부에새로운디렉토리를생성하여, 디자인파일을복사합니다. 2. Questa 를실행하기. A. UNIX shell prompt 에서 vsim 을입력하거나, Window 의 Questa 아이콘을더블클릭합 니다. B. 메인메뉴의 File>Change Directory 를선택하여아래의 Directory 로변경합니다. <my_tutorial>/pa_sim/example_one my_tutorial 은 Step 1 에서생성한디렉토리입니다. Compile the Source Files of the Design 컴파일단계에서는 HDL 디자인을처리하고시뮬레이션을하기위한코드를생성합니다. 이단 계는 Power Aware 와 non-power Aware 모두동일합니다. 각각의시뮬레이션둘다같은 output 을사용합니다. 1. 모든 RTL source Code 파일을컴파일하기위해 Transcript Window 에 command 를입력 합니다. do./questa/scripts/compile_rtl.do DO File 에는실행 command script 가있습니다. vlib work vlog -novopt -f./questa/scripts/compile_rtl.f 이러한명령어들은 Power Aware 에관련한특별한동작을제공하게됩니다.

Annotate Power Intent Power Annotation 단계는설계와관련된파일과 Unified Power Format(UPF) 파일을처리하여, 그파일에서 power intent 를추출하여, power intent 를반영하도록컴파일된 HDL model 을확장합니다. Power distribution network 구축 (supply ports, nets, sets, and switches) Power control architecture 구축 (retention registers, isolation cells, level shifters, and their control signals) Power-related behavior 삽입 (retention, corruption, and isolation clamping on power down; restoration on power up) Automatic assertions to check for power-related error conditions 삽입 (such as current control signal sequencing) 1. UPF 를분석하고 power annotation 을수행하기위해 transcript window 에입력합니다. do./questa/scripts/analyze_rtl.do do 파일을보면아래의구문이적혀있습니다. vopt rtl_top \ -pa_upf./upf/rtl_top.upf \ -pa_prefix "/interleaver_tester/" \ -pa_replacetop "dut" \ -pa_genrpt=u+v \ -pa_checks=i+r+p+cp+s+uml \ -pa_enable=nonoptimizedflow \ -o discard_opt vopt command 는 power annotation process 를제어합니다. -pa_upf UPF 에작성된 power intent 파일의위치를지정합니다. -pa_prefix (Power annotation 이수행되고있는 ) DUT 가인스턴스될 test bench 의이름을지정합니다. -pa_replacetop Top-level DUT 의 instance 의이름을지정합니다.

-pa_genrpt 현재 Directory 에저장되어있는 Power Aware report file 을생성 -pa_checks Assertion check 를활성화합니다. Specifying Power Aware Options vopt command 의 argument 는 Power Aware Simulation 을위한많은옵션이있습니다. Power Aware argument(all begin with pa_) 에대한정보는 Reference Manual 의 vopt command 를참조하시면되겠습니다. -pa_checks argument 의일환으로 s 를지정하면 level shifter 의삽입을위한 static check 가 켜집니다. 분석하는동안누락된 level shifter 의 massage 가출력됩니다. vopt 를통한실행을 했을때 output 을확인할수있다. ** Note: (vopt-9851) [ UPF_LS_STATIC_CHK ] Found Total 30 Valid level shifters. Simulate the Power Aware Design Power Aware simulation accurately model 는 power architecture 의동작및 HDL 디자인의 power architecture 효과입니다. 1. Power Aware simulation 을진행하기위해 Transcript window 에 command 를입력합니다. do./questa/scripts/doit_rtl.do do 파일을보면아래의구문이적혀있습니다. vsim interleaver_tester \ -novopt \ +nowarntscale \ +nowarntfmpc \ -L mtipa \ -pa \ -l rtl.log \ -wlf rtl.wlf \ -assertdebug \

+notimingchecks \ -do./scripts/sim.do 시뮬레이션에서 vsim command 에 pa 옵션을설정하여 Power Aware mode 가 Simulator 에호출됩니다. mtipa 라이브러리는 corruption, isolation, retention 을포함하는미리컴파일된기본라이브러리입니다. 이라이브러리는 L 옵션을통해로드됩니다. 2. Main Window 는 structure window 함께 Object, Wave, Source Window 를추가할수있 습니다. 3. Structure Window 에서 test bench 인 interleaver_tester 가나올때까지스크롤을맨위로 이동합니다. 4. Sim tab 에서 interleaver_tester 를더블클릭하면 Source Window 가열리면서 test bench(interleaver_teset.sv) 를확인할수있습니다. 5. Source Window 에서 Simulation control 이라는이름의섹션을찾습니다. 이블록은 power management block 의추상적인표현을제공하며, 다음테스트를수행합니다. power_down_normal (Test 1, line 97) Normal power-down cycle where retention, isolation, and clock gating are done correctly. power_down_no_iso (Test 2, line 101) Power-down cycle with the isolation control signal not toggled correctly. power_down_no_clk_gate (Test 3, line 105) Power-down cycle where the clock is not gated properly. sram_pwr (Test 4, line 90/92) Toggles the built-in power control signal for the SRAM models. Analyze Results Power Aware 디자인의 Simulation 결과는그래픽인터페이스를통해분석을할수있습니다. 1. Wave Window 에서 Simulation 결과를볼수있도록 Main window 에서 wave tab 을클릭 합니다. 2. Wave Window 에서처음 3 개의 test(155 us to 185 us) 를볼수있도록 Zoom level 을조 절합니다.

Figure 20-1. Results of the Power Aware RTL Simulation Test 1(power_down_normal) 의결과 1. 조금더확대하여 Test 1(155 us to 163 us) 에초점을맞춥니다. 이 test 는정상적으로 power-down cycle 을확인할수있다.

Figure 20-2. Retention of addr During Normal Power Down Cycle 이예제의 isolation strategy 는 isolation insertion point 를위해 parent 를지정했습니다. Memory Controller 의모든 output 을알수없습니다. Memory controller 의 output 으로부터 downstream block 을보면 isolation value 를확인할수있습니다. SRAM 들에대한 input 에서 address 는 0에고정되고, chip 과 write enable 은 1 에고정됩니다. 2. Memory controller 의 addr output 을보면 ( 이블록의전원이차단되기직전에 ) 알수없 는상태의왼쪽에있는마지막값은 00011011 입니다. 전원을재투입하기직전에같은신 호를보게되면값은 00011011 로복원됩니다. 이것을통해복원동작을볼수있습니다. Results from Test 2 (power_down_no_iso) 167 us 에다음 test 를시작하기위해조금이동합니다. 이테스트는디자인을다시 power down 하며, isolation 을하지않습니다. 이테스트에서 SRAM 모델의 address 입력이 0 로고정되지않는것을알수있습니다. 이문제로인해메모리컨트롤러에서알수없는값을 SRAM 에서보내고있습니다.

이문제를해결하기위해 assertion 을사용합니다. 이경우 vopt command 를이용하여 pa_check=i 를활성화합니다. 1. Transcript 열기. View>Transcript 발생한문제가메시지로표시됩니다. ** Error: (vsim-8918) MSPA_ISO_EN_PSO: Isolation control (0) is not enabled when power is switched OFF for the following: Port: /interleaver_tester/dut/mc0/addr. 문제를해결하기위해 Assertion 구문을작성하도록하겠습니다. 2. Assertion Window 열기. View>Coverage>Assertions 모든 assertions 에서 fired 는빨간색하이라이트로표시됩니다. 아래메시지를생성되는즉 시 assertion 에나타납니다. /mspa_top/pa_iso_check_1_2_blk/qspa_iso_en_pso_1 이것은 Built-in Assertion 이며, 일부 failed 된 user-defined assertion 도있습니다. 3. Assertion Window 를 Undock 한후 Assertion 이름을볼수있습니다. /interleaver_tester/a_addr_m2_iso 이것은 user-defined assertion 입니다. Assertion Window 에서 Assertion 과 Assertion expression, 다양한카운터를구성하는신호를볼수있는 assertion 으로확장합니다. Figure 20-3. The Assertions Window