Microsoft Word - HBE-Combo2_User's_Guide_V _.doc

Similar documents
ISP and CodeVisionAVR C Compiler.hwp

PowerPoint 프레젠테이션

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

DE1-SoC Board

BY-FDP-4-70.hwp

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

(SW3704) Gingerbread Source Build & Working Guide

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

Microsoft Word - logic2005.doc

ez-md+_manual01

뉴티씨 (NEWTC) 2. FB-CY4E-DEV (FPGA 개발 키트) 구성도 Port Select SW 7 Segment Text LCD UART RS-232C JTAG PORTA (5V) Active Serial PORTB (5V) OSC. 50MHz Analog

Microsoft Word - Armjtag_문서1.doc

Microsoft Word - PEB08_USER_GUIDE.doc

UART Controller 구현

ez-shv manual

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Orcad Capture 9.x

ADP-2480

RealDSP UT 프로그램 메뉴얼

인켈(국문)pdf.pdf

CAN-fly Quick Manual

슬라이드 제목 없음

Microsoft PowerPoint - SY-A3PSK-V1.pptx

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

개요

歯Intro_alt_han_s.PDF

목차 1. 개요 USB 드라이버 설치 (FTDI DRIVER) FTDI DRIVER 실행파일 USB 드라이버 확인방법 DEVICE-PROGRAMMER 설치 DEVICE-PROGRAMMER

슬라이드 1

CD-RW_Advanced.PDF

DWCOM15/17_manual

untitled

MR-3000A-MAN.hwp

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

RVC Robot Vaccum Cleaner

歯AG-MX70P한글매뉴얼.PDF

KEY01 PIN_J3 KEY02 PIN_M6 KEY03 PIN_M4 KEY04 PIN_M3 KEY05 PIN_M2 KEY06 PIN_M5 KEY07 PIN_L7 KEY08 PIN_H1 KEY09 PIN_J2 KEY10 PIN_J1 KEY11 PIN_L6 KEY12 P

_USB JTAG Ver1.0 User's Manual.hwp

IoT FND8 7-SEGMENT api

LCD Display

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

VZ94-한글매뉴얼

Studuino소프트웨어 설치

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

DVI-CL01 매뉴얼

Ultimate High Performance Audio tx-usb Operating Instructions Rev : 1.0

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

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

K_R9000PRO_101.pdf

. "" "",.... :...,,....,.. :..,,,..,,...,.... 2

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt)

슬라이드 1

Mango-E-Toi Board Developer Manual

WebPACK 및 ModelSim 사용법.hwp

Microsoft Word - PLC제어응용-2차시.doc

USER Manual

Install stm32cubemx and st-link utility

10X56_NWG_KOR.indd

(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로

2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

Microsoft PowerPoint - CPLD_수정1.pptx

ºÎ·ÏB

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

untitled

API 매뉴얼

Microsoft Word - Ahram_ISP_V15_Manual_V20.doc

C# 언어 사양

USER Manual

2011년 10월 초판 c 2011 Sony Corporation. All rights reserved. 서면 허가 없이 전체 또는 일부를 복제하는 것을 금합니다. 기능 및 규격은 통보 없이 변경될 수 있습니다. Sony와 Sony 로고는 Sony의 상표입니다. G L

1. 제품규격및특징 구분 규격및특징 입력전압 DC 12~30V 모터구동방식 Bipolar 방식 최대모터전류 Max 3.0A 초기설정정지전류 :4(0.46A), 구동전류 :18(1.75A) 분주비 0(x256), 1(x128), 2(x64), 3(x32), 4(x16),

전자교탁 사양서.hwp

Microsoft PowerPoint - es-arduino-lecture-03

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

歯DCS.PDF

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

USBISPV3.0(071112).hwp

RS- 232, RS485 FND Display Module NET-SFND-4-23A RS-232, RS485 FND Display Module NET-SFND-4-23A MANUAL (Rev 1.0) Net-Control http

<4D F736F F F696E74202D20332EB5F0C1F6C5D0C8B8B7CEBFCD20B1B8C7F62E >

Microsoft Word - logic2005.doc

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


manual pdfÃÖÁ¾

Microsoft Word - Installation and User Manual_CMD V2.2_.doc

untitled

NTD36HD Manual

tut_modelsim(student).hwp

Microsoft Word - src.doc

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

歯FDA6000COP.PDF

Remote UI Guide

Microsoft Word - AVRISP mkII 장비 운용.doc

SMT Kor.indd

Mango220 Android How to compile and Transfer image to Target

PRO1_04E [읽기 전용]

歯동작원리.PDF

2 Mitsubishi FX Series Computer Link MITSUBISHI FX SERIES COMPUTER LINK 시스템구성 시스템설정 사용예 사용예 사용예

Microsoft Word - MAI-ISP-STK500_매뉴얼_Ver25.docx

T100MD+

Transcription:

HBE-COMBO II User s Manual and Lab Guide 대전광역시유성구궁동 487-1 (042) 610-1111 www.hanback.co.kr FG-CMMA-0904V10

Revision History Date Version Description Revised by 2006-10-01 1 st Edition(A) Released initially 기술연구소

CONTENTS 1. 개요... 1 1.1 제품특징...3 1.2 제품구성...5 1.3 시스템요구사항...6 1.4 보드구성및각부분명칭...7 1.5 제품규격... 12 2. 처음사용하기... 13 3. 제품사용하기... 29 3.1 CLOCK CONTROL BLOCK... 29 3.2 VFD (16 X 2 LINE)... 31 3.3 7-SEGMENT ARRAY... 40 3.4 LED... 43 3.5 DOT MATRIX LED... 45 3.6 KEYPAD... 49 3.7 BUTTON SWITCH... 52 3.8 BUS SWITCH... 54 3.9 PIEZO... 57 3.10 SRAM... 59 3.11 STEP MOTOR... 62 3.12 IRDA... 65 3.13 UART... 67 3.14 USB/SERIAL 포트... 69 3.15 VGA... 71 3.16 PS/2 포트사용하기... 76 3.17 확장포트... 79 3.18 FLASH MEMORY (OPTION)... 83 4. 설계S/W 기본사용법... 89 4.1 DESIGN FLOW... 89 4.2 설계소프트웨어... 92 4.2.1 Quartus II를이용한설계...92 4.2.2 ISE를이용한설계...134 5. HBE-COMBO II... 157 i

5.1 기본구성... 157 5.2 장비사용하기... 159 6. COMBO II를이용한실험실습... 162 6.1 실험실습개요... 162 6.2 논리게이트회로의응용... 166 6.2.1 실습 1 : NAND 게이트입력수의확장...166 6.2.2 실습 2 : 게이트의변환...170 6.2.3 실습 3 : 상태버퍼...172 6.3 가산기와감산기... 175 6.3.1 실습 1 : 반가산기와전가산기...175 6.3.2 실습 2 : 반감산기와전감산기...178 6.3.3 실습 3 : 4비트병렬가감산기...181 6.4 해독기와부호기... 185 6.4.1 실습 1 : 논리게이트로구성한해독기와부호기...185 6.4.2 실습 2 : BCD-7 세그먼트해독기...188 6.4.3 실습 3 : 8 X 3 부호기...192 6.5 채널선택및분배회로... 196 6.5.1 실습 1 : 채널선택회로...196 6.5.2 실습 2 : 채널분배회로...201 6.6 플립플롭과시프트레지스터... 206 6.6.1 실습 1 : RS F/F...206 6.6.2 실습 2 : JK F/F...211 6.6.3 실습 3 : 8 비트시프트레지스터...214 6.7 계수회로... 217 6.7.1 실습 1 : 비동기식 10진계수기...217 6.7.2 실습 2 : 동기식 10진계수기...220 6.8 연산논리장치... 224 6.8.1 실습 : 연산논리회로...224 7. 부록... 231 7.1 VFD 제어... 231 7.2 KEY PAD 제어... 238 7.3 SEGMENT 제어... 240 7.4 DOT-MATRIX 제어... 245 7.5 시리얼통신... 253 7.6 ALTERA 설계소프트웨어설치방법 (QUARTUS II)... 262 7.7 XILINX 설계소프트웨어설치방법 (ISE)... 269 그림목차 ii

[ 그림 1-1] HBE-COMBOII 구성도...5 [ 그림 1-2] HBE-COMBO II 보드구성및각부분명칭...7 [ 그림 2-1] ALTERA Download Center...15 [ 그림 2-2] XILINX Download Center...16 [ 그림 3-1] Clock Control Block 구성...29 [ 그림 3-2] 16 x 2 VFD...32 [ 그림 3-3] VFD 모듈의동작타이밍...33 [ 그림 3-4] 7-Segnent LED Array 구성...40 [ 그림 3-5] LED 블록도...43 [ 그림 3-6] Dot matrix LED 구성...45 [ 그림 3-7] Keypad 구성...49 [ 그림 3-8] Push Button Switch 구성...52 [ 그림 3-9] Bus Switch 구성...54 [ 그림 3-10] SRAM 블록구성...59 [ 그림 3-11] SRAM read cycle...60 [ 그림 3-12] VGA 블록구성...71 [ 그림 3-13] 수평동기및수직동기...73 [ 그림 3-14] Flash Memory 구성...83 [ 그림 3-15] Read Operations...84 [ 그림 3-16] Write Operations...85 [ 그림 3-17] Reset Operation...86 [ 그림 4-1] 제품생산의흐름...89 [ 그림 4-2] 시스템설계시설계흐름...90 [ 그림 4-3] Fir-filter Project...92 [ 그림 4-4] Hierarchy Display...93 [ 그림 4-5] New Project Wizard...93 [ 그림 4-6] Directory, Name, Top-Level Entity 설정...94 [ 그림 4-7] Add Files...95 [ 그림 4-8] Family & Device Settings...96 [ 그림 4-9] EDA Tool Settings...97 [ 그림 4-10] Summary...98 [ 그림 4-11] 타이틀에표시된프로젝트이름...98 [ 그림 4-12] Project Navigator...99 [ 그림 4-13] 설계메뉴에서 Block Diagram/Schematic File 선택...100 [ 그림 4-14] Block Diagram/Schematic File을활성화한상태...101 [ 그림 4-15] Pop-up 메뉴에서 Insert Symbol 선택...102 [ 그림 4-16] Insert Symbol 창...102 [ 그림 4-17] Stop-watch 예제에서의연결...103 [ 그림 4-18] 마우스포인터의변화...104 [ 그림 4-19] wire 연결...104 [ 그림 4-20] bus wire로변환...105 [ 그림 4-21] 이름으로연결...105 [ 그림 4-22] 심볼생성...106 iii

[ 그림 4-23] New 메뉴에서 Text Editor File 선택...107 [ 그림 4-24] Text Editor File을활성화한상태...108 [ 그림 4-25] AHDL로설계한예...109 [ 그림 4-26] VHDL로설계한예...109 [ 그림 4-27] Verilog HDL로설계한예...110 [ 그림 4-28] Template 선택... 111 [ 그림 4-29] Processing -> Start Compilation 항목선택...113 [ 그림 4-30] Compiler 과정완료...114 [ 그림 4-31] Assignments -> Device 항목선택...115 [ 그림 4-32] Device Settings...115 [ 그림 4-33] Assignment Editor 선택...116 [ 그림 4-34] Assignment Editor...117 [ 그림 4-35] 핀할당작업...118 [ 그림 4-36] Simulation 입력창...119 [ 그림 4-37] Simulation 결과창...120 [ 그림 4-38] Simulation 메뉴선택...121 [ 그림 4-39] Simulation 창활성화...121 [ 그림 4-40] Simulation 입ㆍ출력포트불러오기...122 [ 그림 4-41] Insert Node or Bus...123 [ 그림 4-42] Node Finder...123 [ 그림 4-43] Waveform Editor 파형정의...124 [ 그림 4-44] Simulation Report...125 [ 그림 4-45] Functional Simulation Settings...126 [ 그림 4-46] Timing Simulation...127 [ 그림 4-47] Function Simulation...127 [ 그림 4-48] Quartus II 메뉴에서 Programmer 항목선택...128 [ 그림 4-49] Programmer 창활성화...129 [ 그림 4-50] Hardware Setup...130 [ 그림 4-51] Hardware Setup 완료...130 [ 그림 4-52] Auto Detect...131 [ 그림 4-53] Configuration Ended...131 [ 그림 4-54] Convert Programming Files...132 [ 그림 4-55] Configuration ROM Programmer...133 [ 그림 4-56] full demo 예제...134 [ 그림 4-57] Source Files...135 [ 그림 4-58] New Project...135 [ 그림 4-59] Create New Project...136 [ 그림 4-60] Device Properties...137 [ 그림 4-61] Create New Source...137 [ 그림 4-62] Add Existing Sources...138 [ 그림 4-63] Project Summary...139 [ 그림 4-64] 타이틀에표시된프로젝트...139 [ 그림 4-65] 설계메뉴에서의 Schematic 선택...140 [ 그림 4-66] Schematic Editor...141 iv

[ 그림 4-67] Symbols...142 [ 그림 4-68] Tools...142 [ 그림 4-69] 마우스포인터의변화...143 [ 그림 4-70] Wire 연결...143 [ 그림 4-71] 이름으로연결...143 [ 그림 4-72] Text File...144 [ 그림 4-73] Language Templates...145 [ 그림 4-74] Compile...147 [ 그림 4-75] Assign Package Pins...148 [ 그림 4-76] impact...149 [ 그림 4-77] impact...150 [ 그림 4-78] Programming...151 [ 그림 4-79] Generate PROM, ACE, or JTAG File...152 [ 그림 4-80] Welcome to impact...153 [ 그림 4-81] Prepare PROM Files...154 [ 그림 4-82] Specify PROM Device...155 [ 그림 4-83] File Generation Summary...155 [ 그림 5-1] Device Module 장착...159 [ 그림 5-2] 전원및다운로드케이블연결...160 [ 그림 6-1] Button S/W...163 [ 그림 6-2] Bus 스위치입력...163 [ 그림 6-3] LED 출력...163 [ 그림 6-4] 7-Segment 출력...164 [ 그림 6-5] 7-Segment 구성...164 [ 그림 6-6] 7-Segment 동작원리...165 [ 그림 6-7] Graphic Design으로회로설계...166 [ 그림 6-8] 시뮬레이션결과표기...167 [ 그림 6-9] 논리회로...170 [ 그림 6-10] 시뮬레이션결과확인...170 [ 그림 6-11] 상태버퍼회로도...172 [ 그림 6-12] 결과확인...173 [ 그림 6-13] 반가산기및전가산기회로도...175 [ 그림 6-14] 시뮬레이션결과확인...176 [ 그림 6-15] 반감산기및전감산기회로도...178 [ 그림 6-16] 결과확인...179 [ 그림 6-17] 4비트병렬가감산기회로도...181 [ 그림 6-18] 결과확인...182 [ 그림 6-19] 해독기및부호기회로도...185 [ 그림 6-20] 결과확인...186 [ 그림 6-21] BCD-7 세그먼트해독기...188 [ 그림 6-22] 결과확인...190 [ 그림 6-23] 8x3 부호기회로도...192 [ 그림 6-24] 결과확인...194 [ 그림 6-25] 4채널선택회로회로도...196 v

[ 그림 6-26] 결과확인...197 [ 그림 6-27] 4x1 멀티플렉서회로도...199 [ 그림 6-28] 결과확인...199 [ 그림 6-29] 4채널분배회로회로도...201 [ 그림 6-30] 결과확인...202 [ 그림 6-31] 74139를사용한회로도...204 [ 그림 6-32] 결과확인...204 [ 그림 6-33] NAND 게이트를이용한 RS F/F 설계...206 [ 그림 6-34] 위회로에대한결과...206 [ 그림 6-35] 회로도...208 [ 그림 6-36] 결과확인...209 [ 그림 6-37] JK F/F 회로도...211 [ 그림 6-38] 결과확인...212 [ 그림 6-39] 8비트시프트레지스터회로도...214 [ 그림 6-40] 결과확인...215 [ 그림 6-41] 비동기식 10진계수기회로도...217 [ 그림 6-42] 결과확인...218 [ 그림 6-43] 동기식 10진계수기회로도...220 [ 그림 6-44] 결과확인...221 [ 그림 6-45] 연산논리회로회로도...224 [ 그림 6-46] 결과확인...227 vi

개요 01 개요 HBE-COMBO II User s Manual & Lab Guide 1. 개요 HBE-COMBO II는현대의전자, 정보통신산업현장에서필요로하는디지털논리회로설계에대한학교교육에서이론적인교육환경을벗어나이론에서얻은결과를직접눈으로확인할수있도록하는환경을제공하기위한디지털논리회로설계실습장비입니다. HBE-COMBO II는산업현장에서디지털회로설계에많이적용되고있는 FPGA를이용하여사용자가설계한회로를직접하드웨어를이용하여동작시킴으로이론교육에서얻을수없었던여러가지동작현상을실험을통해얻을수있으며이와아울러학생들에게디지털논리회로설계에대한흥미를유발시킬수있습니다. 그리고본제품에서는기존의 HBE-COMBO 제품의특징인두회사의모듈을사용할수있도록 Altera사와 Xilinx사의두디바이스를한보드내에서사용할수있도록메인디바이스를모듈화하였습니다. 따라서하나의보드에서메인디바이스모듈의탈, 장착을통해두회사에서제공하는디바이스를경험해볼수있도록구성을해놓았습니다. 여기에사용하는디바이스도두회사에서최근에개발된디바이스를사용하도록구성하고, 설계할수있는용량도대폭늘려서여유롭게설계할수있는구성을가지고있습니다. 사용자가원하는클럭을손쉽게입력받아사용할수있도록클럭컨트롤블록을구성하고있고, 여기에서는클럭제어스위치를이용하여 16개의클럭을출력하게구성하였습니다. 또한디바이스모듈에별도의사용자클럭을두어원하는오실레이터를꽂아사용할수있도록구성하고있습니다. 이밖에도동작에필요한설정을단순화하여사용상의어려움을최소화하였으며다양한응용모듈을내장하여별도의장치없이충분한실습이이루어지도록하였습니다. 이외에도확장입출력포트를통해제품에서구성되지않는기능을실습할수있도록구성하였습니다. 장비에구성하고있는장치들을살펴보면, VFD(Vacuum Fluorescent Display) 및고휘도 LED를두어시인성을더욱강화하였습니다. 또한다양한입력장치 ( 키패드, 버튼스 HBE-COMBO II User s Manual and Lab Guide 1

위치, 버스스위치 ) 를사용하여보드내에서직접제어하여실험할수있게구성하고있습니다. 또한적외선통신실험을할수있는 IrDA, USB to Serial 통신실험을할수있는 USB 포트, 자기센서를이용한스텝모터구동을할수있도록구성하였습니다. 또한보드내에 50핀커넥터를이용하여다양한확장모듈을장착하여실험할수있도록구성하고있습니다. HBE-COMBO II를이용하면디지털논리회로설계의기본의이론적인부분을벗어나다양한응용모듈과장치들을이용한설계에서더높은회로설계의기술을익히고배우게될것입니다. 제품에장착되어있는최신의디바이스와대용량의디바이스로설계에대한제약이없이설계를할수있습니다. 또한두회사의디바이스를사용하여설계하는회사의제약없이회로를설계할수있는방법을익히게될것입니다. 2

개요 1.1 제품특징 Altera, Xilinx 디바이스의모듈화 FPGA 디바이스의유연성과확장성을고려하여 Altera와 Xilinx 디바이스의교체사용이가능하도록모듈화하였으며 Altera사의 Cyclone II Series(3.5M ~ 7M System Gates) 와 Xilinx사의 Spartan 3 Series(1M ~ 4M System Gates) 를사용할수있도록구성하고있습니다. 디바이스모듈의독립성 Device Module 내에 FPGA 디바이스와 Configuration 디바이스를같이두어모듈의 Configuration Device에서한번의프로그램으로다음의전원인가시 Configuration ROM 에의한데모동작을할수있도록구성하고있습니다. 또한별도의오실레이터를모듈에장착하여사용이가능하도록구성하고있으므로모듈에전원공급만으로단독사용이가능하게구성하고있습니다. Clock Control Block 베이스보드에있는 50MHz의오실레이터출력을 Clock Control Block을이용하여 0Hz ~ 50MHz의 16종류의클럭으로분주하여사용할수있도록구성하고있습니다. 또한디바이스모듈에서별도의사용자클럭이있어모듈에사용하는오실레이터값이그대로전달되어사용할수있도록구성하였습니다. 따라서베이스보드와디바이스모듈의 2개의클럭을입력받아다양한클럭선택을통한설계가가능하게구성하였습니다. 이러한두종류의클럭은디바이스별로각각의클럭전용핀에연결되어있어제어프로그램에서의클럭핀의선택따라원하는클럭을선택하여사용이가능합니다. 이러한클럭의선택은디바이스모듈에있는 User Clk EN 스위치를이용하여디바이스모듈에있는클럭입력을제어할수있습니다. 장비의확장성 사용자가제작한입출력장치들을인터페이스할수있도록 50 pin x 2의확장포트를지원하여사용자가보드이외의곳에데이터를출력하여제어가가능하도록구성하고있습니다. 또한별도의 50핀확장커넥터를통해 HBE-COMBO II용모듈을장착하여다양한실험을하도록구성하고있습니다. 손쉬운프로그래밍작업 다양한작업 (FPGA Download, PROM Program) 에사용되는전용케이블모듈을이용하여 PC와장비를연결하여손쉽게프로그램할수있도록구성하였습니다. HBE-COMBO II User s Manual and Lab Guide 3

4

개요 1.2 제품구성 [ 그림 1-1] HBE-COMBOII 구성도 HBE-COMBO II User s Manual and Lab Guide 5

1.3 시스템요구사항 1) PC 하드웨어및소프트웨어사용요건 PC 하드웨어 : IBM 호환펜티엄 II 이상 64MB 이상의메모리 ALTERA 프로그램사용시 (1GB 이상의하드디스크여유공간과 100MB 이상의작업공간 ) Xilinx 프로그램사용시 (2GB 이상의하드디스크여유공간과 100MB 이상의작업공간 ) Microsoft Windows 호환 Graphic Card Microsoft 호환마우스 최소 1 개이상의 EPP/ECP 지원프린트포트 (LPT) CD-ROM 드라이브 소프트웨어 : OS : Windows NT 3.5 이상, Windows 2000, Windows XP 설계프로그램 : Altera (Quartus II 5.0 이상 ), Xilinx (ISE Foundation Series 8.1i 이상 ) 2) FPGA 디바이스규격 ALTERA FPGA Device (3.5M ~ 7M System Gates) Cyclone II Series (EP2C35F672, EP2C50F672, EP2C70F672) Xilinx FPGA Device (1M ~ 4M System Gates) Spartan 3 Series (XC3S1000FG676, XC3S1500FG676, XC3S2000FG676, XC3S4000FG676) 3) Configuration PROM 규격 Altera사의 Serial Configuration Device와 Xilinx사의 Flash In-System Programmable Configuration PROMS의각회사의전용 FPGA Configuration ROM을사용합니다. Altera FPGA용 PROM : EPCS16SI16N Xilinx FPGA용 PROM : XCF08PVO48C 또는 XCF16PVO48C 6

개요 1.4 보드구성및각부분명칭 [ 그림 1-2] HBE-COMBO II 보드구성및각부분명칭 Altera사의 Cyclone II Series를사용하는경우에는 Quartus II를사용하여디바이스를제어하고, Xilinx사의 Spartan-3 Series를사용하는경우에는 ISE를이용하여제어가가능합니다. 이러한 2개의소프트웨어는각회사의홈페이지에서웹버전을무료로다운받아서사용할수있습니다. 1) FPGA 모듈 Altera 및 Xilinx FPGA 디바이스를겸용으로장착하여사용가능하도록커넥터로구성하였습니다. 따라서사용자가사용하려는 FPGA Module을선택장착하여사용이가능합니다. 여기에서선택하는모듈에따라서설계소프트웨어도달리해주어야합니다. 이렇게설계된환경은전용다운로드케이블을이용하여디바이스모듈의 JTAG 커넥터로 FPGA 디바이스와 Configuration PROM에다운할수있습니다. 따라서 FPGA 모듈은전원공급을통해디바이스에서다운이가능하게구성하였습니다. 또한 FPGA 디바이스는 RAM 타입의디바이스로전원 OFF시디바이스내부의데이터가사라짐으로다시전원을 ON 하더라도이전의동작이계속유지가되지않습니 HBE-COMBO II User s Manual and Lab Guide 7

다. 그래서전원을켤때마다디바이스에재프로그램해주어야합니다. 이런불편한점을보완하기위해별도의 Configuration ROM을두어, 한번의프로그램만으로데이터가사라지지않고 RESET 버튼을통해 Configuration ROM을통해미리저장된데이터를넘겨주어동작이가능하게구성을하였습니다. 현재 FPGA 모듈에서사용하는 Configuration ROM은 Altera (EPCS Series), Xilinx (XCF Series) 를사용하고있습니다. 그리고베이스보드로부터클럭의입력을받아사용하고, 모듈내에오실레이터를장착하여 User Clock을입력받아사용할수있도록구성하였습니다. 2) 클럭제어블록 메인클럭은 Base Board에서제공하는 50MHz를로터리스위치를이용하여 0Hz ~ 50MHz까지의 16개로클럭형태로분주하여사용하도록구성하고있습니다. 또한모듈에별도의 User Clock을달아서사용할수있도록구성을해놓았습니다. 사용자가사용하려는오실레이터의값이그대로 FPGA 디바이스에전달되어사용을할수있도록구성이되어있습니다. 따라서사용자가원하는클럭을오실레이터를꽂으면그클럭이바로디바이스에전달되어사용이가능합니다. 이 User Clock은옆에잉카스위치를두어서사용하는오실레이터가없을때스위치를 OFF 시켜서클럭핀을안정화시켜놓았습니다. 사용하는클럭은몇개의클럭입력전용핀을이용해서입력을받고있으므로메인클럭과 User Clock을동시에받아서회로를설계할수있습니다. 3) VFD 16문자 x 2라인을출력할수있도록구성된 VFD 모듈입니다. VFD란진공형광표시장치 [Vacuum Fluorescent Display] 로써저속전자선에의한형광체의여기발광현상을이용한표시장치입니다. 따라서 HBE-COMBO의 Text LCD 보다도트자체적으로발광을하기때문에밝기면에서우수하여시인성이뛰어나고응답속도가빠른특징이있습니다. 동작은영문, 숫자, 특수문자등을문자표를보고데이터값을보내서표시가가능합니다. 또한코드의수정으로문자의밝기를 4가지모드로조절할있는특징이있습니다. 4) 7-Segment Array 총 8자리의숫자를표시할수있도록구성된 7-Segment 모듈입니다. 각 Segment에서사용하는핀의수를줄이기위해 Segment의 Common 핀을이용하여 Segment를하나씩 8

개요 선택하고, 이렇게선택된 Segment에 data를주는샘플링방식을이용하여제어합니다. 따라서 FPGA I/O가제한되어있는곳에서적은핀으로보다많은 7-Segment를제어할수있습니다. 5) High light LED 총 8개의딥타입의고휘도 LED로구성되어있습니다. 따라서보다선명한빛을통해 LED의동작을확인할수있습니다. 6) Dot Matrix LED 10x14 도트로구성된 Dot Matrix LED로서최대 4자의영문자또는 1자의한글을표시할수있도록구성되었습니다. 7) Piezo 특정주기의클럭소스를인가할경우멜로디를출력하는장치입니다. 10KHz ~ 1Hz의클럭소스를사용하여다양한멜로디를출력할수있습니다. 그림에서는신호등모듈밑에위치하고있습니다. 8) Key pad 3 X 4의키패드모듈을사용하여숫자 1 ~ 0과 #,* 를표현할수있는스위치를사용하고있습니다. 스위치의동작은스캔방식을이용하여제어를하도록구성이되어있습니다. 스캔으로사용할수있는라인인 Column과 Row 라인을 Scan Dir" 스위치를통해선택할수있습니다. 9) 버튼스위치 A ~ F까지의입력을할수있도록버튼스위치 6개로구성이되어있습니다. 이버튼에대한표시는보드에표기되어있습니다. 또한스위치에는채터링을방지하기위한회로가추가되어있어버튼의입력을확실히받을수있습니다.. 10) 버스스위치 16비트의버스입력을위한 Dip 타입의스위치입니다. 이스위치에는채터링방지회로가내장되어있지않으므로버튼스위치의용도로사용할경우정상적인입력이되지않을수있습니다. 11) Step Motor 4개의데이터라인을통해 1상여자방식, 2상여자방식, 1-2상여자방식으로모터를구동하게됩니다. 따라서이러한데이터의신호에따라서모터가가지고있는정해진각도에따라모터축이회전하는원리를가지고있는모터를구성해놓았습니다. 또한 HBE-COMBO II User s Manual and Lab Guide 9

모터의회전을감지하기위해자기센서를부착하고있어, 모터의제어를더욱다양하게할수있습니다. 12) IrDA 적외선주파수스펙트럼내의모아진광선을이용하여비교적짧은거리내에있는송, 수신기사이의무선데이터통신에이용할수있는블록을구성하고있습니다. 송, 수신기를하나의모듈로구성한 HSDL-3600 1개를보드가장자리에배치하고있어다른장비와연동하여서로간의적외선통신실습을구현할수있습니다. 13) Memory 512K Bit의 SRAM과 16M Bit의 Flash Memory로구성되어있으며 SRAM과 Flash Memory 는각각별도의데이터라인을통해독립적으로제어가가능합니다. 이러한메모리들의핀을제어하여메모를영역을제어할수있도록구성해놓았습니다. 그림에서는신호등모듈밑에위치하고있습니다. 14) VGA 포트컬러 VGA 모니터를구동할수있도록디지털 RGB를아날로그 RGB 신호로변환해줄수있는 D/A Converter가연결되어최대 1024 X 768 해상도에최대 24-bit RGB 컬러를구현할수있도록구성되어있습니다. 15) RS-232 통신포트 PC 등의개발호스트와 RS-232 포트와의통신을위한시리얼포트입니다. 9핀 Male로 2개가장착되어있습니다. 16) USB to Serial 포트시리얼통신을하기위한포트로써 RS-232 포트를지원하지않는호스트에서 USB 포트를이용하여실험할수있는장치입니다. 지원하는디바이스로 FT232를사용하고있고, http://www.ftdichip.com/ 에서윈도우용드라이버를설치하여사용하면됩니다. 17) PS/2 포트 PC의입력장치로사용되는 PS/2 키보드나마우스를연결해키보드컨트롤러나마우스컨트롤러를설계해볼수있는 PS/2 커넥터 2개로구성되어있습니다. 18) 확장포트 외부 Application 장치나사용자께서제작한장치를연결하기위한포트로 50핀 Male 커넥터로구성되어있으며총 2 포트를제공합니다. 19) 확장포트 (Daughter) 10

개요 장비내에 50핀확장커넥터에확장모듈을장착하여실험할수있는포트입니다. 이모듈에는신호등, 자판기부터오디오코덱을실험할수있는모듈등이구성되어있습니다. HBE-COMBO II User s Manual and Lab Guide 11

1.5 제품규격 구분 사양 FPGA Device Configuration ROM SRAM Flash Clock VGA USB Serial PS/2 Keypad Input Button Input Bus Switch LED 7-Segment VFD Dot-Matrix Piezo Motor Sensor IrDA Ext. port Ext. port(daughter) Power CD Manual Accessory Board Size - Altera : Cyclone II Series (EP2C35~70F672), User I/O : 422 ~ 475 - Xilinx : Spartan-3 Series (XC3S1000~4000FG676), User I/O : 391 ~ 489 - Altera : EPCS16 - Xilinx : XCF08PVO48 or XCF16PVO48 256K x 16 bit High Speed Static RAM 128 Mbit Embedded Flash Memory (Option) 50MHz base board Oscillator 1EA, Ext User clock 1024 x 768 Resolution 24-Bit True-color VGA port 1EA USB to Serial Interface RS232 UART Port 2EA(FPGA I/O) PS/2 Keyboard or PS/2 Mouse port 1EA 3 x 4 Key-Pad Switch User Push-button 6EA User 8-bit DIP Switch 2EA User LED Displays 8EA 4-Digit 2EA(Total 8-Digit) 16 x 2 Vacuum Fluorescent Display 1EA 14 x 10 Dot-matrix 1EA(7 x 5 Dot-matrix 4EA) 5V Input Piezo 1EA Step Motor with Phase LED 1EA Magnetic Sensor 1EA Compliant 4MB/s 3V Infrared Transceiver 25 X 2 I/O Expansion port 2EA(Support total 92 pin), 5V Supply 25 X 2 I/O Expansion port 1EA(Support total 44 pin), 5V, 12V Supply Input 220V/60Hz AC/Output : +5V, +3.3V, +2.5V, +1.8V, +1.2V 전자매뉴얼및예제 CD 1EA 사용설명서 & 실습매뉴얼 - 220V power cable : 1EA - Serial cross cable : 1EA - Parallel cable : 1EA - Altera ByteBlaster II download cable or Xilinx Parallel download cable : 1EA FPGA board : 96 X 122 (mm), base board : 312 X 221 (mm) 12

처음사용하기 02 HBE-COMBO II User s Manual & Lab Guide 처음사용하기 2. 처음사용하기 본장비는다음의네부분으로크게구분할수있습니다. FPGA부, 클럭제어부, 내부장치부, 확장부로나누어지며장비를사용할때는이들을조작하여필요한동작을위한준비를하여야합니다. FPGA부는디바이스를이용한직접적인제어를하는곳으로, HBE-COMBO II의 Base board의커넥터를통한 FPGA 디바이스를장착하여사용이가능합니다. FPGA 모듈은 Altera, Xilinx 사의 2 종류의디바이스를모듈화하고있기때문에, 모듈의탈장착으로두회사의디바이스를모두사용할수있습니다. 따라서 HBE-COMBO II 장비에서는벤더의제한없이사용이가능합니다. 각디바이스모듈의구성은 FPGA 디바이스, 각디바이스의 PROM, 전원, 리셋단, JTAG port가구성되어있습니다. 따라서커넥터를통한전원의공급만으로디바이스모듈의단독구동이가능합니다. 클럭제어부는 HBE-COMBO II의 base board에구성되어있습니다. 이부분은 FPGA 디바이스에공급하는클럭을제어하는부분입니다. FPGA 디바이스는오실레이터를통해클럭을공급받아서사용하는환경을가지고있습니다. 하지만보드에장착되어있는클럭은 50MHz의주파수를가지고있는것으로사용자가설계환경에서사용하려는클럭은이러한주파수값을분주하여사용해서사용해야하는불편함이있습니다. 따라서이러한불편을해소하기위해제어부를두어클럭을분주해서 FPGA 디바이스로공급해주는역할을하고있습니다. 이러한클럭의공급은 0Hz에서 50MHz까지의 16분주를 Clock Select 스위치를이용하여 FPGA 디바이스로공급이가능합니다. 이러한클럭의값은클럭제어부의 7-Segment에서입력되는주파수를확인할수있습니다. 7-Segment에서주파수의숫자를확인할수있고 7-Segment 옆에있는 3개의 LED를통해 MHz, KHz, Hz를확인할수있습니다. 이러한클럭은 Base board의 50MHz의클럭을분주하여디바이스로공급해준값입니다. 이외에디바이스모듈에서별도의오실레이터를사용하여주파수를공급해줄수있습니다. 이때, Base board의주파수는 0Hz로해야하고, 디바이스모듈의클럭제어스 HBE-COMBO II User s Manual and Lab Guide 13

위치를이용하여 User Clock을활성화시켜주어야합니다. 이상태에서모듈에 Dip 타입의오실레이터를장착하여디바이스에주파수공급이가능합니다. 여기에서사용하는오실레이터는 Half, Full의두가지타입이모두가능하고사용하는오실레이터의값이그대로 FPGA 디바이스로전달됩니다. 내부장치부는 HBE-COMBO II 장비에구성되어있는장치들로, 포트를이용한외부의장비와통신을위한부분과내부의장치를제어하는부분들이있습니다. 세부적으로살펴보면입출력포트로는먼저 VGA 포트로모니터제어를위한것과, 2개의 UART 포트를이용하여 PC등과의시리얼통신실험을위한부분이있습니다. 또한 USB 포트를이용한시리얼통신실험을할수있습니다. 마지막으로 PS/2 포트를이용하여키보드나마우스를이용한제어실험을해볼수있습니다. 장비내부에있는실습장치들로는 Display 장치로 LED, 7-Senment, Dot Matrix등이있습니다. 또한 VFD(Vacuum, Fluorescent Display) 가있습니다. VFD는예전의 Text LCD와제어와동작은비슷하지만, 각 dot별형광물질에의한발광을하고있으므로밝기면에서우수한성능을보이고있습니다. 입력장치로는키패드, 버튼스위치, 버스스위치의다양한입력스위치를사용하여입력으로사용이가능합니다. 또한 Piezo를사용하여주파수에따른음을조절하여멜로디출력을할수있는부분이있고, 스테핑모터를사용하여모터구동실험을할수있습니다. 마지막으로적외선센서를이용한통신실험을할수있는 IrDA 모듈을사용하고있습니다. 확장부는 50핀확장커넥터 3개를사용하여 FPGA 디바이스를디지털신호를장비외부의장치로확장해서사용할수있는부분입니다. 디바이스모듈오른쪽에있는 EXT 1, EXT 2의확장커넥터는 5V의전원을포함한확장이가능합니다. 따라서기존의한백전자 FPGA Application Module 모두제어가능합니다. 이러한모듈은신호등, 퍼즐에서엘리베이터까지다양한응용모듈을 HBE-COMBO II에서제어가가능합니다. 그리고 FPGA 디바이스모듈의위에배치하고있는 EXT 3은 50핀의확장커넥터로 5V, 12V의전원을공급받아사용이가능합니다. 이확장커넥터는 HBE-COMBO II용확장모듈을장착하여사용할수있는부분입니다. 이러한보드의종류로는신호등, 자판기, ADDA, Stereo Audio Codec Board등이있습니다. 따라서이러한모듈을 HBE-COMBO II 장비에장착하여다양한실험을해볼수있습니다. 다음은장비사용을위한순서를정리하였습니다. 본장비를활용하기위해서는 Altera사또는 Xilinx에서제공하는회로설계소프트웨어인 Quartus II, ISE가준비되어야합니다. 이러한설계소프트웨어는각디바이스벤더의홈페이지에서제공하는무료소프트웨어를다운받아설치하면디바이스제어가가능합니다. 다음의그림에서각벤더의다운로드창을확인할수있습니다. 14

처음사용하기 [ 그림 2-1] ALTERA Download Center HBE-COMBO II User s Manual and Lab Guide 15

[ 그림 2-2] XILINX Download Center 사용할 FPGA 모듈을선택하여그림과같이장착합니다. 장착시주의할사항은커넥터가정확히일치하게연결되지않은상태에서전원을인가할경우 FPGA 디바이스가손상될위험이있으므로주의하여야디바이스를장착하여야합니다. 초기에제품에는디바이스가장착되어있으므로바로전원을인가하여도됩니다. 16

처음사용하기 [ 장착전 ] [ 장착후 ] 제품에포함되어있는전원케이블을제품의오른쪽측면이있는전원연결포트에연결합니다. 전원연결포트에스위치가꺼져있는지확인하신후전원케이블을전원플러그에연결합니다. LPT용케이블을 PC의 LPT ( 프린트 ) 포트에연결하고다른한쪽은각디바이스모듈에맞는다운로드전용케이블과연결해줍니다. 이러한다운로드케이블은디바이스모듈의 JTAG 포트와연결합니다. [ 전원케이블연결 ] [Download 케이블연결 ] 보드메인전원스위치를 on하여 Base 보드와 FPGA 모듈의전원 LED에불이제대로들어오는지확인하고전원 LED에불이들어오지않을경우전원케이블이제대로연결되었는지또는제품에서쇼트 ( 단락 ) 된부분이없는지확인하기바랍니다. 전원이정상적으로들어올경우 JTAG 커넥터를통해설계소프트웨어의프로그램창을이용하여디바이스를검색할수있습니다. Altera Quartus II에서는 Programmer에서 Auto Detect 버튼을클릭하면 JTAG 커넥터와연결된 Altera 디바이스 (EP2C35F672) 가보이게됩니다. Xilinx ISE에서 impact 에서 Initialize Chain으로디바이스검색을하면, 연결된디바이스 (XCF08, XC3S1000F676) 가화면상에보이게됩니다. 이렇게디바이스검색을통한연결상태및전원을확인을해보고장비에직접다운로드하여미 HBE-COMBO II User s Manual and Lab Guide 17

리설계된설계소스를이용하여장비의동작을확인해볼수있습니다. 툴의다운로드창을이용하여장비에있는디바이스에다운로드합니다. 다운로드가완료되면장비가사용자가설계한상태대로동작을하게됩니다. 이때동작의이상이있거나다운이정상적으로이루어지지않을경우, 모듈의전원이나케이블의연결상태를확인하고다시다운해보기바랍니다. 제품동작은다음과같이크게 3가지로구분되며각각의동작상태는다음과같습니다. 그리고각각의사용법은사용하는 FPGA 디바이스에따라조금씩다르므로자세한동작방법은다음부분에나와있는내용을참고하기바랍니다. 1) FPGA Download (Download) 사용자가설계한회로를 FPGA 디바이스로직접프로그램데이터를전송하여동작을확인하는방법입니다. 다운로드에의해바로동작을확인할수있다는장점은있으나제품의전원을 off할경우다운로드된데이터가디바이스에서지워지기때문에다시동작을할경우다운로드를해주어야합니다. 이방법은 FPGA 디바이스가 SRAM 타입이기때문에전원에따른데이터의손실을보게되는것입니다. 디바이스에프로그램하기전에주의할사항은컴파일시, Setting 부분의디바이스옵션창에서디바이스의사용하지않는핀에대해 tri-stated buffer 상태로설정을해두어야합니다. 이렇게함으로써프로그램후디바이스에대한손상을줄일수있습니다. 이러한상태의설정이없다면디바이스의과열반응의원인이됩니다. 이작업은다음에나오는그림과같이 Quartus II 메뉴의 Assignments => Settings에서이러한작업을설정해줍니다. 여기서활성화되는창에서왼쪽 Category 창에서 Device 를선택하고, 나타나는오른쪽창에서 Device & Pin Options.. 버튼을클릭합니다. 다음그림처럼활성화되는창에서위의버튼중에 Unused Pins를선택해줍니다. 그리고 Reserve all unused Pins를체크하고 확인 버튼을눌러설정을마칩니다. 이러한설정을하고컴파일을하면, 디바이스에프로그램시발열현상을막을수있습니다. Xilinx 디바이스의경우별도의설정없이프로그램파일의설정을마치고바로다운해주면됩니다. 18

처음사용하기 - ALTERA Device & Pin Setting HBE-COMBO II User s Manual and Lab Guide 19

2) Configuration ROM Write (Write) FPGA 디바이스는앞서설명한것과같이 SRAM으로구성되어있어전원이 off되면프로그램데이터가소거되어전원을 on할때마다다시프로그램을다운로드하여야합니다. 이것을개선하기위해 Configuration PROM을사용하여 FPGA 프로그램데이터를 PROM에저장하여전원이인가될때자동으로데이터를 FPGA로다운로드하여장비가동작하도록합니다. Configuration PROM을프로그램하는방법은 Altera사와 Xilinx사의 tool의메뉴에서이러한작업을할수있습니다. 이러한방법은다음에나오는설명을통해두회사의디바이스에대한 Configuration 방법을참고로해보기바랍니다. 1 Altera PROM Configuration Altera 사에서나오는 Serial PROM을 Write하기위해서는 FPGA Device의 Serial Flash Loader를이용하는방법을이용하고있습니다. 따라서 FPGA Device에있는 Serial Flash Loader에먼저프로그램후이러한장치가 FPGA Device와연결되어있는 Serial Configuration Device에직접프로그램하는방식을이용하고있습니다. 따라서 tool에서먼저확장자가.sof(altera FPGA Device download file) 파일을디바이스의 Serial Configuration Device에프로그램할수있는파일인.jic 파일로변환을해주어야합니다. 따라서 Quartus II의메뉴에있는 File -> Convert Programming File에서이러한파일변환작업을할수있습니다. 참고로여기서실행하는메뉴는.sof 파일을가지고 Altera 디바이스에적용해주기위한파일로변환해주는작업을하는창이됩니다. 다음의창에서이러한파일의변환방법이설명되어있습니다. 20

처음사용하기 - Convert Programming File 위의그림을통해파일을.sof =>.jic 파일로변환하는방법을보여주고있습니다. 다음에서이러한설정이어떻게하는지설명하도록하겠습니다. Programming file type : JTAG Indirect Configuration File (.jic) HBE-COMBO II User s Manual and Lab Guide 21

먼저 Programming file type을변환하려는 Serial Configuration Device에맞는파일로선택을해줍니다. Configuration device : EPCS16 Write 하려는 Serial Configuration device를선택해줍니다. FPGA Module 디바이스이름을보고확인할수있습니다. File name : 생성하려는파일이름 사용자가생성하려는파일이름을적어줍니다.( 예 : full_demo.jic) 이때확장자는.jic 로선택해줍니다. 이때저장하려는폴더도지정을해서파일이름을적어주어야합니다. 폴더를지정하지않으면프로젝트가선언된 root 폴더 ( 최상위폴더 ) 에저장이됩니다. Flash Loader : Cyclone II => EP2C35F672 ~ EP2C70F672 Flash Loader는현재어떤 FPGA Device의 Loader를사용할것인지선택해주는작업으로현재 FPGA Module에사용하고있는 Cyclone II Family에 EP2C35F672를선택해줍니다. 이작업은오른쪽에나와있는그림에서확인해볼수있습니다. SOF Data : 현재설계한.sof 파일 여기에서는변환하려는대상파일을선택해주어야합니다. 현재설계한프로젝트의 FPGA Device 전용프로그램파일인.sof 파일을선택합니다. 이렇게설정을마쳤으면 Generate 버튼을클릭해서파일을생성하면됩니다. 이렇게생성된파일을가지고 Altera사의 Serial ROM에프로그램해주면됩니다. 2 Xilinx PROM Configuration Xilinx 메인디바이스도 Altera 디바이스와같이 RAM 타입의디바이스이기때문에별도의 ROM 타입의디바이스를같이사용하여이러한점을보완해주고있습니다. 여기에서사용하는 PROM은 Xilinx사에서나온전용 Configuration PROM인 XCF08PVO48 을사용하고있습니다. 따라서여기도마찬가지로 Xilinx사의 tool인 ISE를가지고파일의변환작업을수행하여야합니다. Spartan 3를가지고컴파일된최종파일을이용하여변환작업을수행합니다. 다음의그림을통해이러한변환작업을수행하는방법이나와있습니다. - Generate PROM, ACE, or JTAG File 22

처음사용하기 위의그림에서는.bit 파일을 Configuration PROM에사용할수있는파일로변환을위한작업을보여주고있습니다. 따라서 ISE Processes 창에서컴파일을수행후, 위의그림과같이 Generate PROM, ACE, or JTAG File를실행시킵니다. 이때주의할점이 Generate Programming File의 Properties에서 FPGA Start-Up Clock을 HBE-COMBO II User s Manual and Lab Guide 23

CCLK로설정을해주어야합니다. 이러한작업은 Properties를활성화시킨다음에 Category를 Startup Options을선택합니다. 그리고나타나는하위메뉴에서 FPGA Start-UP Clock을 CCLK로설정하고 Generate Programming File을실행시킵니다. 따라서 Generate PROM, ACE, or JTAG File을실행하기전에이러한작업이완료되어있어야합니다. 이러한작업은다운방식에따라어떠한다운방식의클럭을이용하여 FPGA 디바이스에프로그램할것인지결정해주는작업으로 PROM으로다운을할경우이러한작업이완료가되어있어야지만 PROM에의한동작이이루어질수있습니다. 이렇게설정을하고 Generate PROM, ACE, or JTAG File을실행시키면 Generate PROM, ACE, or JTAG File 그림의오른쪽과같은창이나타나고, PROM Configuration File에대한변환작업을시작하게됩니다. 다음부터는 PROM 변환을위한작업순서를보여주고있습니다. - Welcome to impact Impact를실행해디바이스관련작업을하는설정창입니다. 여기에서는타겟디바이스에관한프로그램과정부터현재설정을하려는 PROM 관련파일변환작업을수행할수있는곳입니다. Xilinx PROM에적용해주기위한파일변환을위한작업을수행하려고하고있으므로 Prepare a PROM File 에대한부분을체크하고다음설정창으로넘어갑니다. - Prepare PROM Files 24

처음사용하기 생성할파일에관한설정을해주는창입니다. 창에서윗부분에잇는 I want to targer a ~ 부분에서어떠한종류의 PROM을사용하고있는지선택을해줍니다. 여기에서는현재장비에장착되어있는 Xilinx PROM 을선택해줍니다. 다음으로 PROM File Format 은일반적인 PROM 프로그램파일형태인 MCS 를선택해줍니다. Checksum Fill Value (2 Hex Digits) 는 Default로설정되어있는 FF 로두고다음에있는파일의이름과저장되는폴더는사용자가직접설정을해줍니다. 설정전의 PROM File Name는 Untitled, Location은프로젝트가선언된폴더로지정이되어있습니다. 다음의그림에서는이러한작업을수행한그림이나와있습니다. - Specify Xilinx PROM Device 이창에서는현재장비에서사용하고있는디바이스인 Xilinx PROM을선택하는작업을합니다. 따라서현재장비에서사용하고있는 PROM을선택해주고이러한 PROM이몇개사용하는지를이창에서결정해주는것입니다. 따라서현재창에서는 Select a PROM 에서 Xilinx Device Module 에서사용하고있는 PROM인 XCF08PVO48 또는 XCF16PVO48을선택하게됩니다. 따라서이러한디바이스를선택하고현재모듈에서몇개를사용하는지를 Add 버튼을이용하여넣어주면됩니다. 여기에서는현재디바이스모듈을확인해사용하는디바이스를넣어주고가운데창을통해디바이스첨가해서확인을해주면됩니다. HBE-COMBO II User s Manual and Lab Guide 25

- File Generation Summary 여기에서는이제까지의작업에대한 Summary 형태로보여주고있습니다. 따라서이전에서작업한것에대한내용을이창을통해최종적으로확인해볼수있습니다. 여기에서확인한내용이이상이없으면 Finish 버튼을눌러마치고, 수정사항이이상이있을시 Back 버튼을통해이전단계로가서다시수정을해주면됩니다. 26

처음사용하기 이상의작업을마치고아래의 Xilinx PROM에적용을해줄파일변환에대한창이활성화됩니다. 따라서여기에서변환할.bit 파일을현재의작업폴더에서찾아서넣어주면됩니다. 이렇게하고창에서마우스오른쪽버튼을이용해 Generate File... 을이용해파일변환을수행하면됩니다. 아래에서이러한작업의완료된모습을보여주고있습니다. 현재까지두메인디바이스에대한 PROM 파일변환작업을수행하였습니다. 사전에위와같이파일변환작업을하고전용다운로드케이블을이용하여프로그램수행을하면됩니다. 3) Configuration ROM을이용한 FPGA Verify (Verify) Configuration ROM에저장된프로그램데이터를이용하여 FPGA를동작시키는방법입니다. 이는 Configuration ROM에미리저장된소스가있을시이러한 Verify 동작이실행이됩니다. 이동작은초기에전원을켤때, 미리 RROM에저장된데이터가 FPGA 디바이스로전송되어데모소스가실행이되게됩니다. 또한 FPGA device module에있는 Reset 버튼을이용한 Verify 동작을수행해줄수있습니다. 만약 PROM에어떠한데이터가없을때, Power ON 동작및 Reset 버튼에의한동작은실행되지않습니다. HBE-COMBO II User s Manual and Lab Guide 27

28

제품사용하기 03 HBE-COMBO II User s Manual & Lab Guide 제품사용하기 3. 제품사용하기 3.1 Clock Control Block 1) 구성 장비내부에는 Clock control block이있어서사용자가원하는클럭을간단한스위치의조작으로입력받아사용할수있습니다. 이제어블록은오실레이터로입력되는 50MHz의클럭을별도의 CPLD에서 16분주하여 FPGA 디바이스모듈의입력전용핀으로분주된클럭이입력되고있습니다. 따라서사용자는 Clock Control Switch를이용하여 16개의클럭을선택할수있습니다. Clock Control Block의구성은 50 MHz의오실레이터와표시부, 클럭제어부의 3부분으로구성하고있습니다. 오실레이터부는전원공급으로주파수를생성하는장치로장비에서필요한클럭을생성하고있습니다. 표시부는 7-Segment와 LED로구성하고있고, 7-Segment에서는주파수값이 LED에는주파수대역 (MHz, KHz, Hz) 을표시하게됩니다. 클럭제어부는오실레이터에서나오는값을클럭제어스위치에따라 16분주하여 FPGA 디바이스모듈로전달하는역할을하고있습니다. [ 그림 3-1] Clock Control Block 구성 HBE-COMBO II User s Manual and Lab Guide 29

2) 동작 장비에서사용하는클럭은기본으로 Base board 에있는 50 MHz를가지고사용하게됩니다. 따라서클럭제어스위치를조절하면 7-Segment에현재 FPGA 디바이스모듈로공급되는클럭값이표시되고오른쪽에있는 LED를통해현재주파수대역을확인할수있습니다. 이스위치를조절하여 0 Hz ~ 50 MHz 의분주된클럭의값을 FPGA 디바이스모듈로전달되게됩니다. 또한 FPGA 디바이스모듈에는별도로오실레이터를꼽아사용할수있는소켓을구성해놓았습니다. 이소켓에는사용자가원하는값을가진오실레이터를장착해서사용할수있습니다. 따라서이자리에오실레이터를장착하고 User Clk EN 스위치를 On 하여사용하면됩니다. Main clock 과 User clock은서로다른입력전용핀으로연결이되어있으므로설계소프트웨어에서핀연결을하여사용하면됩니다. 오실레이터의출력클럭은다음에서확인할수있습니다. 표에서는 Clock Select 스위치에따른출력주파수를확인할수있습니다. 장비에서는출력클럭의확인은 3 개의 Segment 를이용하여주파수값을확인할수있고, Segment 옆에있는 3 개의 LED 를통해주파수대역을확인할수있습니다. 이처럼장비에서는손쉽게원하는클럭을제어하여 FPGA 디바이스로입력할수있습니다. Clock SW 클럭입력 Clock SW 클럭입력 Clock SW 클럭입력 Clock SW 클럭입력 0 0Hz 4 100Hz 8 10kHz C 1MHz 1 1Hz 5 500Hz 9 50kHz D 5MHz 2 10Hz 6 1kHz A 100kHz E 25MHz 3 50Hz 7 5kHz B 500kHz F 50MHz 30

제품사용하기 3) 회로도 4) 핀구성표 FPGA Signal Altera Xilinx Description CLK_MAIN[0] N1 A13 Main Clock Input CLK_MAIN[1] A13 C14 Main Clock Input CLK_USER[0] N2 B13 User Clock Input CLK_USER[1] B13 B14 User Clock Input 3.2 VFD (16 x 2 Line) 1) VFD란 VFD[Vacuum Fluorescent Display] 는형광표시판으로써 1960년도에개발되어전자계산기에적용되기시작하였으며, 80년대에다색화에성공하여여러색깔을만들어가고있습니다. 이모듈은 CRT의전자총역할을하는필라멘트에서항시방출되는전자를형광체에충돌시켜자체적으로발광시키는소자입니다. 따라서예전의 Text LCD에서보는백라이트에서보는것과달리하나의도트마다자체발광하여출력하는장치라할수있습니다. HBE-COMBO II User s Manual and Lab Guide 31

2) 특징 VFD는형광물질의조절로여러가지색의표시가용이하고, 자체적으로발광하기때문에시인성이뛰어납니다. 또한 LED등과비교시빛이부드러워눈의피로를덜고어두운곳이나밝은곳에서도문자식별이가능하며, 시야각또한우수하고저전압으로구동이가능하여부품의적용이쉬우며고신뢰성을가지고있습니다. 3) 구성 VFD 모듈의외부구조는아래의그림과같이 16문자 X 2의표시부를가지며표시부좌측에커넥터가위치한형태입니다. [ 그림 3-2] 16 x 2 VFD 사용되는인터페이스커넥터핀의기능을요약하면다음의표와같습니다. < 표 3-1> VFD 인터페이스핀 핀 신호명 기능 1 GND 전원 GND 2 V CC 전원 +5V 3 /RST Reset input 4 RS Register Select ( 0 = instruction, 1 = data ) 5 R/W Read/Write ( 0 = FPGA -> LCD, 1 : FPGA <- LCD ) 6 E Enable Signal for read/write LCD 7 DB0 (LSB) 8 DB1 9 DB2 10 DB3 11 DB4 32

제품사용하기 12 DB5 13 DB6 14 DB7 4) 동작타이밍 VFD 모듈은 FPGA로접속할때는각제어신호의동작타이밍을고려하여야합니다. VFD 모듈은과거의 Text LCD 보다동작타이밍에대한성능이우수해졌습니다. VFD 모듈의 read 및 write 동작시의타이밍도를보면아래의그림과같습니다. [ 그림 3-3] VFD 모듈의동작타이밍 VFD 모듈을사용하기위한제어명령을정리하면다음페이지와표와같습니다. 이들명령은 FPGA가 VFD 모듈을제어하는프로그램에서사용되며데이터버스 DB0~DB7 HBE-COMBO II User s Manual and Lab Guide 33

을통하여전송됩니다. VFD 모듈이각명령을받아이를실행하기위해서는지정된시간이필요하므로 FPGA는그다음의명령을보내기전에충분히대기하거나 busy flag을조사하여앞에서전송한제어코드의실행이완료되었는지의여부를확인하여야합니다. < 표 3-2> VFD 모듈제어명령 Instruction CODE RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Display Clear 0 0 0 0 0 0 0 0 0 1 Cursor Home 0 0 0 0 0 0 0 0 1 x Entry Mode Set 0 0 0 0 0 0 0 1 I/D S Display ON/OFF Control 0 0 0 0 0 0 1 D C B Cursor/Display Shift 0 0 0 0 0 1 S/C R/L x x Function Set 0 0 0 0 1 IF N x BR1 BR0 CGRAM Address Setting DDRAM Address Setting Busy Flag & Address Reading Busy Writing to CG or DDRAM Data Reading from CG or DDRAM 0 0 0 1 0 0 1 0 1 BF 1 0 1 1 34

제품사용하기 NOTE I/D = 1 : Increment I/D = 0 : Decrement S = 1 : Display shift enabled S = 0 : Cursor shift enabled S/C = 1 : Display shift S/C = 1 : Cursor move R/L = 1 : Shift to the right R/L = 0 : Shift to the left IF = 1 : 8bit IF = 0 : 4bit N = 1 : 2Lines display N = 0 : 1 Line display BR1, BR0 = 00 : 100% 01 : 75% 10 : 50% 11 : 25% BF = 1 : Busy ( Internally operation) BF = 0 : Not busy ( Instruction acceptable) [Abbreviation] DD-RAM : Display Data RAM CG-RAM : Character Generator RAM ACG : CG-RAM Address ADD : DD-RAM Address ACC : Address Counter HBE-COMBO II User s Manual and Lab Guide 35

Display Clear 전체화면을지우고어드레스카운터를 DD-RAM 어드레스 0으로하여커서를 home 위치로합니다. Cursor home DD RAM의내용은변경하지않고커서만을 home 위치로합니다. Entry mode set 데이터를 read하거나 write할경우에커서의위치를증가시킬것인가 (I/D=1) 감소시킬것인가 (I/D=0) 를결정하며, 또이때화면을시프트할것인지 (S=1) 아닌지 (S=0) 를결정합니다. Display ON/OFF control 화면표시를 ON/OFF 하거나 (D) 커서를 ON/OFF하거나 (C) 커서를깜박이게할것인지 (B) 의여부를지정합니다. Cursor/Display shift 화면 (S/C=1) 또는커서 (S/C=0) 를오른쪽 (R/L=1) 또는왼쪽 (R/L=0) 으로시프트합니다. Function set 인터페이스에서데이터의길이를 8비트 (DL=1) 또는 4비트 (DL=0) 로지정하고, 화면표시행수를 2행 (N=1) 또는 1행 (N=0) 으로지정하며, 화면의밝기를 BR1~0에의해 100%, 75%, 50%, 25% 로설정을해줄수있습니다. 전원투입후최초에는주로이명령을보내게됩니다. 또한, 4비트로인터페이스할경우에는 DB4~DB7을사용하며, 상위 4 bit를먼저전송하고다음에하위 4 bit를전송해야합니다. CGRAM address Setting Character Generator RAM의어드레스를지정합니다. 이후에송수신하는데이터는 CG RAM 의데이터입니다. DDRAM address Setting Display Data RAM의어드레스를지정합니다. 이후에송수신하는데이터는 DD RAM의데이터입니다. Busy flag & address Reading LCD 모듈이내부동작중임을나타내는 Busy Flag(BF) 및어드레스카운터의내용을 read 합니다. LCD 모듈이각제어코드를실행하는데지정된시간이필요하므로 FPGA가 BF를읽어 1일경우에는기다리고 0일경우다음제어코드를보내는방법을사용하면보다효율적인처리가가능합니다. Data Writing to CG or DDRAM CG-RAM 또는 DDRAM에데이터를쓰는동작을합니다. Data Reading from CG or DDRAM CG-RAM 또는 DDRAM에데이터를읽는동작을합니다. 36

제품사용하기 VFD 모듈을전원투입부터초기화하는과정을요약하면다음과같습니다. 전원을투입합니다. VFD 모듈이리셋되려면약 50ms가소요되므로이시간이상을기다립니다. Function set 명령 (001xxx00) 을보냅니다. Display ON/OFF control 명령 (00001xxx) 을보냅니다. Entry mode set 명령 (000001xx) 을보냅니다. DDRAM address를보냅니다. 문자데이터를연속으로보냅니다. 필요에따라위의과정을반복합니다. 5) DD RAM 어드레스 DD RAM은표시될각문자의 ASCII 코드데이터가저장되어있는메모리이며모두 80개의번지가있는데, 화면의각행과열의위치에는고유한 Address 값이부여됩니다. 그런데, 각행과행사이의어드레스가연속하여있지않으므로주의하여야한다. 표시문자의위치에대한 DD RAM의어드레스는 < 표 3-3> 과같습니다. < 표 3-3> 표시문자위치에대한 DD RAM 어드레스 1 16 제1행 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 제 2 행 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 6) 표시문자세트 VFD 모듈에서화면에표시할수있는문자의종류에는대부분의 ASCII 도형문자들이포함되며, 기타일본어의카타가나문자와몇가지특수문자들이포함됩니다. 00H~0FH의영역에는사용자정의문자를설정하여사용할수있다. 여기에는최대 8문자를정의할수있는데, 이에대한정보는전원이인가된후에정의되어야하며, 전원이꺼지면정의된내용은기억되지않습니다. VFD 모듈에서화면에표시할수있는문자중 ASCII 도형문자의종류와코드값을보면아래의표와같습니다. HBE-COMBO II User s Manual and Lab Guide 37

38 < 표 3-4> ASCII 도형문자의종류및코드

제품사용하기 7) 회로도 VFD 모듈은총 14개의핀으로구성되어있습니다. 여기에는전원및데어터전송, 컨트롤핀, reset핀으로구성되어있습니다. 회로도에나와있는것과같이전원은보드에서공급받아사용할수있도록구성되어있고, Reset 핀은하드웨어적으로는사용하고있지않습니다. VFD의사요을위해서는제어신호인 VFD_RS, VFD_RW, VFD_E의제어신호와데이터신호 8개를 FPGA에서직접제어하여 VFD를 Display 하게됩니다. 8) 핀구성표 FPGA Signal Altera Xilinx Description VFD_D[0] R7 R6 VFD DATA 0 VFD_D[1] R6 R5 VFD DATA 1 VFD_D[2] P3 P4 VFD DATA 2 VFD_D[3] R8 P3 VFD DATA 3 VFD_D[4] P6 P2 VFD DATA 4 VFD_D[5] P4 P1 VFD DATA 5 VFD_D[6] P9 P8 VFD DATA 6 VFD_D[7] P7 P7 VFD DATA 7 VFD_E R4 R7 VFD Enable VFD_RW R5 R8 VFD Read/Write VFD_RS R2 T8 VFD Register Select HBE-COMBO II User s Manual and Lab Guide 39

3.3 7-Segment Array 1) 구성 본제품에서사용된 4개의 7-Segment가하나로구성되어있는 7-Segment LED Array 두개를묶어다음그림과같은구성으로이루어져있습니다. a b c d e f g. com1 com2 com3 com4 com5 com6 com7 com8 [ 그림 3-4] 7-Segnent LED Array 구성 2) 동작일반적인방법에서의 7-Segment라면 8개를사용할경우하나의 7-Segment당출력인 a, b, c, d, e, f, g,. 가각각출력핀을가져 64개의출력핀이필요로하게됩니다. 이러할경우 FPGA의한정된핀을가지고 Segment에너무많은핀이할당되게되므로핀소모를개선하기위하여위와같이 7-Segment의 Data 라인은공통으로연결되어있고출력할위치인 7-Segment를지정하는 com1 ~ com8의값을제어하여원하는숫자나문자를표시하는방법을사용하게됩니다. 이렇게하면 16개의핀을가지고 8개의 7-Segment를제어하게됩니다. 따라서 8개의 7- Segment 중에 Display 하려는 Segment common 핀을선택하고동시에 Segment에 Data를주는형태로 7-Segment를제어할수있다. 아래의그림은 4개의 7-Segment에 1234 의숫자를표시하기위한방법을설명한것입니다. 40

제품사용하기 다시설명하면 7-segment 데이터값을 00000110 로주어 1 를표시하는값을주고 com1에 0 을그리고나머지 com2~4는 1 의값을주면첫째 7-Segment에 1 이표시됩니다. 다음으로데이터에 01011011 을주어 2 의값을주고 com2에 0 과 com1, com3~4 에 1 을주면둘째 7-Segment에 2가표시됩니다. 이런순서로 4까지의숫자를표시하고다시처음으로돌아가위의내용을반복합니다. 이를약 1ms 이상의주기로반복하면잔상효과에의해 1234 의숫자가모두켜져있는것처럼표시되게됩니다. 이러한형태로 8개의 7-segment를 com 핀을이용하여선택하고, 해당되는 data 값을줌으로써각각의 7-Segment의제어가가능하게됩니다. 3) 회로도 HBE-COMBO II User s Manual and Lab Guide 41

이전에설명했듯이회로도에서는 16개의핀을가지고 7개의 Segment를제어하고있습니다. 위쪽에있는 SEG_C의 8개의핀을이용하여각각의 Segment를선택하게됩니다. 그리고데이터핀인 SEGA~SEGDP의핀을제어하여 7-Segment를제어하게됩니다. 이모든작업은 FPGA 디바이스와연결된 I/O핀에서제어를하면됩니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description SEG_COM[0] Y1 AD2 Segment 1 Select SEG_COM[1] Y4 W2 Segment 2 Select SEG_COM[2] Y3 A1 Segment 3 Select SEG_COM[3] W1 AB4 Segment 4 Select SEG_COM[4] Y5 AB3 Segment 5 Select SEG_COM[5] W3 W6 Segment 6 Select SEG_COM[6] W2 W5 Segment 7 Select SEG_COM[7] V1 W4 Segment 8 Select SEG_DATA[0] AF5 AF5 Segment data A SEG_DATA[1] AE5 AE5 Segment data B SEG_DATA[2] AD6 AB6 Segment data C SEG_DATA[3] AC6 AA6 Segment data D SEG_DATA[4] AA2 K26 Segment data E SEG_DATA[5] AA1 K25 Segment data F SEG_DATA[6] AA6 AC2 Segment data G SEG_DATA[7] AA5 AC1 Segment data H 42

제품사용하기 3.4 LED 1) 구성 LED는 Bit 출력을확인하거나동작의상태를표시하기위해사용하는데본제품에서는 8개의 DIP 타입의 LED를제공하고있습니다. 또한사용자가보는시인성을좋게하기위해고휘도 LED를사용하고있습니다. 아래그림은 LED에대한블록도를보여주고있습니다. LED1 LED2 LED3 FPGA DEVICE LED4 LED5 LED6 LED7 LED8 [ 그림 3-5] LED 블록도 2) 동작 LED의입력단에디지털신호 1 에해당하는입력이인가될경우 LED에불이들어오게됩니다. 초기의전원인가시 LED의특성상미세한전류의흐름에의해서도희미하게 LED가켜지는경우가있는데이것은제품의문제가아니며프로그램되지않는디바이스의잔류전류가나와서이러한현상이일어나게됩니다. 이러한증상은툴을통한디바이스를프로그램을끝내고디바이스가동작을시작하면 LED는정상적으로동작하게됩니다. 3) 회로 HBE-COMBO II User s Manual and Lab Guide 43

LED는회로도에서보는것과같이 8개의 LED가각각의 FPGA의 I/O 핀과시리얼저항에연결되어있음을볼수있습니다. 따라서 FPGA에연결된부분에 1 이라는신호를주어 LED를제어할수있도록구성하였습니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description LED_D(0) AF7 AB7 D1 LED display LED_D(1) AE7 AA7 D2 LED display LED_D(2) AB8 AE7 D3 LED display LED_D(3) W8 AC7 D4 LED display LED_D(4) AF6 AD6 D5 LED display LED_D(5) AE6 AC6 D6 LED display LED_D(6) AD7 AF6 D7 LED display LED_D(7) AC7 AE6 D8 LED display 44

제품사용하기 3.5 Dot matrix LED 1) 구성본제품에사용된 Dot matrix LED 모듈은 5열x7행dot LED 4개를조합하여 10개의열과 14개의행으로구성하고있습니다. 이는영문, 숫자및한글까지표현할수있도록구성할것입니다. Dot matrix LED 모듈의구성은아래의그림과같습니다. [ 그림 3-6] Dot matrix LED 구성 Dot_d0~dot_d13은해당열에표시될데이터입력이되며데이터값은 1 의값을가질경우켜지게됩니다. dot_scan0~dot_scan9는 dot_d0~dot_d13의데이터를표시할열의위치를지정하는입력이며 1 의값을가질때해당열이선택됩니다. 예를들어 1행 1열의 dot LED를켜기위해서는 dot_d0의값을 1 로입력하고 dot_scan0 의값을 1 으로할때 1행 1열의 dot LED가켜지게됩니다. 이런방법으로 dot의 scan 라인을선택하고, 해당되는라인에 data값을주어서 dot를 display하게됩니다. 이것도 7-Segment와같이 1ms 이상의주기로반복해서 display 하게되면눈의잔상효과로인해서모든 dot가 display 되어있는것처럼느끼게됩니다. 이러한구동방식은 7- Segment의 scan 방식과비슷한구조를가지고있습니다. 2) 동작다음은아래그림의한글과영문을동시에 display하기위한방법에대해살펴보겠습니다. 처음으로 dot_d13~dot_d0에 00000001100010 인첫째열의데이터를입력하고 dot_scan9~ dot_scan0에 1111111110 의값을입력하면첫째열의원하는 dot LED가켜지 HBE-COMBO II User s Manual and Lab Guide 45

게됩니다. 둘째로 dot_d13~dot_d0에 11110010010010 인둘째열의데이터를입력하고 dot_scan9~dot_scan0에 1111111101 의값을입력하면둘째열의원하는 dot LED가켜지게됩니다. 이를열다섯번째열까지반복하며, 반복되는주기를약 1m초이하로해서반복하게되면눈의잔상효과에의해서 한 이라는글자가 dot matrix LED 모듈에표시됩니다. 이를정리하면다음과같습니다. 구분 dot_d13~dot_d0 dot_scan9~dot_scan0 0 열 00000001100010 1111111110 1 열 11110010010010 1111111101 2 열 10000100001010 1111111011 3 열 10000100001011 1111110111 4 열 10000100001010 1111101111 5 열 10000010010010 1111011111 6 열 10000001100010 1110111111 7 열 10000000000000 1101111111 8 열 10001111111110 1011111111 9 열 10000000100000 0111111111 46

제품사용하기 3) 회로 회로에서보는것과같이 5 X 7의 Dot LED 4개를사용하고있고, 행과열의데이터라인을공통으로사용하고있는모습을볼수있습니다. 따라서행과열의신호가서로일치되는구간에서 Dot의 LED에불이들어오게됩니다. 현재장비에서는동작을스캔라인과데이터라인으로구분지어동작시키고있습니다. 따라서스캔라인을하나씩일정한주기로시프트시키고, 해당되는스캔라인에데이터를입력하는방식으로되어있습니다. HBE-COMBO II User s Manual and Lab Guide 47

4) 핀구성표 FPGA Signal Altera Xilinx Description DOT_D[0] U3 U4 DOT DATA 0 DOT_D[1] U6 U3 DOT DATA DOT_D[2] U5 U2 DOT DATA DOT_D[3] U9 T2 DOT DATA DOT_D[4] U7 T1 DOT DATA DOT_D[5] T2 U7 DOT DATA DOT_D[6] U10 U6 DOT DATA DOT_D[7] T6 T7 DOT DATA DOT_D[8] T3 T6 DOT DATA DOT_D[9] T8 T5 DOT DATA DOT_D[10] T7 T4 DOT DATA DOT_D[11] T10 R3 DOT DATA DOT_D[12] T9 R2 DOT DATA DOT_D[13] R3 R1 DOT DATA DOT_COM[0] W4 W3 DOT COM LINE 1 DOT_COM[1] V3 V4 DOT COM LINE 2 DOT_COM[2] V2 V3 DOT COM LINE 3 DOT_COM[3] V5 V2 DOT COM LINE 4 DOT_COM[4] V4 W7 DOT COM LINE 5 DOT_COM[5] V7 U1 DOT COM LINE 6 DOT_COM[6] V6 V7 DOT COM LINE 7 DOT_COM[7] U2 V6 DOT COM LINE 8 DOT_COM[8] U1 V5 DOT COM LINE 9 DOT_COM[9] U4 U5 DOT COM LINE 10 48

제품사용하기 3.6 Keypad 1) 구성입력으로구성되는첫번째의장치로키패드가있습니다. 아래의그림에서는이러한 Keypad의구성을보여주고있습니다. 소스로사용되는스위치는 4x3 키패드와 6개 Button 스위치, 16개의단자로구성된 Dip 스위치로구성되어있습니다. [ 그림 3-7] Keypad 구성 2) 동작 Keypad는 3x4의 12개의키를입력받아서사용할수있도록구성해놓았습니다. 이러한키입력방식은스캔방식구조로써가로라인과세로라인에서동시에제어하여입력을받아사용할수있도록구성하고있습니다. 현재장비에서는기본적으로 Keypad의 common 핀을스캔으로구동시키게구성되어있습니다. 따라서 3개의 common핀을 FPGA 디바이스에서스캔형식으로 1의값을시프트시키면서해당되는 row 값에입력되는값을보고 Keypad에어떠한값이입력되었는지알수있도록구성되어있습니다. 현재의 Keypad의입출력방향은 Scan Dir의헤더핀을이용하여바꿀수있습니다. 따라서 common을 FPGA 디바이스에서스캔형식으로구동할지, row 핀을스캔형식으로구동시킬지는 Scan Dir에점퍼캡을이용하여제어할수있습니다. HBE-COMBO II User s Manual and Lab Guide 49

3) 회로 회로에서보는것과같이 3x4의 Keypad의 12개의버튼을입력받아사용할수있는장치를사용하고있습니다. 여기에는모두풀다운저항을사용하고있어서모든데이터라인에기본적으로 0 의값을가지고있습니다. 여기에서는양방향버퍼를사용하여 common과 row의데이터라인의입, 출력방향을바꿀수있습니다. 따라서현재 50

제품사용하기 기본으로나가는 common의입력형태를 Scan Dir의점퍼캡을이용으로출력으로바꾸어서사용이가능합니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description KEYPAD_COLUMN[0] V11 Y12 Column Data 0 KEYPAD_COLUMN[1] AB10 Y11 Column Data 1 KEYPAD_COLUMN[2] AA10 W11 Column Data 2 KEYPAD_ROW[0] AD10 AD10 Row Data 0 KEYPAD_ROW[1] AC10 AC10 Row Data 1 KEYPAD_ROW[2] V10 AB10 Row Data 2 KEYPAD_ROW[3] AF9 AA10 Row Data 3 HBE-COMBO II User s Manual and Lab Guide 51

3.7 Button Switch 1) 구성 버튼스위치는 6개로구성이되어있으며각버튼스위치가별도의 FPGA I/O와연결이되어있습니다. 아래의그림은이러한 Button Switch의블록도를보여주고있습니다. A C B D Button SW A Button SW B Button SW C Button SW D Button SW E Button SW F E F [ 그림 3-8] Push Button Switch 구성 2) 동작버튼스위치마다별개의 I/O로직접연결이되어있으므로 Keypad 보다제어를간단하게할수있습니다. 버튼스위치는키가눌려질때발생하는채터링현상을방지하기위한회로가내장되어정확한입력이가능하도록구성하였습니다. 3) 회로회로도에서보는것과같이저항과캐패시터를사용한채터링방지회로가내장되어있습니다. 현재회로에서는스위치가안눌려졌을때, 저항의풀업저항에의해 +3.3V 즉 1 의값이가지게됩니다. 따라서 FPGA 쪽으로가는신호는 74LCX14에의해반전되어 0 의값이 FPGA 디바이스에입력되게됩니다. 반대로스위치가눌려졌을때는신호선이 GND와연결되어스위치에서는 0 의값을가지게되고 FPGA 디바이스로가는최종데이터는 74LCX14에의해 1 의값이됩니다. 52

제품사용하기 4) 핀구성표 FPGA Signal Altera Xilinx Description BUTTON_SW[0] Y10 AD10 Detected High BUTTON_SW[1] W10 AC10 Detected High BUTTON_SW[2] AA9 AA9 Detected High BUTTON_SW[3] V9 Y9 Detected High BUTTON_SW[4] AE9 Y10 Detected High BUTTON_SW[5] AC9 AB9 Detected High HBE-COMBO II User s Manual and Lab Guide 53

3.8 Bus Switch 1) 구성버스스위치는입력의경우데이터입력이나모드설정등의입력소스로주로사용하게됩니다. 여기에서는 8개의딥스위치를 2개사용하여총 16개의버스스위치를제어할수있는구조를가지고있습니다. 아래그림은이에대한간단한구성을보여주고있습니다. DIP SW Bus SW15 Bus SW14 Bus SW13 Bus SW12 Bus SW11 Bus SW10 Bus SW9 Bus SW8 Bus SW7 Bus SW6 Bus SW5 Bus SW4 Bus SW3 Bus SW2 Bus SW1 Bus SW0 [ 그림 3-9] Bus Switch 구성 2) 동작버스스위치의경우데이터의입력이나모드설정의스위치로동작을하게되므로버튼의설정이고정되는형태를취하고있습니다. 동작은스위치를위로올리면디바이스쪽에서 1 의값을인식하고내리면반대로 0 의값이전달되는동작을하고있습니다. 이스위치는버튼스위치나키패드처럼키가리셋되지않고그상태를유지를하고있기때문에사용하지않을때는스위치를 OFF하여디바이스에필요치않는입력을주지않도록하여디바이스의손상을줄여야합니다. 3) 회로 버스스위치의회로는 [ 그림 3-9] 와같이구성이되어있습니다. 스위치의 OFF시 4.7K 의풀다운저항에의해 0 의값이 FPGA 디바이스에전달되게됩니다. 또한스위치가 ON 되면스위치에서 +3.3V와연결이되어 FPGA 디바이스로 1 의값이전달되어 54

제품사용하기 HIGH 값을인식하게됩니다. 스위치와디바이스의연결은바로연결되는것이아니라버퍼를통해디바이스의 I/O로연결이되어있습니다. 이러한것은다른출력장치와달리스위치의경우 FPGA 디바이스로입력신호를보내는역할, 즉 FPGA 디바이스는스위치에서신호를입력받아사용하는장치이므로신호의입력시전압이불안정할때디바이스가손상을입을수있습니다. 따라서버퍼를통해연결을하여이러한문제점으로부터디바이스의손상을줄이고있습니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description DIP_D[0] Y13 Y16 Bus Switch Data 0 DIP_D[1] AB12 AB15 Bus Switch Data 1 DIP_D[2] AA12 AA15 Bus Switch Data 2 DIP_D[3] AD12 AE15 Bus Switch Data 3 DIP_D[4] AC12 AD15 Bus Switch Data 4 DIP_D[5] U12 AF13 Bus Switch Data 5 DIP_D[6] AE11 AA13 Bus Switch Data 6 DIP_D[7] Y12 W15 Bus Switch Data 7 DIP_D[8] W12 AB14 Bus Switch Data 8 DIP_D[9] AA11 AF12 Bus Switch Data 9 DIP_D[10] Y11 AE12 Bus Switch Data 10 DIP_D[11] AD11 Y13 Bus Switch Data 11 DIP_D[12] AC11 W13 Bus Switch Data 12 DIP_D[13] AF10 W12 Bus Switch Data 13 DIP_D[14] AE10 AC11 Bus Switch Data 14 HBE-COMBO II User s Manual and Lab Guide 55

56 DIP_D[15] W11 AD12 Bus Switch Data 15

제품사용하기 3.9 Piezo 1) 구성 소리를출력하는장치로흔히사용하는것이스피커인데스피커의경우소리의높낮 이와주파수를조정하여원하는소리를출력할수있게구성되어있습니다. 이외에사 용할수있는것이 Piezo인데소리의높낮이는고정되어있고단지소리의주파수를 조정할수있도록구성되어있는음성출력장치입니다. 장비에서는 FPGA I/O 핀한 개와연결되어있고, 이핀에주파수를조절하여주면 Piezo 소리를조절할수있습니 다. 2) 동작 Piezo는디지털신호 1 에해당하는입력레벨의음성주파수대의펄스신호를입력하 면해당주파수소리를출력하게됩니다. 따라서 Piezo에 1 의값만입력함으로써 Piezo를동작시키는것이아니라, 주파수를조절하여 Piezo를동작시킬수있습니다. 그러나 Piezo의일반적인주파수특성에의해약 10KHz 이상의주파수에서는소리를 내지않게됩니다. 그리고같은전압레벨에서도주파수에따라소리의강약이달라지 는특성을가지고있습니다. 다음은옥타브및음계별주파수를정리한것입니다. < 표 3-5> Piezo 옥타브및음계별주파수 ( 단위 : Hz) Oct 0 1 2 3 4 5 6 7 A 27.5000 55.0000 110.0000 220.0000 440.0000 880.0000 1760.000 3520.000 Bb 29.1352 58.2705 116.5409 233.0819 466.1638 932.3275 1864.655 3729.310 B 30.8677 61.7354 123.4708 246.9417 493.8833 987.7666 1975.533 3951.066 C 32.7032 65.4064 130.8128 261.6256 523.2511 1046.502 2093.005 4186.009 Db 34.6478 69.2957 138.5913 277.1826 554.3653 1108.731 2217.461 4434.922 D 36.7081 73.4162 146.8324 293.6648 587.3295 1174.659 2349.318 4698.636 Eb 38.8909 77.7817 155.5635 311.1270 622.2540 1244.508 2489.016 4978.032 E 41.2034 82.4069 164.8138 329.6276 659.2551 1318.510 2637.020 5274.041 F 43.6535 87.3071 174.6141 349.2282 698.4565 1396.913 2793.826 5587.652 Gb 46.2493 92.4986 184.9972 369.9944 739.9888 1479.978 2959.955 5919.911 G 48.9994 97.9989 195.9977 391.9954 783.9909 1567.982 3135.963 6271.927 Ab 51.913 103.8262 207.6523 415.3047 830.6094 1661.219 3322.438 6644.875 HBE-COMBO II User s Manual and Lab Guide 57

참고 : C= 도, D= 레, E= 미, F= 파, G= 솔, A= 라, B= 시 (C음행/3옥타브열의 261.6256Hz가피아노의중앙 C음에해당함.) 3) 회로 Piezo의회로에서는 FPGA에서주파수신호를받아소리는내는장치로위그림과같은회로를구성하고있습니다. 기본적으로는 Piezo에는 +3.3V의 High 신호가 74LCX14 에의해반전되어 FPGA에서아무런신호가없으면 Piezo에는 0 의신호가기본으로들어가게되어아무런소리가들리지않습니다. 현재회로에서는딥스위치를사용하여 FPGA와 Piezo간의신호를연결할것인지결정하게됩니다. 이러한딥스위치의역할은 Piezo를구동하지않을때연결라인의잡음에의해 Piezo에동작되는것을방지해주고있습니다. 따라서 Piezo를구동하지않을때는딥스위치를 OFF하여잡음으로인한동작이안되게해주어야합니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description PIEZO F4 H2 Speaker control 58

제품사용하기 3.10 SRAM 1) 구성본제품에는디바이스내부에서메모리영역으로사용하는공관이외에별도로 256Kx16 Bit, 총 4M bit의 High Speed SRAM을기본으로제공하고있습니다. 이처럼 COMBO II에서는 SRAM을통한메모리영역을확장해서사용할수있습니다. 그림에서 SRAM과 Flash Memory의구성을보여주고있으며, [ 그림 3-10] 에서와같이각각의메모리가독립적으로동작할수있도록각각의라인이분리되어있습니다. [ 그림 3-10] SRAM 블록구성 2) 동작 여기서제공되는 SRAM (Static Random Access Memory) 과 Flash Memory는각각 FPGA I/O 와연결되어있기때문에 SRAM을제어하기위해서는 FPGA 핀설정과제어회로를설계해주어야합니다. 이렇게컨트롤핀설정을통하여메모리영역의제어가이루어집니다. 다음그림에서는 SRAM에서의 READ와 WRITE에대한동작사이클의모습을보여주고있습니다. HBE-COMBO II User s Manual and Lab Guide 59

[ 그림 3-11] SRAM read cycle 3) 회로 SRAM은위의그림과같은회로를구성하고있습니다. 여기에서는 18개의 Address라인과 16개의 Data 라인으로구성되어있고, 3개의제어신호를통해 SRAM을제어하고있습니다. SRAM의모든제어신호는 FPGA 디바이스와직접연결되어있고, FPGA 디바이스에서 SRAM 핀을제어하여내부에읽고, 쓰고하는작업을하게됩니다. 60

제품사용하기 4) 핀구성표 FPGA Signal Altera Xilinx Description SRAM_ADD[0] E1 F6 SRAM Address 0 SRAM_ADD[1] F7 F5 SRAM Address 1 SRAM_ADD[2] E5 G2 SRAM Address 2 SRAM_ADD[3] E2 G1 SRAM Address 3 SRAM_ADD[4] D2 E4 SRAM Address 4 SRAM_ADD[5] D1 E3 SRAM Address 5 SRAM_ADD[6] C3 D2 SRAM Address 6 SRAM_ADD[7] C2 D1 SRAM Address 7 SRAM_ADD[8] B5 D5 SRAM Address 8 SRAM_ADD[9] A5 C5 SRAM Address 9 SRAM_ADD[10] D6 A4 SRAM Address 10 SRAM_ADD[11] C6 E5 SRAM Address 11 SRAM_ADD[12] B6 E6 SRAM Address 12 SRAM_ADD[13] A6 D6 SRAM Address 13 SRAM_ADD[14] D7 B5 SRAM Address 14 SRAM_ADD[15] C7 A5 SRAM Address 15 SRAM_ADD[16] B7 A6 SRAM Address 16 SRAM_ADD[17] A7 F7 SRAM Address 17 SRAM_DQ[0] H8 C6 SRAM Data 0 SRAM_DQ[1] E8 B6 SRAM Data 1 SRAM_DQ[2] D8 B7 SRAM Data 2 SRAM_DQ[3] C8 A7 SRAM Data 3 SRAM_DQ[4] B8 E7 SRAM Data 4 SRAM_DQ[5] A8 D7 SRAM Data 5 SRAM_DQ[6] K9 G9 SRAM Data 6 SRAM_DQ[7] J9 F9 SRAM Data 7 SRAM_DQ[8] G9 B8 SRAM Data 8 SRAM_DQ[9] F9 A8 SRAM Data 9 SRAM_DQ[10] D9 E10 SRAM Data 10 SRAM_DQ[11] C9 D10 SRAM Data 11 SRAM_DQ[12] B9 G10 SRAM Data 12 SRAM_DQ[13] A9 F10 SRAM Data 13 SRAM_DQ[14] J10 G11 SRAM Data 14 SRAM_DQ[15] H10 F11 SRAM Data 15 \SRAM_OE G10 C10 Output Enable \SRAM_WE F10 H11 Write Enable \SRAM_CS E10 H12 Chip Select HBE-COMBO II User s Manual and Lab Guide 61

3.11 Step Motor 1) 구조 COMBO II 장비에서는모터의구동원리학습을위한스테핑모터구성을제공합니다. 이모터는 A, B, /A, /B 4개의데이터라인을가지고모터동작을제어하고, 모터로들어가는데이터라인의주파수높고낮음에따라서모터의회전속도를제어할수있습니다. 2) 동작 모터제어를할수있도록일반적으로많이사용하는스텝모터가설치되어있습니다. 위상제어를위해 FPGA I/O가 TR을통해연결되어있으며, 모터의제어는여자방식에따라세가지방식으로제어가가능합니다. 1상여자, 2상여자, 1-2상여자방식이있고, 이중 1-2 여자방식은고-분해능의이점을기지고있습니다. 다음의표에서는모터를제어하기위한데이터의흐름을표로보여주고있습니다. 각각의데이터라인에다음가같은표를순차적으로인가하여모터를회전시킬수있습니다. 1상여자 구분 1 2 3 4 5 6 7 8 9 A 1 0 0 0 1 0 0 0 1 B 0 1 0 0 0 1 0 0 0 /A 0 0 1 0 0 0 1 0 0 /B 0 0 0 1 0 0 0 1 0 1 주기 2 상여자 구분 1 2 3 4 5 6 7 8 9 A 1 0 0 1 1 0 0 1 1 B 1 1 0 0 1 1 0 0 1 /A 0 1 1 0 0 1 1 0 0 /B 0 0 1 1 0 0 1 1 0 1 주기 1-2 상여자 62

제품사용하기 구분 1 2 3 4 5 6 7 8 9 A 1 1 0 0 0 0 0 1 1 B 0 1 1 1 0 0 0 0 0 /A 0 0 0 1 1 1 0 0 0 /B 0 0 0 0 0 1 1 1 0 1 주기 FPGA에서의모터제어는위표중하나의여자방식을선택하여모터에신호를제공하여모터를동작하게합니다. 3) 회로 회로에서보는것과같이 A, B, /A, /B 4개의데이터라인이 FPGA로부터모터로입력되는모습을보여주고있습니다. 모터에서는 FPGA로부터출력되는전류가작기때문에 HBE-COMBO II User s Manual and Lab Guide 63

중간에 NPN 트랜지스터를사용, 전류를증폭하여모터로보내게됩니다. 따라서모터에사용할수있는전류로증폭이되어모터의동작이이루어지게됩니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description STEP_DATA[0] AD8 Y8 Motor Data A STEP_DATA[1] AC8 AF7 Motor Data B STEP_DATA[2] AF8 AF8 Motor Data \A STEP_DATA[3] AE8 AE8 Motor Data \B Motor Sensor M5 N1 Detected High 64

제품사용하기 3.12 IrDA 1) 구성 COMBO II에서는 HSDL-3600시리즈의적외선모듈을사용하여 IrDA 블록을구성하고있습니다. 이모듈내부에는적외선수신및발신을하는장치가내부에포함되어있습니다. 또한 IrDA 모듈의통신모드를제어하기위해주변저항을통해모듈의모드설정을해주고있습니다. FPGA 디바이스에서는통신에해당되는데이터선인 TX, RX 에해당되는부분만연결이되어있습니다. 2) 동작 HSDL-3600모듈에서는 Mode와 FIR_SEL핀을통해 RX, TX의모드를설정해줄수있습니다. 아래의표에서핀의설정에따른모드의변화를보여주고있습니다. 기본모드는 RX Function이 SIR로되어있고, TX Function이 Full Distance Power로설정되어있습니다. HBE-COMBO II User s Manual and Lab Guide 65

< 표 3-6> HSDL-3600 모드 Mode 0 Mode 0 FIR_SEL RX Function TX Function 1 0 X Shutdown Shutdown 0 0 0 SIR Full Distance Power 0 1 0 SIR 2/3 Distance Power 1 1 0 SIR 1/3 Distance Power 0 0 1 MIR/FIR Full Distance Power 0 1 1 MIR/FIR 2/3 Distance Power 1 1 1 MIR/FIR 1/3 Distance Power 3) 회로 회로에서보듯이 IrDA 블록에서 FPGA와데이터가연결되어있는핀은 RX, TX의통신에관여한두핀만연결이되어있습니다. 나머지는저항에의한풀업, 풀다운모드설정을위한부분과연결이되어있습니다. 모드는앞서설명한것과같이 RX Function 은 SIR로되어있고, TX Function은 Full Distance Power로설정되어있습니다. 따라서사용자는 RX, TX에대한신호데이터를 FPGA에서생성하여보내고받는동작에대한확인을하면됩니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description IrDA_RXD N9 P6 Receiver Data Output IrDA_TXD M2 P5 Transmitter Data Input 66

제품사용하기 3.13 UART 1) 구성본제품에는 PC의 RS232( 시리얼 ) 포트와연결하여시리얼데이터통신을할수있도록하는 Male타입의 9핀커넥터를 2개제공하고있습니다. 따라서동시에 2개의통신포트를통해상호간의통신을할수있고, 장비내부에있는장치를제어할수있습니다. 2) 동작제품에서사용된시리얼인터페이스용디바이스는 Maxim사의 MAX3232계열을사용하여최대 1Mbps의데이터를송수신할수있도록구성하였으며, 데이터포트는 RXD, TXD의두포트를사용하도록하였습니다. 3) 회로 회로에서보는것과같이 MAX3232 디바이스를사용하여최대 1Mbps 성능의통신속도를보여주고있습니다. 또한전압레벨로 +3.0~+5.5V의전압을지원해주고, 동시에 2개의 UART를제어할수있는디바이스입니다. 현재 2개의시리얼케이블을장착할수있는커넥터에 MAX3232 디바이스를통해 FPGA 디바이스와연결되어있어통신 HBE-COMBO II User s Manual and Lab Guide 67

실험을할수있도록지원하고있습니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description UART_TXD0 L3 N7 Transmitter Data Input UART_RXD0 L7 N5 Receiver Data Output UART_TXD1 L6 N8 Transmitter Data Input UART_RXD1 L9 N6 Receiver Data Output 68

제품사용하기 3.14 USB/Serial 포트 1) 구성본장비에서 USB 포트는시리얼통신을할수있는포트입니다. 따라서 RS232 포트를통한통신실험이아닌 USB 포트를이용한시리얼통신실험을할수있는블록입니다. 이러한구성은현재 PC의 RS232포트가 USB 포트로변화하는장비에서도시리얼통신을할수있도록하는 USB 포트를구성하고있습니다. 2) 동작 COMBO II에서는 FT232 디바이스를사용하여 USB를통한 Serial 데이터통신기능을지원하고있습니다. UART와비슷한핀구조로연결되어있고, FPGA 디바이스에서는 UART 2와핀이 common으로연결되어있습니다. 따라서 UART 2 와 USB는공통의 FPGA 디바이스핀제어가가능합니다. USB 포트를사용하기위해서는먼저 http://www.ftdichip.com/ 에서 FT232R에대한드라이버를먼저설치하여야합니다. 아래그림에서사이트의다운로드센터를확인할수있습니다. HBE-COMBO II User s Manual and Lab Guide 69

3) 회로 회로에서보는것과같이 USB에서입력되는데이터핀이 FT232 디바이스를통해바로 FPGA 디바이스로연결되어있습니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description USB_TXD L3 N7 Transmitter Data Input USB_RXD L7 N5 Receiver Data Output 70

제품사용하기 3.15 VGA 1) 구성 HBE-COMBO II는 FPGA I/O에컬러 VGA 모니터를구동할수있도록 ( 디지털 RGB를아날로그 RGB 신호변환해줄수있는 ) D/A Converter가연결되어있습니다. [ 그림 3-12] 는데이터의흐름에대한블록도를보이고있습니다. BLUE RED GREEN D/A 컨버터 BLUE[7..0] RED[7..0] GREEN[7..0] Control FPGA HSYNC VSYNC [ 그림 3-12] VGA 블록구성 2) 동작 VGA 모니터를구동하기위해 FPGA 디바이스에서 D/A 컨버터로 R ( 빨강 ), G ( 녹색 ), B ( 파랑 ) 색깔별로 8개의데이터라인이연결되어있습니다. 이러한 D/A 컨버터를통해다양한색깔을표현할수있고, 1024x768 해상도에최대 24-비트 RGB 컬러를구현할수있도록구성되어있습니다. 사용된 D/A 컨버터의특징은다음과같습니다. Triple 8-Bit D/A Converters Minimum 80 MSPS Operation Direct Drive of Doubly-Terminated 75-W Load Into Standard Video Levels 3 8 Bit 4:4:4, 2 8 Bit 4:2:2 or 1 8 Bit 4:2:2 (ITU-BT.656) Multiplexed YPbPr/GBR Input Modes Bi-Level (EIA) or Tri-Level (SMPTE) Sync Generation With 7:3 Video/Sync Ratio Integrated Insertion of Sync-On-Green/Luminance or Sync-On-All Channels Configurable Blanking Level Internal Voltage Reference High-Definition Television (HDTV) Set-Top Boxes/Receivers High-Resolution Image Processing Desktop Publishing HBE-COMBO II User s Manual and Lab Guide 71

Direct Digital Synthesis/I-Q Modulation 디바이스에대한보다자세한설명은데이터시트를참고로하도록합니다. VGA 블록은 FPGA에서 VGA D/A Driver를제어하는회로와 VGA 모니터동기신호 (Hsync/V-sync) 를생성해주는회로를설계해주어야하며, 동시에이와관련된 I/O 핀을 적절히지정해주어야합니다. 모니터동기신호는구현하고자하는해상도에따라그 출력주파수도달라지며, 동시에 D/A 컨버터입력클럭도수정되어야합니다. 1024x768 해상도를구현하기위해서는구동클럭이 65MHz가되어야합니다. 다음표는해상도에따른 VGA 동작타이밍과기타유용한정보를보이고있습니다. < 표 3-7> VGA 동작타이밍 구분 해상도 640 X 480 800 X 600 1024 X 768 A Line Period 32.8us 26.4us 20.7us B Hsync Sync Period 3.8us 3.2us 2.1us C Hsync Back Porch 1.9us 2.2us 2.5us D Active Video 25.4us 20us 15.7us E Hsync Front Porch 0.6us 1us 0.4us F Frame Period 16.7ms 16.58ms 16.67ms G Vsync Sync Period 0.05ms 0.1ms 0.12ms H Vsync Back Porch 1ms 0.6ms 0.6ms I Active Frame 15.3ms 15.84ms 15.88ms J Vsync Front Porch 0.3ms 0.02ms 0.06ms 비디오신호는라인수평동기신호와수직동기신호로구성됩니다. 해상도에따라수평동기신호는 640, 800, 1024 픽셀로구성되며, 수직동기신호는 480, 600, 768 픽셀이됩니다. Blankn 신호가비디오 DAC 출력 (R, G, B) 가 0 임을출력합니다. 수평동기신호 (HS) 는새로운라인의시작을의미하고, 수직동기신호 (VS) 는새로운프레임의시작을나타냅니다. 72

제품사용하기 [ 그림 3-13] 수평동기및수직동기 < 표 3-8> Video Settings 해상도 640 X 480 800 X 600 1024 X 768 Video clock 25.2MHz 40MHz 65MHz Horizontal Resolution 640 800 1024 Vertical Resolution 480 600 768 Hsync Pulse Width 95 128 136 Hsync Back Porch width 40 88 160 Hsync Front Porch width 25 40 24 Vsync Pulse Width 2 4 6 Vsync Back Porch Width 22 23 29 Vsync Front Porch Width 10 1 3 그리고 H.Sync ( 수평동기 ) 와 V.Sync ( 수직동기 ) 는각각주사선의수평, 수직동기를맞추 HBE-COMBO II User s Manual and Lab Guide 73

기위한신호로이동기신호가적절해야만정상적인화면을표현할수있습니다. 따라서, H.Sync와 V.Sync에적절히동기시켜 RGB 데이터를입력함으로모니터내의원하는위치에데이터를표현할수있습니다. 3) 회로 회로에서보는것과같이 THS8134의 D/A 컨버터를이용하여모니터를제어합니다. FPGA 디바이스로부터 R ( 빨강 ), G ( 녹색 ), B ( 파랑 ) 세가지색깔에대한 8-bit 데이터를 THS8134 디바이스로전달하고이러한데이터값을변환하여모니터의색깔을제어하 74

제품사용하기 고있습니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description VGA_BLUE[0] K6 M6 Blue/Pr pixel data 0 VGA_BLUE[1] J1 L6 Blue/Pr pixel data 1 VGA_BLUE[2] K8 L5 Blue/Pr pixel data 2 VGA_BLUE[3] J3 L4 Blue/Pr pixel data 3 VGA_BLUE[4] J2 L2 Blue/Pr pixel data 4 VGA_BLUE[5] J6 K2 Blue/Pr pixel data 5 VGA_BLUE[6] J4 K1 Blue/Pr pixel data 6 VGA_BLUE[7] J8 L8 Blue/Pr pixel data 7 VGA_RED[0] J7 L7 Red/Pr pixel data 0 VGA_RED[1] H2 K6 Red/Pr pixel data 1 VGA_RED[2] H1 K5 Red/Pr pixel data 2 VGA_RED[3] H4 K4 Red/Pr pixel data 3 VGA_RED[4] H3 K3 Red/Pr pixel data 4 VGA_RED[5] G1 J4 Red/Pr pixel data 5 VGA_RED[6] H6 J3 Red/Pr pixel data 6 VGA_RED[7] G3 J2 Red/Pr pixel data 7 VGA_GREEN[0] G2 K7 Green/Y pixel data 0 VGA_GREEN[1] G5 H1 Green/Y pixel data 1 VGA_GREEN[2] G4 J7 Green/Y pixel data 2 VGA_GREEN[3] F1 J6 Green/Y pixel data 3 VGA_GREEN[4] G6 J5 Green/Y pixel data 4 VGA_GREEN[5] F3 H5 Green/Y pixel data 5 VGA_GREEN[6] F2 H4 Green/Y pixel data 6 VGA_GREEN[7] F6 H3 Green/Y pixel data 7 \VGA_BLANK K4 M8 Blanking control input \VGA_SYNC K7 M7 Sync control input VGA_CLK AA7 AD1 VGA clock VGA_SYNC_T K5 L1 Sync tri-level control VGA_HSYNC K3 M2 Horizontal Sync VGA_VSYNC K2 M1 Vertical Sync VGA_M1 K1 M5 Operation mode control 1 VGA_M2 L10 M3 Operation mode control 2 HBE-COMBO II User s Manual and Lab Guide 75

3.16 PS/2 포트사용하기 1) 구성 PS/2 포트는주로 PC 키보드나마우스의입력장치로사용되는직렬통신방식입니다. 따라서키보드컨트롤러나마우스컨트롤러를설계해볼수있는 PS/2 커넥터를제공하고있습니다. PS/2는데이터선과클럭선두개만가지고데이터의전송이이루어집니다. 데이터라인이하나이기때문에데이터는클럭에동기되어시리얼형태로전달됩니다. PS/2의클럭은키보드나마우스 ( 슬레이브 ) 가어떤동작 ( 키를눌렀을경우 ) 을할때만발생됩니다. < 표 3-9> PS/2 Pin Description PS/2 PORT Pin Name Description 1 Data Key Data 2 N/C Not Connect 3 GND Ground 4 VCC +5V DC 5 CLK Clock 6 N/C Not Connect 데이터형태는시작 (1-bit), 정지비트 (1-bit), 패리티비트 (1-bit), 데이터비트 (8-bit) 로구성되며, 모두 11-bit로구성되어있습니다. 키보드를누르면키보드는해당키의스캔코드값을출력합니다. 이코드는처음눌렀을때출력할뿐만아니라키를뗐을때에도출력이되기때문에키가계속눌려져있을상태를알수있도록해줍니다. 결국키보드는키를누를때키값에해당하는마크코드와키를뗐을때브레이크코드의마크코드를출력하므로그사이를구분을할수있습니다. 2) 동작 아래의그림과같이키보드통신에사용되는데이터형태는 start bit, data bit 8개, parity bit, stop bit등의총 11비트로구성되어있습니다. 데이터신호는클럭신호로동기를취하는것이전제되어있기때문에타이밍만일치하면데이터를보내는속도에오차가많더라도문제가되지않으며규격으로는 1비트당 60µs에서 100µs면됩니다. 76

제품사용하기 Data start bit D0 D1 D2 D3 D4 D5 D6 D7 parity bit stop bit Clock 키보드의키가눌려지면키보드내부컨트롤러에의해키에대응하는스캔코드를데이터선을통해보냅니다. 스캔코드는키가떨어질때에도코드를발생하기때문에이를통해키가계속눌러지는것을인식할수있게됩니다. 키를누를때는 make code 가떨어져 break code가발생합니다. Make code는 1 Byte로이루어져있으며 break code는 make code 앞부분에 F0가더해진 2 Byte로이루어집니다. 아래의표는해당알파벳및숫자에대한스캔코드입니다. < 표 3-10> 알파벳숫자에대한스캔코드 입력키 Make 코드 Break 코드 입력키 Make 코드 Break 코드 입력키 Make 코드 Break 코드 1 16 F0 16 C 21 F0 21 Q 15 F0 15 2 1E F0 1E D 23 F0 23 R 2D F0 2D 3 26 F0 26 E 24 F0 24 S 1B F0 1B 4 25 F0 25 F 2B F0 2B T 2C F0 2C 5 2E F0 2E G 34 F0 34 U 3C F0 3C 6 36 F0 36 H 33 F0 33 V 2A F0 2A 7 3D F0 3D I 43 F0 43 W 1D F0 1D 8 3E F0 3E J 3B F0 3B X 22 F0 22 9 46 F0 46 K 42 F0 42 Y 35 F0 35 0 45 F0 45 L 4B F0 4B Z 1A F0 1A - 4E F0 4E M 3A F0 3A Enter 5A F0 5A = 55 F0 55 N 31 F0 31 A 1C F0 1C O 44 F0 44 B 32 F0 32 P 4D F0 4D HBE-COMBO II User s Manual and Lab Guide 77

3) 회로 회로에서보는것과같이 PS/2에해당되는클럭과데이터라인이 FPGA 디바이스와연결된모습을보여주고있습니다. 이데이터라인으로부터 FPGA 디바이스로스캔코드를읽어들여키보드에서어떠한값이들어왔는지분석하여인식하게되는것입니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description PS2_CLK M4 N4 PS/2 Clock PS2_DATA M3 N3 PS/2 Key data input 78

제품사용하기 3.17 확장포트 1) 구성 HBE-COMBO II 장비에서는내부장치이외에별도의확장포트를사용하여외부의장치를제어할수있도록지원하고있습니다. 이러한확장포트의구성은기존의 HBE- Application Module을제어하기위한 50핀확장포트 2개와보드내에장착하여사용할수있도록구성한확장포트하나를가지고있습니다. 다음은 3종류의확장포트에대한핀구성을보이고있습니다. 2) 핀구성표 Expansion port #1 FPGA Signal Altera Xilinx Description EXT1[0] J24 L26 EXT1[1] J25 M19 EXT1[2] J26 M25 EXT1[3] K18 M26 EXT1[4] K19 M22 EXT1[5] K21 M24 EXT1[6] K22 N21 EXT1[7] K23 N22 EXT1[8] K24 N19 EXT1[9] K25 N20 EXT1[10] T26 N25 EXT1[11] L19 N26 EXT1[12] L20 N23 EXT1[13] L21 N24 EXT1[14] L23 P21 EXT1[15] L24 P22 EXT1[16] L25 P19 EXT1[17] M19 P20 EXT1[18] M20 P25 EXT1[19] M21 P26 EXT1[20] M22 P23 EXT1[21] M23 P24 EXT1[22] M24 R21 EXT1[23] M25 R22 EXT1[24] N18 R19 EXT1[25] N20 R20 EXT1[26] N23 R26 HBE-COMBO II User s Manual and Lab Guide 79

EXT1[27] N24 T19 EXT1[28] P17 R24 EXT1[29] P18 R25 EXT1[30] P23 T22 EXT1[31] P24 T23 EXT1[32] R17 T20 EXT1[33] R19 T21 EXT1[34] R20 U20 EXT1[35] R24 U21 EXT1[36] R25 T25 EXT1[37] T17 T26 EXT1[38] T18 U24 EXT1[39] T19 U25 EXT1[40] T20 U22 EXT1[41] T21 U23 EXT1[42] T22 V21 EXT1[43] T23 V22 EXT1[44] T24 U26 EXT1[45] T25 V20 Expansion port #2 FPGA Signal Altera Xilinx Description EXT2[0] U20 V25 EXT2[1] U21 W22 EXT2[2] U22 V23 EXT2[3] U23 V24 EXT2[4] U24 W25 EXT2[5] U25 W26 EXT2[6] U26 W23 EXT2[7] V20 W24 EXT2[8] V21 AC25 EXT2[9] V22 AC26 EXT2[10] V23 Y25 EXT2[11] V24 Y26 EXT2[12] Y18 AE24 EXT2[13] V18 AF23 EXT2[14] AA18 AF24 EXT2[15] AE17 AF22 EXT2[16] AD17 AE22 EXT2[17] U18 AE23 80

제품사용하기 EXT2[18] AF17 AD23 EXT2[19] W17 AB22 EXT2[20] V17 AF21 EXT2[21] AC17 AD22 EXT2[22] AA17 AC22 EXT2[23] AD16 AC21 EXT2[24] AC16 AB21 EXT2[25] U17 AE21 EXT2[26] AE16 AD21 EXT2[27] W16 AC20 EXT2[28] AE15 AB20 EXT2[29] AA16 AF20 EXT2[30] Y16 AE20 EXT2[31] AB15 AE19 EXT2[32] AA15 AA18 EXT2[33] AD15 AA20 EXT2[34] AC15 AF19 EXT2[35] AC14 AC17 EXT2[36] AA14 AB17 EXT2[37] Y15 Y18 EXT2[38] W15 AD17 EXT2[39] AF13 AC16 EXT2[40] AE13 AB16 EXT2[41] Y14 AA17 EXT2[42] V14 Y17 EXT2[43] V13 W16 EXT2[44] AE12 AF15 EXT2[45] AA13 AA16 Expansion port_daughter FPGA Signal Altera Xilinx Description EXT_DAU[0] H21 L20 EXT_DAU[1] H19 L19 EXT_DAU[2] G24 K22 EXT_DAU[3] G23 K21 EXT_DAU[4] G26 K24 EXT_DAU[5] G25 K23 EXT_DAU[6] F26 J24 EXT_DAU[7] F25 J23 EXT_DAU[8] G22 K20 HBE-COMBO II User s Manual and Lab Guide 81

EXT_DAU[9] G21 J25 EXT_DAU[10] F21 J20 EXT_DAU[11] F20 H26 EXT_DAU[12] F24 J22 EXT_DAU[13] F23 J21 EXT_DAU[14] E24 H23 EXT_DAU[15] E23 H22 EXT_DAU[16] E26 H25 EXT_DAU[17] E25 H24 EXT_DAU[18] D25 E24 EXT_DAU[19] D23 E23 EXT_DAU[20] E22 H21 EXT_DAU[21] D26 H20 EXT_DAU[22] B25 D26 EXT_DAU[23] B24 D25 EXT_DAU[24] C25 C26 EXT_DAU[25] C24 C25 EXT_DAU[26] B19 B23 EXT_DAU[27] C19 C23 EXT_DAU[28] A19 A23 EXT_DAU[29] B18 C22 EXT_DAU[30] D18 D22 EXT_DAU[31] D19 A22 EXT_DAU[32] A18 B22 EXT_DAU[33] G18 B21 EXT_DAU[34] J18 C21 EXT_DAU[35] E18 E22 EXT_DAU[36] F18 A21 EXT_DAU[37] C17 F21 EXT_DAU[38] D17 A20 EXT_DAU[39] A17 D21 EXT_DAU[40] B17 E21 EXT_DAU[41] H17 E20 EXT_DAU[42] J17 F20 EXT_DAU[43] F17 B20 82

제품사용하기 3.18 Flash Memory (Option) 1) 구성본장비에서는휘발성을가진 SRAM과는달리비휘발성의 Flash memory를사용할수있도록구성하고있습니다. Flash Memory는 128Mbit의용량을가진 Intel Embedded Flash Memory를사용하고있습니다. 이장치는 Option으로기본으로나가는장비에서는제공을하지않고있습니다. [ 그림 3-14] Flash Memory 구성 2) 동작 Flash Memory의동작은 Read, Write, Reset로나뉩니다. 다음그림에서각각의동작파형을보이고있습니다. Read HBE-COMBO II User s Manual and Lab Guide 83

84 [ 그림 3-15] Read Operations

제품사용하기 Write [ 그림 3-16] Write Operations Reset HBE-COMBO II User s Manual and Lab Guide 85

[ 그림 3-17] Reset Operation 3) 회로 Flash Memory의회로에서알수있듯이 Data와 Address 라인이 FPGA 디바이스로연결되어있습니다. 또한 Flash Memory의 Control 라인도연결이되어있어 FPGA 디바이스에서 Flash Memory의제어가가능하게회로가구성되어있습니다. 4) 핀구성표 FPGA Signal Altera Xilinx Description Flash_ADD[1] D10 G12 Flash Address 1 Flash_ADD[2] C10 E11 Flash Address 2 Flash_ADD[3] B10 D11 Flash Address 3 Flash_ADD[4] A10 C12 Flash Address 4 Flash_ADD[5] J11 B12 Flash Address 5 86

제품사용하기 Flash_ADD[6] H11 F12 Flash Address 6 Flash_ADD[7] G11 E12 Flash Address 7 Flash_ADD[8] F11 G13 Flash Address 8 Flash_ADD[9] D11 F13 Flash Address 9 Flash_ADD[10] C11 A12 Flash Address 10 Flash_ADD[11] B11 H13 Flash Address 11 Flash_ADD[12] H12 C13 Flash Address 12 Flash_ADD[13] G12 H14 Flash Address 13 Flash_ADD[14] F12 E13 Flash Address 14 Flash_ADD[15] E12 D13 Flash Address 15 Flash_ADD[16] D12 E14 Flash Address 16 Flash_ADD[17] C12 D14 Flash Address 17 Flash_ADD[18] B12 G14 Flash Address 18 Flash_ADD[19] J13 F14 Flash Address 19 Flash_ADD[20] G13 G15 Flash Address 20 Flash_ADD[21] F13 F15 Flash Address 21 Flash_ADD[22] J14 A14 Flash Address 22 Flash_ADD[23] G14 H15 Flash Address 23 Flash_ADD[24] F14 B15 Flash Address 24 Flash_DQ[0] D14 A15 Flash Data 0 Flash_DQ[1] B14 E15 Flash Data 1 Flash_DQ[2] A14 C15 Flash Data 2 Flash_DQ[3] H15 F16 Flash Data 3 Flash_DQ[4] G15 E16 Flash Data 4 Flash_DQ[5] F15 H16 Flash Data 5 Flash_DQ[6] E15 G16 Flash Data 6 Flash_DQ[7] D15 F17 Flash Data 7 Flash_DQ[8] C15 E17 Flash Data 8 Flash_DQ[9] B15 D16 Flash Data 9 Flash_DQ[10] K16 G17 Flash Data 10 Flash_DQ[11] J16 G18 Flash Data 11 Flash_DQ[12] H16 F18 Flash Data 12 Flash_DQ[13] G16 D17 Flash Data 13 Flash_DQ[14] F16 C17 Flash Data 14 Flash_DQ[15] D16 B19 Flash Data 15 \Flash_OE C16 A19 Output Enable \Flash_WE B16 E18 Write Enable \Flash_RP K17 G19 RESET \Flash_CE J17 D20 Chip Enable HBE-COMBO II User s Manual and Lab Guide 87

88

설계 S/W 기본사용법 04 HBE-COMBO II User s Manual & Lab Guide 설계 S/W 기본사용법 4. 설계 S/W 기본사용법 4.1 Design Flow 일반적으로어떤제품을개발힐때, 아래그림과같은과정으로진행합니다. [ 그림 4-1] 제품생산의흐름 어떤제품을만들것인지를생각하고 ( 구상 ), 그물건을만들고 ( 설계 ), 그물건이의도한대로만들어졌는지테스트 ( 검증 ) 합니다. 만약에이상이발견되면다시수정하여검증하고, 이상이없다면제품을출시하는과정을거칩니다. 하나의시스템을설계하는것도마찬가지인데, [ 그림 4-2] 는설계소프트웨어를이용해서시스템을설계하는과정입니다. 먼저 Design Specification에서는어떤논리회로를설계할것인가를구상합니다. 구체적으로어떤입력을받아어떻게동작하여어떤핀으로출력을할것인지와같은내용을구상하는것입니다. HBE-COMBO II User s Manual and Lab Guide 89

[ 그림 4-2] 시스템설계시설계흐름그리고, Design Entry에서설계하고자하는논리회로를어떤방법으로어떻게설계할것인가를결정하여논리회로를설계합니다. 여기에서어떤방법에해당하는논리회로를설계하는방법은여러가지있는데, Graphic Design (Schematic Capture에의한방법 ) 으로설계하는방법, HDL (Hardware Description Language: 하드웨어기술언어 ) 를사용하여설계하는방법, 파형으로설계하는방법이그것입니다. 위에서설계한내용에대해문법을검사하여이상이있다면그이상에대한메시지등을알려주고, 이상이없다면설계한논리회로를하드웨어적으로만들거나시뮬레이션할수있는파일또는프로그래밍할수있는파일등을생성하는부분이 Compilation입니다. 이렇게문법오류까지검증된논리회로는설계한의도대로동작이잘되는지에대한검증과정을거치게됩니다. 먼저기능적으로문제가없는지를살펴보는 Function Verification, 그후에직접디바이스의특성을이용하여설계한회로가사용하고자하는디바이스나클럭에따른오동작을하지않는지를살펴보는 Timing Verification 과정을진행합니다. 위의 Function Verification과 Timing Verification은 PC상에서소프트웨어로검증하는방법이고, 이렇게검증된논리회로가직접하드웨어 ( 시스템 ) 에연결되었을때정확하게동작이되는지를검증해야할필요가있습니다. 이부분이 Device Programming과 In- System Verification입니다. 전자는말그대로디바이스에설계한논리회로를프로그래밍한다는말이고, 후자는시스템이꾸며진상태에서하드웨어테스트를한다는것입니다. 90

설계 S/W 기본사용법 이렇게모든검증이끝난후에비로서제품이완성되어제조됩니다. HBE-COMBO II User s Manual and Lab Guide 91

4.2 설계소프트웨어 4.2.1 Quartus II 를이용한설계 1) 역할 Altera Quartus II 프로그램은모든설계를프로젝트중심으로관리합니다. 프로젝트에포함된설계파일및컴파일한파일, 환경저장파일, 시뮬레이션파일, 프로그래밍파일이모두같은프로젝트이름으로관리가됩니다. 또한모든설계를프로젝트화하였기때문에전체프로젝트에대한관리도각각의프로젝트별로관리하게되어있습니다. [ 그림 4-3] 은 Quartus II에서기본으로제공해주는예제중 Fir-filter라는예제이고, [ 그림 4-4] 는이 Fir-filter 프로젝트에대한 Hierarchy Display로, Fir-filter에대한하위블록들을계층구조로보여주는것입니다. [ 그림 4-4] 와같이프로젝트에포함된설계파일및하위파일들은쉽게파악할수있습니다. 또한이러한파일들은 Setting 메뉴를통해파일뿐만아니라프로젝트에대한전반적인관리를쉽게하도록구성되어있습니다. [ 그림 4-3] Fir-filter Project 92

설계 S/W 기본사용법 [ 그림 4-4] Hierarchy Display 2) Project 선언 [ 그림 4-5] 와같이 Quartus II 프로그램은 File -> New Project Wizard 메뉴를선택해서현재작업하는프로젝트를선언할수있습니다. 프로젝트선언은프로젝트명선언에서부터디바이스선택등의총 6단계로이루어져있는데, 이과정을거쳐야실제코딩을위한프로젝트선언과정이완료됩니다. [ 그림 4-5] New Project Wizard 각단계에서다음단계로진행하기위해서는 Next 버튼을클릭해야합니다. 프로젝트선언을시작하면프로젝트에대한전반적인진행사항을설명하는창이활성화되고 Next 버튼에의해다음프로젝트선언을시작하게됩니다. HBE-COMBO II User s Manual and Lab Guide 93

첫단계로프로젝트관련파일들이저장될 Directory, Project, Top-Level의 Entity 이름을설정합니다. 이때주의할사항은 VHDL등의 Language로작성할경우코드의 Entity 이름과현재저장하는 Top-Level의 Entity의이름을같게해주어야합니다. [ 그림 4-6] 에서는프로젝트의이름과 Entity의이름을동일하게 counter로설정해주었고, 이에관련된파일들이 C:\sample에저장되도록설정했습니다. [ 그림 4-6] Directory, Name, Top-Level Entity 설정 다음으로다른프로젝트파일에서필요한파일들을추가하거나, 그프로젝트의모든파일들을참조하기위한 Library Path를설정해주는부분입니다. 이부분은여러사람들이함께작업하는설계과정에서유용하게사용됩니다. 따라서여러사람들이각각의프로젝트를나누어설계하고, 최종 top 프로젝트에서하나로모아설계합니다. [ 그림 4-7] 은파일들을 Add 버튼에의해서필요한파일들을프로젝트에추가하게됩니다. 94

설계 S/W 기본사용법 [ 그림 4-7] Add Files 다음으로 Family & Device Settings 설정부분입니다. Device Family는사용하는디바이스가 RAM 또는 ROM 타입이냐에따라 FPGA, CPLD로구분지을수있고, 세부적으로 Device 용량및디바이스가가지고있는핀수, 처리속도에따라나누어집니다. 종류를보면, Stratix II, Stratix, Cyclone II, Cyclone, APEX II, APEX 20K, & FLEX 10K의수백만게이트단계까지설계가가능하고, SoC라는하나의디바이스에서모든구현을해볼수있는제품도있습니다. 또한이러한디바이스에서주로사용하는기능만으로구성되어있는 Cyclone II, Cyclone, APEX 1K 가있습니다. 또한고속통신이가능한 Stratix GX, Mercury가있고, CPLD로 MAX Series가있습니다. 이렇게다양한 Device Family를 Tool에서선택할수있습니다. [ 그림 4-8] 에서는현재 COMBO II 장비에서사용하는 Family 군인 cyclone II를선택한것을볼수있습니다. 그리고밑에보이는 Target device에서의체크하는부분은현재결정한 Device Family 내에있는여러디바이스중타겟디바이스를선택해서프로젝트에적용할것인지, 아니면컴파일러가디바이스중적당한디바이스를자동으로선택해서프로젝트에적용할것인지를선택하는작업입니다. 예를들어사용자가타겟디바이스를가지고설계를할때, Target device는 Specific device selected in Available device list 에체크를해주고가지고있는디바이스를선택해주면됩니다. 또한오른쪽화면에있는 Filters 부분은 Family 내에있는여러디바이 HBE-COMBO II User s Manual and Lab Guide 95

스중, 디바이스의 Package, Pin count, Speed grade에따라서디바이스를검색해주는작업을하는부분입니다. 따라서타겟디바이스를쉽게찾아선택할수있게도와주는부분입니다. 아래의 [ 그림 4-8] 에서는현재 COMBO II에서사용하는 EP2C35F672C8을선택한모습을보여주고있습니다. [ 그림 4-8] Family & Device Settings Quartus II는기본적으로설계, 합성및시뮬레이션작업을할수있도록기능을포함하고있습니다. 하지만 Quartus II가 PLD 지원을목적으로만들어진설계프로그램이기때문에이러한개개의작업에서의최대의성능을지원해준다고는말하기힘듭니다. 따라서여기에서는이러한점을보완하기위해다른전문적인툴과연동해서작업이가능합니다. 이러한작업을위해 [ 그림 4-9] 의창에서이러한툴의연동을시킬수있습니다. 따라서현재사용자의컴퓨터에서연동하려는다른프로그램이설치되어있다면여기에서설정을해주면됩니다. 96

설계 S/W 기본사용법 [ 그림 4-9] EDA Tool Settings 여기에서는현재까지의프로젝트설정단계에서각단계에대한설정이어떻게되었는지모두보여주게됩니다. 따라서사용자가이러한정보를보고프로젝트선언단계에서다르게설정된부분이없는지다시한번확인하는단계가되겠습니다. 따라서이러한확인절차에의해잘못된부분은 Back 버튼에의해그단계로가서수정을하고, 이상이없을시 Finish 버튼에의해프로젝트설정단계를마치면됩니다. 이러한설정부분은프로젝트설정을마치더라도 Setting 메뉴를통해재수정이가능합니다. 아래 [ 그림 4-10] 에서는 Summary 창을보여주고있습니다. HBE-COMBO II User s Manual and Lab Guide 97

[ 그림 4-10] Summary 이전까지는작업으로프로젝트가선언되었습니다. 이로써설계할수있는환경이만들어진것입니다. 이렇게프로젝트를선언하면 [ 그림 4-11] 과같이 Quartus II 프로그램의왼쪽상단의타이틀바에현재프로젝트가선언된경로명및프로젝트의이름이표시됩니다. [ 그림 4-11] 타이틀에표시된프로젝트이름작업을진행하는중에 Project Navigator라고해서프로젝트내에어떤형태로구성되어있는지알아볼수있는데이것은크게 3가지로구분됩니다. 프로젝트의계층구조를보여주고, Top-Level Design File이라고해서최종 Design을확인할수있는 Hierarchy라는것이있습니다. 또한포함되어있는파일들 ( 시뮬레이션파일, 프로그래밍파일, 하위블 98

설계 S/W 기본사용법 록및각블록에포함된파일 ) 을쉽게확인하고관리할수있는것이 Files입니다. 마지막으로 Design Unit 의 type 세부사항을 Design Units에서확인해볼수있습니다. [ 그림 4-12] 에서맨위에있는것이 Hierarchy 이고, 중앙에 Files, 아래에 Design Units 을보여주고있습니다. 이것을통해프로젝트의계층구조를파악해볼수있습니다. [ 그림 4-12] Project Navigator HBE-COMBO II User s Manual and Lab Guide 99

3) Design Entry Graphic Editor (Schematic Capture 에의한설계 ) 1 특징특정기능을가진심볼라이브러리를생성하여, 그심볼라이브러리의입출력데이터라인을선 (wire) 등으로각심볼등의입출력데이터신호를연결하여논리회로를설계하는방법입니다. 2 Graphic Editor 선택하기 Graphic Editor를이용해하나의논리회로를설계하기위해서는 Graphic Editor 창을활성화시켜야하는데, [ 그림 4-13] 과같이 File -> New 메뉴를선택하여 New 창을활성화한후 Block Diagram/Schematic File이라는항목을선택하여 OK 버튼을누르면 [ 그림 4-14] 와같이 Graphic Editor 창이활성화됩니다. [ 그림 4-13] 설계메뉴에서 Block Diagram/Schematic File 선택 100

설계 S/W 기본사용법 [ 그림 4-14] Block Diagram/Schematic File 을활성화한상태 3 심볼라이브러리 Quartus II의 Block Diagram/Schematic File에서는도면을마우스왼쪽버튼으로더블-클릭하는방법또는마우스의오른쪽버튼을눌러 Pop-Up 메뉴의 Insert -> Symbol 항목을선택하는방법과 Quartus II 메뉴의 Edit -> Insert Symbol 을통해라이브러리를불러오는방법이있습니다. HBE-COMBO II User s Manual and Lab Guide 101

[ 그림 4-15] Pop-up 메뉴에서 Insert Symbol 선택 [ 그림 4-16] Insert Symbol 창 위의 Enter Symbol 창에서 Name에직접심볼명을쓰거나, 왼쪽의 Libraries에서해당심볼라이브러리가들어있는폴더에서찾는방법으로 Symbol들을검색할수있습니다. 여기에서는 AND 또는 OR 게이트의간단한 Symbol에서약간의논리가포함된 74 시리즈, Megafunctions라고하여기본설정과 Parameter 값만변화시켜줌으로써쉽게설계할수있도록해주는라이브러리입니다. 이처럼일부항목을바꾸어서범위가큰논리회로를쉽게설계할수있도록해줍니다. 102

설계 S/W 기본사용법 4 각 Symbol의연결각 Symbol 간의데이터연결은 wire 또는이름으로연결해줄수있습니다. [ 그림 4-17] 은 stop-watch 예제를보여주고있다. 각 Symbol 라이브러리간의 bus 데이터를연결할때는선굵기가굵은 bus wire를사용하고, bit 데이터를연결할때는굵기가가는 bit wire를사용합니다. [ 그림 4-17] Stop-watch 예제에서의연결 Symbol을연결하는방법은 [ 그림 4-18] 과같이각 Symbol의데이터라인의연결점을마우스로가져가면마우스의포인터가십자모양으로바뀝니다. 이상태에서마우스의왼쪽버튼을누른채드래그하면 wire가생성이되는데, [ 그림 4-19] 와같이 wire를연결하고자하는곳까지드래그하여연결하면됩니다. HBE-COMBO II User s Manual and Lab Guide 103

[ 그림 4-18] 마우스포인터의변화 [ 그림 4-19] wire 연결 bus wire의경우에는 [ 그림 4-20] 위에서처럼 wire을연결한후, 마우스왼쪽버튼의더블클릭으로그 bus wire 전체를선택할수있습니다. 이때, 마우스의오른쪽버튼을눌러 pop-up 메뉴의 Bus Line을선택하면됩니다. 104

설계 S/W 기본사용법 [ 그림 4-20] bus wire로변환이름으로연결할경우에는연결하고자하는 Node를 [ 그림 4-21] 과같이 Symbol에서 wire을일정부분연결한후마우스의왼쪽버튼을이용하여 wire를선택 ( 클릭 ) 하고 Node 명을적어주면됩니다. 버스데이터의경우도 bus wire을그린후이름을버스의형태로적어줍니다. 이름을적을때 4bit의 A라는이름이있다면 A[3..0] 또는 A[0..3] 로적어줍니다. 이차이는 MSB( 상위비트 ) 의번호가 4인지또는 0인지의차이입니다. [ 그림 4-21] 이름으로연결 5 심볼생성사용자가설계하여만든논리회로를하나의블록으로하여더큰프로젝트에넣을수있습니다. 이렇게생성한것은 Graphic Editor 상태에서는 Symbol 형태로불러오게됩니다. 이 Symbol 형태를만들기위해서는 Graphic Editor를활성화시킨상태에서 File -> Create / Update -> Create Symbol Files for Current File 메뉴를선택하여변화시킵니다. 이 HBE-COMBO II User s Manual and Lab Guide 105

진행과정은왼쪽의상태표시창에서확인해볼수있습니다. [ 그림 4-22] 심볼생성 106

설계 S/W 기본사용법 Text Editor (HDL 에의한설계 ) HDL을이용하여논리회로를설계하는방법은각 HDL에따라문법을알아야하기때문에, 많은내용을설명해야합니다. 따라서이사용자설명서에서는가장기본적으로 Editor 창을활성화시키는방법을간단한예제를보여드리겠습니다. 1 특징 언어를이용해서논리회로를설계하는것으로보통 HDL(Hardware Description Language) 언어를사용하여설계합니다. HDL의종류는 VHDL(Very High-speed integrated circuit HDL), Verilog HDL등이있는데, Quartus II에서는 Text Editor를이용하여 HDL을설계합니다. 2 Text Editor 선택하기 Text Editor를이용하여하나의논리회로를설계하기위해서는 Text Editor 창을활성화시켜야하는데, File -> New 메뉴를선택한후 [ 그림 4-24] 와같은그림이활성화되며, 여기에서는 VHDL File을선택한것을보여주고있다. 이렇게 HDL의종류를선택했으면 OK 버튼을눌러서 Text Editor 창을활성화시킨다. [ 그림 4-23] New 메뉴에서 Text Editor File 선택 HBE-COMBO II User s Manual and Lab Guide 107

[ 그림 4-24] Text Editor File 을활성화한상태 3 설계하기 HDL 코드를사용하여논리회로를설계하기위해서는각 HDL (AHDL, VHDL, Verilog HDL 등 ) 의문법등에대해알아야할것이많기때문에간단히설계한예만보여드리겠습니다. 참고로각각의설계파일은다른확장자 (VHDL 파일은.vhd, AHDL 파일은.tdf, Verilog HDL 파일은.v) 를갖는다는것을유념해야합니다. 108

설계 S/W 기본사용법 [ 그림 4-25] AHDL 로설계한예 [ 그림 4-26] VHDL 로설계한예 HBE-COMBO II User s Manual and Lab Guide 109

[ 그림 4-27] Verilog HDL로설계한예참고. 설계하는문법은 Text Editor 창을활성화시킨상태에서 [ 그림 4-28] 과같이 Template 메뉴의각언어 - VHDL, Verilog HDL등 - 의 Template 창을선택하여설계하는구문의문법을알수있습니다. 110

설계 S/W 기본사용법 [ 그림 4-28] Template 선택 4) Compile 1 역할 컴파일러는프로젝트에포함된모든디자인파일을통합하는과정과문법오류와일 HBE-COMBO II User s Manual and Lab Guide 111

반적인설계의오류를찾는과정을하게됩니다. 또한논리회로합성및설계한논리회로가하드웨어에서이루어지는가장기본단위인로직셀로나누고, 각셀의위치를결정하는과정을하게되고, 시뮬레이션과시간측정을할수있도록하는파일을생성하고, 마지막으로타겟디바이스에프로그래밍할수있는파일을만드는과정을진행합니다. 컴파일과정은보통 2번의과정을수행하게되는데, 처음의컴파일과정은현재작성된설계파일에대한오류를검증하는단계입니다. 따라서이과정을통해컴파일오류를찾아서수정이가능합니다. 다음의컴파일과정은설계파일에대한핀할당정보등의프로젝트선언다음의수정내용을현재프로젝트에적용해주는단계라할수있습니다. 2 Compiler [ 그림 4-29] 와같이메뉴의 Processing -> Start Compilation 항목을선택하면컴파일과정을수행하게됩니다. 이컴파일과정은 4단계로나뉘어수행하게되는데, 왼쪽의상태표시창에서진행상황을확인해볼수있습니다. Analysis & Synthesis 에서는프로젝트내에있는파일들을분석하고통합하는과정에서발생하는기본적인오류를체크하는과정입니다. 따라서회로를분석하는과정에서오류가발생하면컴파일을중단하고메시지창에에러를찾아표시해줌으로써회로를쉽게수정할수있게해줍니다. 그리고회로를분석하는과정에서디바이스의내부구조를효율적으로사용하기위해불필요한논리를제거합니다. Fitter 에서는사용자가디바이스를정해주지않았을때는 Quartus II에서회로에최적인디바이스를자동적으로찾아서디바이스의로직셀에배치해줍니다. 디바이스를정해주었을때는그디바이스에맞게회로를적당한로직셀에배치합니다. 먼저각각의논리함수를가장적합한위치의로직셀에할당하고상호연결이나핀등을적합하게할당시킵니다. Assembler에서는이전의작업을디바이스에프로그램할수있는파일을생성시킵니다. 마지막으로 Timing Analyzer에서는최종적으로디바이스에할당된정보를가지고핀과핀또는로직셀사이의데이터전달시간을검사하는과정입니다. 112

설계 S/W 기본사용법 [ 그림 4-29] Processing -> Start Compilation 항목선택 [ 그림 4-30] 에서는컴파일과정이끝난화면을보여주고있습니다. 따라서왼쪽의상태표시창에서모든과정이 100% 로완료된것을볼수있고, 이전에서말한 4가지의컴파일과정을오른쪽메인화면창에서리포트형태로볼수있습니다. 따라서여기에서어떠한형태로작업이수행되었는지나중에확인해볼수있습니다. 또한밑에메시지창에서컴파일과정에생긴간단한정보나, 에러, 또는경고등을표시해줍니다. 에러메시지의발생시컴파일이중단되고어떠한내용의에러메시지인지표시해주게됩니다. 따라서에러메시지를클릭하면에러가난지점으로커서가이동하게되고사용자는에러메시지와더불어에러에대한수정을쉽게할수있습니다. HBE-COMBO II User s Manual and Lab Guide 113

[ 그림 4-30] Compiler 과정완료 5) Assignments 1 역할이작업은현재작업하는프로젝트의디바이스설정과선택한디바이스의 I/O 핀할당에대한작업을수행하게됩니다. 디바이스선택은사전에프로젝트선언단계에서현재사용하는디바이스를선택했습니다. 하지만프로젝트선언후에이메뉴를통한디바이스수정작업을해줄수있습니다. 지금은 Assignments라는작업에서의크게할작업은설계파일과디바이스에있는 I/O핀과의연결을해주는작업입니다. 따라서사용자가어떠한핀을이용하여사용할지를프로젝트에선언해주는작업이되겠습니다. 2Device 디바이스는 [ 그림 4-31] 과같이 Assignments -> Device 메뉴를선택하여설정합니다. 이메뉴를선택하면 [ 그림 4-32] 과같은 Settings 창이활성화됩니다. 이부분에서사용하려는디바이스의선택을하거나다른디바이스를찾아재설정을해줄수있습니다. 114

설계 S/W 기본사용법 [ 그림 4-31] Assignments -> Device 항목선택 [ 그림 4-32] Device Settings 작업창은프로젝트설정에서의디바이스설정과정과비슷한구조로되어있으며, 동 HBE-COMBO II User s Manual and Lab Guide 115

일한방법을통해디바이스를선택해줍니다. 여기에있는 Device & Pin Options은디바이스내부에있는특수핀, 사용하지않는핀, 전원관리등의설정을해주는작업을하게됩니다. 따라서디바이스관리에대한전반적인작업을설정해줄수있는메뉴가되겠습니다. 활성화된창에서는디바이스선택이외의현재프로젝트에서사용자가설정하려는모든작업을할수있습니다. 따라서프로젝트에서관리하는파일, 연동해서사용하는툴설정, 컴파일및시뮬레이션과정의설정등의작업을 Settings 창에서할수있습니다. 3 Pin Assignments 핀설정은 [ 그림 4-33] 에서와같이메뉴에서 Assignments -> Assignment Editor에서핀설정을해줄수있습니다. [ 그림 4-33] Assignment Editor 선택 위의그림에서는위쪽그림은 Assignment Editor에들어가는메뉴를보여주고있습니다. 따라서이렇게메뉴에들어가서핀할당을위한작업으로오른쪽그림과같이 Pin 이라는버튼을눌러핀할당을위한환경을만들어주어야합니다. 116

설계 S/W 기본사용법 [ 그림 4-34] Assignment Editor 위의 [ 그림 4-34] 에서는 Assignment Editor창을보여주고있습니다. 여기에서는할당하려는핀이름은설계파일작성시미리지정을해놓았습니다. 따라서핀이름에대해서는따로타이핑할필요없이찾아서 Assign해주면됩니다. 핀할당방법은 [ 그림 4-34] 와같이 To에서는핀이름이들어가는부분이고, Location 부분에서는디바이스의핀번호가들어가게됩니다. 따라서 To와 Location 부분하위에 <<new>> 라는녹색의부분에마우스로클릭하면, To에서는설계파일의포트이름이보이게되고 Location에서는선택된디바이스의핀번호모두가보이게됩니다. 따라서이러한방식으로포트이름과디바이스핀번호를찾아서할당해주면됩니다. [ 그림 4-35] 에서는핀할당에대한작업을자세히보여주고있습니다. HBE-COMBO II User s Manual and Lab Guide 117

[ 그림 4-35] 핀할당작업 6) Simulation 1 역할설계한논리회로를하드웨어를이용해서검증하는경우에, 처리하는데이터량이많거나속도가빠를경우에는검증하는데시간이많이걸리고그원인을파악하지못하는경우가있기때문에소프트웨어적으로먼저검증하는것이필요합니다. Quartus II에서는이를위해파형으로검증하는시뮬레이션을제공하는데, 이시뮬레이션에서동작하 118

설계 S/W 기본사용법 는데필요한입력파형의조건을설정해주면그에따른출력결과의파형이출력되어쉽게확인해볼수있습니다. 2 구성시뮬레이션을하기위해서는입력파형의조건을설정해주어야한다고했습니다. [ 그림 4-36] 에서이러한작업을할수있는데, 구성으로왼쪽에보이는창에는입출력포트의이름을보여줍니다. 이곳에서는현재프로젝트의설계파일에서선언한포트들이여기에나타나는것입니다. 다음으로가운데창에서각포트에서사용자가선택한시뮬레이션시간에나타나는출력값을표시해줍니다. 따라서파형을일일이보면서값을알아내는것과는달리, 상태표시바를이동하여사용자가측정하고싶은시뮬레이션시간에출력되는포트값을이곳에서표시해줍니다. 마지막으로오른쪽창에서각포트에대한실제데이터값을시간의따라파형으로표시해줍니다. 따라서이시뮬레이션창을통해포트들이어떻게동작했는지를여기에서파형으로한눈에파악할수있습니다. [ 그림 4-36] Simulation 입력창 다음으로 [ 그림 4-37] 에서는시뮬레이션결과값이나타나는창을보여주고있습니다. Quartus II 에서는입력포트의입력값을설정해주는창에서바로그결과값이나타나지않고, 새로운창에서시뮬레이션결과값이어떻게나타나는지를확인할수있습니다. 그림과같이시뮬레이션결과파형이나오는창의구성도리포트구간이더추가된것을볼수있습니다. HBE-COMBO II User s Manual and Lab Guide 119

[ 그림 4-37] Simulation 결과창 리포트창에서는시뮬레이션결과에대한내용을 Text 형식으로보여주고있습니다. 여기에서는시뮬레이션과정과설정정보등을확인해볼수있습니다. 그리고나머지두개의영역에서시뮬레이션결과에대한것을파형으로검증해볼수있습니다. 3 Simulator 시뮬레이션은결과값의현태에따라크게두가지방법으로나뉘어집니다. 기능적인시뮬레이션 (Functional Simulation) 과시간특성을지닌시뮬레이션 (Timing Simulation) 입니다. 기능적인시뮬레이션은설계한회로에대한논리적으로분석하여이사항을시뮬레이션결과로보여주게됩니다. 위의기능적인시뮬레이션이단지설계한회로를논리적으로검증한다면, 타이밍시뮬레이션 ( 시간특성을지닌시뮬레이션 : Timing Simulation) 은설계자가결정한하드웨어의상태즉, 사용하려고하는디바이스와핀번호등의지연시간을고려한파형으로검증하는것입니다. 시뮬레이션은기본설정이타이밍시뮬레이션으로동작하게끔되어있습니다. 따라서아무설정없이시뮬레이션을시키면타이밍시뮬레이션으로동작을하게됩니다. 초반에타이밍시뮬레이션을통한검증에서타이밍정보와논리적인결과값이동시에나옵니다. 또한포트의수가늘어날때시뮬레이션에대한검증작업에어려움이있을수있습니다. 시뮬레이션분석방법으로처음설계파일의검증을위한것이므로기능적인시뮬레이션을통해먼저설계된파일의문제가없는지먼저분석하고이러한분 120

설계 S/W 기본사용법 석이완료가되었을때, 타이밍시뮬레이션을통해타겟디바이스를적용한시뮬레이션검증을하는방법으로이루어져야합니다. 다음으로시뮬레이션과정을하나씩해보도록하겠습니다. 먼저메뉴창에서 File -> New 항목을선택하면 [ 그림 4-38] 과같이 New 창이활성화되는데여기서 Other Files 에서 Vector Waveform File을선택합니다. 그러면 [ 그림 4-39] 와같이시뮬레이션을할수있는 Waveform 창이활성화됩니다. 여기에서입력핀에파형을인가해, 출력되는파형을검증해볼수있습니다. [ 그림 4-38] Simulation 메뉴선택 [ 그림 4-39] Simulation 창활성화 HBE-COMBO II User s Manual and Lab Guide 121

위의그림과같이시뮬레이션창을활성화시켰으면, 여기에입출력핀을불러와야합니다. 불러오는방법은 [ 그림 4-40] 의위쪽그림과같이시뮬레이션창의왼쪽편에있는 Name 창에서마우스오른쪽키에의한 pop-up메뉴에서 Insert Node or Bus를선택하거나, [ 그림 4-40] 의아래쪽그림과같이 Quartus II 메뉴의 Edit -> Insert Node or Bus 를선택합니다. 그러면 [ 그림 4-41] 과같이입출력포트를넣는새로운창이생깁니다. 여기서포트를검색하기위해오른쪽에있는 Node Finder 버튼을클릭하여입출력포트를찾을수가있습니다. [ 그림 4-40] Simulation 입ㆍ출력포트불러오기 122

설계 S/W 기본사용법 [ 그림 4-41] Insert Node or Bus [ 그림 4-41] 의 Node Finder 버튼을사용하여 [ 그림 4-42] 의 Node Finder 창이활성화됩니다. 여기에서 List 버튼을통해그림과같이설계한프로젝트의입출력포트가나타나게됩니다. 이포트들중에확인하려는포트를찾아서선택을하면됩니다. [ 그림 4-42] Node Finder 이상으로포트선택을완료하면 OK 버튼을눌러마치면, 시뮬레이션창에포트이름이보입니다. Waveform 창에서불러들인포트들을마우스로블록화해서파형을그려주면됩니다. 방법으로는마우스로파형을입력하려는포트의영역을블록을지정하고, File -> Value 에있는메뉴를통해블록으로지정된곳에입력파형을줄수있습니다. 여기에서는 0, 1값부터, High Impedance, Unknown, Clock등의값을줄수있습니다. 그림 [ 그림 4-43] 은입력파형에대한정의를마친모습을보여주고있다. Clock은주기적인클럭을준모습이고 STARTSTOP 과 RESET 에는적당한구간에서 high 값을준모습입니다. HBE-COMBO II User s Manual and Lab Guide 123

[ 그림 4-43] Waveform Editor 파형정의이렇게파형정의를마치면, Processing -> Start Simulation을통해시뮬레이션결과파형을볼수있습니다. [ 그림 4-44] 는이러한결과파형을보여주고있습니다. 여기에서는초기의파형입력창과달리별도의창이활성화되어결과파형을분석해주고있습니다. 왼쪽의창의리포트창을통해시뮬레이션에서발생하는결과값을문서로표시해주고있습니다. 124

설계 S/W 기본사용법 [ 그림 4-44] Simulation Report 시뮬레이션에서는이러한입력파형에대한값과설계파일의정보를보고결과값을보여주게됩니다. [ 그림 4-44] 에서는파형의입력창과는달리 Report 구간에대한영역이나타나있습니다. 따라서파형적인분석과달리문서적으로결과에대한리포트를해주고있습니다. 또한이러한시뮬레이션은앞서설명한것과같이타이밍시뮬레이션을기본으로하고있습니다. 그러므로사용자가아무런설정없이는디바이스에대한 delay 시간을고려한시뮬레이션과정을수행하게됩니다. Function 시뮬레이션작업을위해서는 [ 그림 4-45] 와같이메뉴의 Processing -> Generate Functional Simulation Netlist 작업을먼저해주어야합니다. 이작업을통해만들어진데이터값을보고기능적인시뮬레이션작업을수행하게되는겁니다. 그리고 Assignments -> Settings에서왼쪽 Category를 Simulator Setting로선택해주고, 나타나는시뮬레이션창의 Simulation mode를 Functional로선택해서시뮬레이션을실행시키면됩니다. 이러한내용은 [ 그림 4-45] 를통해확인할수있습니다. 초반에 Generate Functional Simulation Netlist 작업이수행되지않고 Setting 창에서 Functional만바꾸어서실행을시키면, 시뮬레이션과정에서 Netlist 파일에대한정보가없어서에러가발생하고시뮬레이션과정이중단되게됩니다. HBE-COMBO II User s Manual and Lab Guide 125

[ 그림 4-45] Functional Simulation Settings 다음의 [ 그림 4-46] 과 [ 그림 4-47] 은두가지의시뮬레이션결과를비교해서보여주고있습니다. 타이밍시뮬레이션에서는디바이스에서발생하는 delay 시간을고려한시뮬레이션결과를보여주고있습니다. 126

설계 S/W 기본사용법 [ 그림 4-46] Timing Simulation [ 그림 4-47] Function Simulation HBE-COMBO II User s Manual and Lab Guide 127

7) Programming 위에서설계및검증이끝난논리회로를디바이스에프로그래밍부분입니다. 1 Programmer 활성화 [ 그림 4-48] 과같이 Quartus II 메뉴에서 Tool > Programmer에서 Programmer 창을활성화해서사용할수있습니다. 이메뉴를선택하면 [ 그림 4-49] 와같이 Programmer창이활성화되고여기에서장비에직접다운할수있습니다. [ 그림 4-48] Quartus II 메뉴에서 Programmer 항목선택 128

설계 S/W 기본사용법 [ 그림 4-49] Programmer 창활성화 2 하드웨어설치처음에 Programmer 창을활성화하면 Hardware Setup 창에 No Hardware라는것이표시가됩니다. 여기에서는 ByteBlaster라는하드웨어를가지고 Altera device를프로그램하기때문에이러한하드웨어를등록을해주어야합니다. Programmer 창위에보이는 Hardware Setup를클릭하면하드웨어를등록해주는창이활성화됩니다. [ 그림 4-50] 와같이 Hardware Setup 창에서 ByteBlaster를등록해주면, [ 그림 4-51] 과같이 ByteBlaster의등록된모습을볼수있습니다. HBE-COMBO II User s Manual and Lab Guide 129

[ 그림 4-50] Hardware Setup [ 그림 4-51] Hardware Setup 완료 3 프로그래밍 하나의프로젝트가선언되고컴파일을통해프로그래밍파일이만들어졌을때, Programmer 창을활성을하면, File에현재프로젝트에서프로그램할수있는.sof 파일과 device정보등이보이게됩니다. 여기에서 Program/Configure에대한부분을체크하고 Start 버튼을클릭하여다운하면됩니다. 만약동작이되지않을때, Programmer 창에서활성화되는부분의버튼인 Auto Detect 버튼을눌러디바이스와 PC간의연결이제대로되었는지확인해보기바랍니다. 따라서 [ 그림 4-52] 과같이화면상에두개의디바이스가나타나는지확인해보기바랍니다. 만약이화면과다르게표시되거나 Unable to scan device chain. Can t scan JTAG chain. 이라는메시지가표시되면연결케이블에대한확인과디바이스전원에대한확인을해주고, 이사항에대한문제가없을시회사로문의해주기바랍니다. 130

설계 S/W 기본사용법 [ 그림 4-52] Auto Detect 위사항에서아무런이상이없이진행이되면, 다운로드케이블을 PC의 Parallel port와보드의다운로드 port에연결한후 Start 버튼을누르면디바이스에다운이됩니다. [ 그림 4-53] 에는다운이완료된모습을보여주고있습니다. 이렇게다운이완료되었을때, 메시지창에 Configuration succeeded 메시지가표시되며보드에서설계한회로가바로동작이진행되게됩니다. [ 그림 4-53] Configuration Ended HBE-COMBO II User s Manual and Lab Guide 131

4 Configuration ROM Programming COMBO II 보드에는 Cyclone II device가 RAM 타입의디바이스이기때문에별도의 ROM 타입의디바이스인 EPCS16 사용하고있습니다. 따라서전원의 ON/OFF시마다디바이스의데이터가사라져다운을다시해야되는작업을막기위해별도의 ROM을두어서전원의 ON/OFF시마다데이터를 ROM에서 FPGA디바이스로전달하여보드가작동이되도록구성하고있습니다. Configuration ROM에 writing하는방법은기존의프로젝트에서설계된.sof 파일을변환하여사용해주면됩니다. 따라서 Quartus II의메뉴의 File -> Convert Programming Files에서이작업을수행해주면됩니다. 여기에서는 Programming file type는그대로인 JTAG Indirect Configuration File (.jic) 로유지해주고, Configuration device는보드에서사용하고있는 EPCS16을사용해야합니다. 또한 File name는사용자가만들려는적당한이름을주면됩니다. 또한 Flash Loader는사용하는 FPGA 디바이스인 EP2C35F672를선택해주고, SOF Data는현재프로젝트에서설계한결과파일인.sof 파일을넣어주면됩니다. 이상으로모든것에대한설정이마쳤으면, Generate 버튼을눌러 EPCS16에프로그램할수있는파일을생성하게됩니다. [ 그림 4-54] 에는파이변환에관한창을보여주고있고, [ 그림 4-55] 에는이결과파일을가지고 EPCS16 디바이스에프로그램하는과정을보여주고있습니다. [ 그림 4-54] Convert Programming Files 132

설계 S/W 기본사용법 [ 그림 4-55] Configuration ROM Programmer HBE-COMBO II User s Manual and Lab Guide 133

4.2.2 ISE 를이용한설계 1) 역할 Xilinx ISE 프로그램도 Quartus II와마찬가지로프로젝트를선언하여프로젝트중심으로관리를하도록되어있습니다. 따라서프로젝트에속한설계파일, 컴파일관련파일, 시뮬레이션파일, 핀정보등의일련의파일들이하나의프로젝트에속해관리를하게됩니다. 이렇게구성이되어있어, 하나의프로젝트파일을오픈하였을때, 프로젝트에관련된모든파일을불러와서정보를보고사용할수있도록구성을하고있습니다. [ 그림 4-56] 은 VHDL로작성한소스코드를보여주고있으며, [ 그림 4-57] 에서는프로젝트에서관련된소스파일들을보여주고있습니다. [ 그림 4-56] full demo 예제 134

설계 S/W 기본사용법 [ 그림 4-57] Source Files 2) Project 선언 [ 그림 4-58] 와같이 ISE 프로그램은 File -> New Project 메뉴를선택하여프로젝트를선언할수있습니다. 프로젝트선언은프로젝트명선언에서부터디바이스선택에서파일추가까지총 5단계로이루어져있는데, 이과정을거쳐야실제코딩을위한프로젝트선언과정이완료됩니다. [ 그림 4-58] New Project 각단계에서다음단계로진행하기위해서는 Next 버튼을클릭해야합니다. 프로젝트선언을시작하면프로젝트에대한전반적인진행사항을설명하는창이활성화되고 Next 버튼에의해다음프로젝트선언을시작하게됩니다. 첫단계로프로젝트관련파일들의 Project Name, Project Location, Top-Level Source Type 을설정해주어야합니다. Project Name을선택할때는 Project Location에도같은이름 HBE-COMBO II User s Manual and Lab Guide 135

의폴더가자동으로생성하여그폴더내에서관리하도록하고있습니다. Top-Level Source Type는현재프로젝트의 top 파일의타입을설정해주는것입니다. 여기에는 HDL, Schematic, EDIF, NGC/NGO의파일형태를선택해주면됩니다. [ 그림 4-59] 에서는프로젝트의이름을 watch 주었고, 이에관련된파일들은 C:\watch에저장되도록설정했습니다. 또한 top 파일을 VHDL파일형태로설계를할것이기때문에 Top-Level Source Type을 HDL로설정한것입니다. [ 그림 4-59] Create New Project 다음은프로젝트설정단계에서디바이스설정및 EDA 툴설정을하는단계입니다. 따라서현재사용하는디바이스를선택하고합성과시뮬레이션툴을선택하여설정해주는작업을하는단계라고볼수있습니다. [ 그림 4-60] 에서는현재작업을설정한모습을보여주고있습니다. Spartan3 Family의 100만게이트 676핀사양을가진디바이스를선택한모습을보여주고있으며, 합성과시뮬레이션툴은 ISE에서지원해주는것을사용하고있습니다. 아래그림에서이와같은설정모습을볼수있습니다. 136

설계 S/W 기본사용법 [ 그림 4-60] Device Properties 다음과정은프로젝트설정단계에서프로젝트에추가할파일중새로생성할파일의이름과타입을적어주는단계입니다. 따라서설계자가어떤파일을생성하여설계를할지미리생각하고프로젝트를선언하고있다면이단계에서새로생성할파일을적어주면됩니다. 새로생성할파일을현단계에서넣어주어도되고, 프로젝트선언이끝난다음에서도추가가가능합니다. [ 그림 4-61] 에서는 Create New Source단계의창을보여주고있습니다. [ 그림 4-61] Create New Source 현단계는이전단계와비슷한소스파일을추가하는단계이지만미리생성한소스파일을추가해주는단계입니다. 따라서사용자가미리설계된상위또는하위파일들 HBE-COMBO II User s Manual and Lab Guide 137

이있을시이것을현재생성하려는프로젝트에추가해주는부분입니다. 이부분도프로젝트를생성한후에도설정이가능합니다. [ 그림 4-62] 에는 Add Existing Sources 단계를보여주고있습니다. [ 그림 4-62] Add Existing Sources 이단계는프로젝트설정의마지막단계로써프로젝트설정단계에대한 Summary를보여주는창입니다. 따라서이전단계에프로젝트설정정보를다시확인해보면서잘못된부분이없는지다시확인하는단계입니다. 현단계에서잘못설정된부분을있으면 Back 버튼에의해이전단계로이동하여수정을하고, 이상이없으면 Finish 버튼을눌러프로젝트선언을마치면되겠습니다. 138

설계 S/W 기본사용법 [ 그림 4-63] Project Summary 이전까지의작업으로현작업에대한프로젝트선언작업을마쳤습니다. 따라서이후에만들어지는모든파일들은현재의프로젝트폴더내에서되고관리가될것입니다. [ 그림 4-64] 에서는프로젝트설정을마치고 ISE창에설정된모습을보여주고있습니다. Sources창에서현재설정된프로젝트인 watch와디바이스인 Spartan3 계열의디바이스가보여지고있습니다. [ 그림 4-64] 타이틀에표시된프로젝트 HBE-COMBO II User s Manual and Lab Guide 139

3) Design Entry Schematic Editor 1 특징특정기능을가진심볼라이브러리를생성하여, 그심볼라이브러리의입출력데이터라인을선 (wire) 등으로각심볼등의입출력데이터신호를연결하여논리회로를설계하는방법입니다. 2 Schematic 선택하기 Schematic을이용해하나의논리회로를설계하기위해서는 Schematic Design 창을활성화시켜야하는데, [ 그림 4-65] 과같이 File -> New 메뉴를선택하여 New 창을활성화한후 Schematic이라는항목을선택하여 OK 버튼을누르면 [ 그림 4-66] 과같이 Schematic Editor 창이활성화됩니다 [ 그림 4-65] 설계메뉴에서의 Schematic 선택 140

설계 S/W 기본사용법 [ 그림 4-66] Schematic Editor 3 심볼라이브러리 Schematic 으로작업할수있는환경이되었으면이곳에 symbol을삽입해주어야합니다. 따라서 Sources 창에서아래쪽에 Symbols를선택하면아래 [ 그리 4-67] 과같은창이활성화되고, Symbol Name Filter에서찾고자하는 Symbol을검색하여찾으면됩니다. 그림에서는 bscan_spartan3을선택하는부분을보여주고있습니다. 또한이창에서는 Symbol을회전할수있는 Orientation 설정부분과, 현재선택한 Symbol에대한정보를확인할수있는 Symbol Info 버튼이있습니다. HBE-COMBO II User s Manual and Lab Guide 141

[ 그림 4-67] Symbols 위의그림과같이심볼의이름을알고있을때직접 Symbol의이름으로검색하여불러와사용이가능하고 Symbols에서직접심볼을검색하여찾아설계소스에추가해주면됩니다. 4 각심볼의연결이전의작업으로심볼을불러오면심볼간의연결을해주어야합니다. 또한심볼을디바이스의 I/O 핀과연결할수있는포트를연결해주어야합니다. [ 그림 4-68] 는심볼을그리는데사용하는아이콘들이나와있습니다. [ 그림 4-68] Tools [ 그림 4-68] 와같이자주사용하는아이콘에서는 Wire를추가해주는부분과, 각 Wire 간의이름을주는아이콘, 심볼을추가하는아이콘, 화면에대한확대, 축소하는아이콘들이포함되어있습니다. 따라서설계자가이러한아이콘을통해 Schematic으로설계를하는데쉽게할수있습니다. [ 그림 4-69] 에서는심볼들간의연결하는모습을볼수있습니다. 왼쪽상단의 AND2에 142

설계 S/W 기본사용법 마우스를가져가면, 그림과같이사각형모양의그림이 4개가생기게됩니다. 이것은심볼의핀과연결하여 Wire을생성하겠다는표시입니다. 따라서이상태로 Wire을생성하면서연결하려는심볼의핀까지마우스로드래그해주면됩니다. [ 그림 4-69] 마우스포인터의변화 [ 그림 4-70] Wire 연결이름으로연결할경우에는연결하고자하는 Node를 [ 그림 4-71] 와같이 Symbol에서 wire을일정부분연결한후마우스로이름을부여하는모습을보여주고있습니다. 메뉴의 Add -> Net Name을선택한후에 ISE의 Processes 창에서 Name의이름을적어주면화면의마우스커서옆에이름이표시되게됩니다. 이상태에서미리그려둔 Wire에마우스로클릭하면 Wire에이름이표시되게됩니다. [ 그림 4-71] 이름으로연결 HBE-COMBO II User s Manual and Lab Guide 143

Text Editor (HDL 에의한설계 ) HDL에의한설계의기본내용은 Quartus II에설명이되어있으므로 ISE 설명에서는생략하고설계방법으로바로넘어가도록하겠습니다. 1 Text File 선택하기 Text의 HDL을이용하여설계하기위해서는 Text File 창을활성화시켜야하는데, File - > New 메뉴를선택하면, [ 그림 4-72] 과같이어떠한형태로설계를할것인지선택하게된다. 여기에서 Text File를선택하면그림과같이설계를할수있는창이활성화됩니다. 여기에서사용자가 HDL을이용하여설계를하고저장을하면됩니다. [ 그림 4-72] Text File 2 설계하기 HDL을이용한설계방법에는 VHDL, Verilog HDL에의한설계방법이있습니다. 이러한예제는 Quartus II 툴설명에서나온예제그림과같습니다. 저장하는파일이름도 Quartus II와같은 VHDL 파일은.vhd, Verilog HDL 파일은.v의확장자를가지고저장합니다. 여기에서도 Quartus II와마찬가지로메뉴의 Edit -> Language Templates가존재하여각언 144

설계 S/W 기본사용법 어에대한기본적인현태를지원해주고있습니다. 따라서사용자는이러한메뉴를이용하여간단하게 HDL을작성할수있습니다. [ 그림 4-73] 은 Language Templates를보여주고있습니다. [ 그림 4-73] Language Templates 4) Compile 1 역할컴파일러는과정은 Quartus II에서설명한같은목적을가지고수행을하게됩니다. 여기에서는 Xilinx ISE에서의컴파일과정을살펴보기로하겠습니다. 2 Compiler ISE에서는컴파일과정을크게 3부분으로나누고있습니다. ISE Processes창에서볼수있듯이 Synthesize, Implement Design, Generate Programming File로나뉘고있습니다. Synthesize는현재설계한회로에대한부분을확인하는작업을하게됩니다. 따라서사용자의설계파일을보고컴파일을하는부분입니다. 설계소스를보고문법적인오류에대한검사를하고이에대한합성을하는단계입니다. Implement Design은디바이스를보고컴파일하는과정입니다. 따라서디바이스에대한디바이스의로직에이전에컴파일한소스를배치하는단계입니다. 또한디바이스의핀에서어떠한핀을사용하여제어를할지결정하는단계입니다. 여기에서설계소스에서사용하는핀을지정하여사용할수있도록활성화시켜주는작업을하게됩니다. Generate Programming File은프로그램에관련된작업을하게됩니다. 따라서프로그램할수있는파일을생성하는작업을하게됩니다. 여기에서 HBE-COMBO II User s Manual and Lab Guide 145

는 FPGA 디바이스및 PROM등의디바이스에프로그램할수있는파일로변환해줍니다. 이렇게나눠져있는컴파일수행작업은메뉴의 Process 또는툴의 Processes 창에서실행을할수있습니다. 위에있는각각의작업에마우스오른쪽키를누르면팝업창이활성화되는데, 여기에서 run을클릭하여각각의컴파일작업을수행하게됩니다. [ 그림 4-74] 에서는이러한컴파일작업을보여주고있습니다. 여기에서는 Synthesis 작업에대한컴파일수행작업을보여주고있습니다. 나머지도이작업과똑같이수행해주면됩니다. 146

설계 S/W 기본사용법 [ 그림 4-74] Compile 5) Assignments 1 역할이작업은디바이스의 I/O핀설정을위한작업입니다. Quartus II에설명을참고해보기바랍니다. 2 Assign Package Pins 프로젝트설정단계에서디바이스설정을미리해두었기때문에여기에서는핀에대한설정만해주면됩니다. 컴파일과정에서컴파일러가포트에대한정보를가지게됩니다. 따라서핀설정과정에서사용하려는핀을불러와서타겟으로사용하는디바이스에 Assign 하게되는것입니다. 이작업은 Processes 창에서할수있습니다. Processes 메뉴에서 User Constraints -> Assign Package Pins에서이러한작업을수행하게됩니다. 이메뉴를마우스로클릭하면확장자가.ucf 파일을생성하면서핀을할당하는새로운창이활성화되는데여기에서핀을할당을할수있습니다. 이창에서는 Design Object List에이전에설계한회로의 I/O Name이미리지정이되어있습니다. 따라서사용자는해당되는 I/O Name에핀을할당해주면됩니다. Design Object List에서 Loc에핀번호를적어서할당해주면됩니다. [ 그림 4-75] 에서는핀이할당된모습을보여주고있습니다. HBE-COMBO II User s Manual and Lab Guide 147

[ 그림 4-75] Assign Package Pins 6) Configure Device (impact) Configure Device 작업은현재까지의툴에서의작업을직접디바이스에다운하여디바이스를직접동작해보는작업입니다. 따라서이전까지의툴에서의설계작업을통한결과파일을디바이스에직접다운하여동작을시켜보는작업이라할수있습니다. ISE에서는 impact를통해서이러한작업을할수있습니다. 이전까지의설계와컴파일작업이끝난상태에서 Generate Programming File를실행하면프로그램할수있는파일이생성됩니다. 그리고 Generate Programming File -> Configure Device (impact) 를실행하면프로그램을위한작업창이활성화됩니다. 다음 [ 그림 4-76] 에서는 impact을실행시초기화면을보여주고있습니다. 148

설계 S/W 기본사용법 [ 그림 4-76] impact 여기에서는다운하려는디바이스에대한다운방식을선택해주는작업입니다. 모드와사용하려는디바이스가어떠한것인지선택을해주어야합니다. 현재장비에서는 Spartan3 디바이스를 JTAG 방식으로다운하는모드를취하고있으므로, 처음에있는 Configure devices using Boundary-Scan(JTAG) 을선택해서 Finish 버튼을눌러주면됩니다. 현재장비에서사용하고있는디바이스는 XC3S1000F676의 FPGA 디바이스와 XCF08의 PROM을사용하고있습니다. 따라서디바이스검색에서 2개의디바이스가검색이되고, 검색된디바이스에어떠한프로그램파일을프로그램할지검색할수있는탐색창이나타나게됩니다. 따라서디바이스별로탐색창이생성되어파일을검색하여지정해주면됩니다. [ 그림 4-77] 에서는 JTAG를통해검색된디바이스와 XC2S1000 디바이스에프로그램파일인 full_demo.bit 파일이지정된모습을보여주고있습니다. HBE-COMBO II User s Manual and Lab Guide 149

[ 그림 4-77] impact 이렇게파일을지정했으면, 지정된디바이스에마우스오른쪽키를눌러 Program 메뉴를클릭해서디바이스에프로그램하면됩니다. [ 그림 4-78] 에서이러한모습을보여주고있습니다. 150

설계 S/W 기본사용법 [ 그림 4-78] Programming 7) Configuration PROM Xilinx 메인디바이스도 Altera 디바이스와같이 RAM 타입의디바이스이기때문에별도의 ROM 타입의디바이스를같이사용하여이러한점을보완해주고있습니다. 여기에서사용하는 PROM은 Xilinx사에서나온전용 Configuration PROM인 XCF08PVO48 을사용하고있습니다. 따라서여기도마찬가지로 Xilinx사의 tool인 ISE를가지고파일의변환작업을수행하여야합니다. Spartan 3를가지고컴파일된최종파일을이용하여변환작업을수행합니다. 여기서주의할점은 Generate Programming File의 Properties에서 FPGA Start-Up Clock을 CCLK로해주어야합니다. 이러한작업은 Properties를활성화시킨다음에 Category를 Startup Options을선택합니다. 그리고나타나는하위메뉴에서 FPGA Start-UP Clock을 CCLK로설정하고 Generate Programming File을실행시킵니다. 따라서 Generate PROM, ACE, or JTAG File을실행하기전에이러한작업이완료되어있어야합니다. 이러한작업은다운방식에따라어떠한다운방식의클럭을이용하여 FPGA 디바이스에프로그램할것인지결정해주는작업으로 PROM으로다운을할경우이러한작업이완료가되어있어야지만 PROM에의한동작이이루어질수있습니다. 만약 PROM에다운시이러한클럭의설정없이디바이스에프로그램하였을때 PROM에 HBE-COMBO II User s Manual and Lab Guide 151

의한동작이이루어지지않을수있습니다. 다음의과정을통해이러한변환작업을수행하는방법이나와있습니다. [ 그림 A-73] 은.bit 파일을 Configuration PROM에사용할수있는파일로변환을위한작업을보여주고있습니다. 따라서 ISE Processes 창에서컴파일을수행후, 위의그림과같이 Generate PROM, ACE, or JTAG File를실행시킵니다. [ 그림 4-79] Generate PROM, ACE, or JTAG File 152

설계 S/W 기본사용법 [ 그림 A-74] 는 impact를실행해디바이스및모드선택을하는설정창입니다. 여기에서는타겟디바이스에관한프로그램과정부터현재설정을하려는 PROM 관련파일변환작업을수행할수있는곳입니다. Xilinx PROM에적용해주기위한파일변환을위한작업을수행하려고하고있으므로 Prepare a PROM File 에대한부분을체크하고다음설정창으로넘어갑니다. [ 그림 4-80] Welcome to impact [ 그림 A-75] 는생성할파일에관한설정을해주는창입니다. 창에서윗부분에잇는 I want to targer a ~ 부분에서어떠한종류의 PROM을사용하고있는지선택을해줍니다. 여기에서는현재장비에장착되어있는 Xilinx PROM 을선택해줍니다. 다음으로 PROM File Format 은일반적인 PROM 프로그램파일형태인 MCS 를선택해줍니다. Checksum Fill Value (2 Hex Digits) 는 Default로설정되어있는 FF 로두고다음에있는파일의이름과저장되는폴더는사용자가직접설정을해줍니다. 설정전의 PROM File Name는 Untitled, Location은프로젝트가선언된폴더로지정이되어있습니다. 다음의그림에서는이러한작업을수행한그림이나와있습니다. HBE-COMBO II User s Manual and Lab Guide 153

[ 그림 4-81] Prepare PROM Files [ 그림 A-76] 은현재장비에서사용하고있는 Xilinx PROM 디바이스를선택하는작업을합니다. 현재타겟장비에서사용하고있는 PROM의종류를선택해주고이러한 PROM이몇개사용하는지를이창에서결정해주는것입니다. 따라서현재창에서는 Select a PROM 에서 Xilinx Device Module 에서사용하고있는 PROM인 XCF08PVO48 또는 XCF16PVO48을선택하게됩니다. 이러한디바이스를선택하고현재모듈에서몇개를사용하는지를 Add 버튼을이용하여넣어주면됩니다. 여기에서는현재디바이스모듈을확인해사용하는디바이스를넣어주고가운데창을통해디바이스첨가해서확인을해주면됩니다. 154

설계 S/W 기본사용법 [ 그림 4-82] Specify PROM Device [ 그림 A-77] 은현재까지의작업에대한 Summary 형태로보여주고있습니다. 따라서이전에서작업한것에대한내용을이창을통해최종적으로확인해볼수있습니다. 여기에서확인한내용이이상이없으면 Finish 버튼을눌러마치고, 수정사항이이상이있을시 Back 버튼을통해이전단계로가서다시수정을해주면됩니다. [ 그림 4-83] File Generation Summary 이상의작업을마치고아래의 Xilinx PROM에적용을해줄파일변환에대한창이활성화됩니다. 따라서여기에서변환할.bit 파일을현재의작업폴더에서찾아서넣어 HBE-COMBO II User s Manual and Lab Guide 155

주면됩니다. 이렇게하고창에서마우스오른쪽버튼을이용해 Generate File... 을이용해파일변환을수행하면됩니다. 아래에서이러한작업의완료된모습을보여주고있습니다. 현재까지두메인디바이스에대한 PROM 파일변환작업을수행하였습니다. 사전에위와같이파일변환작업을하고 Xilinx 디바이스의전용다운로드케이블을이용하여프로그램수행을하면됩니다. 프로그램하는방법은이전의 FPGA 디바이스를프로그램할때 PROM의파일을검색해서포함해주고, PROM도같이프로그램해주면됩니다. 156

HBE-COMBO II 05 HBE-COMBO II User s Manual & Lab Guide HBE-COMBO II 5. HBE-COMBO II 5.1 기본구성 본장비는다음의네부분으로크게구분할수있습니다. FPGA부, 클럭제어부, 내부장치부, 확장부로나누어지며장비를사용할때는이들을조작하여필요한동작을위한준비를하여야합니다. FPGA부는디바이스를이용한직접적인제어를하는곳으로, HBE-COMBO II의 Base board의커넥터를통한 FPGA 디바이스를장착하여사용이가능합니다. FPGA 모듈은 Altera, Xilinx 사의 2 종류의디바이스를모듈화하고있기때문에, 모듈의탈장착으로두회사의디바이스를모두사용할수있습니다. 따라서 HBE-COMBO II 장비에서는벤더의제한없이사용이가능합니다. 각디바이스모듈의구성은 FPGA 디바이스, 각디바이스의 PROM, 전원, 리셋단, JTAG port가구성되어있습니다. 따라서커넥터를통한전원의공급만으로디바이스모듈의단독구동이가능합니다. 클럭제어부는 HBE-COMBO II의 base board에구성되어있습니다. 이부분은 FPGA 디바이스에공급하는클럭을제어하는부분입니다. FPGA 디바이스는오실레이터를통해클럭을공급받아서사용하는환경을가지고있습니다. 하지만보드에장착되어있는클럭느 50MHz의주파수를가지고있는것으로사용자가설계환경에서사용하려는클럭은이러한주파수값을분주하여사용해서사용해야하는불편함이있습니다. 따라서이러한불편을해소하기위해제어부를두어클럭을분주해서 FPGA 디바이스로공급해주는역할을하고있습니다. 이러한클럭의공급은 0Hz에서 50MHz까지의 16분주를 Clock Select 스위치를이용하여 FPGA 디바이스로공급이가능합니다. 이러한클럭의값은클럭제어부의 7-Segment에서입력되는주파수를확인할수있습니다. 7- Segment에서주파수의숫자를확인할수있고 7-Segment 옆에있는 3개의 LED를통해 MHz, KHz, Hz를확인할수있습니다. 이러한클럭은 Base board의 50MHz의클럭을분주하여디바이스로공급해준값입니다. 이외에디바이스모듈에서별도의오실레이터를사용하여주파수를공급해줄수있습니다. 이때, Base board의주파수는 0Hz로해야하고, 디바이스모듈의클럭제어스 HBE-COMBO II User s Manual and Lab Guide 157

위치를이용하여 User Clock을활성화시켜주어야합니다. 이상태에서모듈에딥타입의오실레이터를장착하여디바이스에주파수공급이가능합니다. 여기에서사용하는오실레이터는 Half, Full의두가지타입이모두가능하고사용하는오실레이터값이그대로 FPGA 디바이스로전달됩니다. 내부창치부는 HBE-COMBO II 장비에구성되어있는장치들로, 포트를이용한외부의장비와통신을위한부분과내부의장치를제어하는부분들이있습니다. 세부적으로살펴보면입출력포트로는먼저 VGA 포트로모니터제어를위한것과, 2개의 UART 포트를이용하여 PC등과의시리얼통신실험을위한부분이있습니다. 또한 USB 포트를이용한시리얼통신실험을할수있습니다. 마지막으로 PS/2 포트를이용하여키보드나마우스를이용한제어실험을해볼수있습니다. 장비내부에있는실습장치들로는 Display 장치로 LED, 7-Senment, Dot Matrix등이있습니다. 또한 VFD(Vacuum, Fluorescent Display) 가있습니다. VFD는예전의 Text LCD와제어와동작은비슷하지만, 각 dot별형광물질에의한발광을하고있으므로밝기면에서우수한성능을보이고있습니다. 입력장치로는키패드, 버튼스위치, 버스스위치의다양한입력스위치를사용하여입력으로사용이가능합니다. 또한 Piezo를사용하여주파수에따른음을조절하여멜로디출력을할수있는부분이있고, 스테핑모터를사용하여모터구동실험을할수있습니다. 마지막으로적외선센서를이용한통신실험을할수있는 IrDA 모듈을사용하고있습니다. 확장부는 50핀확장커넥터 3개를사용하여 FPGA 디바이스를디지털신호를장비외부의장치로확장해서사용할수있는부분입니다. 디바이스모듈오른쪽에있는 EXT 1, EXT 2의확장커넥터는 5V의전원을포함한확장이가능합니다. 따라서이러한확장커넥터를통해한백전자 FPGA Application Module 모두제어가능합니다. 이러한모듈은신호등, 퍼즐에서엘리베이터까지다양한응용모듈을 HBE- COMBO II에서제어가가능합니다. 그리고 FPGA 디바이스모듈의위에배치하고있는 EXT 3은 50핀의확장커넥터로 5V, 12V의전원을공급받아사용이가능합니다. 이확장커넥터는 HBE-COMBO II용확장모듈을장착하여사용할수있는부분입니다. 이러한보드의종류로는신호등, 자판기, ADDA, Stereo Audio Codec Board등이있습니다. 따라서이러한모듈을 HBE-COMBO II 장비에장착하여다양한실험을해볼수있습니다. 158

HBE-COMBO II 5.2 장비사용하기 다음은장비사용을위한순서입니다. 본장비를활용하기위해서는 Altera 및 Xilinx 사에서제공하는설계소프트웨어인 Quartus II 및 ISE를가지고설계를하여야합니다. 또한모듈에내장하고있는 Configuration PROM을프로그램하기위해서도각회사의소프트웨어에서프로그램파일변환작업을통해서 PROM에프로그램해주어야합니다. 제품에포함된 CD-ROM에각회사에서제공되는소프트웨어버전의다운방법이포함되어있습니다. 이매뉴얼을통해다운받는방법을확인하면됩니다. 사용할 FPGA 모듈을선택하여 [ 그림 B-1] 과같이장착합니다. 장착시주의할사항은커넥터가정확히일치하게연결되지않은상태에서전원을인가할경우 FPGA 디바이스가손상될위험이있으므로주의하여야합니다. 또한디바이스모듈의제거시한쪽으로만너무힘을가하지말고전체적으로일정한힘을가해서제거하여야합니다. 만약이렇게하지않으면모듈의제거시핀의손상이갈수있습니다. [ 그림 5-1] 에서는 Altera Module의장착된모습을보여주고있습니다. [ 그림 5-1] Device Module 장착 제품에포함되어있는전원케이블을제품의오른쪽측면에있는전원연결포트에연결합니다. 이때제품의전원스위치가꺼져있는지확인한후전원케이블을전원플러그에연결합니다. LPT용케이블을 PC의프린트포트에연결하고다른한쪽을각디바이스별로있는 JTAG 케이블과연결해줍니다. 이 JTAG 케이블의다른한쪽을 FPGA 디바이스모듈의 JTAG 포트와연결해줍니다. 이러한케이블의연결로 PC에있는설계소프트웨어에서장비에있는 FPGA 디바이스를제어할수있습니다. 이사항은 [ 그림 5-2] 에서연결된사항을확인할수있습니다. 여기에서는 Altera Module을이용하여연결하는모습을보여주고있습니다. HBE-COMBO II User s Manual and Lab Guide 159

[ 그림 5-2] 전원및다운로드케이블연결 장비의오른쪽측면에있는전원스위치를 ON 하여 Base 보드의 Power LED와디바이스모듈의 +3.3V LED의불이제대로들어오는지확인하기바랍니다. 만약이러한 LED에불이들어오지않는다면전원케이블의연결이제대로되었는지, 장비의부품에서핀들간쇼트 ( 단락 ) 된부분이없는지확인하기바랍니다. 전원이들어오는초기에는디바이스에서나오는잔류전류의영향으로 LED의불이들어오는경우가있습니다. 이러한현상은장비의고장이아니고, 프로그램을하지않았을때의디바이스의잔류전류로인해이러한현상이일어나게됩니다. 따라서케이블이나 PROM을통한디바이스프로그램후동작이시작될때이러한현상이발생하지않습니다. 전원이정상적으로들어올경우제품오른쪽아래에있는 Clock Select 스위치를돌려원하는주파수를선택합니다. 선택된값은 Main Clock의 7-Segment 창에숫자에대한표시가되고, MHz, KHz, Hz라는 3개의 LED를사용하여주파수대를확인할수있습니다. Clock Select 스위치는아래의표에서어떠한클럭으로조절되는지확인할수있습니다. Clock SW 클럭입력 Clock SW 클럭입력 Clock SW 클럭입력 Clock SW 클럭입력 0 0Hz 4 100Hz 8 10kHz C 1MHz 1 1Hz 5 500Hz 9 50kHz D 5MHz 2 10Hz 6 1kHz A 100kHz E 25MHz 3 50Hz 7 5kHz B 500kHz F 50MHz Clock Select 스위치는위의표에서볼수있듯이 0Hz에서 50MHz까지의 16의클럭을 Base board에서 FPGA 디바이스모듈로공급해줍니다. 만약디바이스모듈에있는 User Clock을사용할경우 Base board의 Clock Select 스위치를 0으로하고디바이스모듈에있는 User Clock 스위치를 ON 하여사용하시면됩니다. 장비의구동은 FPGA 모듈의 PROM에미리작성해놓은데모소스가들어있으므로전원스위치를 ON 함과동시에데이터를다운받아데모동작이되게됩니다. 만약사용중다른동작을원할때는 PROM을프로그램한후 RESET 버튼을눌러새로운데모동작을실행할수있습니다. 160

HBE-COMBO II 각부분에대한자세한설명은 2 장및 3 장을참조하기바랍니다. HBE-COMBO II User s Manual and Lab Guide 161

06 HBE-COMBO II User s Manual & Lab Guide COMBOII 를이용한실험실습 6. COMBO II 를이용한실험실습 6.1 실험실습개요 본교재에서권하는 Digital 논리회로에대한실험순서는다음과같습니다. Graphic Design( 심볼에의한논리회로설계 ) 으로논리회로를설계합니다. 기능적인시뮬레이션 (Functional Simulation) 으로소프트웨어상에서설계한논리회로에입력조건을주었을때, 결과가잘나오는지확인합니다. 위의설계된논리회로에대해 VHDL로설계한논리회로와비교하여 VHDL로설계하는방법을익힙니다. 간단한논리회로또는조합논리회로를 VHDL로설계한경우 Graphic Design등의심볼을이용하여설계하는방법보다더복잡하게느껴질수있습니다. 하지만, 복잡한논리회로등을설계하는데분석및오류등을더쉽게파악할수있기때문에최근에는대부분 VHDL등의언어를이용하여논리회로를설계합니다. 설계한논리회로를 HBE-COMBO II 보드에프로그래밍하여보드에장착된여러입출력장비를이용해서위에서나온시뮬레이션결과를확인합니다. 교재에서연결소자의이름과보드에서의연결에대한설명은다음과같습니다. 연결소자의이름중 SW_ 는버튼스위치를나타냅니다. 여기에서 는 {A, B, C, D, E, F} 중하나를나타냅니다. 예를들어 SW_A를누르면, 버튼스위치중 A 문자의버튼스위치를나타냅니다. 버튼스위치를누르면 High( 1 ) 의값이입력되고, 버튼스위치를누르지않았을때는 Low( 0 ) 의값이입력됩니다. 162

COMBOII 를이용한실험실습 [ 그림 6-1] Button S/W 연결소자의이름중 SW 는버스스위치의입력을나타냅니다. 여기에서 는 0에서 15까지의숫자를갖고있습니다. 예를들어연결소자의이름이 SW0라면아래그림의 DIP 스위치중첫번째 DIP 스위치를말하는것입니다. 버스스위치로는 DIP Type의스위치를사용하는데각스위치를위로올렸을때, High( 1 ) 의값이전달되고, 아래로내렸을때는 Low( 0 ) 의값이전달됩니다. [ 그림 6-2] Bus 스위치입력 연결소자의이름중 LED 는연산된결과를확인해볼수있는 LED의출력을나타냅니다. 여기에서 는 1에서 8까지의숫자를갖고있습니다. 예를들어연결소자의이름이 LED6라면아래그림에서왼쪽에서 6번째의 LED를말하는것입니다. LED에 High( 1 ) 의신호가전달되었을때불이켜집니다. [ 그림 6-3] LED 출력 연결소자의이름중 SEG_ 는연산결과를확인해볼수있는 7-Segment의출력을나타냅니다. 여기에서 는 A, B, C, D, E, F, G, H의 Segment 데이터선을나타냅니다. 예를들어연결소자의이름이 SEG_B라면 7-Segment의데이터라인중 B 부분을나타냅니다. 7-Segment의데이터라인 SEG_A에서 SEG_H까지에각각 1, 0, 1, 1, 1, 1, 1, 0 의신호가 HBE-COMBO II User s Manual and Lab Guide 163

전달되었을때 7-Segment 에 6 이라는숫자가표시됩니다. [ 그림 6-4] 7-Segment 출력 본장비에서는 4개의 7-Segment가하나로구성되어있는 7-Segment LED Array를두개연결하여아래그림과같은구성되어있습니다. 7-Segment의데이터핀은 8개의 7-Segment에서공통으로사용하고있고, 각각의 common핀을따로두어서 8개의 7-Segment를따로선택하여데이터를출력시킬수있습니다. 각각같은기능의핀끼리연결되어있고, common 단자도각각출력되어이 common단자를 driving하여 7-Segment에동작시켜야합니다. [ 그림 6-5] 7-Segment 구성 동작시키기위해서는일반적인방법에서의 7-Segment라면 8개를사용할경우하나의 7- Segment당출력인 a, b, c, d, e, f, g, h 가각각출력핀을가져 64개의출력핀이필요로하게됩니다. 이럴경우너무많은출력핀이필요하므로이를개선하여위와같이 7-Segment 의출력은공통으로연결되어있고출력할위치를지정하는 com1 ~ com8의값을제어하여원하는숫자나문자를표시하는방법을사용하게됩니다. 아래의그림은 6개의 7-Segment에 1234 의숫자를표시하기위한방법을설명한것입니다. 164

COMBOII 를이용한실험실습 [ 그림 6-6] 7-Segment 동작원리 다시설명하면 7-segment 데이터값을 00000110 로주어 1 를표시하는값을주고 com1에 0 을그리고나머지 com2~4는 1 의값을주면첫번째 7-Segment에 1이표시됩니다. 다음으로데이터에 01011011 을주어 2 의값을주고 com2에 0 과 com1, com3~4에 1 을주면두번째 7- Segment에 2가표시됩니다. 이런순서로 4까지의숫자를표시하고다시처음으로돌아가위의내용을반복합니다. 이를약 1m/s 이상의주기로반복하면눈의잔상효과에의해 1234 의숫자가표시되게됩니다. 이교재에서는이 driving 하는부분을제외하고, 한 7-Segment에서만데이터가출력되는예제를사용합니다. HBE-COMBO II User s Manual and Lab Guide 165

6.2 논리게이트회로의응용 6.2.1 실습 1 : NAND 게이트입력수의확장 1) Block Diagram/Schematic File로설계 현재사용하고있는설계소프트웨어의설계창에서심볼을불러와 [ 그림 6-7] 과같이설계를합니다. 그래픽에디터로설계하는방법은이전에설명한설계소프트웨어기본사용법을참고해설계를하면됩니다. [ 그림 6-7] Graphic Design 으로회로설계 설계한논리회로를저장합니다. 저장할파일명은프로젝트명과동일하게하면되고, 설계한파일의확장자는 Altera Quartus II는.BDF, Xilinx ISE는.SCH로저장이됩니다. 참고 : 프로젝트명이 EX_1_1이기때문에초기값으로 EX_1_1.BDF 또는 EX_1_1.SCH의이름을갖습니다. 2) 컴파일및시뮬레이션을통한검증 설계를마치면컴파일과정을통해현재설계파일의문법적인오류검사및현재의설계파일을분할합성하는과정을거치면서최종적으로디바이스에프로그램할수있는파일을생성하고있습니다. 따라서컴파일과정은하나의설계파일을분석해현재의프로젝트에정보를구성하고최종적으로디바이스에프로그램할수있는파일을생성하는과정이라할수있습니다. 이러한컴파일과정은각회사의소프트웨어설명을참고하여실행하면됩니다. 컴파일과정이끝나면현재설계파일을설계소프트웨어에서검증해볼수있는시뮬레이션과정을하게됩니다. 이러한과정을거쳐현재설계한파일이이상없이설계가되었는지확인할수있는단계가되겠습니다. 이러한시뮬레이션과정은설계소프트웨어내부에서지원하는것을사용해서분석하는방법과각회사의홈페이지에서지원하는 ModelSim의다른 tool을연동하여사용하는방법이있습니다. 다음의 [ 그림 6-8] 에서는시뮬레이션을구동하고결과를적어보기바랍니다. 166

COMBOII 를이용한실험실습 [ 그림 6-8] 시뮬레이션결과표기 3) 보드에서의확인 사용하는디바이스는프로젝트선언단계에서미리정해주었기때문에핀에대한정의만여기에서해주면됩니다. 이때각설계소프트웨어를통한핀맵정의를다음의 [ 표 6-1] 에서참고하여핀을할당해주면됩니다. 아래표는보드에서디바이스와각종소자 (LED와 KEY) 를연결한것입니다. < 표 6-1> 핀설정 입력 출력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx A SW_1 Y10 AD10 B SW_2 W10 AC10 Y LED1 AF7 AB7 C SW_3 AA9 AA9 위의표를참고하여핀설정이끝나면 Altera Quartus II에서는컴파일을다시하여핀설정을프로젝트에적용해주고, Xilinx ISE에서는 Implement Design 하위를컴파일하여핀설정을디바이스에적용해줍니다. 사전에핀설정에대한변경사항을미리저장하고이작업을하기바랍니다. 핀할당과컴파일과정이끝나면각설계소프트웨어의디바이스다운로드창을이용하여디바이스에프로그램하면됩니다. 따라서 Quartus II의최종프로그램파일인.sof 파일을가지고프로그램하면되고, ISE에서는.bit 파일을가지고디바이스에프로그램하면됩니다. 이렇게프로그램을한다음에 [ 표 6-2] 를통해출력값을적어보기바랍니다. HBE-COMBO II User s Manual and Lab Guide 167

< 표 6-2. 결과확인 입 력 출 력 A B C Y 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 모든측정이끝나면보드의전원을끕니다. 4) VHDL으로의설계이부분에서는위에서 Graphic Editor를이용하여설계한논리회로를 VHDL이라는언어를이용해서설계하도록합니다. 이방법도앞에서설계하는것과같이 Project를선언을먼저합니다. 참고로여기에서는 EX_1_1_V로하고, 나머지설정부분은 Graphic Design에한부분과같게 Project를선언하면됩니다. 메뉴의 New를통해 VHDL로설계하는창을열게됩니다. Text Editor 창에서아래와같이설계합니다. 168

COMBOII 를이용한실험실습 ENTITY EX_1_1_V IS PORT( A B C : IN BIT; : IN BIT; : IN BIT; END EX_1_1_V; Y : OUT BIT); ARCHITECTURE HB OF EX_1_1_V IS SIGNAL T_AB SIGNAL T_ABC : BIT; : BIT; BEGIN T_ABC <= ( NOT C ) NOR ( A NAND B ); Y <= NOT T_ABC; END HB; 설계한논리회로를저장합니다. 저장할파일명은프로젝트명과동일하며확장자는 VHDL 파일을나타내는.VHD 입니다. 즉 EX_1_1_V.VHD로저장하면됩니다. 프로젝트명이 EX_1_1_V이기때문에초기값으로 EX_1_1_V.VHD의이름을가지며, 확장자가.VHD 인것에주의합니다. 주의 : 저장하는파일명과 ENTITY 문에서선언한이름이같지않을경우컴파일과정에서에러가발생됩니다. 이후의컴파일하는과정및시뮬레이션하는과정은 Graphic Editor를이용하여설계하는방법과동일합니다. 위의과정을참고하여컴파일에서디바이스의다운로드까지의최종과정을다시복습해보기바랍니다. HBE-COMBO II User s Manual and Lab Guide 169

6.2.2 실습 2 : 게이트의변환 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_1_2로해서프로젝트를생성합니다. 그래픽설계창을열고, NAND2 심볼라이브러리를사용하여아래의 [ 그림 6-9] 와같이논리회로를설계하고, EX_1_2라는파일명으로저장합니다. [ 그림 6-9] 논리회로 참고 : VHDL 로설계한논리회로 EX_1_2_V.VHD 파일. 위의회로는아래와같이 VHDL 로설계할수있으며, 저장은 EX_1_2_V.VHD 파일로합니다. ENTITY EX_1_2_V IS PORT( A, B : IN BIT; Y : OUT BIT); END EX_1_2_V; ARCHITECTURE HB OF EX_1_2_V IS BEGIN Y <= (NOT A) NAND ( NOT B); END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고, 그결과를 [ 그림 6-10] 에기록합니다. [ 그림 6-10] 시뮬레이션결과확인 170

COMBOII 를이용한실험실습 2) 보드상에서의확인 [ 표 6-3] 와같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-3> 핀설정 입력출력 핀이름연결소자 Altera Xilinx 핀이름연결소자 Altera Xilinx A SW_1 Y10 AD10 B SW_2 W10 AC10 Y LED0 AF7 AB7 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈과연결합니다. 보드에전원커넥터를연결하고전원을 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-4] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. 주의 : 보드에장착된스위치의특성을고려한다. (ON -> 1, OFF -> 0 ) < 표 6-4> 결과확인 입 력 출 력 A B Y 0 0 0 1 1 0 1 1 모든과정이끝나면전원을 OFF 합니다. 위의표의결과어떤게이트라할수있습니까? : ( ) 게이트 HBE-COMBO II User s Manual and Lab Guide 171

6.2.3 실습 3 : 상태버퍼 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard를통해 Name을 EX_1_3로프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-11] 과같이논리회로를설계하고, EX_1_3라는파일명으로저장합니다. [ 그림 6-11] 상태버퍼회로도 참고 : VHDL 로설계 EX_1_3_V.VHD 파일 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY EX_1_3_V IS PORT( A, C : IN STD_LOGIC; Y : OUT STD_LOGIC); END EX_1_3_V; ARCHITECTURE HB OF EX_1_3_V IS BEGIN Y <= A WHEN C = 1 ELSE Z ; END HB; 참고 : 위의선언에서 STD_LOGIC 이라는 TYPE이사용되었는데, BIT TYPE이 0 과 1 의값만을선언할수있는반면에, 이 STD_LOGIC TYPE은 0, 1, X (Unknown), Z (High- Impedance) 등의값을선언할수있습니다. 위에서 Tri-State의경우이 High-Impedance를사용하기때문에 STD_LOGIC으로선언되었습니다. Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-12] 에기록합니다. 172

COMBOII 를이용한실험실습 [ 그림 6-12] 결과확인 2) 보드상에서의확인 [ 표 6-5] 과같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-5> 핀연결 입력출력 핀이름연결소자 Altera Xilinx 핀이름연결소자 Altera Xilinx A SW_1 Y10 AD10 C SW_2 W10 AC10 Y LED1 AF7 AB7 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드에전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. HBE-COMBO II User s Manual and Lab Guide 173

Switch의상태를 [ 표 1-6] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. 주의 : 보드상에서의스위치특성에주의한다. ( 버튼스위치눌렀을때 -> 1, 버튼스위치누르지않았을때 -> 0 ) 입 력 출 력 A C Y 0 0 0 1 1 0 1 1 [ 표 1-6] 결과확인 모든과정이끝나면전원을끄고, 상태버퍼의진리표를참고로결과표의입 / 출력상태를비교해봅니다. 174

COMBOII 를이용한실험실습 6.3 가산기와감산기 6.3.1 실습 1 : 반가산기와전가산기 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard를통해 Name을 EX_2_1로프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 2비트병렬가산기회로를반가산기와전가산기를이용하여 [ 그림 6-13] 과같이설계하고, EX_2_1 이라는파일명으로저장합니다. [ 그림 6-13] 반가산기및전가산기회로도 참고 : VHDL 로설계 EX_2_1_V.VHD 파일 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY EX_2_1_V IS PORT( A : IN STD_LOGIC_VECTOR(1 DOWNTO 0); B : IN STD_LOGIC_VECTOR(1 DOWNTO 0); C : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)); END EX_2_1_V; ARCHITECTURE HB OF EX_2_1_V IS SIGNAL TMP : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN TMP <= A + B; C(1) <= TMP(2); C(0) <= A(0) AND B(0); S <= TMP(1 DOWNTO 0); END HB; HBE-COMBO II User s Manual and Lab Guide 175

Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-14] 에기록합니다. [ 그림 6-14] 시뮬레이션결과확인 176

COMBOII 를이용한실험실습 2) 보드상에서의확인 [ 표 6-6] 과같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-6> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx A1 SW_1 Y10 AD10 C1 LED1 AF7 AB7 A0 SW_2 W10 AC10 S1 LED2 AE7 AA7 B1 SW_3 AA9 AA9 S0 LED3 AB8 AF7 B0 SW_4 V9 Y9 C0 LED4 W8 AC7 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈과연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-7] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-7> 결과확인 입 력 출 력 A1 A0 B1 B0 C1 S1 S0 C0 0 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 모든과정이끝나면전원을끄고, 관련지식에나타낸반가산기및전가산기의진리표를참고로결과표의입 / 출력상태를비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 177

6.3.2 실습 2 : 반감산기와전감산기 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_2_2로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 2비트병렬감산기회로를반감산기와전감산기로 [ 그림 6-15] 와같이설계하고, EX_2_2라는파일명으로저장합니다. [ 그림 6-15] 반감산기및전감산기회로도 참고 : VHDL 로설계 EX_2_2_V.VHD 파일 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY EX_2_2_V IS PORT( A : IN STD_LOGIC_VECTOR(1 DOWNTO 0); B : IN STD_LOGIC_VECTOR(1 DOWNTO 0); BR : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); D : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)); END EX_2_2_V; ARCHITECTURE HB OF EX_2_2_V IS SIGNAL TMP : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN TMP <= A - B; BR(1) <= TMP(2); BR(0) <= ( NOT A(0) ) AND B(0); D <= TMP(1 DOWNTO 0); END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 178

COMBOII 를이용한실험실습 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-16] 에기록합니다. [ 그림 6-16] 결과확인 2) 보드상에서의확인 [ 표 6-8] 와같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-8> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx A1 SW_1 Y10 AD10 BR1 LED1 AF7 AB7 A0 SW_2 W10 AC10 D1 LED2 AE7 AA7 B1 SW_3 AA9 AA9 D0 LED3 AB8 AF7 B0 SW_4 V9 Y9 BR0 LED4 W8 AC7 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈과연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. HBE-COMBO II User s Manual and Lab Guide 179

Switch의상태를 [ 표 6-9] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-9> 결과확인 입 력 출 력 A1 A0 B1 B0 BR1 D1 D0 BR0 0 0 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 모든과정이끝나면전원을끄고, 관련지식에나타낸반감산기및전감산기의진리표를참고로결과표의입 / 출력상태를비교해봅니다. 180

COMBOII 를이용한실험실습 6.3.3 실습 3 : 4 비트병렬가감산기 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_2_3으로하여프로젝트를생성합니다. 그래픽설계창을열고, 라이브러리를이용하여 4비트병렬가감산기회로를 [ 그림 6-17] 과같이설계하고, EX_2_3라는파일명으로저장합니다. (Xilinx symbol name : acc4) [ 그림 6-17] 4 비트병렬가감산기회로도 주의 : 회로를간단하게하기위하여 Name matching( 노드명으로연결 ) 방법을사용하였습니다. 참고 : VHDL 로설계 EX_2_3_V.VHD 파일 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY EX_2_3_V IS PORT( C0 : IN STD_LOGIC; A : IN STD_LOGIC_VECTOR(4 DOWNTO 1); B : IN STD_LOGIC_VECTOR(4 DOWNTO 1); S : OUT STD_LOGIC_VECTOR(4 DOWNTO 1); C4 : OUT STD_LOGIC); END EX_2_3_V; ARCHITECTURE HB OF EX_2_3_V IS SIGNAL TMP : STD_LOGIC_VECTOR(5 DOWNTO 1); BEGIN PROCESS(C0, A, B) BEGIN IF C0 = 0 THEN TMP <= A + B; HBE-COMBO II User s Manual and Lab Guide 181

ELSIF C0 = 1 THEN TMP <= A B; END IF; END PROCESS; C4 <= TMP(5); S <= TMP(4 DOWNTO 1); END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-18] 에기록합니다. [ 그림 6-18] 결과확인 2) 보드상에서의확인 [ 표 6-10] 과같이각입력 / 출력포트의핀번호를설정합니다. 182

COMBOII 를이용한실험실습 < 표 6-10> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx C0 SW8 W12 AB14 S1 LED1 AF7 AB7 A1 SW0 Y13 Y16 S2 LED2 AE7 AA7 A2 SW1 AB12 AB15 S2 LED3 AB8 AF7 A3 SW2 AA12 AA15 S4 LED4 W8 AC7 A4 SW3 AD12 AE15 C4 LED6 AF6 AC6 B1 SW4 AC12 AD15 B2 SW5 U12 AF13 B3 SW6 AE11 AA13 B4 SW7 Y12 W15 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-11] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-11> 결과확인 SW 데이터 A 데이터 B 출력연산식 10진수 C 0 A 4 A 3 A 2 A 1 10진 B 4 B 3 B 2 B 1 10진 C44 4 S 4 S 3 S 2 S11 10진로 1 작성 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 3 0 1 0 0 4 0 0 1 1 1 7 1 0 0 0 8 0 1 1 1 1 15 1 1 1 1 15 1 0 0 1 1 3 0 0 0 1 1 1 1 1 1 1 15 0 1 1 0 6 1 0 1 1 1 7 1 0 0 0 8 1 1 0 1 0 10 1 1 1 1 15 1 1 1 1 1 15 1 1 1 1 15 모든과정이끝나면전원을끄고, 결과표에서입력에따른결과를살펴보고연산식을 10 진수를 HBE-COMBO II User s Manual and Lab Guide 183

사용하여표에나타냅니다. 184

COMBOII 를이용한실험실습 6.4 해독기와부호기 6.4.1 실습 1 : 논리게이트로구성한해독기와부호기 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_3_1로하여프로젝트를생성합니다. 그래픽설계창을열고, 라이브러리를이용하여 2 X 4 해독기와 4 X 2 부호기회로를 [ 그림 6-19] 과같이설계하고, EX_3_1라는파일명으로저장합니다. [ 그림 6-19] 해독기및부호기회로도 참고 : VHDL 파일로설계 EX_3_1_V.VHD 파일 ENTITY EX_3_1_V IS PORT( A, B : IN BIT; D : OUT BIT_VECTOR(3 DOWNTO 0); Y : OUT BIT_VECTOR(1 DOWNTO 0)); END EX_3_1_V; ARCHITECTURE HB OF EX_3_1_V IS BEGIN PROCESS(A,B) BEGIN IF A = '0' AND B = '0' THEN D <= "0001"; ELSIF A = '0' AND B = '1' THEN D <= "0010"; ELSIF A = '1' AND B = '0' THEN D <= "0100"; ELSIF A = '1' AND B = '1' THEN ENTITY EX_3_1_V IS PORT( A, B : IN BIT; D : OUT BIT_VECTOR(3 DOWNTO 0); Y : OUT BIT_VECTOR(1 DOWNTO 0)); END EX_3_1_V; ARCHITECTURE HB OF EX_3_1_V IS SIGNAL TMP : BIT_VECTOR(1 DOWNTO 0); BEGIN TMP <= A & B; PROCESS(TMP) BEGIN CASE TMP IS WHEN "00" => D <= "0001"; HBE-COMBO II User s Manual and Lab Guide 185

D <= "1000"; END IF; END PROCESS; Y <= A & B; END HB; WHEN "01" => D <= "0010"; WHEN "10" => D <= "0100"; WHEN "11" => D <= "1000"; END CASE; END PROCESS; Y <= A & B; END HB; 참고 : 위에서 VHDL로설계된두논리회로의결과는같습니다. 차이는 IF문을사용한것과 CASE문을사용한것의차이인데, 이차이 IF문은포괄적인제어분석을하는경우에사용되고, CASE문은각각에대해서조건제어를하는것이특징입니다. 이논리회로의결과에서는크게차이가나타나지않지만, 컴파일과정에서합성을하게되면, IF문은간단한 Control Logic으로변환되고 CASE문은 MUX형태로변하게되는차이가있습니다. 참고 : 위의 BIT_VECTOR 선언에서 D : OUT BIT_VECTOR(3 DOWNTO 0); 부분에서 (3 DOWNTO 0) 의앞 (3) 에는최상위비트가될부분을씁니다. 예를들어 A(3 DOWNTO 0) 과 A(0 TO 3) 의차이는각각의상위비트가 A(3) 인지 A(0) 인지의차이입니다. Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-20] 에기록합니다. [ 그림 6-20] 결과확인 2) 보드상에서의확인 [ 표 6-12] 과같이각입력 / 출력포트의핀번호를설정합니다. 186

COMBOII 를이용한실험실습 < 표 6-12> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx A SW_1 Y10 AD10 D0 LED1 AF7 AB7 B SW_2 W10 AC10 D1 LED2 AE7 AA7 D2 LED3 AB8 AF7 D3 LED4 W8 AC7 Y0 LED5 AF6 AD6 Y1 LED6 AE6 AC6 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈과연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-13] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-13> 결과확인 입 력 해독기출력 부호기출력 A B D0 D1 D2 D3 Y1 Y0 0 0 0 1 1 0 1 1 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 187

6.4.2 실습 2 : BCD-7 세그먼트해독기 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_3_2로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-21] 과같이설계하고, EX_3_2라는파일명으로저장합니다. [ 그림 6-21] BCD-7 세그먼트해독기 참고 : VHDL 파일로설계 EX_3_2_V.VHD 파일 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY EX_3_2_V IS PORT( A, B, C, D : IN STD_LOGIC; LT, RBI, BI : IN STD_LOGIC; S_a, S_b, S_c, S_d : OUT STD_LOGIC; S_e, S_f, S_g, RBO : OUT STD_LOGIC; com : OUT STD_LOGIC_VECTOR(1 to 6)); END EX_3_2_V; ARCHITECTURE HB OF EX_3_2_V IS SIGNAL TMP_D : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL TMP : STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN 188

COMBOII 를이용한실험실습 TMP_D <= A & B & C & D; com1 <= 0 ; com(2 to 6) <= 11111 ; PROCESS(LT, RBI, BI, TMP) BEGIN IF LT = '0' AND BI = '1' THEN TMP <= "1000000"; RBO <= '1'; ELSIF LT = '1' AND RBI = '0' AND TMP_D = "0000" THEN TMP <= "1111111"; RBO <= '0'; ELSIF BI = '0' THEN TMP <= "1111111"; ELSIF LT = '1' AND BI = '1' THEN CASE TMP_D IS WHEN "0000" => TMP <= "1111110"; RBO <= '1'; WHEN "0001" => TMP <= "0110000"; RBO <= '1'; WHEN "0010" => TMP <= "1101101"; RBO <= '1'; WHEN "0011" => TMP <= "1111001"; RBO <= '1'; WHEN "0100" => TMP <= "0110011"; RBO <= '1'; WHEN "0101" => TMP <= "1011011"; RBO <= '1'; WHEN "0110" => TMP <= "1011111"; RBO <= '1'; WHEN "0111" => TMP <= "1110000"; RBO <= '1'; WHEN "1000" => TMP <= "1111111"; RBO <= '1'; WHEN "1001" => TMP <= "1111011"; RBO <= '1'; WHEN OTHERS => END CASE; END IF; END PROCESS; S_a <= TMP(6); S_b <= TMP(5); S_c <= TMP(4); S_d <= TMP(3); S_e <= TMP(2); S_f <= TMP(1); S_g <= TMP(0); END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-22] 에기록합니다. HBE-COMBO II User s Manual and Lab Guide 189

[ 그림 6-22] 결과확인 2) 보드상에서의확인 [ 표 6-14] 과같이각입력 / 출력포트의핀번호를설정한후컴파일한다. < 표 6-14> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx A SW_1 Y10 AD10 S_a A AF5 AF5 B SW_2 W10 AC10 S_b B AE5 AE5 C SW_3 AA9 AA9 S_c C AD6 AB6 D SW_4 V9 Y9 S_d D AC6 AA6 LT SW0 Y13 Y16 S_e E AA2 K26 RBI SW1 AB12 AB15 S_f F AA1 K25 BI SW2 AA12 AA15 S_g G AA6 AC2 com1 COM1 Y1 AD2 com2 COM2 Y4 W2 com3 COM3 Y3 W1 com4 COM4 W1 AB4 com5 COM5 Y5 AB3 com6 COM6 W3 W6 RBO LED1 AF7 AB7 190

COMBOII 를이용한실험실습 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈과연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-15] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-15> 결과확인 10진수 BCD 입력 제어입력 출력 D C B A LT RBI BI S_a S_b S_c S_d S_e S_f S_g RBO X X X X X X 0 X X X X 0 X 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 X 1 2 0 0 1 0 1 X 1 3 0 0 1 1 1 X 1 4 0 1 0 0 1 X 1 5 0 1 0 1 1 X 1 6 0 1 1 0 1 X 1 7 0 1 1 1 1 X 1 8 1 0 0 0 1 X 1 9 1 0 0 1 1 X 1 10 1 0 1 0 1 X 1 11 1 0 1 1 1 X 1 12 1 1 0 0 1 X 1 13 1 1 0 1 1 X 1 14 1 1 1 0 1 X 1 15 1 1 1 1 1 X 1 표시기 표시 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 191

6.4.3 실습 3 : 8 X 3 부호기 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_3_3로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-23] 과같이설계하고, EX_3_3라는파일명으로저장합니다. [ 그림 6-23] 8x3 부호기회로도 참고 : VHDL 파일로설계 EX_3_3_V.VHD 파일 ENTITY EX_3_3_V IS PORT( I : IN BIT_VECTOR(7 DOWNTO 0); EI : IN BIT; EO, GS : OUT BIT; A : OUT BIT_VECTOR(2 DOWNTO 0)); END EX_3_3_V; ARCHITECTURE HB OF EX_3_3_V IS BEGIN PROCESS(I,EI) BEGIN IF EI = '1' THEN A <= "111"; GS <= '1'; EO <= '1'; ELSIF I ="11111111" THEN A <= "111"; GS <= '1'; EO <= '0'; ELSIF I(7) = '0' THEN A <= "000"; GS <= '0'; EO <= '1'; ELSIF I(7 DOWNTO 6) = "10" THEN A <= "001"; 192

COMBOII 를이용한실험실습 GS <= '0'; EO <= '1'; ELSIF I(7 DOWNTO 5) = "110" THEN A <= "010"; GS <= '0'; EO <= '1'; ELSIF I(7 DOWNTO 4) = "1110" THEN A <= "011"; GS <= '0'; EO <= '1'; ELSIF I(7 DOWNTO 3) = "11110" THEN A <= "100"; GS <= '0'; EO <= '1'; ELSIF I(7 DOWNTO 2) = "111110" THEN A <= "101"; GS <= '0'; EO <= '1'; ELSIF I(7 DOWNTO 1) = "1111110" THEN A <= "110"; GS <= '0'; EO <= '1'; ELSIF I(7 DOWNTO 0) = "11111110" THEN A <= "111"; GS <= '0'; EO <= '1'; END IF; END PROCESS; END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-24] 에기록합니다. HBE-COMBO II User s Manual and Lab Guide 193

[ 그림 6-24] 결과확인 2) 보드상에서의확인 [ 표 6-16] 와같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-16> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx I0 SW0 Y13 Y16 EO LED1 AF7 AB7 I1 SW1 AB12 AB15 GS LED2 AE7 AA7 I2 SW2 AA12 AA15 A0 LED3 AB8 AF7 I3 SW3 AD12 AE15 A1 LED4 W8 AC7 I4 SW4 AC12 AD15 A2 LED5 AF6 AD6 I5 SW5 U12 AF13 I6 SW6 AE11 AA13 I7 SW7 Y12 W15 EI SW8 W12 AB14 194

COMBOII 를이용한실험실습 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-17] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-17> 결과확인 입 력 출 력 EI I0 I1 I2 I3 I4 I5 I6 I7 EO GS A2 A1 A0 1 X X X X X X X X 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 X 0 1 1 1 1 1 1 0 X X 0 1 1 1 1 1 0 X X X 0 1 1 1 1 0 X X X X 0 1 1 1 0 X X X X X 0 1 1 0 X X X X X X 0 1 0 X X X X X X X 0 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 195

6.5 채널선택및분배회로 6.5.1 실습 1 : 채널선택회로 1) 4채널선택회로 1 Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_4_1A로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 4 채널선택회로를 [ 그림 6-25] 과같이설계하고, EX_4_1A라는파일명으로저장합니다. [ 그림 6-25] 4 채널선택회로회로도 참고 : VHDL 파일로설계 EX_4_1A_V.VHD 파일 ENTITY EX_4_1A_V IS PORT( D : IN BIT_VECTOR(0 TO 3); S : IN BIT_VECTOR(0 TO 1); Y : OUT BIT); END EX_4_1A_V; ARCHITECTURE HB OF EX_4_1A_V IS BEGIN PROCESS(D, S) BEGIN CASE S IS WHEN 00 => Y <= D(0); WHEN 01 => Y <= D(1); WHEN 10 => Y <= D(2); WHEN 11 => Y <= D(3); END CASE; END PROCESS; END HB; 196

COMBOII 를이용한실험실습 Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-26] 에기록합니다. [ 그림 6-26] 결과확인 2 보드상에서의확인 아래 [ 표 6-18] 와같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-18> 핀연결 입력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx D0 SW_1 Y10 AD10 Y LED1 AF7 AB7 D1 SW_2 W10 AC10 D2 SW_3 AA9 AA9 D3 SW_4 V9 Y9 S1 SW0 Y13 Y16 S0 SW1 AB12 AB15 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블을연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-19] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션 HBE-COMBO II User s Manual and Lab Guide 197

의결과와비교합니다. < 표 6-19> 결과확인 선택신호 입 력 출 력 S1 S0 D0 D1 D2 D3 Y 0 0 0 X X X 0 0 1 X X X 0 1 X 0 X X 0 1 X 1 X X 1 0 X X 0 X 1 0 X X 1 X 1 1 X X X 0 1 1 X X X 1 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. 198

COMBOII 를이용한실험실습 2) 4 X 1 멀티플렉서 1 Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard를통해 Name을 EX_4_1B로프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-27] 과같이설계하고, EX_4_1B라는파일명으로저장합니다. [ 그림 6-27] 4x1 멀티플렉서회로도 VHDL 파일은 A. 4채널선택회로에서설계한파일과동일합니다. Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-28] 에기록합니다. [ 그림 6-28] 결과확인 HBE-COMBO II User s Manual and Lab Guide 199

2 보드상에서의확인 [ 표 6-20] 와같이각입력 / 출력포트의핀번호를설정한후컴파일합니다. < 표 6-20> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx G1 SW_1 Y10 AD10 Y LED1 AF7 AB7 A SW_2 W10 AC10 B SW_3 AA9 AA9 C0 SW0 Y13 Y16 C1 SW1 AB12 AB15 C2 SW2 AA12 AA15 C3 SW3 AD12 AE15 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-21] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-21> 결과확인 선택신호 입력 출력 G1 B A C0 C1 C2 C3 Y 1 X X X X X X 0 0 0 0 X X X 0 0 0 1 X X X 0 0 1 X 0 X X 0 0 1 X 1 X X 0 1 0 X X 0 X 0 1 0 X X 1 X 0 1 1 X X X 0 0 1 1 X X X 1 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. EX_4_1A의 4 채널선택회로에서의결과값과 EX_4_1B의 4 X 1 멀티플렉서에서의결과값을비교해봅니다. 200

COMBOII 를이용한실험실습 6.5.2 실습 2 : 채널분배회로 1) 4채널분배회로 1 Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_4_2A로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 4채널분배회로를 [ 그림 6-29] 과같이설계하고, EX_4_2A라는파일명으로저장합니다. [ 그림 6-29] 4 채널분배회로회로도 참고 : VHDL 파일로설계 EX_4_2A_V.VHD 파일 ENTITY EX_4_2B_V IS PORT( I : IN BIT; S : IN BIT_VECTOR(0 T0 1); Y : OUT BIT_VECTOR(0 TO 3)); END EX_4_2B_V; ARCHITECTURE HB OF EX_4_2B_V IS BEGIN PROCESS(I,S) BEGIN CASE S IS WHEN 00 => Y(0) <= I; WHEN 01 => Y(1) <= I; WHEN 10 => Y(2) <= I; WHEN 11 => Y(3) <= I; END CASE; END PROCESS; END HB; HBE-COMBO II User s Manual and Lab Guide 201

Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-30] 에기록합니다. [ 그림 6-30] 결과확인 2 보드상에서의확인 [ 표 6-22] 과같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-22> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx I SW0 Y13 Y16 Y0 LED1 AF7 AB7 S0 SW_1 Y10 AD10 Y1 LED2 AE7 AA7 S1 SW_2 AA9 AC10 Y2 LED3 AB8 AF7 Y3 LED4 W8 AC7 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-23] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. 202

COMBOII 를이용한실험실습 < 표 6-23> 결과확인 선택신호 입력 출력 S1 S0 I Y0 Y1 Y2 Y3 X X 0 0 0 1 0 1 1 1 0 1 1 1 1 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 203

2) 74139를사용한채널분배회로 1 Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_4_2B로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-31] 과같이설계하고, EX_4_2B라는파일명으로저장합니다. [ 그림 6-31] 74139 를사용한회로도 VHDL 파일은 A. 4 채널분배회로에서설계한파일과같다. Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-32] 에기록합니다. [ 그림 6-32] 결과확인 204

COMBOII 를이용한실험실습 2 보드상에서의확인 [ 표 6-24] 과같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-24> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx A SW_1 Y10 AD10 Y0 LED1 AF7 AB7 B SW_2 W10 AC10 Y1 LED2 AE7 AA7 G SW0 Y13 Y16 Y2 LED3 AB8 AF7 Y3 LED4 W8 AC7 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-25] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-25> 결과확인 선택신호 입 력 출 력 B A G Y0 Y1 Y2 Y3 X X 1 0 0 0 0 1 0 1 0 0 1 1 0 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. EX_4_2A의 4 채널분배회로에서의결과값과 EX_4_2B의 74139를사용한분배회로에의결과값을비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 205

6.6 플립플롭과시프트레지스터 6.6.1 실습 1 : RS F/F RS F/F을설계하는방법은 NAND 게이트를이용한방법, NOT 게이트를이용한방법등이있는데, PLD는특성상어떤값이피드백되어자신의값에영향을미치는논리회로를설계하는데문제가있습니다. 예를들어아래와같이 NAND 게이트를이용하여 RS F/F를설계하였을때, 결과치는원래의 RS F/F의결과값과는다른엉뚱한값이출력되는것을볼수있습니다. [ 그림 6-33] NAND 게이트를이용한 RS F/F 설계 [ 그림 6-34] 위회로에대한결과 위의 [ 그림 6-34] 에서는 Altera Quartus II 에서이러한것을시뮬레이션했을때결과를 206

COMBOII 를이용한실험실습 보여주고있습니다. 여기에서는결과가전혀엉뚱하게시뮬레이션이되는것을확인할수있습니다. 이렇기때문에 PLD를설계할때에는 F/F 심볼라이브러리를따로불러와사용해야합니다. 이실험에서는그래픽에디터에서 RS F/F의심볼라이브러리를불러와서실험하고, 브래드보드에서는 7400(NAND) 를사용하여실험하여그결과를비교하도록하겠습니다. HBE-COMBO II User s Manual and Lab Guide 207

1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_5_1로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-35] 과같이논리회로를설계하고, EX_5_1라는파일명으로저장합니다. 다음의그림은 Quartus II에서작업한모습을보여주고있습니다. ( 참고로심볼명은 Quartus II 에서는 SRFF 이고, ISE 에서는 FDRS 를불러와서사용하면됩니다.) [ 그림 6-35] 회로도 참고 : VHDL 파일로설계 EX_5_1_V.VHD 파일 208 ENTITY EX_5_1_V IS PORT( PRN, CLR : IN BIT; R, S, CK : IN BIT; Q : OUT BIT ); END EX_5_1_V; ARCHITECTURE HB OF EX_5_1_V IS SIGNAL TMP : BIT; BEGIN PROCESS(PRN, CLR, R, S, CK) BEGIN IF PRN = '0' THEN TMP <= '1'; ELSIF CLR = '0' THEN TMP <= '0'; ELSIF CK'EVENT AND CK = '1' THEN IF R = '0' AND S = '0' THEN TMP <= TMP; ELSIF R = '0' AND S = '1' THEN TMP <= '1'; ELSIF R = '1' AND S = '0' THEN TMP <= '0'; ELSIF R = '1' AND S = '1' THEN TMP <= NOT TMP; END IF; END IF; END PROCESS;

COMBOII 를이용한실험실습 Q <= TMP; END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-36] 에기록합니다. [ 그림 6-36] 결과확인 2) 보드상에서의확인 [ 표 6-26] 과같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-26> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx PRN SW0 Y13 AD10 Q LED1 AF7 AB7 CLR SW1 AB12 AC10 S SW_1 Y10 Y16 R SW_2 W10 AB15 CK SW_3 AA9 AA15 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. HBE-COMBO II User s Manual and Lab Guide 209

설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-27] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-27> 결과확인 입력 출력 CLR PR CK S R Q 0 1 X X X 1 0 X X X 0 0 1 1 0 1 1 0 1 1 주의 : [ 표 5-3] 에서 X 의표시일경우입력상태를 0 이나 1 로바꾸어보며출력의변화유무를확인하고, 는클록펄스의상승에지즉 CK의데이터가 0 에서 1 로변하는순간에 F/F가동작한다는뜻입니다. 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. 210

COMBOII 를이용한실험실습 6.6.2 실습 2 : JK F/F 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_5_2로하여프로젝트를생성합니다. Block Diagram/Schematic File에서심볼라이브러리를이용하여 [ 그림 6-37] 과같이논리회로를설계하고, EX_5_2라는파일명으로저장합니다. 다음의설계파일은 Quartus II에서설계한모습을보여주고있습니다. (ISE 에서는 FJKPE 의심볼을사용하여설계합니다.) [ 그림 6-37] JK F/F 회로도 참고 : VHDL 파일로설계 EX_5_2_V.VHD 파일 ENTITY JKPR IS PORT( CLK, J, K, PR, CLR Q : BUFFER BIT ); END JKPR; : IN BIT; ARCHITECTURE HB OF JKPR IS BEGIN PROCESS(CLK, PR, CLR) BEGIN IF PR = '0' THEN Q <= '1'; ELSIF CLR = '0' THEN Q <= '0'; ELSIF CLK'EVENT AND CLK = '1' THEN IF J = '1' AND K = '0' THEN Q <= '1'; ELSIF J = '0' AND K = '1' THEN Q <= '0'; ELSIF J = '1' AND K = '1' THEN Q <= NOT Q; END IF; HBE-COMBO II User s Manual and Lab Guide 211

END IF; END PROCESS; END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-38] 에기록합니다. [ 그림 6-38] 결과확인 2) 보드상에서의확인 [ 표 6-28] 와같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-28> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx PRN SW0 Y13 AD10 Q LED1 AF7 AB7 CLR SW1 AB12 AC10 QN LED2 AE7 AA7 J SW_1 Y10 Y16 K SW_2 W10 AB15 CK SW_3 AA9 AA15 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. 212

COMBOII 를이용한실험실습 Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 5-4] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. 주의 : 표에서 X 표시일경우입력상태를 0 이나 1 로바꾸어보며출력의변화유무를확인하고, 클록펄스는누름스위치를눌렀다가떼는것으로누르면 1, 떼면 0 상태가되는것에유의하며, 는클록펄스의하강에지에서플립플롭이동작한다는의미입니다. < 표 6-29> 결과확인 입 력 출 력 CLR PR CK J K Q QN 0 1 X X X 1 0 X X X 0 0 1 1 0 1 1 0 1 1 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 213

6.6.3 실습 3 : 8 비트시프트레지스터 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_5_3으로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-39] 와같이논리회로를설계하고, EX_5_3라는파일명으로저장합니다. [ 그림 6-39] 8 비트시프트레지스터회로도 참고 : VHDL 파일로설계 EX_5_3_V.VHD 파일 ENTITY EX_5_3_V IS PORT( SW1, PB1, PB2 QA, QB, QC, QD QE, QF, QG, QH END EX_5_3_V; : IN BIT; -- SW1 : A, PB1 : CLRN, PB2 : NOT CLK : OUT BIT; : OUT BIT); ARCHITECTURE HB OF EX_5_3_V IS SIGNAL TMP : BIT_VECTOR(0 TO 7); BEGIN PROCESS(SW1, PB1, PB2) BEGIN IF PB1 = '0' THEN TMP <= "00000000"; ELSIF PB2'EVENT AND PB2 = '1' THEN IF SW1 = '1' THEN TMP <= '1' & TMP(0 TO 6); ELSIF SW1 = '0' THEN TMP <= '0' & TMP(0 TO 6); END IF; END IF; END PROCESS; 214

COMBOII 를이용한실험실습 QA <= TMP(0); QB <= TMP(1); QC <= TMP(2); QD <= TMP(3); QE <= TMP(4); QF <= TMP(5); QG <= TMP(6); QH <= TMP(7); END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이번에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-40] 에기록합니다. [ 그림 6-40] 결과확인 2) 보드상에서의확인 [ 표 6-30] 과같이각입력 / 출력포트의핀번호를설정합니다. HBE-COMBO II User s Manual and Lab Guide 215

< 표 6-30> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx SW1 SW_1 Y10 AD10 QA LED1 AF7 AB7 PB1 SW_2 W10 AC10 QB LED2 AE7 AA7 PB2 SW_3 AA9 AA9 QC LED3 AB8 AF7 QD LED4 W8 AC7 QE LED5 AF6 AD6 QF LED6 AE6 AC6 QG LED7 AD7 AF6 QH LED8 AC7 AE6 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. 실험은먼저 PB1을눌렀다떼어모든 F/F를리셋시킵니다. 스위치 SW1을꺼서 A 입력이 1 이되게한다음, 클록스위치 PB2를한번눌렀다놓는다. 이때 QA 만 1 이됩니다. A 입력이 0 이되도록 SW1을켭니다. 이상태를 [ 표 6-31] 의초기값으로기록하고, PB2를한번씩눌렀다뗀다음출력상태를관찰하여표에기록합니다. < 표 6-31> 결과확인 클록수 QA QB QC QD QE QF QG QH 초기값 1 2 3 4 5 6 7 8 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. 216

COMBOII 를이용한실험실습 6.7 계수회로 6.7.1 실습 1 : 비동기식 10 진계수기 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_6_1으로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-41] 과같이논리회로를설계하고, EX_6_1라는파일명으로저장합니다. [ 그림 6-41] 비동기식 10 진계수기회로도 참고 : VHDL 파일로설계 EX_6_1_V.VHD 파일 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY EX_6_1_V IS PORT( S3, S2, S1 : IN STD_LOGIC; -- S3 : SET9, S2 : CLR, S1 : CLK QA, QB, QC, QD : OUT STD_LOGIC ); END EX_6_1_V; ARCHITECTURE HB OF EX_6_1_V IS SIGNAL TMP : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(S3, S2, S1) BEGIN IF S3 = '0' THEN TMP <= "1111"; ELSIF S2 = '0' THEN TMP <= "0000"; ELSIF S1'EVENT AND S1 = '1' THEN IF TMP = "1001" THEN TMP <= "0000"; ELSE HBE-COMBO II User s Manual and Lab Guide 217

TMP <= TMP + 1; END IF; END IF; END PROCESS; QA <= TMP(3); QB <= TMP(2); QC <= TMP(1); QD <= TMP(0); END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-42] 에기록합니다. [ 그림 6-42] 결과확인 2) 보드상에서의확인 [ 표 6-32] 과같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-32> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx S1 SW_1 Y10 AD10 QA LED1 AF7 AB7 S2 SW_2 W10 AC10 QB LED2 AE7 AA7 S3 SW_3 AA9 AA9 QC LED3 AB8 AF7 QD LED4 W8 AC7 218

COMBOII 를이용한실험실습 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. 각스위치를 [ 표 6-33] 와같이되도록스위치를변화시키며출력을관찰하여표에기록하고위의시뮬레이션결과와비교합니다. < 표 6-33> 결과확인 CLKA CLR SET 출 력 S1 S2 S3 QD QC QB QA X 0 1 X 1 0 0 0 0 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 6 0 0 7 0 0 8 0 0 9 0 0 10 진 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 219

6.7.2 실습 2 : 동기식 10 진계수기 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_6_2로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-43] 과같이논리회로를설계하고, EX_6_2라는파일명으로저장합니다. [ 그림 6-43] 동기식 10 진계수기회로도 참고 : VHDL 파일로설계 EX_6_2_V.VHD 파일 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY EX_6_2_V IS PORT( LOAD, CLR, CK : IN STD_LOGIC; A, B, C, D : IN STD_LOGIC; QA, QB, QC, QD : OUT STD_LOGIC; RCO : OUT STD_LOGIC); END EX_6_2_V; ARCHITECTURE HB OF EX_6_2_V IS SIGNAL TMP : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(LOAD, CLR, CK) BEGIN IF CLR = '0' THEN TMP <= "0000"; RCO <= '0'; ELSIF CK'EVENT AND CK = '1' THEN IF LOAD = '0' THEN TMP <= A & B & C & D; RCO <= TMP(3) AND TMP(0); 220

COMBOII 를이용한실험실습 ELSE IF TMP = "1001" THEN TMP <= "0000"; RCO <= '1'; ELSE TMP <= TMP + 1; RCO <= '0'; END IF; END IF; END IF; END PROCESS; QA <= TMP(3); QB <= TMP(2); QC <= TMP(1); QD <= TMP(0); END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-44] 에기록합니다. [ 그림 6-44] 결과확인 2) 보드상에서의확인 HBE-COMBO II User s Manual and Lab Guide 221

[ 표 6-34] 와같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-34> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx LOAD SW0 Y13 Y16 QA LED1 180 AB7 CLR SW1 AB12 AB15 QB LED2 179 AA7 A SW_1 Y10 AD10 QC LED3 178 AF7 B SW_2 W10 AC10 QD LED4 177 AC7 C SW_3 AA9 AA9 RCO LED6 176 AD6 D SW_4 V9 Y9 CK SW_5 AE9 Y10 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. Switch의상태를 [ 표 6-35] 처럼변화시키면서 LED에서의출력을표에기록하고, 위의시뮬레이션의결과와비교합니다. < 표 6-35> 결과확인 초기값 클리어 로드 클록 출 력 D C B A CLR LOAD CK RCO QD QC QB QA X X X X 0 X GND 0 0 0 0 1 0 GND 0 1 2 3 0 0 0 0 1 1 4 5 6 7 8 9 10 진 수 222

COMBOII 를이용한실험실습 모든과정이끝나면전원을끄고, 결과표의입 / 출력상태를비교해봅니다. HBE-COMBO II User s Manual and Lab Guide 223

6.8 연산논리장치 6.8.1 실습 : 연산논리회로 1) Block Diagram/Schematic을이용한설계및시뮬레이션검증 New Project Wizard에서 Name을 EX_7_1로하여프로젝트를생성합니다. 그래픽설계창을열고, 심볼라이브러리를이용하여 [ 그림 6-45] 와같이논리회로를설계하고, EX_7_1라는파일명으로저장합니다. [ 그림 6-45] 연산논리회로회로도 참고 : VHDL 파일로설계 EX_7_1_V.VHD 파일 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY EX_8_1_V IS PORT( M, C : IN STD_LOGIC; S : IN STD_LOGIC_VECTOR(3 DOWNTO 0); A, B : IN STD_LOGIC_VECTOR(3 DOWNTO 0); EQ : OUT STD_LOGIC; F : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ); END EX_8_1_V; ARCHITECTURE HB OF EX_8_1_V IS SIGNAL TMP : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(S, A, B, M, C) BEGIN 224

COMBOII 를이용한실험실습 IF M = '1' THEN CASE S IS WHEN "0000" => TMP(3 DOWNTO 0) <= NOT A; WHEN "0001" => TMP(3 DOWNTO 0) <= NOT ( A OR B); WHEN "0010" => TMP(3 DOWNTO 0) <= ( NOT A ) AND B; WHEN "0011" => TMP(3 DOWNTO 0) <= "0000"; WHEN "0100" => TMP(3 DOWNTO 0) <= NOT ( A AND B ); WHEN "0101" => TMP(3 DOWNTO 0) <= NOT B; WHEN "0110" => TMP(3 DOWNTO 0) <= A XOR B; WHEN "0111" => TMP(3 DOWNTO 0) <= A AND ( NOT B ); WHEN "1000" => TMP(3 DOWNTO 0) <= ( NOT A ) OR B; WHEN "1001" => TMP(3 DOWNTO 0) <= NOT ( A XOR B ); WHEN "1010" => TMP(3 DOWNTO 0) <= B; WHEN "1011" => TMP(3 DOWNTO 0) <= A AND B; WHEN "1100" => TMP(3 DOWNTO 0) <= "1111"; WHEN "1101" => TMP(3 DOWNTO 0) <= A OR ( NOT B ); WHEN "1110" => TMP(3 DOWNTO 0) <= A OR B; WHEN "1111" => TMP(3 DOWNTO 0) <= A; WHEN OTHERS => END CASE; ELSIF M = '0' THEN CASE S IS WHEN "0000" => TMP <= A; WHEN "0001" => TMP <= ( A OR B ); WHEN "0010" => TMP <= ( A OR ( NOT B )); WHEN "0011" => TMP <= "1111" ; WHEN "0100" => TMP(3 DOWNTO 0) <= ( A + ( A AND ( NOT B ))) ; WHEN "0101" => TMP(3 DOWNTO 0) <= (( A OR B ) + ( A AND ( NOT B ))) ; WHEN "0110" => TMP(3 DOWNTO 0) <= A - B - "0001" ; WHEN "0111" => TMP(3 DOWNTO 0) <= ( A AND ( NOT B )) - "0001" ; WHEN "1000" => TMP(3 DOWNTO 0) <= A + ( A AND B ) ; HBE-COMBO II User s Manual and Lab Guide 225

WHEN "1001" => TMP(3 DOWNTO 0) <= A + B ; WHEN "1010" => TMP(3 DOWNTO 0) <= ( A OR ( NOT B )) + ( A AND B ) ; WHEN "1011" => TMP(3 DOWNTO 0) <= ( A AND B ) - "0001" ; WHEN "1100" => TMP(3 DOWNTO 0) <= A + A; WHEN "1101" => TMP(3 DOWNTO 0) <= ( A OR B ) + A ; WHEN "1110" => TMP(3 DOWNTO 0) <= ( A OR ( NOT B )) + A ; WHEN "1111" => TMP(3 DOWNTO 0) <= A - "0001" ; WHEN OTHERS => END CASE; END IF; END PROCESS; PROCESS(TMP, C, M) BEGIN IF M = '1' OR C = '1' THEN F <= TMP; ELSIF C = '0' THEN F <= TMP + 1; END IF; END PROCESS; EQ <= '1' WHEN F= "1111" ELSE '0'; END HB; Compile 하여문법오류검사및설계파일에대한시뮬레이션정보를분석하게됩니다. 시뮬레이션검증과정을통해이전에설계한회로에대해 tool 내부에서검증하는과정을합니다. 시뮬레이션을구동하고그결과를 [ 그림 6-46] 에기록합니다. 226

COMBOII 를이용한실험실습 [ 그림 6-46] 결과확인 2) 보드상에서의확인 [ 표 6-36] 과같이각입력 / 출력포트의핀번호를설정합니다. < 표 6-36> 핀연결 입 력 출 력 핀이름 연결소자 Altera Xilinx 핀이름 연결소자 Altera Xilinx A0 SW0 Y13 Y16 F0 LED1 AF7 AB7 A1 SW1 AB12 AB15 F1 LED2 AE7 AA7 A2 SW2 AA12 AA15 F2 LED3 AB8 AF7 A3 SW3 AD12 AE15 F3 LED4 W8 AC7 B0 SW4 AC12 AD15 EQ LED6 AF6 AD6 B1 SW5 U12 AF13 CN LED7 AE6 AC6 B2 SW6 AE11 AA13 B3 SW7 Y12 W15 C SW_1 Y10 AD10 M SW_2 W10 AC10 S0 SW_3 AA9 AA9 S1 SW_4 V9 Y9 S2 SW_5 AE9 Y10 HBE-COMBO II User s Manual and Lab Guide 227

S3 SW_6 AC9 AB9 컴파일을통해핀할당에대한정보를프로젝트에등록해줍니다. Parallel port Cable을 JTAG 케이블과연결하고, JTAG 케이블을다시디바이스모듈에연결합니다. 보드의전원커넥터를연결하고전원스위치를 ON합니다. 설계소프트웨어의다운로드창을통해디바이스에프로그램합니다. 논리연산을하기위해모드 M의스위치를 1 상태로놓고, 아래표와같이선택신호입력을변화시키며출력을관찰하여 [ 표 6-37] 에적습니다. < 표 6-37> 결과확인 (1) 연산선택신호입력 A = 0111, B = 1010 A = 1100, B = 1001 연산식 S3 S2 S1 S0 F3 F2 F1 F0 F3 F2 F1 F0 논리기능 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 표에서입력에따른결과를보고어떤논리연산이되었는가를조사하여표에기록합니다. 논리연산과정에서자리올림입력 C의논리레벨이 0 과 1 일때의결과에따라서차이가있는가를실험해봅니다. 산술연산을하기위해모드 M을 0 으로하고, 아래표와같이선택신호입력과데이터입력을변화시키면서출력을관찰하여표에기록합니다. [ 표 7-3] 에서입력에따른결과를보고어떤산술연산이되었는가를조사하여표에 10진수로연산식을써넣습니다. 228

COMBOII 를이용한실험실습 < 표 6-38> 결과확인 (2) 연산선택신호 데이터입력 결과출력 S3 S2 S1 S0 C A3 A2 A1 A0 10진 B3 B2 B1 B0 10진 CN F3 F2 F1 F0 A=B 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 0 0 0 0 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 1 1 0 0 1 1 연산식 모든과정이끝나면전원을끄고, 산술연산과정에서출력 A = B 단자는어느때결과가나오는지살펴봅시다. HBE-COMBO II User s Manual and Lab Guide 229

230

부록 07 부록 HBE-COMBO II User s Manual & Lab Guide 7. 부록 7.1 VFD 제어 HBE-COMBO II 보드내에장착된 16 X 2의 VFD(Vacuum Fluorescent Display) 를제어하기위한 VHDL 예제입니다. library ieee; use ieee.std_logic_1164.all; entity vfd_demo is port( clk : in std_logic; rst : in std_logic; -- 1kHz Clock vfd_e : out std_logic; vfd_rs : out std_logic; vfd_rw : out std_logic; vfd_data : out std_logic_vector(7 downto 0) ); end vfd_demo; architecture hb of vfd_demo is type state is (delay, function_set, entry_mode, disp_onoff, line1, line2, delay_t, clear_disp); signal vfd_state : state; signal cnt : integer range 0 to 4095; begin signal fun_cnt : integer range 0 to 1; signal vfd_fun : std_logic_vector(7 downto 0); -- 각영역별로지연시간정의 -- ex) cnt = 70 => 70 ms process(rst, clk) begin if rst = '1' then vfd_state <= delay; HBE-COMBO II User s Manual and Lab Guide 231

elsif clk'event and clk = '1' then case vfd_state is when delay => if cnt = 70 then vfd_state <= function_set; end if; when function_set => if cnt = 30 then vfd_state <= disp_onoff; end if; when disp_onoff => if cnt = 30 then vfd_state <= entry_mode; end if; when entry_mode => if cnt = 30 then vfd_state <= line1; end if; when line1 => if cnt = 20 then vfd_state <= line2; end if; when line2 => if cnt = 20 then vfd_state <= delay_t; end if; when delay_t => if cnt = 4000 then vfd_state <= clear_disp; end if; when clear_disp => if cnt = 1000 then vfd_state <= function_set; end if; end case; end if; end process; -- 각영역별로지연시간카운트 process(rst, clk) begin if rst = '1' then cnt <= 0; elsif clk'event and clk = '1' then case vfd_state is when delay => if cnt = 70 then cnt <= 0; else cnt <= cnt + 1; end if; when function_set => if cnt = 30 then cnt <= 0; else cnt <= cnt + 1; 232

부록 end if; end process; end case; end if; when disp_onoff => if cnt = 30 then cnt <= 0; else cnt <= cnt + 1; end if; when entry_mode => if cnt = 30 then cnt <= 0; else cnt <= cnt + 1; end if; when line1 => if cnt = 20 then cnt <= 0; else cnt <= cnt + 1; end if; when line2 => if cnt = 20 then cnt <= 0; else cnt <= cnt + 1; end if; when delay_t => if cnt = 4000 then cnt <= 0; else cnt <= cnt + 1; end if; when clear_disp => if cnt = 1000 then cnt <= 0; else cnt <= cnt + 1; end if; process(rst, clk) begin if rst = '1' then vfd_rs <= '0'; vfd_rw <= '0'; vfd_data <= "00000000"; elsif clk'event and clk = '1' then case vfd_state is when delay => null; -- 밝기조절을위해 vfd_fun 변수사용 when function_set => vfd_rs <= '0'; vfd_rw <= '0'; vfd_data <= vfd_fun; fun_cnt <= fun_cnt + 1; HBE-COMBO II User s Manual and Lab Guide 233

when disp_onoff => vfd_rs <= '0'; vfd_rw <= '0'; vfd_data <= "00001100"; when entry_mode => vfd_rs <= '0'; vfd_rw <= '0'; vfd_data <= "00000110"; when clear_disp => vfd_rs <= '0'; vfd_rw <= '0'; vfd_data <= "00000001"; when delay_t => vfd_rs <= '0'; vfd_rw <= '0'; vfd_data <= "00000010"; -- 첫번째라인문자데이터입력 when line1 => vfd_rw <= '0'; case cnt is when 0 => vfd_rs <= '0'; vfd_data <= "10000000"; when 1 => vfd_rs <= '1'; vfd_data <= "01001000"; -- H when 2 => vfd_rs <= '1'; vfd_data <= "01000010"; -- B when 3 => vfd_rs <= '1'; vfd_data <= "01000101"; -- E when 4 => vfd_rs <= '1'; vfd_data <= "00101101"; -- - when 5 => vfd_rs <= '1'; vfd_data <= "01000011"; -- C when 6 => vfd_rs <= '1'; vfd_data <= "01101111"; -- o when 7 => vfd_rs <= '1'; vfd_data <= "01101101"; -- m when 8 => vfd_rs <= '1'; vfd_data <= "01100010"; -- b when 9 => vfd_rs <= '1'; vfd_data <= "01101111"; -- o when 10 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 11 => vfd_rs <= '1'; vfd_data <= "01001001"; -- I when 12 => 234

부록 vfd_rs <= '1'; vfd_data <= "01001001"; -- I when 13 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 14 => vfd_rs <= '1'; vfd_data <= "01000010"; -- B when 15 => vfd_rs <= '1'; vfd_data <= "01100100"; -- d when 16 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 17 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 18 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 19 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 20 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when others => end case; -- 두번째라인문자데이터입력 when line2 => vfd_rw <= '0'; case cnt is when 0 => vfd_rs <= '0'; vfd_data <= "11000000"; when 1 => vfd_rs <= '1'; vfd_data <= "01000100"; -- D when 2 => vfd_rs <= '1'; vfd_data <= "01100101"; -- E when 3 => vfd_rs <= '1'; vfd_data <= "01101101"; -- M when 4 => vfd_rs <= '1'; vfd_data <= "01101111"; -- O when 5 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 6 => vfd_rs <= '1'; vfd_data <= "01100010"; -- b when 7 => vfd_rs <= '1'; vfd_data <= "01111001"; -- y when 8 => HBE-COMBO II User s Manual and Lab Guide 235

end if; end process; end case; end case; vfd_rs <= '1'; vfd_data <= "00100000"; -- when 9 => vfd_rs <= '1'; vfd_data <= "01001000"; -- H when 10 => vfd_rs <= '1'; vfd_data <= "01000001"; -- A when 11 => vfd_rs <= '1'; vfd_data <= "01001110"; -- N when 12 => vfd_rs <= '1'; vfd_data <= "01000010"; -- B when 13 => vfd_rs <= '1'; vfd_data <= "01000001"; -- A when 14 => vfd_rs <= '1'; vfd_data <= "01000011"; -- C when 15 => vfd_rs <= '1'; vfd_data <= "01001011"; -- K when 16 => vfd_rs <= '1'; vfd_data <= "00101110"; --. when 17 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 18 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 19 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when 20 => vfd_rs <= '1'; vfd_data <= "00100000"; -- when others => -- VFD 밝기조절을위한 PROCESS 문 process(clk) begin if clk'event and clk = '1' then case fun_cnt is when 0 => vfd_fun <= "00111100"; when 1 => vfd_fun <= "00111111"; when others => vfd_fun <= "00111100"; end case; end if; end process; 236

부록 vfd_e <= clk when rst = '0' else '0'; end hb; HBE-COMBO II User s Manual and Lab Guide 237

7.2 KEY PAD 제어 HBE-COMBO II 보드내에장착된키패드를제어하여스위치의입력을사용할수있는예제입니다. 4X3의 12개의버튼스위치를입력받아서사용할수있습니다. 예제는키패드를스캔방식을이용하여입력받아 LED로출력하는예제입니다. library ieee; use ieee.std_logic_1164.all; entity keypad_demo is port( clk : in std_logic; k_s : buffer std_logic_vector(2 downto 0); k_d : in std_logic_vector(3 downto 0); led : out std_logic_vector(7 downto 0)); end keypad_demo; architecture hb of keypad_demo is signal scan : integer range 0 to 2; signal led_cnt : integer range 0 to 15; signal k_stop : std_logic; signal key_data : integer range 0 to 15; begin -- 키패드의데이터라인의이벤트검색 ( 스캔동작결정을위한변수 ) k_stop <= k_d(3) or k_d(2) or k_d(1) or k_d(0); -- 캐패드의데이터라인을검색하여이벤트가발생하면스캔정지 process(clk) begin if clk'event and clk = '1' then if k_stop = '1' then null; else case k_s is when "000" => key_data <= "001"; when "001" => key_data <= "010"; when "010" => key_data <= "100"; when "100" => key_data <= "001"; when others => null; end case; end if; end if; end process; -- 스캔에따른키데이터값을검색하여어떤키값이입력되었는지검색 process(clk) begin if clk'event and clk = '1' then case k_s is 238

부록 when "001" => case k_d is when "0001" => key_data <= 1; when "0010" => key_data <= 4; when "0100" => key_data <= 7; when "1000" => key_data <= 0; when others => key_data <= 0; end case; when "010" => case k_d is when "0001" => key_data <= 2; when "0010" => key_data <= 5; when "0100" => key_data <= 8; when "1000" => key_data <= 10; when others => key_data <= 0; end case; when "100" => case k_d is when "0001" => key_data <= 3; when "0010" => key_data <= 6; when "0100" => key_data <= 9; when "1000" => key_data <= 0; when others => key_data <= 0; end case; when others => key_data <= 0; end if; end process; end case; -- 키값에따른 LED에데이터출력 process(clk) begin if clk'event and clk = '1' then case key_data is when 0 => led <= "00000000"; when 1 => led <= "00010001"; when 2 => led <= "00100010"; when 3 => led <= "00110011"; when 4 => led <= "01000100"; when 5 => led <= "01010101"; when 6 => led <= "01100110"; when 7 => led <= "01110111"; when 8 => led <= "10001000"; when 9 => led <= "10011001"; when 10 => led <= "10101010"; when 11 => led <= "10111011"; when 12 => led <= "11001100"; when 13 => led <= "11011101"; when 14 => led <= "11101110"; when 15 => led <= "11111111"; end case; end if; end process; end hb; HBE-COMBO II User s Manual and Lab Guide 239

7.3 Segment 제어 HBE-COMBO II 보드내에장착된 7-Segment를이용하여시계를구동하는예제입니다. 6개의7-Segment를사용하여시, 분, 초의시간을표현할수있습니다. 하나의탑파일에서 2개의하위파일을연동하여사용하도록구성되어있습니다. 탑파일에서는시, 분, 초의시계를구동하는기본동작을설계해놓았습니다. 두개의하위파일에서시, 분, 초의자릿수에대한숫자정의를위한파일과, 7-Segment에출력하기위한디코더용파일을정의해놓았습니다. -- file : watch.vhd library ieee; use ieee.std_logic_1164.all; --port 선언 entity watch is port( clk : in std_logic; -- 1KHz clear : in std_logic; seg_com : out std_logic_vector(7 downto 0); seg_data: out std_logic_vector(7 downto 0)); end watch; architecture hb of watch is -- 시계구동에사용하는변수선언 signal cnt : integer range 0 to 5; signal num : integer range 0 to 15; signal hour : integer range 0 to 59; signal min, sec : integer range 0 to 59; signal h10, h1 : integer range 0 to 9; signal m10, m1 : integer range 0 to 9; signal s10, s1 : integer range 0 to 9; signal cnts : integer range 0 to 499; signal s_clk : std_logic; signal m_clk : std_logic; signal h_clk : std_logic; -- 하위파일연동 component sep port( number : in integer range 0 to 63; ten, one : out integer range 0 to 15); end component; component decod port( bcd : in integer range 0 to 15; dot : in std_logic; seg_data: out std_logic_vector(7 downto 0)); end component; 240

부록 -- 시, 분, 초데이터값출력 begin s_s : sep port map(sec, s10, s1); s_m : sep port map(min, m10, m1); s_h : sep port map(hour, h10, h1); -- 7-Segment 디코터 s7 : decod port map(num, s_clk, seg_data); -- 초단위로클럭분주 process(clk, clear) begin if clear = '1' then cnts <= 0; s_clk <= '0'; elsif clk'event and clk = '1' then if cnts = 499 then cnts <= 0; s_clk <= not s_clk; else cnts <= cnts + 1; end if; end if; end process; -- 초에대한데이터값정의 process(s_clk, clear) begin if clear = '1' then sec <= 0; elsif s_clk'event and s_clk = '1' then if sec >= 59 then m_clk <= '1'; sec <= 0; else sec <= sec + 1; m_clk <= '0'; end if; end if; end process; -- 분에대한데이터값정의 process(m_clk, clear) begin if clear = '1' then min <= 0; elsif m_clk'event and m_clk = '1' then if min >= 59 then h_clk <= '1'; min <= 0; else min <= min + 1; h_clk <= '0'; end if; HBE-COMBO II User s Manual and Lab Guide 241

end if; end process; -- 시간에대한데이터값정의 process(h_clk, clear) begin if clear = '1' then hour <= 0; elsif h_clk'event and h_clk = '1' then if hour >= 23 then hour <= 0; else hour <= hour + 1; end if; end if; end process; -- 7-Segment 출력 process(clk) begin if clk'event and clk = '1' then case cnt is when 0 => seg_com <= "01111111"; num <= h10; when 1 => seg_com <= "10111111"; num <= h10; when 2 => seg_com <= "11011111"; num <= h10; when 3 => seg_com <= "11101111"; num <= h10; when 4 => seg_com <= "11110111"; num <= h10; when 5 => seg_com <= "11111011"; num <= h10; when others => cnt <= 0; end case; cnt <= cnt + 1; end if; end process; end hb; -- File : sep.vhd library ieee; use ieee.std_logic_1164.all; entity sep is port( number : in integer range 0 to 59; ten, one: out integer range 0 to 9); end sep; 242

부록 architecture hb of sep is begin -- 시, 분, 초의데이터값을받아들여자릿수를나누어출력 process(number) begin if number <= 9 then ten <= 0; one <= number; elsif number <= 19 then ten <= 1; one <= number - 10; elsif number <= 29 then ten <= 2; one <= number - 20; elsif number <= 39 then ten <= 3; one <= number - 30; elsif number <= 49 then ten <= 4; one <= number - 40; elsif number <= 59 then ten <= 5; one <= number - 50; else ten <= 0; one <= 0; end if; end process; end hb; library ieee; use ieee.std_logic_1164.all; File : decod.vhd entity decod is port( bcd : in integer range 0 to 15; dot : in std_logic; seg_data: out std_logic_vector(7 downto 0)); end decod; architecture hb of decod is signal seg_d : std_logic_vector(6 downto 0); begin -- 7-Segment 데이터값으로변환 process(bcd) begin case bcd is when 0 => seg_d <= "1111110"; when 1 => seg_d <= "0110000"; when 2 => seg_d <= "1101101"; when 3 => seg_d <= "1111001"; HBE-COMBO II User s Manual and Lab Guide 243

when 4 => seg_d <= "0110011"; when 5 => seg_d <= "1011011"; when 6 => seg_d <= "1011111"; when 7 => seg_d <= "1110000"; when 8 => seg_d <= "1111111"; when 9 => seg_d <= "1110011"; when others => seg_d <= "0000000"; end case; seg_data <= seg_d & dot; end process; end hb; 244

부록 7.4 DOT-Matrix 제어 HBE-COMBO II 보드내에장착된 14 X 10의 Dot-LED를이용하여문자를표시할수있는장치입니다. 여기예제에서는스캔방식을이용하여 DOT의 LED를제어하는방식을사용하고있습니다. 또한 2개의설계파일을이용하여탑파일에서하위파일을 component 문으로서로연동하여사용하고있습니다. 탑파일에서는 DOT를표시하는데이터의값을정의하고, 그데이터값을시프트하는방식으로글자가한칸이이동하는동작상태를정의해놓은것입니다. 하위파일은스캔으로구동시키는역할을하고있습니다. 따라서스캔에따라라인을선택하고그라인에맞는데이터값을정의해주는동작을하고있습니다. 밑에예제에서는 2개의파일을모두보여주고있습니다. -- file : dot_matrix.vhd library ieee; use ieee.std_logic_1164.all; entity dot_matrix is port ( clk : in std_logic; -- 1kHz dot_d : out std_logic_vector ( 13 downto 0); dot_scan : out std_logic_vector ( 9 downto 0) ); end dot_matrix; architecture hb of dot_matrix is -- 하위파일정의 component dot_disp port ( clk : in std_logic; dot_data_00 : in std_logic_vector (13 downto 0); dot_data_01 : in std_logic_vector (13 downto 0); dot_data_02 : in std_logic_vector (13 downto 0); dot_data_03 : in std_logic_vector (13 downto 0); dot_data_04 : in std_logic_vector (13 downto 0); dot_data_05 : in std_logic_vector (13 downto 0); dot_data_06 : in std_logic_vector (13 downto 0); dot_data_07 : in std_logic_vector (13 downto 0); dot_data_08 : in std_logic_vector (13 downto 0); dot_data_09 : in std_logic_vector (13 downto 0); dot_d : out std_logic_vector (13 downto 0); dot_scan : out std_logic_vector ( 9 downto 0) ); end component; -- 스캔및데이터라인에출력데이터동작을위한변수선언 signal dot_data_00 : std_logic_vector (13 downto 0); HBE-COMBO II User s Manual and Lab Guide 245

signal dot_data_01 : std_logic_vector (13 downto 0); signal dot_data_02 : std_logic_vector (13 downto 0); signal dot_data_03 : std_logic_vector (13 downto 0); signal dot_data_04 : std_logic_vector (13 downto 0); signal dot_data_05 : std_logic_vector (13 downto 0); signal dot_data_06 : std_logic_vector (13 downto 0); signal dot_data_07 : std_logic_vector (13 downto 0); signal dot_data_08 : std_logic_vector (13 downto 0); signal dot_data_09 : std_logic_vector (13 downto 0); signal data_00 : std_logic_vector (13 downto 0); signal data_01 : std_logic_vector (13 downto 0); signal data_02 : std_logic_vector (13 downto 0); signal data_03 : std_logic_vector (13 downto 0); signal data_04 : std_logic_vector (13 downto 0); signal data_05 : std_logic_vector (13 downto 0); signal data_06 : std_logic_vector (13 downto 0); signal data_07 : std_logic_vector (13 downto 0); signal data_08 : std_logic_vector (13 downto 0); signal data_09 : std_logic_vector (13 downto 0); signal data_10 : std_logic_vector (13 downto 0); signal data_11 : std_logic_vector (13 downto 0); signal data_12 : std_logic_vector (13 downto 0); signal data_13 : std_logic_vector (13 downto 0); signal data_14 : std_logic_vector (13 downto 0); signal data_15 : std_logic_vector (13 downto 0); signal data_16 : std_logic_vector (13 downto 0); signal data_17 : std_logic_vector (13 downto 0); signal data_18 : std_logic_vector (13 downto 0); signal data_19 : std_logic_vector (13 downto 0); signal data_20 : std_logic_vector (13 downto 0); signal data_21 : std_logic_vector (13 downto 0); signal data_22 : std_logic_vector (13 downto 0); signal data_23 : std_logic_vector (13 downto 0); signal data_24 : std_logic_vector (13 downto 0); signal data_25 : std_logic_vector (13 downto 0); signal data_26 : std_logic_vector (13 downto 0); signal data_27 : std_logic_vector (13 downto 0); signal data_28 : std_logic_vector (13 downto 0); signal data_29 : std_logic_vector (13 downto 0); signal data_30 : std_logic_vector (13 downto 0); signal data_31 : std_logic_vector (13 downto 0); signal data_32 : std_logic_vector (13 downto 0); signal data_33 : std_logic_vector (13 downto 0); signal data_34 : std_logic_vector (13 downto 0); signal data_35 : std_logic_vector (13 downto 0); signal data_36 : std_logic_vector (13 downto 0); signal data_37 : std_logic_vector (13 downto 0); signal data_38 : std_logic_vector (13 downto 0); signal data_39 : std_logic_vector (13 downto 0); signal data_40 : std_logic_vector (13 downto 0); signal data_41 : std_logic_vector (13 downto 0); signal data_42 : std_logic_vector (13 downto 0); signal data_43 : std_logic_vector (13 downto 0); signal data_44 : std_logic_vector (13 downto 0); signal data_45 : std_logic_vector (13 downto 0); signal data_46 : std_logic_vector (13 downto 0); 246

부록 signal data_47 : std_logic_vector (13 downto 0); signal data_48 : std_logic_vector (13 downto 0); signal data_49 : std_logic_vector (13 downto 0); signal data_50 : std_logic_vector (13 downto 0); signal data_51 : std_logic_vector (13 downto 0); signal cnt_clk : integer range 24 downto 0; signal cnt_data : integer range 51 downto 0; signal clk_20h : std_logic; begin -- 출력할코드선언 data_00 <= "00000001100010"; data_01 <= "11110010010010"; data_02 <= "10000100001010"; data_03 <= "10000100001011"; data_04 <= "10000100001010"; data_05 <= "10000010010010"; data_06 <= "10000001100010"; data_07 <= "10000000000000"; data_08 <= "10001111111110"; data_09 <= "10000000100000"; data_10 <= "00000000000000"; data_11 <= "00000011111110"; data_12 <= "00010010010000"; data_13 <= "00010010010000"; data_14 <= "00010010010000"; data_15 <= "00010010010000"; data_16 <= "00010011111110"; data_17 <= "00010000000000"; data_18 <= "00010011111110"; data_19 <= "00010000010000"; data_20 <= "11110011111110"; data_21 <= "00000000000000"; data_22 <= "00000010000010"; data_23 <= "11110001000010"; data_24 <= "10000000100010"; data_25 <= "10000000011110"; data_26 <= "10000000100010"; data_27 <= "10000001000010"; data_28 <= "10000010000010"; data_29 <= "10000000100000"; data_30 <= "10001111111110"; data_31 <= "10000000000000"; data_32 <= "00000000000000"; data_33 <= "00000010000010"; data_34 <= "00000001000010"; data_35 <= "00000000100010"; data_36 <= "00000000011110"; data_37 <= "00000000100010"; data_38 <= "00000001000010"; data_39 <= "00000010000010"; data_40 <= "00000000000000"; data_41 <= "11111111111110"; data_42 <= "00000000100000"; data_43 <= "00000000000000"; data_44 <= "00000000000000"; HBE-COMBO II User s Manual and Lab Guide 247

data_45 <= "00000000000000"; data_46 <= "00000000000000"; data_47 <= "00000000000000"; data_48 <= "00000000000000"; data_49 <= "00000000000000"; data_50 <= "00000000000000"; data_51 <= "00000000000000"; -- dot 구동을위한클럭분주 process (clk) begin if clk'event and clk = '1' then if cnt_clk = 24 then cnt_clk <= 0; clk_20h <= not clk_20h; else cnt_clk <= cnt_clk + 1; clk_20h <= clk_20h; end if; end if; end process; process (clk_20h) begin if clk_20h'event and clk_20h = '1' then if cnt_data = 51 then cnt_data <= 0; else cnt_data <= cnt_data + 1; end if; end if; end process; -- dot_data_09 에사전에정의된데이터시프트하면서넣어주는프로세서문 process (clk_20h) begin if clk_20h'event and clk_20h = '1' then dot_data_00 <= dot_data_01; dot_data_01 <= dot_data_02; dot_data_02 <= dot_data_03; dot_data_03 <= dot_data_04; dot_data_04 <= dot_data_05; dot_data_05 <= dot_data_06; dot_data_06 <= dot_data_07; dot_data_07 <= dot_data_08; dot_data_08 <= dot_data_09; case cnt_data is when 0 => dot_data_09 <= data_00; when 1 => dot_data_09 <= data_01; when 2 => dot_data_09 <= data_02; when 3 => dot_data_09 <= data_03; when 4 => dot_data_09 <= data_04; 248

부록 when 5 => dot_data_09 <= data_05; when 6 => dot_data_09 <= data_06; when 7 => dot_data_09 <= data_07; when 8 => dot_data_09 <= data_08; when 9 => dot_data_09 <= data_09; when 10 => dot_data_09 <= data_10; when 11 => dot_data_09 <= data_11; when 12 => dot_data_09 <= data_12; when 13 => dot_data_09 <= data_13; when 14 => dot_data_09 <= data_14; when 15 => dot_data_09 <= data_15; when 16 => dot_data_09 <= data_16; when 17 => dot_data_09 <= data_17; when 18 => dot_data_09 <= data_18; when 19 => dot_data_09 <= data_19; when 20 => dot_data_09 <= data_20; when 21 => dot_data_09 <= data_21; when 22 => dot_data_09 <= data_22; when 23 => dot_data_09 <= data_23; when 24 => dot_data_09 <= data_24; when 25 => dot_data_09 <= data_25; when 26 => dot_data_09 <= data_26; when 27 => dot_data_09 <= data_27; when 28 => dot_data_09 <= data_28; when 29 => dot_data_09 <= data_29; when 30 => dot_data_09 <= data_30; when 31 => dot_data_09 <= data_31; when 32 => dot_data_09 <= data_32; when 33 => HBE-COMBO II User s Manual and Lab Guide 249

end if; end process; end case; dot_data_09 <= data_33; when 34 => dot_data_09 <= data_34; when 35 => dot_data_09 <= data_35; when 36 => dot_data_09 <= data_36; when 37 => dot_data_09 <= data_37; when 38 => dot_data_09 <= data_38; when 39 => dot_data_09 <= data_39; when 40 => dot_data_09 <= data_40; when 41 => dot_data_09 <= data_41; when 42 => dot_data_09 <= data_42; when 43 => dot_data_09 <= data_43; when 44 => dot_data_09 <= data_44; when 45 => dot_data_09 <= data_45; when 46 => dot_data_09 <= data_46; when 47 => dot_data_09 <= data_47; when 48 => dot_data_09 <= data_48; when 49 => dot_data_09 <= data_49; when 50 => dot_data_09 <= data_50; when 51 => dot_data_09 <= data_51; -- 하위파일을직접변수를사용하여상위파일과연동 u0 : dot_disp port map ( clk => clk, dot_data_00 => dot_data_00, dot_data_01 => dot_data_01, dot_data_02 => dot_data_02, dot_data_03 => dot_data_03, dot_data_04 => dot_data_04, dot_data_05 => dot_data_05, dot_data_06 => dot_data_06, dot_data_07 => dot_data_07, dot_data_08 => dot_data_08, dot_data_09 => dot_data_09, dot_d => dot_d, dot_scan => dot_scan 250

부록 ); end hb; -- file : dot_disp.vhd library ieee; use ieee.std_logic_1164.all; entity dot_disp is port ( clk : in std_logic; dot_data_00 : in std_logic_vector (13 downto 0); dot_data_01 : in std_logic_vector (13 downto 0); dot_data_02 : in std_logic_vector (13 downto 0); dot_data_03 : in std_logic_vector (13 downto 0); dot_data_04 : in std_logic_vector (13 downto 0); dot_data_05 : in std_logic_vector (13 downto 0); dot_data_06 : in std_logic_vector (13 downto 0); dot_data_07 : in std_logic_vector (13 downto 0); dot_data_08 : in std_logic_vector (13 downto 0); dot_data_09 : in std_logic_vector (13 downto 0); dot_d : out std_logic_vector (13 downto 0); dot_scan : out std_logic_vector ( 9 downto 0) ); end dot_disp; architecture hb of dot_disp is signal cnt_clk : integer range 9 downto 0; begin -- 스캔을위한 cnt 값을정의 process(clk) begin if clk'event and clk = '1' then if cnt_clk = 9 then cnt_clk <= 0; else cnt_clk <= cnt_clk + 1; end if; end if; end process; -- 스캔구동, 10 개의스캔라인을하나씩선택하면서해당되는데이터값입력 process(cnt_clk) begin case cnt_clk is when 0 => dot_d <= dot_data_00; dot_scan <= "0000000001"; when 1 => dot_d <= dot_data_01; dot_scan <= "0000000010"; when 2 => dot_d <= dot_data_02; dot_scan <= "0000000100"; when 3 => HBE-COMBO II User s Manual and Lab Guide 251

end case; end process; end a; dot_d <= dot_data_03; dot_scan <= "0000001000"; when 4 => dot_d <= dot_data_04; dot_scan <= "0000010000"; when 5 => dot_d <= dot_data_05; dot_scan <= "0000100000"; when 6 => dot_d <= dot_data_06; dot_scan <= "0001000000"; when 7 => dot_d <= dot_data_07; dot_scan <= "0010000000"; when 8 => dot_d <= dot_data_08; dot_scan <= "0100000000"; when 9 => dot_d <= dot_data_09; dot_scan <= "1000000000"; 252

부록 7.5 시리얼통신 HBE-COMBO II 보드내에장착된 UART Port나 USB to Serial port를이용하여시리얼통신예제를구동할수있습니다. 여기에서는 25MHz의클럭을입력받아 115200의전송속도로조절하여 PC의데이터를장비와통신할수있는예제를보여주고있습니다. 장비에현재소스를다운한후하이퍼터미널의통신용프로그램을이용하여장비의데이터전송을할수있습니다. 이예제는장비에있는 9핀 UART 케이블과 USB 케이블을이용하여본예제를구동할수있습니다. USB 포트를이용할경우 USB 전용칩을이용하기때문에디바이스전용드라이브를설치하여야합니다. 이드라이브에대한설명을매뉴얼을참고하기바랍니다. -- file : rs232_demo.vhd -- 시리얼통신예제의 top 파일 -- 클럭에따른데이터를시리얼로전송 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rs232_demo is port ( reset : in std_logic; clk : in std_logic; parity_en : in std_logic; parity_mode : in std_logic; -- 25MHz input clock -- bus switch -- odd : 1, even : 0, bus switch ); end rs232_demo; rxd : in std_logic; txd : out std_logic architecture hb of rs232_demo is component rs_232 is port ( reset : in std_logic; clk : in std_logic; parity_en : in std_logic; parity_mode : in std_logic; rxd : in std_logic; txd : out std_logic; ); rxd_en : out std_logic; txd_en : in std_logic; uart_data_in : out std_logic_vector(7 downto 0); uart_data_out : in std_logic_vector(7 downto 0) HBE-COMBO II User s Manual and Lab Guide 253

end component; signal resetn : std_logic; signal rxd_en : std_logic; signal txd_en : std_logic; signal uart_data_in : std_logic_vector(7 downto 0); signal uart_data_out : std_logic_vector(7 downto 0); signal reg_rxd_en : std_logic_vector(7 downto 0); signal reg_data_in0 : std_logic_vector(7 downto 0); signal reg_data_in1 : std_logic_vector(7 downto 0); signal reg_data_in2 : std_logic_vector(7 downto 0); signal reg_data_in3 : std_logic_vector(7 downto 0); signal reg_data_in4 : std_logic_vector(7 downto 0); signal reg_data_in5 : std_logic_vector(7 downto 0); signal reg_data_in6 : std_logic_vector(7 downto 0); signal reg_data_in7 : std_logic_vector(7 downto 0); begin resetn <= not reset; u_rs_232 : rs_232 port map ( reset => reset, clk => clk, parity_en => parity_en, parity_mode => parity_mode, rxd => rxd, txd => txd, rxd_en => rxd_en, txd_en => txd_en, ); uart_data_in => uart_data_in, uart_data_out => uart_data_out process (resetn, clk) begin if resetn = '0' then reg_rxd_en <= (others => '0'); elsif clk'event and clk = '1' then reg_rxd_en <= reg_rxd_en(6 downto 0) & rxd_en; end if; end process; txd_en <= reg_rxd_en(7); process (resetn, clk) begin if resetn = '0' then reg_data_in0 <= (others => '0'); reg_data_in1 <= (others => '0'); 254

부록 reg_data_in2 <= (others => '0'); reg_data_in3 <= (others => '0'); reg_data_in4 <= (others => '0'); reg_data_in5 <= (others => '0'); reg_data_in6 <= (others => '0'); reg_data_in7 <= (others => '0'); elsif clk'event and clk = '1' then reg_data_in0 <= uart_data_in; reg_data_in1 <= reg_data_in0; reg_data_in2 <= reg_data_in1; reg_data_in3 <= reg_data_in2; reg_data_in4 <= reg_data_in3; reg_data_in5 <= reg_data_in4; reg_data_in6 <= reg_data_in5; reg_data_in7 <= reg_data_in6; end if; end process; uart_data_out <= reg_data_in7; end hb; -- file : rs_232.vhd -- 데이터전송속도설정 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rs_232 is port ( reset : in std_logic; clk : in std_logic; -- 25MHz input clock parity_en : in std_logic; parity_mode : in std_logic; rxd : in std_logic; txd : out std_logic; ); end rs_232; rxd_en : out std_logic; txd_en : in std_logic; uart_data_in : out std_logic_vector(7 downto 0); uart_data_out : in std_logic_vector(7 downto 0) architecture hb of rs_232 is signal resetn : std_logic := '0'; constant bit_rate : std_logic_vector(7 downto 0) := "10101101"; -- 20M / 115200 = 173 constant bit_rate_half : std_logic_vector(7 downto 0) := "01010110"; type rx_state is (rx_idle, rx_start, data_rx, rx_parity, rx_stop); signal rx_routine : rx_state; HBE-COMBO II User s Manual and Lab Guide 255

type tx_state is (tx_idle, tx_start, data_tx, tx_parity, tx_stop); signal tx_routine : tx_state; signal rx_bit_add : std_logic_vector(7 downto 0); signal cnt_rx_bit_rate : std_logic_vector(7 downto 0); signal cnt_rx_data : std_logic_vector(2 downto 0); signal cnt_tx_bit_rate : std_logic_vector(7 downto 0); signal cnt_tx_data : std_logic_vector(2 downto 0); signal rx_data : std_logic_vector(7 downto 0); signal tx_data : std_logic_vector(7 downto 0); signal reg_rxd : std_logic_vector(15 downto 0); signal tx_parity_chk : std_logic; begin resetn <= not reset; process (resetn, clk) begin if resetn = '0' then reg_rxd <= (others => '0'); elsif clk'event and clk = '1' then reg_rxd <= rxd & reg_rxd(15 downto 1); end if; end process; process (resetn, clk) begin if resetn = '0' then rx_bit_add <= (others => '0'); elsif clk'event and clk = '1' then if rx_routine = data_rx then if cnt_rx_bit_rate = bit_rate then rx_bit_add <= (others => '0'); else rx_bit_add <= rx_bit_add + reg_rxd(0); end if; else rx_bit_add <= (others => '0'); end if; end if; end process; process (resetn, clk) begin if resetn = '0' then rx_routine <= rx_idle; elsif clk'event and clk = '1' then case rx_routine is when rx_idle => if reg_rxd = "0000000000000000" then 256

부록 end if; end process; rx_routine <= rx_start; end if; when rx_start => if cnt_rx_bit_rate = bit_rate then rx_routine <= data_rx; elsif cnt_rx_bit_rate = bit_rate_half then if reg_rxd(0) = '1' then rx_routine <= rx_idle; end if; end if; when data_rx => if cnt_rx_data = "111" then if cnt_rx_bit_rate = bit_rate then if parity_en = '1' then rx_routine <= rx_parity; else rx_routine <= rx_stop; end if; end if; end if; when rx_parity => if cnt_rx_bit_rate = bit_rate then rx_routine <= rx_stop; end if; when rx_stop => if cnt_rx_bit_rate(5 downto 0) = bit_rate(7 downto 2) then rx_routine <= rx_idle; end if; end case; process (resetn, clk) begin if resetn = '0' then cnt_rx_bit_rate <= (others => '0'); elsif clk'event and clk = '1' then if rx_routine = rx_idle then cnt_rx_bit_rate <= (others => '0'); elsif cnt_rx_bit_rate = bit_rate then cnt_rx_bit_rate <= (others => '0'); else cnt_rx_bit_rate <= cnt_rx_bit_rate + '1'; end if; end if; end process; process (resetn, clk) begin if resetn = '0' then cnt_rx_data <= (others => '0'); elsif clk'event and clk = '1' then if rx_routine = data_rx then HBE-COMBO II User s Manual and Lab Guide 257

end if; end process; else end if; if cnt_rx_bit_rate = bit_rate then if cnt_rx_data = "111" then cnt_rx_data <= (others => '0'); else cnt_rx_data <= cnt_rx_data + '1'; end if; end if; cnt_rx_data <= (others => '0'); process (resetn, clk) begin if resetn = '0' then rx_data <= (others => '0'); elsif clk'event and clk = '1' then if rx_routine = data_rx then if cnt_rx_bit_rate = bit_rate - 1 then if rx_bit_add >= bit_rate_half then rx_data <= '1' & rx_data(7 downto 1); else rx_data <= '0' & rx_data(7 downto 1); end if; end if; elsif rx_routine = rx_idle then rx_data <= (others => '0'); end if; end if; end process; process (resetn, clk) begin if resetn = '0' then rxd_en <= '0'; elsif clk'event and clk = '1' then if rx_routine = rx_stop then if cnt_rx_bit_rate >= 10 then rxd_en <= '1'; else rxd_en <= '0'; end if; else rxd_en <= '0'; end if; end if; end process; process (resetn, clk) begin if resetn = '0' then uart_data_in <= (others => '0'); elsif clk'event and clk = '1' then if rx_routine = rx_stop then uart_data_in <= rx_data; end if; 258

부록 end if; end process; process (resetn, clk) begin if resetn = '0' then tx_routine <= tx_idle; elsif clk'event and clk = '1' then case tx_routine is when tx_idle => if txd_en = '1' then tx_routine <= tx_start; end if; when tx_start => if cnt_tx_bit_rate = bit_rate then tx_routine <= data_tx; end if; when data_tx => if cnt_tx_data = "111" then if cnt_tx_bit_rate = bit_rate then if parity_en = '1' then tx_routine <= tx_parity; else tx_routine <= tx_stop; end if; end if; end if; when tx_parity => if cnt_tx_bit_rate = bit_rate then tx_routine <= tx_stop; end if; when tx_stop => if cnt_tx_bit_rate = bit_rate - 10 then tx_routine <= tx_idle; end if; when others => tx_routine <= tx_idle; end case; end if; end process; process (resetn, clk) begin if resetn = '0' then cnt_tx_bit_rate <= (others => '0'); elsif clk'event and clk = '1' then if tx_routine = tx_idle then cnt_tx_bit_rate <= (others => '0'); elsif cnt_tx_bit_rate = bit_rate then cnt_tx_bit_rate <= (others => '0'); else cnt_tx_bit_rate <= cnt_tx_bit_rate + '1'; end if; end if; end process; HBE-COMBO II User s Manual and Lab Guide 259

process (resetn, clk) begin if resetn = '0' then cnt_tx_data <= (others => '0'); elsif clk'event and clk = '1' then if tx_routine = data_tx then if cnt_tx_bit_rate = bit_rate then if cnt_tx_data = "111" then cnt_tx_data <= (others => '0'); else cnt_tx_data <= cnt_tx_data + '1'; end if; end if; else cnt_tx_data <= (others => '0'); end if; end if; end process; process (resetn, clk) begin if resetn = '0' then tx_data <= (others => '0'); elsif clk'event and clk = '1' then if tx_routine = tx_idle then if txd_en = '1' then tx_data <= uart_data_out; end if; end if; end if; end process; process (resetn, clk) begin if resetn = '0' then tx_parity_chk <= '0'; elsif clk'event and clk = '1' then if tx_routine = tx_idle then if txd_en = '1' then tx_parity_chk <= uart_data_out(7) xor uart_data_out(6) xor uart_data_out(5) xor uart_data_out(4) xor uart_data_out(3) xor uart_data_out(2) xor uart_data_out(1) xor uart_data_out(0) xor parity_mode; end if; end if; end if; end process; process (resetn, clk) begin if resetn = '0' then txd <= '1'; elsif clk'event and clk = '1' then case tx_routine is when tx_idle => 260

부록 end if; end process; end case; txd <= '1'; when tx_start => txd <= '0'; when data_tx => if cnt_tx_data = "000" then txd <= tx_data(0); elsif cnt_tx_data = "001" then txd <= tx_data(1); elsif cnt_tx_data = "010" then txd <= tx_data(2); elsif cnt_tx_data = "011" then txd <= tx_data(3); elsif cnt_tx_data = "100" then txd <= tx_data(4); elsif cnt_tx_data = "101" then txd <= tx_data(5); elsif cnt_tx_data = "110" then txd <= tx_data(6); elsif cnt_tx_data = "111" then txd <= tx_data(7); else txd <= '1'; end if; when tx_parity => txd <= tx_parity_chk; when tx_stop => txd <= '1'; when others => txd <= '1'; end hb; HBE-COMBO II User s Manual and Lab Guide 261

7.6 Altera 설계소프트웨어설치방법 (Quartus II) Altera에서제공하는설계소프트웨어인 Quartus II를설치하기위해서는 Altera 홈페이지 (http://www.altera.com/) 의다운로드센터에서받을수있습니다. 여기에서는설계소프트웨어인 Quartus II 뿐만아니라, 디바이스의핀정보, 핀맵, 디바이스관련회로등의모든정보를여기에서찾아서확인할수있습니다. 다음의그림에서는 Altera 홈페이지를보여주고있습니다. 홈페이지의상단에 Download란버튼을클릭하면다운로드센터로들어가게됩니다. 다운로드센터에는설계소프트웨어인 Quartus II Web Edition을받을수있고, 과거의설계소프트웨어인 Max+plus II 또한같은방법으로다운받아서사용할수있습니다. 또한여기에서시뮬레이션을할수있는소프트웨어인 ModelSim도지원해주고있어서, Quartus II에서의기본으로지원하는시뮬레이션과정에서벋어나좀더정밀한시뮬레이션검증을할수있도록지원해주고있습니다. 다음그림에 Download Center의화면을보여주고있습니다. 현재그림에서는 Quartus II Web Edition V6.0을지원하고있는모습을보여주고있습니다. 이러한소프트웨어의버전은시간에따라계속업그레이드하고있습니다. 262

부록 다운로드센터에서표에있는 Software를클릭해서넘어가면 Quartus II Web Edition을다운받는과정을진행하게됩니다. 처음과정은 Choose File로 Quartus II와 Nios II의어떠한소프트웨어를다운받을지결정하는단계입니다. 따라서소프트웨어선택하는부분과관련소프트웨어의지원디바이스및정보등이나와있습니다. 여기에서는 Quartus II에있는 Download 버튼을클릭하여다음으로넘어가면되겠습니다. HBE-COMBO II User s Manual and Lab Guide 263

다음으로는 Sign in 과정으로다운받으려는사람의기본정보를입력하는과정입니다. 가입이되어있는사람은 User Name와 Password만가지고이과정을넘어갈수있고, 아니면화면의왼쪽그림과같이기본정보를입력하면됩니다. 264

부록 이과정을다마치면다음과정에파일을받게됩니다. 여기에서저장을눌러폴더를지정하여다운받으면됩니다. Quartus II의작업의다운이완료되면 Quartus II를구동하기위한라이센스파일을다운받아야합니다. 따라서설계소프트웨어와라이센스의총 2개를파일을다운받아야합니다. 여기에서는이전의작업에서 Quartus II의다운로드버튼및에있는 Requires a License의 License 버튼을클릭하여라이센스다운작업을진행할수있습니다. 현재창은 Contact & License Information 작업과정으로이전의작업에서기본정보를입력을하고계속진행하는상태라따로정보를입력할필요가없습니다. 다음의그림에서사전에입력된기본정보에대한사항을확인할수있습니다. 라이센스파일을받기위해서는설치하려는컴퓨터의 Network interface card(nic) number의 12자리를입력해주어야합니다. 이것은도스창의명령프로포트에서 ipconfig /all 이라고입력하면프로그램을설치할컴퓨터의 Physical Address를보여줍니다. 따라서이 12자리의값을웹브라우저에입력해주면됩니다. 또한다음에묻는소프트웨어사용상의질문을체크해주고다음과정으로넘어가면됩니다. 다음의그림에 Contact & License Information 작업의그림이나와있습니다. HBE-COMBO II User s Manual and Lab Guide 265

다음의진행사항은 Take Survey로서현재다운받으려는사람이 Altera 회사의얼마나이용하고있는지를묻는것입니다. 따라서사용자는질문을보고해당사한에체크를하고다음으로진행해주면됩니다. 다음의그림에는해당되는질문에체크하는과정을보여주고있습니다. 266

부록 이전까지의작업으로라이센스의다운과정을모두마무리한것입니다. 이라이센스파일은사전에등록한메일주소에파일형태로첨부되어받게됩니다. 또한확장자는.dat 파일로라이센스진행과정에서등록한 Network interface card(nic) number를가지고생성한라이센스파일이기때문에다른컴퓨터에서사용이불가능합니다. 만약다른컴퓨터에서사용하기위해서는위의다운로드센터에서라이센스다운의작업을따로해주어야합니다. 라이센스만다운받는작업을할때는 Quartus II 소프트웨어를받을때의기본정보입력과정이추가됩니다. 다음의그림에서라이센스에대한다운작업이완료된그림을보여주고있습니다. 또한메일로발송했다는정보와메일이지연될수있다는내용을보여주고있습니다. HBE-COMBO II User s Manual and Lab Guide 267

이상의다운작업을마쳤으면소프트웨어를컴퓨터에설치하고다운받은라이센스파일을 Quartus II를실행하여등록해주면됩니다. 라인센스파일은웹에서무료로배포하고있는파일로사용기간제한이있습니다. 따라서이기간이지났을때라이센스다운작업을다시하셔서등록해주면됩니다. 268

부록 7.7 Xilinx 설계소프트웨어설치방법 (ISE) Xilinx에서제공하는설계소프트웨어인 ISE를설치하기위해서는 Xilinx 홈페이지 (http://www.xilinx.com/) 의다운로드센터에서받을수있습니다. 여기에서도설계소프트웨어인 ISE 뿐만아니라, 디바이스의핀정보, 핀맵, 디바이스관련회로등의모든정보를여기에서찾아서확인할수있습니다. 다음의그림에서는 Xilinx 홈페이지를보여주고있습니다. ISE도 Xilinx의다운로드센터에서소프트웨어를다운받아사용이가능합니다. 홈페이지의상단의메뉴에서 Download를클릭하여다운로드센터로들어갑니다. 다운로드센터에는 Software Updates와 Design Tools이있습니다. 따라서 Xilinx 디바이스와관련된모든설계소프트웨어를다운받아서사용이가능합니다. 다운로드센터에는 Design Tool에대한업데이트파일과디바이스를지원하기 ModelSim등의프로그램이있습니다. 여기에서는 Design Tools에서 ISE WebPACK 을선택하여다운받으면됩니다. 다음의그림에서는다운로드센터의설계검증프로그램및업데이트파일에대한목록을보여주고있습니다. HBE-COMBO II User s Manual and Lab Guide 269

ISE에다운버튼을클릭하면 Xilinx 설계소프트웨어를다운받는작업을진행하게됩니다. 다음단계에는사전에등록된아이디가있으면아이디를입력하고다음단계로넘어가고, 아니면오른쪽의 Create an Account를클릭하여사용자의기본정보를입력하게됩니다. 초기에는다운에관한기본정보입력을보여주고있습니다. 따라서사용받으려는사람의정보를선택해주면됩니다. 다음그림은해당사항을선택한모습을보여주고있습니다. 왼쪽의그림은사전에등록된아이디를가지고로그인하는모습을보이고있고, 오른쪽그림은다운받는사람에대한추가정보를입력하는창이되겠습니다. 270

부록 이전까지작업으로 Xilinx ISE WebPACK 를받을준비는다되었습니다. 다음의그림에서는정보 HBE-COMBO II User s Manual and Lab Guide 271

입력에대한사항을마지막으로보여주고있습니다. 창에서중간에있는 Download ISE WebPACK 를클릭하여다음단계로넘어갑니다. 이창에서는단운로드단계의마지막단계로서 ISE WebPACK를다운받을수있습니다. 이창에서저장하려는파일의사이즈를클릭하여프로그램을다운할수있습니다. 이렇게파일을다운받고저장이끝나면컴퓨터에프로그램을설치해주면됩니다. 여기는 Quartus II와는달리별도의라이센스파일을다운할필요는없습니다. 다음그림은다운로드의마지막단계를보여주고있습니다. 272

부록 HBE-COMBO II User s Manual and Lab Guide 273