88
FPGA Training Kit MyProtor MP3100X 사용자 설명서 April, 2004

MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

FPGA Training Kit

MyProtor MP3100X

사용자 설명서

April, 2004

Page 2: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

1

저작권 Copyright 2004 모든 판권은 본사에서 소유한다. 본 설명서의 어떠한 부분도 재간

행, 전송, 사본 제작 등을 할 수 없으며, 복구할 수 있는 형태로 정정 할 수 없다.

또한 어떠한 형태로든 본사의 사전 서면 동의 없이는 다른 언어 또는 컴퓨터 언어

로 번역할 수 없으며 전기적, 기계적, 자기적, 광학적, 수동 또는 그 밖의 어떠한

방법으로도 번역 할 수 없다.

알림 본사에서는 본서의 내용과 관련하여 명시적으로나 또는 암묵적으로 어떠한 선언이

나 보증도 하지 않는다. 또한 특히 특정 목적을 위해 시장성, 또는 적합성에 대해

서 본사는 어떠한 보장도 하지 않는다. 본 설명서에서 다루고 있는 모든 소프트웨

어는 현재의 상태로 판매되거나 또는 라이센스를 획득한다.

사용자에 의해 결함이 발생할 경우 사용자가 모든 서비스, 수리 등 시스템의 손상

및 소프트웨어의 결함을 해결하기 위해 발생되는 모든 비용을 부담한다.

Page 3: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

2

목 차

1. MP3100X 개요 및 특징.........................................................................................3

1.1 개요.................................................................................................................3

1.2 특징.................................................................................................................5

2. 기본 환경 설정.......................................................................................................7

2.1 MPLOAD 프로그램 설치 ...............................................................................7

2.2 Xilinx ISE WebPack 프로그램 설치...............................................................7

2.3 전원공급 .........................................................................................................7

2.4 PC와 MP3100X 보드 연결하기 ....................................................................7

2.5 MP3100X 보드 테스트 하기 .........................................................................8

3. 전체 블록도 및 핀 번호표...................................................................................11

3.1 전체 블록도 ..................................................................................................11

3.2 전체 핀 번호표.............................................................................................13

4. 입출력 기능 ..........................................................................................................19

4.1 DIP 스위치 (DIPSW) ...................................................................................19

4.2 입력 스위치 (SW1~SW12)..........................................................................20

4.3 4 × 4 매트릭스 입력 스위치 ........................................................................22 4.4 LED array......................................................................................................28 4.5 Seven-segment display (SS1, SS2) .............................................................30 4.6 4-digit seven-segment display (4DSS1, 4DSS2)..........................................32 4.7 LCD (Liquid Crystal Display) ........................................................................38 4.8 메모리 인터페이스 (SRAM1, SRAM2)........................................................40

4.9 PS/2 인터페이스 (PS/2 Port) ......................................................................42

4.10 VGA 인터페이스.........................................................................................54

4.11 부저 (Buzzer) .............................................................................................55

4.12 RS-232 직렬통신 (P4)...............................................................................58

4.13 확장용 커넥터 (Extension Pin Connectors, JP5 ~ JP8) ................................59

4.14 클럭 분주 회로...........................................................................................61

5. 보드 Configuration 및 동작 .................................................................................62

5.1 전원공급 .......................................................................................................62

5.2 FPGA Configuration 하기.............................................................................62

5.3 PROM 프로그래밍 .......................................................................................67

5.4 점퍼, 커넥터 및 기타 ..................................................................................76

6. MPLOAD V3.0 사용법 ..........................................................................................78

6.1 환경설정 .......................................................................................................78

6.2 프로그램 시작 ..............................................................................................78

6.3 FPGA Bit stream 다운로드 하기..................................................................80

6.4 RAM (HEX 파일) + FPGA (Bit 파일) 다운로드 하기 ..................................81

6.5 RAM의 데이터 값을 PC로 읽어 들이기 ....................................................83

6.6 종료하기 .......................................................................................................85

부록 – 관련교재 소개 .................................................................................................86

Page 4: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

3

1. MP3100X 개요 및 특징

1.1 개요

MP3100X 를 개발한 주요 목적은 전자공학, 컴퓨터공학 등을 전공하는 학부과

정 학생들이 논리설계 실험 및 VHDL 실습 등 다양한 Digital Logic 실습을 손쉽게

할 수 있도록 도와주는데 있다. 따라서 많은 기능이 포함된 복잡한 시스템이라도

MP3100X 를 이용해 실습해 볼 수 있도록 다양한 입출력 장치를 탑재하고 있으며,

이미 시중 서점에 MP3100X 를 이용해 검증이 끝난 많은 응용예제가 포함된 교재

가 출간되어 공급되고 있다(관련교재 소개 참고).

MP3100X 는 Xilinx 사의 Spartan II 계열의 FPGA 를 사용하며 최대 20 만 게이

트까지의 설계 용량을 지원한다.(즉, XC2S100 칩이 탑재되어 있는 보드에서는 10

만 게이트까지 설계할 수 있으며, XC2S200 칩이 탑재되어 있는 보드에서는 20 만

게이트까지 설계가 가능하다.)

MP3100X 에서 검증할 사용자 회로를 설계하기 위한 Tool 로는 Xilinx ISE

Foundation 정식버젼 뿐만 아니라 Xilinx 사 홈페이지에서 무상으로 다운받을 수 있

는 ISE WebPACK 버젼을 사용할 수도 있다. 따라서 MP3100X 와 ISE WebPACK

을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하

는 디바이스의 범위에 제한이 있고, CoreGen 과 같은 편리한 응용 Wizard 가 지원

되지 없는 ISE WebPACK 이지만, 다른 기능은 ISE 정품 SW 와 차이가 없으므로

개인이 사용하기에 적합하다.

MP3100X 보드는 디지털 회로 실험에 적합하도록 설계되었고, 간단한 실험을

비롯하여 복잡한 고급 응용 분야에도 사용할 수 있도록 여러 가지 면을 고려하여

설계하였다. 먼저 논리설계 실험 및 VHDL 실습 등에서 신호등, 계산기, 엘리베이

터, 자판기, 디지털 시계 등의 응용 분야를 손쉽게 실험할 수 있도록 하였고, 고급

응용 분야에서는 다양한 주변기기와의 인터페이스, 통신용 IC, 마이크로프로세서

등도 실험할 수 있도록 하였다.

Page 5: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4

입력은 다수의 토글 스위치와 버튼 스위치 배열을 통하여 손쉽게 원하는 신호

를 입력할 수 있도록 하였다. 논리의 수행결과를 손쉽게 볼 수 있도록 하기 위해

여러 개의 LED (Light Emitting Diode)와 7-세그먼트 표시기, 직접 프로브 또는 보드

확장을 할 수 있도록 해 주는 확장용 홀, LCD (Liquid Crystal Display) 등의 출력 인

터페이스를 제공하였다. 이외에도 두 개의 RAM (Random Access Memory)으로 구

성된 메모리 블록, VGA 인터페이스, PS/2 인터페이스, RS-232 인터페이스를 제공

하여 다양한 입출력이 가능하도록 하였다.

특별히 2 개의 SRAM 블록은 DB25 병렬 포트를 이용하여 원하는 데이터를 직

접 SRAM 에 쓸 수 있고, 또한 저장되어 있는 내용을 쉽게 읽을 수 있도록 되어

있다. 이는 통신/네트웍 용 응용분야에서 하드웨어 설계 시 빈번하게 발생되는 메

모리 읽기와 쓰기를 동시에 할 수 있도록 하게 해 준다. 또한 파이프라인 마이크

로프로세서를 설계하여 구현하고자 할 때 서로 다른 인스트럭션 메모리와 데이터

메모리를 구현할 수 있도록 해 준다.

Page 6: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

5

1.2 특징

FPGA 칩 Spartan II PQ 208 2.5 V 계열 (XC2S100 또는 XC2S200)

메모리 블록 두 개의 32 KB SRAM

Configuration 용 1 MB Serial PROM (option)

입출력

인터페이스

토글 입력 스위치 10 개

푸쉬 버튼 입력 스위치 2 개

4 x 4 의 입력 스위치 매트릭스 (총 16 개)

32 개의 LED

7-세그먼트 디스플레이 2 개

4-digit 7-세그먼트 2 개

LCD 블록

부저(Buzzer)

25MHz 오실레이터(교체 가능)

외부 인터페이스 키보드용 PS/2 인터페이스

VGA 인터페이스

RS-232C 직렬 통신 인터페이스

다운로드 용 병렬 포트 인터페이스

I/O 확장용 범용 홀

FPGA configuration

Parallel cable 을 이용한 download(Slave serial 모드)

Serial PROM 을 이용한 configuration(Master serial 모드)

외부 전원 7.5V 용 DC 어댑터 입력 단자

7.5V 전원 공급기 (Power Supply) 입력 단자

전원 on/off 스위치

역방향 전원 공급 방지 기능

상태 표시용 LED 5V, 3.3V 전원 상태 표시 LED

FPGA DIN, DONE 표시 LED

FPGA Configuration 모드 표시 LED

설계용 소프트웨어 ISE WebPack tools 또는 Xilinx Foundation Series

Page 7: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

6

보드 설정 전용

소프트웨어

(MPLOAD)

MPLOAD 프로그램을 이용한 FPGA configuration 및

SRAM 쓰기/읽기

PROM 프로그래밍 Xilinx 사의 iMPACT 또는 Device Programming 상에서의

JTAG 인터페이스를 통한 Serial programming 기능

기타 MP3100X 용 교재 및 여러 가지 다양한 예제 제공

보드 검증용 bit stream 파일 제공

10 만 게이트 보드의 경우는 ‘ mp3100xv1.bit’

20 만 게이트 보드의 경우는 ‘ mp3100xv2.bit’

Page 8: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

7

2. 기본 환경 설정

2.1 MPLOAD 프로그램 설치

MPLOAD 프로그램은 MP3100X 보드의 FPGA 를 configuration 하거나, SRAM

을 초기화하는데 사용된다. MPLOAD 설치프로그램은 (주)서두로직 홈페이지

(http://www.mycad.co.kr)에서 다운로드 받거나, 시중 서점에서 판매되고 있는 관련

교재에 제공되는 CD 로 설치한다. 자세한 사용법은 뒤에서 소개하는 “MPLOAD 사

용법” 부분을 참고한다.

2.2 Xilinx ISE WebPack 프로그램 설치

Xilinx 사는 FPGA 프로그래밍을 위해 ISE WebPack 을 무상으로 제공한다. Xilinx

홈페이지 (http://www.xilinx.com)에서 최신 버전을 다운로드 받아 설치한다.

2.3 전원공급

전원 공급은 크게 두 가지 방법이 있다. 첫번째는 키트에 포함되어 있는 7.5V

어댑터를 이용하는 방법이며, 두 번째는 실험실 내에 있는 전원 공급기 (Power

supply)를 이용하여 7.5V 를 직접 공급하는 방법이다. 보드 내에서는 7.5V 외부 전

원을 받아 5V, 3.3V, 2.5V 의 전압을 만들어 사용한다. 두 가지 방법 중 하나를 이

용하여 전원을 공급한다. MP3100X 보드에서 입출력 장치들의 사용량이 많을 경우

500 mA 정도이므로, 7.5V 어댑터를 사용하여 외부 전원을 가하는 경우 어댑터의

용량이 최소 500 mA 이상의 것을 사용하여야 한다.

2.4 PC와 MP3100X 보드 연결하기

제공된 DB25 커넥터를 이용하여 PC 의 병렬포트와 MP3100X 보드의 DB25 커

넥터와 연결한다. MPLOAD 프로그램에서는 이 포트를 통하여 Xilinx 칩을

configuration 하거나 SRAM 에 데이터 쓰기/읽기 등을 한다.

Page 9: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

8

2.5 MP3100X 보드 테스트 하기

MP3100X 보드의 대부분의 기능은 보드와 함께 제공되는 mp3100xv1.bit 파일

(20 만 게이트 보드의 경우 mp3100xv2.bit, 이하 10 만 게이트 보드 기준으로 설명)

을 이용하여 쉽게 확인해 볼 수 있다.

2.5.1 FPGA Configuration 하기

PC의 병렬포트와 MP3100X 보드의 DB25 병렬 포트를 병렬 케이블을 이용하여 연결한다. 7.5V 어댑터를 이용하여 전원 부분을 연결한다. (극성에 주의한다.) 전원 스위치 (PWRSW)를 ON 한다. 이때 5V 전원과 3.3V 전원 확인용 LED 가 켜

지는지 확인을 한다. 켜지지 않을 경우 어댑터의 극성 확인과 함께, AC 전원이 어

댑터에 제대로 가해지고 있는지 확인한다. 점퍼 스위치 중 Configuration source selection 부분을 MPLOAD 쪽으로 (위쪽) 연

결한다. MPLOAD 프로그램을 수행한다. ‘Bit File’ 부분에 mp3100xv1.bit 파일을 지정한다. ‘Start Download’ 버튼을 누른다. Download가 끝나면 MP3100X 보드의 DONE LED (LD3)에 불이 켜지면서 보드가 동작한다.

2.5.2 각 입출력 소자 기능 확인

먼저 DIP 스위치 (DIPSW)를 이용하여 SRAM2 를 제외한 모든 입출력 소자의

DIP 스위치를 ENABLE 시킨다. SRAM2 는 LCD 와 핀을 공유하기 때문에 동시에

사용할 수 없고, mp3100xv1.bit 에서는 LCD 용 핀으로 사용하도록 설계되어 있다.

보드의 전체 리셋 스위치는 SW11 이다.

- LED (VLx, HLx, RLx, LLx) 자동적으로 행 단위로 존슨 카운터 (Johnson counter) 형태로 ON/OFF 됨. 스위치 SW11을 누르면 리셋 상태가 되어 모든 LED의 불이 꺼지며, SW11을 누르지 않으면 존슨 카운터로 다시 동작한다.

- LCD 두 종류의 문장이 자동적으로 번갈아가며 표시된다. 스위치 SW11을 이용하여 리셋 시킬 수 있다.

Page 10: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

9

- 4x4 입력 스위치 (0~F)와 부저 (BUZZER) 4DSS1의 제일 왼쪽 7-세그먼트에 입력 스위치 해당 번호 (0 ~ F)가 표시되며, 동시에 부저를 통해 소리가 난다. 4번이 기본음 ‘도’이며 위 번호로 갈수록 한음씩 증가하는 음이, 아래 번호로 갈수록 한음씩 낮

은 음이 부저를 통해 소리가 난다. 스위치 SW11을 이용하여 리셋 시

킬 수 있다. - PS/2 키보드 (PS/2)

4DSS1의 왼쪽에서 2번째, 3번째, 4번째 7-세그먼트에 PS/2에서 입력

되는 값을 보여준다. 현재 입력되는 키보드 값은 4번째 7-세그먼트에 표시되며, 그 이전에 입력된 키보드 값은 버퍼링 되면서 왼쪽으로 하

나씩 이동한다. 스위치 SW11을 이용하여 리셋 시킬 수 있다. 현재는 자판에서 0에서 9까지의 숫자와 A에서 F까지의 알파벳이 표현되고 나머지 키는 모두 F의 값이 표현되도록 하였다.

- VGA VGA 포트에 모니터를 연결하면 소형 정사각형의 패턴이 일정 구획 내에서 움직이는 모습을 볼 수 있다. SRAM1을 DIPSW의 4번째 DIP 스위치를 이용하여 enable 시키면 더욱 선명한 패턴을 볼 수 있다. 스

위치 SW10을 통해 움직이는 패턴의 속도를 바꿀 수 있다. 스위치 SW11을 이용하여 리셋 시킬 수 있다.

- 7-세그먼트 표시기 (SS1, SS2) 두 개의 카운터의 결과를 보여주며, SS1에는 약 6Hz로 카운팅하는 결

과를, SS2에는 약 1.5Hz로 동작하는 카운터의 결과를 보여준다. 스위

치 SW11을 이용하여 리셋 시킬 수 있다. - 입력 스위치 (SW1 ~ SW4)

SW1과 SW4로 구성된 네 개의 이진수 값이 헥사 값으로 4DSS2의 왼쪽에서 두 번째 7-세그먼트에 0에서 F사이의 수로 표현된다. 여기

에서 SW1이 LSB이고, SW4가 MSB이다. - 입력 스위치 (SW5 ~ SW8)

SW5과 SW8로 구성된 네 개의 이진수 값이 Hexa 값으로 4DSS2의 왼쪽에서 세 번째 7-세그먼트에 0에서 F사이의 수로 표현된다. 여기

에서 SW5가 LSB이고, SW8이 MSB이다. - 입력 스위치 (SW9)

4DSS2의 네 번째 7-세그먼트에는 약 1.5Hz로 동작하는 up/down 카

운터의 결과를 보여준다. SW9를 위로 올리면 up 카운터로 동작하고, 아래로 내리면 down 카운터로 동작한다.

- 입력 스위치 (SW10) VGA를 통해 모니터에 표현되는 패턴의 속도를 가변시켜준다. 또한 4DSS1과 4DSS2를 on/off 시키는 역할을 한다. 스위치를 위로 하면 4DSS1과 4DSS2가 off되며, 아래로 하면 값들이 표시된다.

- 입력 스위치 (SW11) 보드 상에서 구현된 여러 가지 회로들을 리셋 시키는데 사용된다.

Page 11: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

10

- 입력 스위치 (SW12) 4DSS2의 왼쪽에서 첫 번째 세그먼트에 카운터의 값이 표현되는데, 이 카운터의 클럭 입력이다. 지금은 클럭 단자에 직접 연결되어 있는

데, 이로 말미암아 바운싱 현상이 일어난다. - 4-디지트 7-세그먼트 1 (4DSS1)

4DSS1의 제일 왼쪽 7-세그먼트에는 4x4 입력 스위치에 해당하는 숫

자가 표현된다. 두 번째부터 네 번째 7-세그먼트에는 PS/2로부터 입

력되는 키의 값들이 표현된다. 네 번째에 최신의 입력키 값이 표현되

고, 왼쪽으로 하나씩 이동한다. SW10을 위로 하면 4DSS1이 off 된다. - 4-디지트 7-세그먼트 2 (4DSS2)

4DSS2의 제일 왼쪽 7-세그먼트에는 스위치 SW12로부터 클럭을 입력 받아 동작하는 카운터의 값이 출력되며, 다음 두 개의 7-세그먼트에는 각각 SW1~SW4, SW5~SW8까지의 값을 헥사로 표시한 값이 표현된

다. SW10을 위로 하면 4DSS2가 off 된다.

Page 12: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

11

3. 전체 블록도 및 핀 번호표

3.1 전체 블록도

MP3100X 보드에서 입출력 장치 그리고 인터페이스 중심의 블록도를 다음 그

림에 나타내었다. 각 블록도에 P3, P4 등으로 표시된 부분은 FPGA 칩에 연결된

핀 번호를 나타낸다. 예를 들어 7-세그먼트 표시기 (7-segment display) 중에서 제

일 오른쪽 세그먼트 SS2 를 사용하려면 4 개의 핀 P84, P83, P82, P81 을 사용하면

된다. 이 경우 P84 에 데이터의 MSB 비트를 연결하고, P81 에 LSB 데이터를 연결

한다. 보다 자세한 핀 정보는 뒤에 있는 ‘전체 핀 번호표’에 나와 있다.

Page 13: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

12

Page 14: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

13

3.2 전체 핀 번호표

PQ208 PinName

XC2S100 XC2S200 I/O Configuration

LCD P1 GND 0V

P2 TMS DB25.16(TMS) PROM.TMS JTAGport.TMS

P3 I/O VLED1 P4 I/O VLED2 P5 I/O VLED3 P6 I/O, VREF VLED4 P7 I/O VLED5 P8 I/O VLED6 P9 I/O, VREF VLED7

P10 I/O VLED8 P11 GND 0V P12 VCCO 3.3V P13 VCCINT 2.5V P14 I/O HLED1 P15 I/O HLED2 P16 I/O HLED3 P17 I/O HLED4 P18 I/O HLED5 P19 GND 0V P20 I/O, VREF HLED6 P21 I/O HLED7 P22 I/O HLED8 P23 I/O LLED1 P24 I/O, IRDY LLED2 P25 GND 0V P26 VCCO 3.3V P27 I/O, TRDY LLED3 P28 VCCINT 2.5V P29 I/O LLED4 P30 I/O LLED5 P31 I/O, VREF LLED6 P32 GND 0V P33 I/O LLED7 P34 I/O LLED8 P35 I/O RLED1 P36 I/O RLED2

Page 15: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

14

PQ208 PinName

XC2S100 XC2S200 I/O Configuration

LCD P37 I/O RLED3 P38 VCCINT 2.5V P39 VCCO 3.3V P40 GND 0V P41 I/O RLED4 P42 I/O, VREF RLED5 P43 I/O RLED6 P44 I/O RLED7 P45 I/O, VREF RLED8 P46 I/O SW1 P47 I/O SW2 P48 I/O SW3 P49 I/O SW4 P50 M1 0V P51 GND 0V P52 M0 0V P53 VCCO 3.3V P54 M2 0V P55 PWDN NC P56 STATUS NC P57 I/O SW5 P58 I/O SW6 P59 I/O, VREF SW7 P60 I/O SW8 P61 I/O SW9 P62 I/O, VREF SW10 P63 I/O PS/2.data P64 GND 0V P65 VCCO 3.3V P66 VCCINT 2.5V P67 I/O SS1.a P68 I/O SS1.b P69 I/O SS1.c P70 I/O SS1.d P71 I/O SRAM1._CS P72 GND 0V P73 I/O, VREF SRAM1._OE P74 I/O SRAM1._WE P75 I/O SRAM1.a0 P76 VCCINT 2.5V P77 GCK1 PS/2.clk

Page 16: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

15

PQ208 PinName

XC2S100 XC2S200 I/O Configuration

LCD P78 VCCO 3.3V P79 GND 0V P80 GCK0 OSC P81 I/O SS2.a P82 I/O SS2.b P83 I/O SS2.c P84 I/O, VREF SS2.d P85 GND 0V P86 I/O SRAM1.a1 P87 I/O SRAM1.a2 P88 I/O SRAM1.a3 P89 I/O SRAM1.a4 P90 I/O SRAM1.a5 P91 VCCINT 2.5V P92 VCCO 3.3V P93 GND 0V P94 I/O SRAM1.a6 P95 I/O, VREF SRAM1.a7 P96 I/O SRAM1.a8 P97 I/O SRAM1.a9 P98 I/O, VREF SRAM1.a10 P99 I/O SRAM1.a11 P100 I/O SRAM1.a12 P101 I/O SRAM1.a13 P102 I/O SRAM1.a14 P103 GND 0V P104 DONE DB25.10(DONE) P105 VCCO 3.3V P106 PROGRAM DB25.1(PROG) P107 I/O (INIT) P108 I/O (D7) SRAM1.d0 P109 I/O SRAM1.d1 P110 I/O SRAM1.d2 P111 I/O, VREF SRAM1.d3 P112 I/O SRAM1.d4 P113 I/O SRAM1.d5 P114 I/O, VREF SRAM1.d6 P115 I/O (D6) SRAM1.d7 P116 GND 0V P117 VCCO 3.3V

Page 17: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

16

PQ208 PinName

XC2S100 XC2S200 I/O Configuration

LCD P118 VCCINT 2.5V P119 I/O (D5) VGA.Hsync P120 I/O VGA.Vsync P121 I/O VGA.Red P122 I/O VGA.Green P123 I/O VGA.Blue P124 GND 0V P125 I/O, VREF 4DSS_ON P126 I/O (D4) DB25.3(d1) P127 I/O DB25.4(d2) P128 VCCINT 2.5V P129 I/O, TRDY DB25.5(d3) P130 VCCO 3.3V P131 GND 0V P132 I/O, IRDY DB25.6(d4) P133 I/O RS232.RTS P134 I/O RS232.RD P135 I/O (D3) RS232.CTS P136 I/O, VREF LCD.RS P137 GND 0V P138 I/O LCD._W P139 I/O LCD.E P140 I/O SRAM2._CS P141 I/O SRAM2._OE P142 I/O (D2) SRAM2._WE P143 VCCINT 2.5V P144 VCCO 3.3V P145 GND 0V P146 I/O (D1) SRAM2.a0 P147 I/O, VREF SRAM2.a1 P148 I/O SRAM2.a2 P149 I/O SRAM2.a3 P150 I/O, VREF SRAM2.a4 P151 I/O SRAM2.a5 P152 I/O SRAM2.a6 P153 I/O (DIN, D0) DB25.17(DIN) P154 I/O (DOUT, BUSY) RS232.TD P155 CCLK DB25.14(CCLK) P156 VCCO 3.3V P157 TDO DB25.11(TDO) JTAGport.TDO P158 GND 0V

Page 18: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

17

PQ208 PinName

XC2S100 XC2S200 I/O Configuration

LCD P159 TDI DB25.8(TDI) PROM.TDO P160 I/O (CS) SRAM2.a7 P161 I/O (WRITE) SRAM2.a8 P162 I/O SRAM2.a9 P163 I/O SRAM2.a10 P164 I/O, VREF SRAM2.a11 P165 I/O SRAM2.a12 P166 I/O SRAM2.a13 P167 I/O, VREF SRAM2.a14 P168 I/O SRAM2.d0 LCD.d0 P169 GND 0V P170 VCCO 3.3V P171 VCCINT 2.5V P172 I/O SRAM2.d1 LCD.d1 P173 I/O SRAM2.d2 LCD.d2 P174 I/O SRAM2.d3 LCD.d3 P175 I/O SRAM2.d4 LCD.d4 P176 I/O SRAM2.d5 LCD.d5 P177 GND 0V P178 I/O, VREF SRAM2.d6 LCD.d6 P179 I/O SRAM2.d7 LCD.d7 P180 I/O SW11 P181 I/O Buzzer P182 GCK2 DB25.2(d0) P183 GND 0V P184 VCCO 3.3V P185 GCK3 SW12 P186 VCCINT 2.5V P187 I/O DB25.12 P188 I/O DB25.13 P189 I/O, VREF DB25.15 P190 GND 0V P191 I/O PBmtxv0 P192 I/O PBmtxv1 P193 I/O PBmtxv2 P194 I/O PBmtxv3 P195 I/O PBmtxs0 P196 VCCINT 2.5V P197 VCCO 3.3V P198 GND 0V P199 I/O PBmtxs1

Page 19: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

18

PQ208 PinName

XC2S100 XC2S200 I/O Configuration

LCD P200 I/O, VREF 4DSSa P201 I/O 4DSSb P202 I/O 4DSSc P203 I/O, VREF 4DSSd P204 I/O 4DSSdec1 P205 I/O 4DSSdec2 P206 I/O 4DSSdec3 P207 TCK DB25.7(TCK) JTAGport.TCK P208 VCCO 3.3V

Page 20: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4. 입출력 기능

4.1 DIP 스위치 (DIPSW)

DIPSW 의 6-DIP 스위치는 FPGA configuration 모드를 결정하는 스위치 2 개

(CFGA, CFGB), LCD 를 enable 시키는 스위치, SRAM enable 용 스위치 2 개, 7-세그

먼트 표시기 enable 용 스위치 1 개로 구성되어 있다. 다음 그림에 이를 나타내었다.

그림 1. DIP 스위치

DIP 스위치

번호 이름 기 능

1 CFGA

FPGA 칩을 configuration 하기 위한 모드를 선택하는 단자로 M2, M0 단자에 연결되어 있다. DB25 병렬 포트를 통하여 bit 파

일을 다운로드시 slave serial 모드로 설정해야하므로 CFGA 스

위치의 위치를 off 또는 disable 위치로 설정한다.

2 CFGB

FPGA 칩을 configuration 하기 위한 모드를 선택하는 단자로 M1 단자에 연결되어 있다. DB25 병렬 포트를 통하여 bit 파일을 다

운로드시 slave serial 모드로 설정해야 하며, CFGB 스위치의 위

치를 off 또는 disable 위치로 설정한다.

3 LCD LCD 블록의 전원을 가하기 위한 enable 단자임. LCD 의 경우 SRAM2 와 핀을 공유하고 있다. 따라서 LCD 와 SRAM2 를 동시

에 사용할 수 없고 어느 하나만 한 순간에 사용할 수 있다.

4 SRAM1 32KB SRAM 용 enable 스위치

5 SRAM232KB SRAM 용 enable 스위치. SRAM2 는 LCD 와 핀을 공유하

고 있음. 따라서 SRAM2 를 사용하고자 할 경우 LCD enable 용 스위치 (3 번)를 off (또는 disable)시켜야 한다.

6 7-Segment 두 개의 seven-segment display(SS1, SS2)를 enable 시킴

19

Page 21: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.2 입력 스위치 (SW1~SW12)

FPGA 칩에 직접 연결되어 있는 입력 스위치는 12 개이다. 이 중 2 개 (SW11,

SW12)는 푸쉬버튼 형태이며, 10 개 (SW1 ~ SW10)는 토글형 입력 스위치이다. 이

외에도 4 × 4 입력 스위치 매트릭스가 있다.

푸쉬버튼 토글스위치

그림 2. 입력 스위치

핀 번호표

입력 스위치 (SW1~SW12) 스위치번호 핀번호 비고

SW1 P46 SW2 P47 SW3 P48 SW4 P49 SW5 P57 SW6 P58 SW7 P59 SW8 P60

SW9 P61

SW10 P62

SW11 P180 리셋용

SW12 P185 - 클럭용(GCK3)- BUFGP 사용해

야 함.

20

Page 22: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

21

SW11 과 SW12 는 푸쉬버튼 형태의 입력 스위치이므로 단일 펄스를 만드는데

편리하다. 설계한 회로에서 외부 리셋(reset)이 필요한 경우 SW11 에 연결하여 사

용하면 편리하다. SW12 는 외부에서 단일 펄스을 가하는데 편리하도록 클럭 버퍼

에 연결되어 있는 입출력핀 (P185, GCK3)에 연결되어 있다. 따라서 SW12 의 경우

입력 버퍼를 BUFGP 로 선택하여 사용하여야 한다.

(주의) SW12를 통하여 펄스 형태의 데이터를 만들어 FPGA 칩에 가하고자 할 경우 입력 버퍼를 일반적인 IBUF 대신 BUFGP를 사용하여야 합성 시 문제가 생기지 않는다.

Page 23: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

22

4.3 4 × 4 매트릭스 입력 스위치

4X4 입력 스위치 매트릭스는 FPGA 의 6 개 핀만을 이용하여 16 개의 입력을 받

아들일 수 있는 블록이다. 매트릭스의 네개 열을 스캔하는데 사용되는 핀은 2 개이

며 이에 대한 핀 명을 PBmtxs0, PBmtxs1 이라 명명한다. 그리고 4 개의 행을 스캔

하는데 사용되는 핀은 4 개이며 각각의 핀 명을 PBmtxv0, PBmtxv1, PBmtxv2,

PBmtxv3 라고 명명한다. 전체 핀 번호표 및 아래의 핀 번호표에는 이 이름으로 핀

이 기술되어 있다.

핀 번호표

4 x 4 Matrix 입력 스위치

Scan 신호 핀번호 비고

PBmtxv0 P191 첫번째 행

PBmtxv1 P192 두번째 행

PBmtxv2 P193 세번째 행

PBmtxv3 P194 네번째 행

PBmtxs0 P195 디코더 bit 0

PBmtxs1 P199 디코더 bit 1

동작 설명

푸쉬 버튼 스위치 매트릭스의 16 개의 스위치 가운데 어느 스위치가 눌려졌는

지를 알아내는 원리는 다음과 같다. 주기적으로 열들을 스캔하면서 동시에 행에

대한 데이터 값을 스캔한다. 특정 스위치가 눌려졌다면 그 스위치의 양단에 연결

되어 있는 열과 행 단자가 서로 연결되면서 열을 스캔하면서 보내는 데이터가 행

단자로 전해지게 된다. 이를 검출해 내어 행과 열의 조합으로 키코드를 만들어 내

면 된다. 주기적으로 열을 스캔하기 위해 2-bit 카운터의 출력을 PBmtxs0 와

PBmtxs1 에 가한다. 그리고 4 개의 열에 대한 데이터로부터 키가 받아들여졌는지

를 확인하고 어떤 키가 눌려졌다는 신호가 있으면 그 순간 행과 열에 대한 값을

레지스터에 저장함으로써 눌려진 키에 대한 코드를 알아낸다. 다음의 그림은 이러

한 동작을 스키매틱으로 설계한 회로의 한 예이다.

Page 24: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

그림 3. 4x4 매트릭스 입력단 회로의 예

위의 그림을 보면 스캔되는 주기는 24Hz 정도이며, 주기를 20 Hz 전후로 설정

하면 무난하다. 도면에서의 CLKOSCINT 는 외부에서 들어오는 25 MHz 신호이며

CLK24HZCE 신호는 외부에서 들어오는 클럭을 분주하여 얻은 24 Hz 의 신호이다

(참고로 4.14 절에 클럭 분주 회로의 예를 보였다). 최종 키 코드에 대한 값은

PBCODER[3:0]에 저장되어 있으며 이를 7-세그먼트 표시기로 숫자 형태로 표시하

면 0 ~ F 사이의 값으로 표현된다. 다음 그림에 키 코드에 대한 값을 보였다

그림 4. 4x4 매트릭스 입력 스위치 23

Page 25: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

24

다음은 4×4 의 16 입력 스위치를 6 개의 핀을 이용하여 받아들이기 위해 위의

schematic 을 이용할 수도 있지만, 다음의 VHDL 코드를 이용하여 같은 결과를 얻

을 수 있다.

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity read_keypad is generic (KEYPAD_CLK_DIV_VAL : integer range 0 to 25000 := 25000); -- 1KHz sampling period Port ( clk25MHz : in std_logic; rst : in std_logic; col_sel : out std_logic_vector(1 downto 0); row_stat : in std_logic_vector(3 downto 0); data : out std_logic_vector(3 downto 0); valid : out std_logic; new_key : out std_logic); end read_keypad; architecture syn of read_keypad is -- signals for synchrous operation (clock period control) signal clk, ce : std_logic; signal divcnt : std_logic_vector(17 downto 0); signal cnt : std_logic_vector(1 downto 0); -- table for the code decoder -- we assume the key pad has the following forms -- 0 1 2 3 (r0) -- 4 5 6 7 (r1) -- 8 9 A B (r2) -- C D E F (r3) -- (c0)(c1)(c2)(c3) type key_tab is array (0 to 3) of std_logic_vector(3 downto 0); constant table0 : key_tab := ( "0000", "0001", "0010", "0011"); constant table1 : key_tab := ("0100", "0101", "0110", "0111"); constant table2 : key_tab := ("1000", "1001", "1010", "1011"); constant table3 : key_tab := ("1100", "1101", "1110", "1111"); -- statemchine registers and type definition type state is (S0,S1,S2,S3,SV); signal st, nst : state; signal num : integer range 3 downto 0; -- column number from cnt signal set_V, clr_V : std_logic; -- Flag register contol signal signal V : std_logic ; -- Flag register that holds the K signal for one scan period signal pressed : std_logic ; -- combinational outputs that any row has value 0 begin clk <= clk25MHz; col_sel <= cnt ; -- output from state machine below num <= conv_integer(cnt);

Page 26: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

25

code_decoder: process(clk) begin if(rising_edge(clk)) then if(rst ='1') then data <= (others =>'0'); elsif(pressed = '1') then case row_stat is when "1110" => data <= table0(num); when "1101" => data <= table1(num); when "1011" => data <= table2(num); when "0111" => data <= table3(num); when others => null; end case; end if; end if; end process; -- signal that notice if any of key has been pressed pressed <= not (row_stat(0) and row_stat(1) and row_stat(2) and row_stat(3)) ; -- clock divider -- counter that dectermines the keypad reading frequency. -- On every 'ce' signal active, this system moves to the next state clock_divider: process(clk) begin if(rising_edge(clk)) then if(rst = '1') then divcnt <= (others =>'0') ; else divcnt <= divcnt + 1; if(ce = '1') then divcnt <= (others =>'0'); end if; end if; end if; end process; ce <= '1' when divcnt = KEYPAD_CLK_DIV_VAL-1 else '0'; -- statemachine controlling the keypad reading operation -- state register process(clk) begin if(rising_edge(clk)) then if(rst = '1') then st <= S0 after 1000 ps; elsif(ce = '1') then -- clock enable comes from clock divider st <= nst after 1000 ps; end if; end if; end process; -- state machibe body process(pressed,st) begin set_V <= '0';

Page 27: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

26

clr_V <= '0'; cnt <= (others => '0'); case st is when S0 => if(pressed = '1') then nst <= Sv; else nst <= S1; end if; cnt <= "00"; when S1 => if(pressed = '1') then nst <= Sv; else nst <= S2; end if; cnt <= "01"; when S2 => if(pressed = '1') then nst <= Sv; else nst <= S3; end if; cnt <= "10"; when S3 => if(pressed = '1') then nst <= Sv; else nst <= S0; clr_V <= '1'; end if; cnt <= "11"; when Sv => nst <= S0; set_V <= '1'; when others => nst <= S0; end case; end process; process(clk) begin if(rising_edge(clk)) then if(rst = '1' or clr_V = '1') then V <= '0'; elsif(set_V = '1') then V <= '1'; end if; end if; end process; valid <= V; process(clk) begin if(rising_edge(clk)) then new_key <= '0'; if(set_V = '1' and V = '0') then -- assert for 1 clock period new_key <= '1'; end if;

Page 28: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

27

end if; end process; end syn;

위 코드의 입출력 단자는 다음과 같다. ‘clk25MHz’ 는 외부에서 들어오는 25

MHz 클럭을 연결하는 단자이며, rst 는 리셋단자, col_sel[1:0]는 열을 스캔하기 위해

사용될 2-bit 출력단자로 P199, P198 핀에 연결되는 단자이다. ‘row_stat[3:0]’ 신호는

어느 행에서 스위치가 눌려졌는지를 알아내기 위해 사용되는 4 개 입력 신호로 각

각 P194, P193, P192, P191 에 연결한다. ‘valid’ 신호는 16 개의 스위치 중 하나가

눌려졌는지를 알려주는 신호로, 어느 하나의 스위치가 눌려지면 high 의 값을 갖는

다. ‘new_key’ 신호는 새로운 키가 눌려졌는지를 알려주는 신호로 필요하지 않은

경우 open 상태로 두면 된다.

Page 29: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.4 LED array

MP3100X 보드에는 32 개의 LED 가 탑재되어 있으며, 이들 LED 들의 배열은

아래 그림과 같다. 그림의 왼쪽은 각 LED 에 대한 이름이고, 오른쪽 그림은 Xilinx

칩에 연결된 핀 번호를 나타낸다. 다양한 표현 방식을 수용할 수 있도록 하기 위

해 기본적으로 십자모양으로 배열하였고, 외곽에 원형으로 배열하였다. 십자모양의

LED 중 세로축의 LED 를 위로부터 각각 VLED1, VLED2, …, VLED8 의 이름으로

명명하였고 (첫째글자 V 는 vertical 을 의미함), 수평축의 LED 들은 왼쪽으로부터

HLED1, HLED2, …, HLED8 로 명명하였다 (첫째글자 H 는 horizontal 을 의미함). 외

곽 LED 중 왼쪽 부분에 있는 LED 들은 LLED1, …, LLED8, 그리고 오른쪽 부분에

있는 LED 들은 RLED1, …, RLED8 로 명명하였다. 이러한 LED 배열을 통해 신호등,

엘리베이터, 윷놀이 등 다양한 출력을 효과적으로 표시할 수 있다.

그림 5. LED 배열과 핀 번호

28

Page 30: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

29

핀 번호표

LED이름 핀번호 색깔 LED이름 핀번호 색깔 VLED1 P3 Yellow HLED1 P14 Yellow VLED2 P4 Red HLED2 P15 Red VLED3 P5 Yellow HLED3 P16 Yellow VLED4 P6 Green HLED4 P17 Green VLED5 P7 Yellow HLED5 P18 Green VLED6 P8 Green HLED6 P20 Yellow VLED7 P9 Yellow HLED7 P21 Red VLED8 P10 Red HLED8 P22 Yellow

LED이름 핀번호 색깔 LED이름 핀번호 색깔 LLED1 P23 Yellow RLED1 P35 Yellow LLED2 P24 Green RLED2 P36 Green LLED3 P27 Green RLED3 P37 Green LLED4 P29 Yellow RLED4 P41 Yellow LLED5 P30 Yellow RLED5 P42 Yellow LLED6 P31 Green RLED6 P43 Green LLED7 P33 Green RLED7 P44 Green LLED8 P34 Yellow RLED8 P45 Yellow

예제

설계 프로젝트 명이 cnt4_ex 이고, schematic 에서 4-bit 카운터 동작을 실험한다

고 하자. 이 경우 4-bit 카운터의 4 개 출력이 출력 버퍼를 통하여 출력패드에 연결

된다. 이때 출력패드(output pad)에 연결된 net 의 이름이 각각 OUT4, OUT3, OUT2,

OUT1 이라고 하자. 이들을 십자형태의 LED array 중 수평축에 있는 오른쪽 4 개의

LED, 즉 HLED5, HLED6, HLED7, HLED8 을 이용해서 출력하고자 한다면,

schematic 상에서 출력단자의 속성 중 “LOC”를 이용하여 지정할 수도 있고, 또는

“cnt4_ex.ucf” 파일에 다음의 내용을 기술하여도 된다.

NET OUT4 LOC=P18; # HLED5 NET OUT3 LOC=P20; # HLED6 NET OUT2 LOC=P21; # HLED7 NET OUT1 LOC=P22; # HLED8

Page 31: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.5 Seven-segment display (SS1, SS2)

한 개의 digit 를 표현할 수 있는 7-세그먼트 표시기는 2 개 있다. 이 7-세그먼트

들은 7447A 의 TTL IC 에 연결되어 있어 출력하고자 하는 수를 4-bit 이진수로 표

현하면 된다. MP3100X 보드에 표기되었듯이 보드를 정면으로 바라보았을 때 총

10 개의 7-세그먼트 중에서 오른쪽에서 두번째 세그먼트가 SS1, 제일 오른쪽 세그

먼트가 SS2 이다. 이들에 대한 간략한 블록도는 다음과 같다.

그림 6. 1-digit 7-segment LED

30

Page 32: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4 개의 이진 입력(D,C,B,A)에 대한 출력 패턴은 다음과 같다.

그림 7. 출력 패턴

핀 번호표

SS1 (7-segment) SS2 (7-segment) 7447A 핀번호 비고 7447A 핀번호 비고

d(6) P70 MSB d(6) P84 MSB c(2) P69 c(2) P83 b(1) P68 b(1) P82 a(7) P67 LSB a(7) P81 LSB

DIP 스위치 조절

SS1과 SS2 7-세그먼트 표시기를 사용하려면 DIP 스위치의 6번을 enable (또는 on 위치) 시켜야 한다.

예제

설계 프로젝트 명이 cnt4_ex 이고, schematic 에서 4-bit 카운터 동작을 실험하고

자 한다. 이 경우 4-bit 카운터의 4 개 출력이 출력 버퍼를 통하여 출력패드에 연결

된다. 이때 출력패드(output pad)에 연결된 net 의 이름이 각각 OUT4, OUT3, OUT2,

OUT1 이라고 하자. 이들을 한 digit 를 표현할 수 있는 두 개의 7-세그먼트 중 SS2

를 이용하여 출력하고자 할 때, schematic 상에서 출력단자의 속성 중 “LOC”를 이

용하여 지정할 수도 있고, 또는 “cnt4_ex.ucf” 파일의 다음의 내용을 기술하여도 된

다. 그리고 보드에서 DIP 스위치 6 번을 on 시킨다.

NET OUT4 LOC=P84; # D (weight : 23, MSB) NET OUT3 LOC=P83; # C (weight : 22) NET OUT2 LOC=P82; # B (weight : 21) NET OUT1 LOC=P81; # A (weight : 20, LSB)

31

Page 33: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.6 4-digit seven-segment display (4DSS1, 4DSS2)

4-digit seven-segment display 는 적은 수의 데이터 핀으로 여러 자리의 수를 표

시하게 해 준다. 구동 칩으로는 4-bit 데이터를 받아들여 7-세그먼트의 7 개 출력 데

이터로 변환해 주는 DM9368 칩과, 8 개의 세그먼트를 순차적으로 표시하기 위해

특정 세그먼트를 enable 시켜주는 74LS138 디코더 칩이 있다.

그림 8. 4-digit 7-segment LED

32

Page 34: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

핀 번호표

33

74LS138 (1 of 8 decoder) 단자이름 핀번호 비고

C(3) P206 MSB B(2) P205 A(1) P204 LSB

DM9368 (7-segment decoder) 단자이름 핀번호 비고

D(6) P203 MSB C(2) P202 B(1) P201 A(7) P200 LSB

/RBO(4) P125 Low이면 4DSS 모두 off 되며, High이면 4DSS에 데이터 값이 표시된다.

동작 원리

4-digit 7-segment 를 구동하기 위해 FPGA 칩 내에서 해 주어야 할 일은

74LS138 디코더의 C, B, A 입력을 카운터를 이용하여 계속 8 개의 세그먼트를 스

캔할 수 있도록 해 주어야 한다. 각 세그먼트를 스캔하는 주기는 1KHz 이상이면

적합하며 다음의 회로에서는 1.5KHz 로 스캔하는 회로를 보였다. 그리고 회로에서

CLKOSCINT 는 MP3100X 보드에 탑재된 25MHz 외부 클럭 신호이다.

그림 9. 1.5KHz 주기의 scanning 회로

8 개의 7-세그먼트를 표시하기 위해서는 8 개의 4-bit 데이터(총 32-bit)가 필요하

Page 35: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

다. 이 8 개의 4-bit 데이터를 순차적으로 DM9368 칩 입력단에 가해야하므로 , 8 개

중 하나의 4-bit 데이터를 선택해 주는 멀티플렉서(multiplexer)를 사용하면 편리하

다. 다음 그림은 “Core Generator”를 이용하여 만든 4-bit 8-to-1 멀티플렉서이다.

그림 10. 4-bit 8 to 1 MUX

위의 그림에서 MA[3:0]부터 MH[3:0]까지 8 개의 4-bit 입력은 8 개의 각 7-세그먼

트에 표시하고자 하는 데이터로써, MA[3:0]이 8 개의 세그먼트 중 제일 오른쪽

(4DSS2 의 제일 오른쪽 세그먼트)에 표시될 데이터를 나타내며, MH[3:0]은 8 개의

세그먼트 중 제일 왼쪽 (4DSS1 의 제일 왼쪽 세그먼트)에 표시될 데이터이다.

S[2:0]은 각각 4-bit 로 이루어진 8 개의 입력신호 중에서 하나를 선택하여 출력신호

O[3:0]에 연결해주는 선택 신호로써 카운터의 3-bit 출력신호를 연결한다. 이 카운

터의 출력은 위에서 설명한 바와 같이 약 1 KHz 카운팅하는 회로로부터 얻는다.

4 개의 이진수를 받아들여 7-세그먼트를 구동하는 DM9368 칩의 출력 값에 의

한 세그먼트의 출력 형태는 다음과 같다. SS1, SS2 을 구동하는 7447A 칩과는 달

리 출력 값이 0 ~ F 사이의 값으로 표현된다.

그림 11. 4DSS1 와 4DSS2 의 각 digit 출력형태

34

Page 36: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

다음 그림은 카운터의 출력을 4DSS1 과 4DSS2 에 표시하는 회로이다. 아래 그

림에서 4DSSA[15:0]은 4DSS2 에 출력될 4 개의 4-bit 데이터이며, 4DSSB[15:0]은

4DSS1 에 출력될 4 개의 4-bit 데이터이다. 이 값들을 MUX8_1_4BIT 블록의 입력

에 4-bit 단위로 연결을 하였고, MUX 의 출력값인 MUXOUT[3:0]은 DM9368 의 D,

C ,B, A 입력단에 연결된다. 그리고 MUX 의 선택 신호로 사용되는 SEL[2:0]는

‘CB4CE’ 4-bit 카운터를 이용하여 만들어 내며, 또한 이 신호는 외부에서 74LS138

디코더의 C, B, A 입력단에 연결되어 8 개의 세그먼트 중 하나를 선택하는 신호로

도 사용된다. PB10INT 신호는 SW10 에서 가해지는 신호로써 카운터가 up 카운터

로 동작할지 또는 down 카운터로 동작할지를 결정한다. 이 신호 값에 따라

4DSS1 에 표시되는 카운터의 값이 증가하기도 하고, 감소하기도 한다.

그림 12. 4-digit 7-segment 출력 예제 회로

35

Page 37: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

36

VHDL 코드 예제

다음은 4-digit 7-segment 를 구동하기 위한 VHDL 코드 예를 보여준다. ‘clk25M’

은 외부의 클럭 신호 25MHz 에 연결하는 단자이며, ‘rst’는 리셋단자, ‘datain[31:0]’은

8 개의 7-세그먼트에 표시하고자 하는 4-bit 데이터 8 개에 연결한다. 4DSS1 과

4DSS2 의 7-segment 8 개 중에 일부만 사용하고자 할 경우 4-bit 단위로 원하는 위

치에 신호를 연결시키도록 한다. ‘mask’ 단자는 8 개의 7-세그먼트 중 표시를 원하

는 7-세그먼트는 ‘1’로 할당하고, off 되어지기를 원하는 7-세그먼트는 ‘0’로 할당한

다. 예를 들어 모두 ‘1’로 할당한 경우, 즉 ‘11111111’로 하면 모두 세그먼트가 turn

on 된다. 4DSS1 은 off 시키고 4DSS2 만 on 시키고자 할 경우 8-bit mask 데이터

를 ‘00001111’로 설정하면 된다. ‘ss_val’은 ‘DM9368’칩의 데이터 입력단자 D,C,B,A

에 연결한다. ‘ss_sel’은 디코터의 선택 입력 C,B,A 에 연결한다.

library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity drive_8Dss is Generic ( SS_CLK_DIV_VAL : integer := 12000); port ( clk25M: in STD_LOGIC; rst : in STD_LOGIC; datain: in STD_LOGIC_VECTOR (31 downto 0); mask : in std_logic_vector(7 downto 0); ss_val : out std_logic_vector(3 downto 0); ss_sel: out STD_LOGIC_VECTOR (2 downto 0); onoff : out std_logic ); end drive_8Dss; architecture dyn_ss_arch of drive_8Dss is signal sel,cnt : std_logic_vector(2 downto 0); signal cnt_div : integer range 0 to 25000; signal ce, clk : std_logic; begin clk <= clk25M; ss_sel <= sel; process(clk,rst) begin if(rst = '1') then cnt_div <= 0; elsif(clk'event and clk = '1') then cnt_div <= cnt_div + 1;

Page 38: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

37

if(ce = '1') then cnt_div <= 0; end if; end if; end process; ce <= '1' when (cnt_div = SS_CLK_DIV_VAL-1 ) else '0'; process(clk,rst) begin if(rst = '1') then cnt <= (others =>'0'); elsif (rising_edge(clk)) then if(ce = '1') then cnt <= cnt + 1; end if; end if; end process; process(clk) variable index : integer range 0 to 7; begin if (rising_edge(clk)) then if(rst = '1') then onoff <= '0'; else index := conv_integer(cnt); if(mask(index) = '1') then onoff <= '1'; else onoff <= '0'; end if; end if; end if; end process ; sel <= cnt; process(sel,datain) begin case sel is when "000" => ss_val <= datain(3 downto 0); when "001" => ss_val <= datain(7 downto 4); when "010" => ss_val <= datain(11 downto 8); when "011" => ss_val <= datain(15 downto 12); when "100" => ss_val <= datain(19 downto 16); when "101" => ss_val <= datain(23 downto 20); when "110" => ss_val <= datain(27 downto 24); when others => ss_val <= datain(31 downto 28); end case; end process; end dyn_ss_arch;

Page 39: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

38

4.7 LCD (Liquid Crystal Display)

MP3100X 보드에서 제공하는 LCD 컨트롤러는 히타지 사의 HD44780U 이고,

이를 사용하여 LCD 에는 2 행을 표시할 수 있으며, 각 행마다 16 자 문자를 표시할

수 있다. LCD 인터페이스와 관련된 LCD 모듈의 핀 번호는 다음과 같다.

LCD 인터페이스 핀

핀 번호 심볼 Level 핀 설명 1 Vss - 접지 (0V) 2 Vdd - 공급 전원 (5V) 3 Vo - 공급 전원 (LCD 밝기 조절용) 4 RS H/L 레지스터 선택

H: 데이터, L: 명령어 코드 5 R/W H, H→L Read/Write

H: Read, L: Write 6 E H/L Enable 신호 7 DB0 H/L Data bit 0 8 DB1 H/L Data bit 1 9 DB2 H/L Data bit 2

10 DB3 H/L Data bit 3 11 DB4 H/L Data bit 4 12 DB5 H/L Data bit 5 13 DB6 H/L Data bit 6 14 DB7 H/L Data bit 7

핀 번호표

LCD 모듈 모듈 핀 이름 핀번호 비고

RS P136 Register Selection R/W P138 Read/Write

E P139 Enable Signal DB0 P168 Data bit 0 DB1 P172 Data bit 1 DB2 P173 Data bit 2 DB3 P174 Data bit 3 DB4 P175 Data bit 4

Page 40: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

39

모듈 핀 이름 핀번호 비고

DB5 P176 Data bit 5 DB6 P178 Data bit 6 DB7 P179 Data bit 7

DIP 스위치 조절

LCD 의 일부 핀은 SRAM2 와 공유하고 있다. 따라서 LCD 를 사용하고자 할 경

우 SRAM2 를 사용할 수 없다. LCD 를 enable 시키려면 DIP 스위치 (DIPSW) 중 3

번째 스위치를 위쪽 방향 (enable 또는 on)으로 설정하면 된다. 이때 SRAM2 에 대

한 enable 스위치 (DIP 스위치 중 5 번째 스위치)는 아래 방향 (disable 또는 off)으

로 되어 있어야 한다.

Page 41: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

40

4.8 메모리 인터페이스 (SRAM1, SRAM2)

MP3100X 보드에는 두 개의 32 KB SRAM (SRAM1 과 SRAM2)이 있다. SRAM1

은 항상 사용할 수 있으며, SRAM2 는 LCD 와 핀을 일부 공유하고 있어서 LCD 를

사용하지 않을 경우 사용할 수 있다. LCD 를 사용하지 않을 경우 SRAM1 과 함께

두 개의 메모리를 동시에 사용할 수 있다. 다음에 메모리의 핀 번호를 나타내었다.

핀 할당표

메모리 인터페이스 메모리 인터페이스 RAM 단자 SRAM1 SRAM2 RAM 단자 SRAM1 SRAM2

A0(10) P75 P146 D0(11) P108 P168 A1(9) P86 P147 D1(12) P109 P172 A2(8) P87 P148 D2(13) P110 P173 A3(7) P88 P149 D3(15) P111 P174 A4(6) P89 P150 D4(16) P112 P175 A5(5) P90 P151 D5(17) P113 P176 A6(4) P94 P152 D6(18) P114 P178 A7(3) P95 P160 D7(19) P115 P179 A8(25) P96 P161 _CS(20) P71 P140 A9(24) P97 P162 _OE(22) P73 P141

A10(21) P98 P163 _WE(27) P74 P142 A11(23) P99 P164 A12(2) P100 P165

A13(26) P101 P166 A14(1) P102 P167

FPGA configuration 이전에 SRAM1 이나 SRAM2 메모리에 특정 데이터 값을 제

공된 ‘MPLOAD’ 프로그램을 이용하여 쓸 수도 있고, 메모리에 저장되어 있는 값이

있다면 역시 ‘MPLOAD’ 프로그램을 이용하여 읽어올 수도 있다. 자세한 내용은 뒤

에서 기술되는 MPLOAD 부분을 참조한다.

Page 42: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

41

DIP 스위치 조절

SRAM1 을 사용하기 위해서는 DIP 스위치 (DIPSW)의 4 번째 스위치를 위로 설

정하여야 한다. SRAM1 을 사용하지 않을 경우에는 DIP 스위치의 4 번째 스위치를

아래로 설정하여 disable 시키는 것을 권장한다. SRAM2 의 경우는 5 번째 스위치를

위로 설정한다. 이때 반드시 LCD 의 스위치 (3 번째 스위치)는 아래쪽 방향으로 하

여 disable 시킨다.

Page 43: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.9 PS/2 인터페이스 (PS/2 Port)

MP3100X 보드에서는 한 개의 PS/2 인터페이스 단자를 제공한다. PS/2 인터페

이스시 필요한 핀은 두 개이며, 하나는 키 클럭에 대한 정보를 받아들이며 다른

하나는 키에 대한 직렬 데이터가 실리는 데이터 단자이다. PS/2 인터페이스를 통해

키보드나 마우스를 연결할 수 있다.

PS/2 포트

PIN 이름 비고

1 N/C Not connect

2 VCC +5V DC

3 N/C Not connect

4 Data Key Data

5 GND Ground

6 CLK Key Clock

그림 13. PS/2 Port

핀 번호표

PS/2 Port 인터페이스

단자이름 핀번호 비고 CLK (6) P77 Key Clock DATA(4) P63 Key Data

PS/2 인터페이스의 개요

PS/2 인터페이스는 6 핀의 mini-DIN 커넥터를 사용한다. PS/2 키보드의 경우 키

보드 자체는 많은 키들의 행렬 형태로 배열되어 있으며, 키보드의 값은 키보드가

연결되어 있는 프로세서에서 모니터링 하여 알아낸다. 키보드에서 만들어내는 다

양한 전체 스캔 코드의 값은 문헌 등을 참조하는 것으로 하고, 여기에서는 가장

기본적인 내용만 간략히 기술한다.

42

Page 44: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

먼저 키보드 또는 마우스는 11 개의 bit 로 구성된 프레임의 프로토콜을 사용하

여 호스트에 데이터를 전송한다. 이들 비트들은 다음에 기술하였다.

1 개의 시작 비트 (1 start bit): 항상 ‘0’이다. 8 개의 데이터 비트 (8 data bits): LSB-first 로 데이터가 전송된다. 1 개의 패리티 비트 : odd 패리티를 사용한다. 1 개의 정지 비트 (1 stop bit): 항상 ‘1’이다.

그림 14. PS/2 interface 프로토콜

각 프레임의 11 개 비트들은 clock 의 falling edge 에서 안정된 값을 출력하므로,

호스트에서 값을 읽을 때 PS/2 포트의 clock 단자 신호가 falling edge 시 데이터를

읽어들이면 된다. 이렇게 해서 읽어들인 값을 스캔 코드 (scan code)라고 하며, 다

음에 ‘Q’라는 키를 눌렀을 때 오실로스코프로 측정한 파형을 그림에 나타내었다.

키보드에서 ‘Q’를 눌렀을 때의 스캔 코드의 값은 0x15 이다.

그림 15. 키보드에서 ‘Q’ 키를 눌렀을 때의 오실로스코프 파형

43

Page 45: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

다음의 표는 알파벳과 숫자에 대한 스캔 코드 값을 보여준다. 키가 눌려질 때

마다 ‘make code’와 ‘break code’ 두 가지가 만들어지며, 다음의 표에 각각 MAKE,

BREAK 항으로 표현하였다.

KEY MAKE BREAK KEY MAKE BREAK KEY MAKE BREAK A 1C F0,1C M 3A F0,3A Y 35 F0,35 B 32 F0,32 N 31 F0,31 Z 1A F0,1A C 21 F0,21 O 44 F0,44 0 45 F0,45 D 23 F0,23 P 4D F0,4D 1 16 F0,16

KEY MAKE BREAK KEY MAKE BREAK KEY MAKE BREAK E 24 F0,24 Q 15 F0,15 2 1E F0,1E F 2B F0,2B R 2D F0,2D 3 26 F0,26 G 34 F0,34 S 1B F0,1B 4 25 F0,25 H 33 F0,33 T 2C F0,2C 5 2E F0,2E I 43 F0,43 U 3C F0,3C 6 36 F0, 36 J 3B F0,3B V 2A F0,2A 7 3D F0,3D K 42 F0,42 W 1D F0,1D 8 3E F0,3E L 4B F0,4B X 22 F0,22 9 46 F0,46

다음은 PS/2 키보드를 구동하는 VHDL 예제 코드를 보여준다. CLK 단자에는

25 MHz 외부 클럭을 연결해 주면 되고, PS2CLK 과 PS2DATA 에는 MP3100X 보드

에서 PS/2 포트의 CLK 단자와 DATA 단자의 핀을 연결한다. 이때 PS2CLK 단자는

GCK 입력단자에 연결되어 있으므로 BUFGP 입력 버퍼를 사용해야 한다. RST 단

자에는 외부의 리셋 스위치나 또는 FPGA configuration 이 끝나면 자동으로 리셋이

되는 회로에 연결한다. FPGA configuration 이 끝나는대로 자동으로 단일 리셋 펄스

를 만들어주는 회로의 예는 다음과 같다. 이 회로에서 CLKOSCINT 는 MP3100X

보드 상에 있는 25 MHz 클럭이다.

그림 16. FPGA configuration 완료시 자동 리셋 펄스 생성 회로

44

Page 46: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

45

키보드의 최종 값은 dataout[31:0]에 저장되어 있으며 7 개의 이전에 눌려진 키

보드 값과 현재 눌려진 키보드의 값을 가지고 있다. 즉 매번 키가 눌려질 때마다

하나씩 이동하는 구조로 되어 있다. 최근의 키는 dataout[3:0]에 저장되어 있으며,

제일 먼저 들어온 키는 dataout[31:28]에 저장되어 있다. 아래에 제시된 코드를 가

지고 최근의 키 값만 사용하기를 희망한다면 dataout[3:0]의 값만 사용하고, 나머지

는 사용하지 않으면 된다. MP3100X 테스트 파일인 mp3100xv1.bit 에서는 현재 눌

려진 키를 포함 총 3 개의 키 값을 4DSS1 의 오른쪽 3 개의 세그먼트에 표시한다.

스캔된 키코드를 BCD 로 변환하는 것은 아래 코드의 뒷부분에 있는 ‘scan2BCD’

블록에서 수행하며, BCD 변환이 아닌 다른 형태로 그리고 더 많은 코드를 표시하

고자 한다면 이 부분을 수정하여 사용하면 된다.

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ps2kbd_top is Port ( clk : in std_logic; rst : in std_logic; ps2clk : in std_logic; ps2data : in std_logic; dataout : out std_logic_vector(31 downto 0); err_ind : out std_logic; err_code : out std_logic_vector(1 downto 0); H,L : out std_logic_vector(3 downto 0)); end ps2kbd_top; architecture RTL of ps2kbd_top is component ps2_kbd_new Port ( clk : in std_logic; rst : in std_logic; ps2_clk : in std_logic; ps2_data : in std_logic; scancode : out std_logic_vector( 7 downto 0); data_ready : out std_logic; released : out std_logic; err_ind : out std_logic; err_code : out std_logic_vector(1 downto 0); read : in std_logic); end component; component SHIFT8 port (clk,rst, shift : in std_logic; datain : in std_logic_vector(3 downto 0); dataout : out std_logic_vector(31 downto 0));

Page 47: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

46

end component ; component scan2BCD port ( scan: in STD_LOGIC_VECTOR (7 downto 0); digit: out STD_LOGIC_VECTOR (3 downto 0); is_bcd: out STD_LOGIC ); end component; signal valid, ack, req ,sh : std_logic; signal key_released : std_logic; signal err_code_sig : std_logic_vector(1 downto 0); signal err_ind_sig : std_logic; signal cnt, bcd : std_logic_vector(3 downto 0); signal scancode : std_logic_vector(7 downto 0); begin PS2GET: ps2_kbd_new Port map ( clk =>clk, rst =>rst, ps2_clk =>ps2clk, ps2_data =>ps2data, scancode =>scancode, data_ready =>req, released =>key_released, err_ind =>err_ind_sig, err_code =>err_code_sig, read =>ack); reg8: SHIFT8 port map (clk =>clk,rst=>rst, shift=>sh, datain => bcd, dataout =>dataout); cnv: scan2BCD port map( scan => scancode, digit =>bcd, is_bcd => valid); sh <= (ack and req) and (not key_released); H <= "00" & valid & key_released; L <= '0' & err_ind_sig & err_code_sig ; err_ind <= err_ind_sig; err_code <= err_code_sig; gen_ack: process (clk,rst) begin if(rising_edge(clk)) then if(rst = '1') then ack <= '0';

Page 48: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

47

elsif(req = '1') then ack <= '1'; else ack <= '0'; end if; end if; end process; end RTL; ------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ps2_kbd_new is Port ( clk : in std_logic; rst : in std_logic; ps2_clk : in std_logic; ps2_data : in std_logic; scancode : out std_logic_vector( 7 downto 0); data_ready : out std_logic; released : out std_logic; err_ind : out std_logic; err_code : out std_logic_vector(1 downto 0); read : in std_logic); end ps2_kbd_new; architecture Behavioral of ps2_kbd_new is constant TIMER_60U_BIT_SIZE : integer := 13; constant TIMER_60U_TERMINAL_VAL : integer := 3000; constant FRAME_BIT_NUM : integer := 11; --constant TIMER_5U_BIT_SIZE : integer := 7; --constant TIMER_5U_TERMINAL_VAL : integer := 125; constant RELEASE_CODE : std_logic_vector(7 downto 0) := "11110000"; type state1 is (low,high,tr_low,tr_high); type state2 is (ready_st, ready_ack_st); signal nx_st, st : state1; signal nx_st2, st2 : state2; signal ps2_clk_d, ps2_clk_s, ps2_data_d, ps2_data_s : std_logic; signal ps2_clk_dd, ps2_data_dd : std_logic; signal sync_cnt : std_logic_vector(10 downto 0); signal sync_en : std_logic; signal ps2_clk_rising_edge, ps2_clk_falling_edge : std_logic; signal en_60us_timer : std_logic; signal timer60u_cnt : std_logic_vector(TIMER_60U_BIT_SIZE-1 downto 0); signal q : std_logic_vector(FRAME_BIT_NUM-1 downto 0); signal output_strobe, shift_done : std_logic; signal bit_cnt : std_logic_vector(3 downto 0); signal timer60u_timeout : std_logic; signal release, keep_release_sig : std_logic; signal parity_err, ss_bits_err : std_logic;

Page 49: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

48

begin sync_reg: process(rst,clk) begin if(rst = '1') then ps2_clk_d <= '1'; ps2_data_d <= '1'; ps2_clk_dd <= '1'; ps2_data_dd <= '1'; elsif (rising_edge(clk)) then if(sync_en = '1') then ps2_clk_d <= ps2_clk; ps2_data_d <= ps2_data; ps2_clk_dd <= ps2_clk_d; ps2_data_dd <= ps2_data_d; end if; end if; end process; process(clk,rst) begin if(rst = '1') then sync_en <= '0'; sync_cnt <= (others=>'0'); elsif(rising_edge(clk)) then sync_cnt <= sync_cnt + 1; if(sync_cnt = 500) then sync_en <= '1'; sync_cnt <= (others=>'0'); else sync_en <= '0'; end if; end if; end process; process(rst,clk) begin if(rst = '1') then ps2_clk_s <= '1'; ps2_data_s <= '1'; elsif(rising_edge(clk)) then ps2_clk_s <= ps2_clk_dd; ps2_data_s <= ps2_data_dd; end if; end process; ps2_clk_rising_edge <= (not ps2_clk_s) and ps2_clk_dd; ps2_clk_falling_edge <= (not ps2_clk_dd) and ps2_clk_s; state_reg: process(clk,rst) begin if (rising_edge(clk)) then if(rst = '1') then st <= high; else st <= nx_st; end if; end if;

Page 50: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

49

end process; state_logic: process(st, ps2_clk_rising_edge, ps2_clk_falling_edge) begin case st is when low => en_60us_timer <= '1'; if(ps2_clk_rising_edge = '1') then nx_st <= tr_high ; else nx_st <= low; end if; when tr_high => nx_st <= high; en_60us_timer <= '0'; when high => en_60us_timer <= '1'; if(ps2_clk_falling_edge = '1') then nx_st <= tr_low; else nx_st <= high; end if; when tr_low => en_60us_timer <= '0'; nx_st <= low; when others => --en_60u_timer <= '0'; nx_st <= high; end case; end process; comm_state_reg: process(clk) begin if(rising_edge(clk)) then if(rst = '1') then st2 <= ready_ack_st ; else st2 <= nx_st2 ; end if; end if; end process; comm_state: process(st2, output_strobe, read) begin case st2 is when ready_ack_st => if(output_strobe = '1') then nx_st2 <= ready_st ; else nx_st2 <= ready_ack_st; end if; when ready_st => if(read = '1') then nx_st2 <= ready_ack_st; else nx_st2 <= ready_st; end if;

Page 51: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

50

when others => nx_st2 <= ready_ack_st; end case; end process; data_ready <= '1' when st2 = ready_st else '0'; -- bit counter cnt_bit_num: process(clk) begin if(rising_edge(clk)) then if((rst = '1') or (shift_done = '1')) then bit_cnt <= (others => '0'); -- normal reset condition elsif((timer60u_timeout = '1' )and (st = high) and (ps2_clk_s = '1')) then bit_cnt <= (others => '0'); -- timer out : no clk signal more than 60 us elsif(st = tr_low) then bit_cnt <= bit_cnt + 1; end if; end if; end process; shift_R: process(clk) begin if(rising_edge(clk)) then if(rst = '1') then q <= (others => '0') ; elsif(st = tr_low) then q <= ps2_data_s & q(FRAME_BIT_NUM-1 downto 1); end if; end if; end process; shift_done <= '1' when (bit_cnt = FRAME_BIT_NUM) else '0'; release <= '1' when (q(8 downto 1) = RELEASE_CODE) and (shift_done='1') else '0'; output_strobe <= '1' when (shift_done = '1') and (release = '0') else '0'; hold_relase: process(clk) begin if(rising_edge(clk)) then if(rst = '1' or output_strobe ='1') then keep_release_sig <= '0'; elsif(release = '1') then keep_release_sig <= '1'; end if; end if; end process; send_output: process(clk) begin if(rising_edge(clk)) then if(rst='1') then scancode <= (others=>'0'); released <= '0'; err_ind <= '0'; err_code <= (others =>'0');

Page 52: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

51

elsif(output_strobe='1') then scancode <= q(8 downto 1) ; released <= keep_release_sig; err_ind <= parity_err or ss_bits_err; err_code <= parity_err & ss_bits_err; end if; end if; end process; -- 60 us timer timer: process(clk) begin if(rising_edge(clk)) then if(en_60us_timer = '0') then timer60u_cnt <= (others => '0'); elsif( timer60u_timeout = '0') then timer60u_cnt <= timer60u_cnt + 1; end if; end if; end process; timer60u_timeout <= '1' when timer60u_cnt = TIMER_60U_TERMINAL_VAL else '0' ; err_chk: process(q) variable p : std_logic; begin p := '0'; for i in 1 to 9 loop p := q(i) xor p ; end loop; if (p = '1') then parity_err <= '0'; else parity_err <= '1'; end if; if(q(0) = '1' or q(10) = '0') then ss_bits_err <= '1'; else ss_bits_err <= '0'; end if; end process; end Behavioral; ------------------------------------------------------- library IEEE; use IEEE.std_logic_1164.all; entity scan2BCD is port ( scan: in STD_LOGIC_VECTOR (7 downto 0); digit: out STD_LOGIC_VECTOR (3 downto 0); is_bcd: out STD_LOGIC );

Page 53: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

52

end scan2BCD; architecture comb of scan2BCD is begin process(scan) begin is_bcd <= '1'; digit <= (others => '1'); case scan is when "00010110" => digit <= "0001"; -- 16 (1) when "00011110" => digit <= "0010"; -- 1E (2) when "00100110" => digit <= "0011"; -- 26 (3) when "00100101" => digit <= "0100"; -- 25 (4) when "00101110" => digit <= "0101"; -- 2E (5) when "00110110" => digit <= "0110"; -- 36 (6) when "00111101" => digit <= "0111"; -- 3D (7) when "00111110" => digit <= "1000"; -- 3E (8) when "01000110" => digit <= "1001"; -- 46 (9) when "01000101" => digit <= "0000"; -- 45 (0) when "00011100" => digit <= "1010"; -- 1C (A) when "00110010" => digit <= "1011"; -- 32 (B) when "00100001" => digit <= "1100"; -- 21 (C) when "00100011" => digit <= "1101"; -- 23 (D) when "00100100" => digit <= "1110"; -- 24 (E) when "00101011" => digit <= "1111"; -- 2B (F) when others => is_bcd <= '0'; end case; end process; end comb; ------------------------------------------------------- library IEEE; use IEEE.std_logic_1164.all; entity SHIFT8 is port (clk,rst,shift : in std_logic; datain : in std_logic_vector(3 downto 0); dataout : out std_logic_vector(31 downto 0)); end SHIFT8; architecture RTL of SHIFT8 is constant BIT_NUM_PER_REG : integer := 3; type buff_ty is array (7 downto 0) of std_logic_vector(BIT_NUM_PER_REG downto 0); signal buff : buff_ty; begin process(clk,rst) begin if(rising_edge(clk)) then if(rst = '1') then for i in 0 to 7 loop buff(i) <= (others => '0'); end loop;

Page 54: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

53

elsif(shift = '1') then for i in 1 to 7 loop buff(i) <= buff(i-1); end loop; buff(0) <= datain; end if; end if; end process; dataout <= buff(7) & buff(6) & buff(5) & buff(4) & buff(3) & buff(2) & buff(1) & buff(0); end RTL ;

Page 55: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.10 VGA 인터페이스

VGA 포트를 통하여 VGA 호환 모니터를 구동할 수 있다. 다음은 15 핀 VGA

포트 핀들에 대한 정보이며, MP3100X 보드에서는 VGA 포트 신호 중 1, 2, 3, 13,

14 번 핀들과 GND 핀만 사용한다.

그림 17. VGA Port

15-pin VGA 포트 핀번호 신호 비고

1 적색 2 녹색 3 청색

4,11 NC 연결없음 5-8,10 GND

9 Vcc 12 DDC 데이터출력 모니터 검색 데이터 13 HSYNC 수평동기신호 14 VSYNC 수직동기신호 15 DDC 클럭 출력 모니터 감지 클럭

핀 번호표

54

VGA 인터페이스 이름 핀번호 비고

Hsync P119 Vsync P120 Red P121

Green P122 Blue P123

Page 56: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

55

4.11 부저 (Buzzer)

부저는 P181 에 연결되어 있으며 주기적인 신호를 이용하여 소리를 낼 수 있다.

‘0’과 ‘1’이 주기적으로 반복되는 펄스를 이용하여 특정 음에 대한 소리를 낼 수 있

으며, 음원에 대한 여러 펄스를 미리 준비한 다음 음의 순서를 정해진 시간동안

멀티플렉서를 통해 부저에 연결하면 다양한 소리를 낼 수 있다.

핀 번호표

부저 (Buzzer) 이름 핀번호 비고

Buzzer P181

VHDL 코드 예제

다음은 4×4 입력 스위치 중 0 ~ 7 이라고 표기된 8 개의 입력 스위치를 가지고

‘도’부터 시작하여 한 옥타브 사이의 음을 내는 코드의 예이다. 4×4 입력 스위치로

부터 데이터를 받아들이는 부분은 앞 부분에서 기술한 4×4 입력 스위치 VHDL 코

드 ‘read_keypad’와 동일한 것을 사용하며, 제일 상위 모듈은 ‘noteplay’이며, 각 음

원에 대한 해당 주파수의 음원을 발생시키는 모듈은 ‘pulseGen’이다.

“noteplay”

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity noteplay is Port ( clk : in std_logic; rst : in std_logic; col : out std_logic_vector(1 downto 0); row : in std_logic_vector(3 downto 0); buzzer : out std_logic); end noteplay; architecture Behavioral of noteplay is

Page 57: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

56

component pulseGen Port ( rst : in std_logic; clk : in std_logic; sel : in std_logic_vector(2 downto 0); en : in std_logic; pulse : out std_logic); end component; component read_keypad generic (KEYPAD_CLK_DIV_VAL : integer range 0 to 25000 :=25000); --1KHz sampling period Port ( clk25MHz : in std_logic; rst : in std_logic; col_sel : out std_logic_vector(1 downto 0); row_stat : in std_logic_vector(3 downto 0); data : out std_logic_vector(3 downto 0); valid : out std_logic; new_key : out std_logic); end component; signal sel : std_logic_vector(2 downto 0); signal en : std_logic; signal data : std_logic_vector(3 downto 0); begin FG: pulseGen Port map( rst=>rst, clk=>clk, sel=>sel, en => en, pulse => buzzer); input : read_keypad Port map( clk25MHz =>clk, rst => rst, col_sel => col, row_stat => row, data => data, valid => en, new_key => open); sel <= data(2 downto 0); end Behavioral;

“pulseGen”

library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity pulseGen is Port ( rst : in std_logic; clk : in std_logic; sel : in std_logic_vector(2 downto 0); en : in std_logic; pulse : out std_logic); end pulseGen;

Page 58: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

57

architecture RTL of pulseGen is type cnt_arry is array(7 downto 0) of std_logic_vector(15 downto 0); type terminal_arry is array(0 to 7) of integer range 0 to 47710; signal cnt : cnt_arry; -- fundamental frequency of sounds 262, 294, 330, 349, 392, 440, 494, 523 Hz constant terminal : terminal_arry -- C(low),D,E,F,G,A,B,C(high) :=(11944,10641,9480,8948,7972,7102,6327,5972); signal pulse_gen : std_logic_vector(7 downto 0); signal pulse_en : std_logic_vector(7 downto 0); begin process(clk) variable index : integer range 7 downto 0; begin if rising_edge(clk) then if(en = '1') then index := conv_integer(sel); pulse <= pulse_gen(index); else pulse <= '0'; end if; end if; end process; process(clk) begin if(rising_edge(clk)) then for i in 7 downto 0 loop if(rst = '1' or pulse_en(i) = '1') then cnt(i) <= (others=>'0'); else cnt(i) <= cnt(i) + 1; end if; end loop; end if; end process ; GL: for i in 7 downto 0 generate pulse_en(i) <= '1' when cnt(i) = terminal(i)-1 else '0'; end generate; -- generate duty cycle 50% pulse process(clk) begin if(rising_edge(clk)) then for i in 7 downto 0 loop if(rst = '1') then pulse_gen(i) <= '0'; elsif(pulse_en(i) = '1') then pulse_gen(i) <= not pulse_gen(i); end if; end loop; end if; end process; end RTL;

Page 59: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

58

4.12 RS-232 직렬통신 (P4)

RS-232 통신은 속도가 256kbps 이하이면서 선로의 길이가 15m 이하의 경우

데이터 통신으로 많이 사용된다. 데이터 전송과 수신은 각각 2 번과 3 번 핀을

통해 이루어지며, 5 번 핀이 신호의 접지이다. 다음은 9-pin RS-232 포트의 각 핀

에 대한 설명이다.

9-pin RS-232 포트 핀번호 신호 비고

1 Data Carrier Detect 2 Received Data RD 3 Transmitted Data TD 4 Data Terminal Ready 5 Signal Ground GND 6 Data Set Ready 7 Request to Send RTS 8 Clear to Send CTS 9 Ring Indicator

위의 9 핀 중 비고에 기술된 5 개의 핀이 연결되어 있으며, RS-232 를 통해 통

신하는데 필요한 가장 기본적인 신호 세 가지는 RD, TD, GND 이다.

핀 번호표

RS-232 포트 인터페이스 이름 핀번호 비고 RD P134 TD P154

RTS P133 CTS P135

Page 60: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.13 확장용 커넥터 (Extension Pin Connectors, JP5 ~ JP8)

MP3100X 보드에서 제공하는 이외의 입출력 장치를 사용하고자 할 경우 확장

용 커넥터에 리본 케이블 등을 연결하여 사용할 수 있다. 또한 MP3100X 보드 두

개를 이용하여 데이터를 주고 받으면서 실험할 수도 있다. 연결시 주의할 점 중의

하나는 기존의 입출력 핀 중 보드에 있는 다양한 I/O 에서 출력을 공급하는 핀과

함께 사용하면 안된다. 예를 들어 보드의 입력 스위치에서는 High 또는 Low 의 전

압을 FPGA 에 가하고 있는데 이 핀을 다른 보드 또는 다른 장치에서 전원을 가하

는 소자와 연결되었을 때 전원 충돌이 생길 수 있으니 조심해야 한다. 이런 종류

의 핀으로는 Toggle/Push 입력 스위치, SRAM 데이터 및 LCD 데이터 단자, DB25

configuration 용 핀 등이 있다.

4.13.1 Extension Pin Connectors 사용예 (출력소자 연결시)

MP3100X 보드의 확장용 커넥터에 리본 케이블 등으로 연결한 부분이 아래 그

림의 “FPGA 핀” 이라고 할 때, FPGA 로부터의 출력신호로 LED 등의 display 소

자를 안정적으로 구동할 수 있도록 보조 소자들을 설치한다. LED 에 흐르는 전류

량을 조절해 LED 와 FPGA 를 보호하기 위한 직렬저항은 반드시 필요하며,

FPGA 핀과 LED 사이의 풀업저항은 굳이 필요하진 않다. 그러나, 다수의 출력소

자를 사용할 때는 전류량이 증가하여 FPGA 의 최대 전류공급량을 초과할 수 있

으며, 이 시점에서 부족분을 메워주는 것이 풀업저항이다. 즉, FPGA 의 보호와

안정적인 동작을 위해 풀업저항을 권장한다.

풀업저항4.7K

직렬저항50 ~ 100

LED

VCC 3.3V

FPGA 핀

그림 18. 확장용 커넥터 사용시 예제 회로(출력소자 연결시) 59

Page 61: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.13.2 Extension Pin Connectors 사용예 (입력소자 연결시)

MP3100X 보드의 확장용 커넥터에 리본 케이블 등으로 연결한 부분이 아래 그

림의 “FPGA 핀” 이라고 할 때, FPGA 핀으로 스위치의 입력을 가하고자 하는 상

황에서 스위치가 안정된 입력신호를 생성할 수 있도록 보조 소자들을 설치한다.

물리적인 동작을 수행하는 스위치는 누르는 시점에서, 떼는 시점에서 수 KHz 에

서 수 MHz 에 달하는 노이즈를 유도하기 때문에 반드시 신호의 안정화가 필요

하다. 커패시터는 스위치를 누르고 뗄 때 생기는 리플전압을 평활화 시켜주기

위해 사용된다. 풀다운 저항은 스위치에서 발생하는 높은 전압의 노이즈를 감쇄

시키는 작용을 한다. 이 두 소자의 기능으로 스위치로부터 생성되는 신호는 거

의 안정이 되지만, 스위치를 누르고 떼는 시점에서 노이즈와 함께 매우 짧은 시

간동안 큰 반사전압(reflection voltage)이 유도되기도 하기 때문에, 이 전압이

FPGA 를 손상시키지 않도록 직렬저항을 설치하여 완충기능을 한다.

직렬저항50 ~ 100

VCC 3.3V

FPGA 핀

Switch

풀다운저항4.7K

10uF

그림 19. 확장용 커넥터 사용시 예제 회로(입력소자 연결시)

60

Page 62: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

4.14 클럭 분주 회로

MP3100X 보드에 기본적으로 탑재된 25 MHz 클럭을 외부로부터 받아들여 다양

한 클럭을 만들어 내는 한 회로도를 다음 그림에 보였다.

그림 20. 클럭 분주 회로 예제

예를 들어 24Hz 의 클럭을 어떤 소자에 가하고자 할 때 그 소자의 클럭에는

‘CLKOSCINT’를 연결하고 CE 단자에 ‘CLK24HZCE’ 신호를 연결하면 된다.

61

Page 63: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

62

5. 보드 Configuration 및 동작

5.1 전원공급

전원 공급은 크게 두 가지 방법이 있다. 첫번째는 키트에 포함되어 있는 7.5V

어댑터를 이용하는 방법이며, 두 번째는 실험실 내에 있는 전원 공급기 (Power

supply)를 이용하여 7.5V 를 직접 가하는 방법이다. 보드 내에서는 7.5V 외부 전원

을 받아 5V, 3.3V, 2.5V 의 전압을 만들어 사용한다. 두 가지 방법 중 하나를 이용

하여 전원을 공급하며, 보드에 전원이 가해지면 두 개의 적색 LED (LD1 과 LD2)가

켜지며 각각 5V 전원과 3.3 V 전원이 보드에 가해지고 있음을 나타낸다. MP3100X

보드에서 입출력 장치들의 사용량이 많을 경우 500 mA 정도임으로, 7.5V 어댑터를

사용하여 외부 전원을 가하는 경우 어댑터의 용량이 최소 500 mA 이상의 것을 사

용하여야 한다.

5.2 FPGA Configuration 하기

MP3100X 보드 상에서 FPGA 를 configuration 하는 방법은 크게 세 가지이다.

첫번째는 제공되는 ‘MPLOAD’ 프로그램을 이용하여 DB25 포트를 통한 slave serial

mode 로 configuration 하는 방법이며, 두 번째는 Serial PROM 을 이용해 master

serial mode 로 configuration 하는 방법이다. 세번째 방법은 Xilinx ISE 시리즈를 이

용하여 Parallel III DLC5 Cable 을 통해 slave serial mode 로 configuration 하는 방법

이다. Xilnx 사의 프로그램은 여러 종류가 있다. 예전에는 Foundation 시리즈를 사

용했으며, 현재는 ISE 시리즈가 사용되며 최신버젼은 현재까지 2004 년 1 사분기에

발표된 ISE 6.2i 이다. 다음에 각 방법을 Step 별로 설명한다.

5.2.1 MPLOAD 를 이용한 Slave serial mode configuration

이 방법은 MP3100X 전용 configuration 프로그램인 ‘MPLOAD’를 이용하여

configuration 하는 방법으로 가장 간편하면서도 많이 사용되는 방법이다.

Page 64: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

Step 1. 보드 전원을 off 한 상태에서 제공된 Parallel cable 로 PC 의 병렬 포

트와 보드 오른쪽 하단에 있는 DB25 커넥터를 연결한다. Step 2. FPGA 를 slave serial mode 로 설정하기 위해 DIP 스위치 (DIPSW)의

1 번과 2 번, 즉 CFGA 와 CFGB 를 아래방향(off)으로 위치시킨다. Step 3. FPGA 의 configuration 용 핀인 DIN, PROG, CCLK 단자를 DB25 커

넥터로 연결하기위해 보드 상에서 ‘CONFIG SRC SEL’이라고 표시된 세 개의 점퍼(JP1-1, JP1-2, JP1-3)를 모두 윗방향으로 연결한다. 참

고로 아래방향은 Serial PROM 을 이용해 configuration 할 때 사용하

며, ‘JTAG SRC SEL’ 라고 표시된 네 개의 점퍼(JP2-1, JP2-2, JP2-3, JP2-4)는 어느 위치에 있든지 상관없다.

그림 21. Slave serial mode 의 DIPSW & Jumper 셋팅(MPLOAD 이용시)

Step 4. 보드 전원을 on 시키면 FPGA 의 configuraion mode 선택핀인 M2,

M1, M0 핀에 모두 high 전압이 가해지며, 현재 선택된 모드가 slave serial mode 임을 나타내는 ‘LD5’ LED 가 켜진다.

Step 5. ‘MPLOAD’를 실행한 후 FPGA 에 구현하려는 설계파일(.bit)을 지정하

고 Start Download To Board 버튼을 클릭하여 configuration 을 진행

한다. ‘MPLOAD’ 프로그램의 다양한 사용법은 다음 장에서 상세히 기

술한다.

그림 22. MPLOAD 에서 Download 진행

63

Page 65: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

Step 6. 다운로드 중에 FPGA 의 DIN 핀 상태를 표시하는 ‘LD4’ LED 가 on/off 동작을 반복함으로써 데이터가 전송되고 있음을 알 수 있으며, 다운

로드가 성공되면 ‘LD3’ LED(FPGA 의 DONE 신호)가 켜진다. (주의) ‘MPLOAD’는 DB25 커넥터를 통해 FPGA의 CCLK, DIN, PROG 핀에 데

이터를 전송한다. 따라서, ‘Parallel III DLC5 Cable’이 JP9 커넥터의 왼쪽 ‘FPGA CFG’측에 연결된 상태에서 ‘MPLOAD’를 사용하면, 데이터 충돌이 발생하여 정

상적인 configuration을 할 수 없으므로, MPLOAD를 사용할 때는 Parallel III DLC5 Cable을 연결하지 않아야 한다.

5.2.2 PROM 을 이용한 Master serial mode configuration

PROM XC18V01 에 설계 결과인 .bit 파일에 대한 내용이 들어있다고 하였을 경

우 (PROM 에 데이터를 쓰는 방법은 다음 섹션에서 기술한다.) PROM 으로부터 설

계 데이터를 FPGA 칩으로 읽어들여 configuration 할 수 있다.

Step 1. 보드 전원을 off 한 상태에서 FPGA 를 master serial mode 로 설정하

기위해 DIP 스위치 (DIPSW)의 1 번과 2 번, 즉 CFGA 와 CFGB 를 윗방향(on)으로 위치시킨다.

Step 2. FPGA 의 configuration 용 핀인 DIN, PROG, CCLK 단자들을 PROM

에 연결하기위해 보드 상에서 ‘CONFIG SRC SEL’이라고 표시된 세

개의 점퍼(JP1-1, JP1-2, JP1-3)를 모두 아래쪽으로 연결한다.

그림 23. Master serial mode 의 DIPSW & Jumper 셋팅(PROM 이용시)

Step 3. 보드 전원을 on 시키면 FPGA 의 configuraion mode 선택핀인 M2,

M1, M0 핀에 모두 low 전압이 가해지며, 현재의 모드가 Master serial mode 임을 나타내는 ‘LD6’ LED 가 켜진다. 또한, 전원이 켜지는 순간 자동으로 PROM 에 들어있는 설계 데이터가 FPGA 로 다운로드되며, 다운로드가 성공되면 ‘LD3’ LED(FPGA 의 DONE 신호)가 켜진다.

64

Page 66: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

(참고) 제대로 다운로드 되지 않을 경우 다음에 기술하는 PROM에 데이터 읽

기 / 쓰기 방법을 통하여 설계 결과가 제대로 PROM에 쓰여졌는지를 확인한다. 또한 위에서 기술한 FPGA 모드 (CFGA, CFGB DIP 스위치)와 ‘CONFIG SRC SEL’의 세 점퍼(JP1-1, JP1-2, JP1-3) 연결이 제대로 되었는지 확인한다.

5.2.3 iMPACT 를 이용한 Slave serial mode configuration

iMPACT 를 이용해 slave serial mode 로 configuration 하려면, 별도로 판매하는

Parallel III DLC5 Cable 을 구입해야 한다.

Step 1. 보드 전원을 off 한 상태에서 Parallel-III DLC5 케이블로 PC 의 병렬

포트와 MP3100X 보드 왼쪽 하단에 있는 JP9 커넥터(Parallel III DLC5 connector)의 왼쪽 ‘FPGA CFG’측을 연결한다.

Step 2. FPGA 를 slave serial mode 로 설정하기 위해 DIP 스위치 (DIPSW)의 1 번과 2 번, 즉 CFGA 와 CFGB 를 아래방향(off)으로 위치시킨다.

Step 3. Configuration source 선택을 위한 세 개의 점퍼(‘CONFIG SRC SEL’

이라고 표시된 JP1-1, JP1-2, JP1-3)를 모두 제거하거나 한 핀에만 연결함으로써, 세 점퍼의 가운데 신호핀(FPGA 와 연결된 핀)에 다른 모드의 configuration source 가 공급되지 않도록 한다. 이 때, ‘JTAG SRC SEL’ 라고 표시된 네 개의 점퍼(JP2-1, JP2-2, JP2-3, JP2-4)는 어느 위치에 있던지 상관없다.

그림 24. Slave serial mode 의 DIPSW & Jumper 셋팅(iMPACT 이용시)

Step 4. 보드 전원을 on 시키면 FPGA 의 configuraion mode 선택핀인 M2, M1, M0 핀에 모두 high 전압이 가해지며, 현재 선택된 모드가 slave serial mode 임을 나타내는 ‘LD5’ LED 가 켜진다.

65

Page 67: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

Step 5. ISE WebPack 의 ‘iMPACT’를 실행한 후 나타나는 Operation Mode Selection 창에서 ‘Configure Device’ 항목을 선택하고 다음 버튼을 클릭한다.

그림 25. Operation Mode Select

Step 6. Configure Device 창에서 ‘Slave Serial Mode’를 선택한 다음 마침 버

튼을 클릭한다.

그림 26. Configure Device

Step 7. 그러면 자동으로 Parallel 포트에 연결된 케이블 ‘LPT1’을 인식하며, 설계한 파일을 지정하라는 ‘Add Device’ 창이 나타난다. 이창에서 보

드의 FPGA 에 download 하고자하는 .bit 파일을 지정한다.

그림 27. Add Device

66

Page 68: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

Step 8. 다음으로 iMPACT 화면 중앙에 나타나는 Xilinx FPGA 칩을 마우스의 오른쪽 버튼으로 선택한 후 나타나는 메뉴에서 ‘Program..’을 클릭해 configuration 을 진행한다. 다운로드가 성공되면 LED ‘LD3’ (FPGA 의 DONE 신호)가 켜진다.

그림 28. iMPACT 에서 Configuration 진행

(참고) 혹 자동으로 포트를 찾지 못할 경우 보드에 전원이 제대로 가해지고 있

는지 확인해 보고, 전원이 가해지는 경우에도 제대로 찾지 못하면 ‘iMPACT’를 종료하고 다시 실행해 본다.

5.3 PROM 프로그래밍

PROM (Serial Programmable ROM) 프로그래밍은 JTAG 인터페이스를 사용한다.

이를 위해 ‘Parallel III DLC5 Cable’이 필요하며 MP3100X 보드를 구입한 곳에서

구입할 수 있다. PROM 에 데이터를 쓰는 단계는 크게 두 가지로 나뉜다. 첫 번째

는 생성된 bit 설계 파일을 PROM 에 쓰기위해 mcs 데이터 포맷으로 변환하는 단

계이고, 두 번째 단계는 변환된 데이터를 실제 PROM 에 프로그래밍하는 단계이다.

(참고) PROM을 이용한 FPGA configuration 기능은 10만 게이트 FPGA 칩 (XC2S100)이 탑재된 보드에서만 지원하며, 20만 게이트 FPGA 칩 (XC2S200)이 탑재된 보드에서는 지원하지 않는다.

67

Page 69: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

5.3.1 첫 번째 단계 : bit 파일로부터 mcs 파일 생성

이 단계는 PROM 에 프로그래밍할 데이터를 준비하는 단계로써, Xilinx

Foundation 의 ‘PROM File Formatter’를 사용하거나, ISE WebPack 의 ‘iMPACT’ 를

사용한다. 다음은 PROM 에 프로그래밍 하기위한 mcs 파일을 준비하는 방법에 대

해, ISE WebPack 의 iMPACT 를 기준으로 설명한다.

Step 1. Project Navigator 의 Processes for Current Source 창에서 ‘Generate PROM, ACE, or JTAG File’ 항목을 더블클릭하거나 마우스 우측버튼 팝업메뉴의 Run 을 선택하여 ‘iMPACT’를 실행한다. 또는, 시작버튼

에 등록된 프로그램 그룹에서 직접 iMPACT 를 실행해도 된다. 이 경우엔 아래 그림과 같은 Operation Mode Selection 창이 나타나며, Prepare Configuration Files 항목을 선택하고 다음 버튼을 클릭한

다.

그림 29. iMPACT 실행

그림 30. Operation Mode Selection

Step 2. Prepare Configuration Files 창에서 PROM file 항목을 선택하고 다음

버튼을 클릭한다.

68

Page 70: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

그림 31. Prepare Configuration Files

Step 3. Prepare PROM Files 창에서 아래와 같이 입력한 후 다음 버튼을 클

릭한다. A. Xilinx Serial PROM 항목 체크 B. PROM File Format : MCS 체크 C. Memory Fill Value (2 Hex) : FF 입력 D. PROM File Name 과 Location은 임의로 지정

그림 32. Prepare PROM Files

Step 4. Specify Xilinx Serial PROM device 창에서 xc18v 의 xc18v01 을 선택

후 Add 버튼을 클릭하여 아래그림과 같이 list 에 추가한 후 다음 버 튼을 클릭한다.

그림 33. Specify Xilinx Serial PROM device 69

Page 71: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

Step 5. 현재까지 설정한 내용을 확인한 후 다음 버튼을 클릭한다.

그림 34. File Generation Summary

Step 6. Add Device File 창에서 Add File.. 버튼을 클릭하여 나타나는 대화상

자에서 MCS 파일로 변환할 bit 파일을 선택한다.

그림 35. Add Device File

Step 7. 다음으로 다른 디자인 파일을 현재의 Data Stream 에 추가할지 묻는 대화상자가 나타나며 여기서는 아니오 버튼을 클릭한 후 마침 버튼

을 클릭하여 PROM 파일생성을 진행한다.

그림 36. Add Device File-2

70

Page 72: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

71

Step 8. 지금 PROM 파일을 생성할지 묻는 대화상자가 나타나면 예 버튼을 클릭함으로써 아래 그림과 같이 PROM 파일 생성이 성공적으로 끝

났음을 확인할 수 있다.

그림 37. PROM File 생성 성공

5.3.2 두 번째 단계 : PROM 프로그래밍

두 번째 단계는 첫번째 단계에서 만들어진 MCS 파일을 실제 Serial PROM 으로

다운로드하여 프로그래밍하는 단계로써, Xilinx Foundation 의 ‘JTAG Programmer’나

ISE WebPack 의 ‘iMPACT’를 사용한다. 다음은 XC2S100 이 탑재된 MP3100X 보드

에 장착된 PROM(xc18v01)에 mcs 파일을 프로그래밍하는 방법에 대해 ISE

WebPack 의 iMPACT 를 기준으로 설명한다.

Step 1. 보드 전원을 off 한 상태에서 Parallel III DLC5 케이블로 PC 의 병렬

포트와 MP3100X 보드의 왼쪽하단에 있는 JP9 커넥터 (Parallel III DLC5 cable connector)의 오른쪽 ‘JTAG CFG’측을 연결한다.

Step 2. JTAG source 선택을 위한 네 개의 점퍼(‘JTAG SRC SEL’ 이라고 표

시된 JP2-1, JP2-2, JP2-3, JP2-4)를 모두 아래방향인 PROM 쪽으로 연결한다. 이 때 ‘CONFIG SRC SEL’ 라고 표시된 세 개의 점퍼(JP1-1, JP1-2, JP1-3)는 어느 위치에 있든지 상관없다.

Step 3. 보드 전원을 on 시킨다. Step 4. Project Navigator 의 Processes for Current Source 창에서 ‘Configure

Device(iMPACT)’ 항목을 더블클릭하거나, 마우스 우측버튼 팝업메뉴

의 Run 을 선택하여 ‘iMPACT’를 실행한다. 또는, 시작버튼에 등록된 프로그램 그룹에서 직접 iMPACT 를 실행해도 된다. 이 경우 아래

Page 73: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

그림과 같은 Operation Mode Selection 창이 나타나게 되며, Configure Devices 항목을 선택하고 다음 버튼을 클릭한다.

그림 38. iMPACT 실행

그림 39. Operation Mode Selection

Step 5. Configure Devices 창에서 Boundary-Scan Mode 를 선택한 후 다음

버튼을 클릭한다.

그림 40. Configure Devices

Step 6. Boundary-Scan Mode Selection 창에서 자동으로 Cable 셋팅을 하도

록 Automatically connect to …. 항목을 선택한 후 마침 버튼을 클

릭한다.

72

Page 74: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

그림 41. Boundary-Scan Mode Selection

Step 7. 아래 그림과 같이 MP3100X 보드상에서 Boundary-Scan chain 으로

연결되어 있는 2 개의 device(xc18v01, xc2s100)를 찾았다는 메시지

창이 나타나며 iMPACT 가 실행된다. 이 메시지 창에서 확인 버튼을 클릭하면 바로 PROM 에 프로그래밍할 mcs 파일을 지정하는 단계로 진행된다.

그림 42. iMPACT 실행

Step 8. Assign New Configuration File 창에서 PROM 에 프로그래밍할 mcs

파일을 지정한 후 열기 버튼을 클릭한다.

그림 43. Assign New Configuration File

73

Page 75: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

Step 9. PROM 의 모델명을 설정하는 ‘Select PROM Part Name’ 창에서 xc18v01_pc20 을 선택하고 OK 버튼을 클릭한다.

그림 44. PROM Part Name 선택

Step 10. 아래 그림과 같이 PROM 에 mcs 파일이 지정되었으며, FPGA 에 bit파일을 지정하라는 창이 나타난다. 이 메시지창에서는 취소 버튼을 클릭하여 지정하지 않는다.

그림 45. PROM 에 mcs 파일이 지정된 모습

Step 11. PROM (xc18v01)을 마우스 우측버튼으로 클릭하여 나타난 팝업메뉴

에서 Program… 항목을 선택하면 Program Option 창이 나타난다. 이 창에서, 먼저 PROM 에 저장된 내용을 지운 후 지정한 mcs 파일

을 프로그래밍하라는 Erase Before Programming 옵션과 프로그래밍 완료 후에 검증하라는 Verify 옵션을 임의로 선택한 후 OK 버튼을 클릭하여 PROM 프로그래밍을 시작한다.

그림 46. PROM 팝업메뉴 선택 및 Program Option

74

Page 76: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

Step 12. 아래의 그림은 PROM 프로그래밍이 진행 중인 모습과 완료되었다는

메시지가 출력된 화면이다. 성공적으로 PROM 프로그래밍이 완료되

었다면, 5.2.2 PROM 을 이용한 Master serial mode configuration 의 절차에 따라 PROM 에 프로그래밍된 회로를 MP3100X 보드상에서 검증해본다.

그림 47. PROM Programming 진행 중

그림 48. PROM Programming 성공

75

Page 77: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

5.4 점퍼, 커넥터 및 기타

DB25

(Configuration) (P1)

MP3100X 보드의 오른쪽 아래 부분에 위치한

DB25 병렬 포트는 ‘ MPLOAD’ 프로그램을 이

용하여 FPGA 칩을 설정하는데 사용된다. 이 포

트는 PC 의 병렬포트와 일반 병렬 케이블을 이

용하여 연결한다.

JP1-x

(Configuration Source Selection 용 점퍼)

MP3100X 보드는 ‘ MPLOAD’ 나 ‘ PROM’

을 이용하여 FPGA 칩을 설정할 수 있다.

‘ MPLOAD’ 프로그램을 이용하여 BIT 파일을

다운로드 하고자 할 때는 점퍼들을 위쪽으로 연

결한다. 반면 PROM 으로부터 설계 파일을 다운

로드 하고자 할 때는 점퍼들을 아래쪽으로 연결

한다. 일반적으로 ‘ MPLOAD’ 프로그램을 이용하여 설계 파일을 FPGA 칩으로 다운로드 하는 경우가 대부분이므로 항상 위쪽으로 연결해 둔다.

JP2-x

(JTAG Source

Selection 용 점퍼)

FPGA 칩 내에 있는 JTAG 인터페이스 핀들

을 ‘ DB25(Configuration)’ 포트로 연결할지,

‘ Parallel III DLC5 Cable connector’ 로 연결할

지를 결정하는 점퍼이다. PROM 프로그래밍은

JTAG 인터페이스를 사용하며, 따라서 PROM 프

로그래밍시 점퍼들을 아래쪽으로 연결한다.

JTAG 인터페이스를 사용하는 대부분의 경우는 ‘ Parallel III DLC5 Cable’ 을 통해서 이루어지므로 항상 아래쪽으로 연결해 둔다.

PWRSW (전원스위치) 전원 스위치로 7.5V 어댑터를 이용하여 전원

을 연결한 후 SW13 스위치를 이용하여

MP3100X 보드에 가하는 전원을 on / off 한다.

76

Page 78: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

77

상태 표시 LED

(LD1 ~ LD6)

보드의 상태를 나타내는 LED 들이다. LD1,

LD2 는 각각 5V 와 3.3V 의 전원이 보드에 공급

되어질 경우 켜지며, LD3 는 FPGA 이

configuration 되면 켜지는 LED 이다. LD4 는

FPGA 의 DIN (configuration 데이터가 들어가는

단자) 단자에 연결되어 있어서 FPGA 가

configuration 되는 동안 on / off 된다. LD5 와

LD6 는 FPGA 의 configuration 모드를 표시해

주며 LD5 는 Slave serial 모드로 설정되어 있을

경우, LD6 는 Master serial 모드로 설정되어 있

을 경우 각각 불이 켜진다.

JP9

(Parallel III DLC5 connector)

PROM 을 프로그래밍 하는데 사용되는 커넥

터로 PROM 프로그래밍시 JP9 커넥터 오른쪽

열에 ‘ Parallel III DLC5 cable connector’ 을 연

결한다

JP10 외부에서 전원을 모니터링 하거나 5V, 3.3V,

2.5V 전원이 필요한 경우 본 커넥터에 연결하여

사용한다.

DIPSW (DIP 스위치) DIP 스위치에 대해서는 앞에서 기술한 내용

을 참조한다.

Page 79: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

78

6. MPLOAD V3.0 사용법

본 장에서는 MPLOAD 를 사용하여 MP3100X 보드의 FPGA 를 configuration 하

는 방법과 SRAM 에 데이터를 쓰고 읽는 방법들을 기술한다. (MPLOAD 설치프로그

램은 ㈜서두로직의 Web Site(http://www.mycad.co.kr)에서 다운로드 받거나, 시중의

서점에서 판매되고 있는 관련교재에 부록으로 제공되는 CD 로 설치한다. 이 경우

"6.1 환경설정"의 a~c 단계는 수행할 필요없이 자동으로 프로그램이 설치되며 d,e

만 환경설정 해주면 된다.)

6.1 환경설정

a. M2S50.MPL, M2S100.MPL, M2S200.MPL, M2S150.MPL 등의 Mxxx.MPL 파

일들이 특정 디렉토리에 존재하고 있어야 한다. (2S50, 2S100, 2S200, 2S150 등은 Xilinx Spartan2 계열의 FPGA 칩의 종류를 의미한다.) 디폴트로 설치 시 MPLOAD는 C:\MPLOAD에 설치되므로, 이 경우 위의 파일들을 이 디렉토리에 복사해 둔다.

b. MPLOAD 라는 환경변수가 설정되어 있어야 한다. 이 환경변수는 MPL 확

장자를 가진 파일들이 존재하는 디렉토리를 가리키고 있어야 한다. 예) MPLOAD = C:\MPLOAD

c. NT 계열의 운영체계 상에서 사용할 경우는 병렬포트 드라이버를 설치해야

하며, 이 드라이버 파일들의 설치는 port95nt.exe (http://www.sstnet.com에

서 무료로 다운받아서 사용 가능함)를 실행함으로써 해결된다. d. RAM의 초기값을 파일로부터 내려 받거나, RAM의 값을 PC로 읽어들일 경

우는 DIP Switch의 설정 상태를 확인해야 한다. (LCD가 OFF로 되고 RAM1과 RAM2는 ON 상태가 되어야 한다)

e. JP1-1, JP1-2, JP1-3의 점퍼들을 MPLOAD 쪽으로 연결한다.

6.2 프로그램 시작

바탕화면의 아래 아이콘을 더블 클릭하여 MPLOAD 프로그램을 실행시킨다.

Page 80: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

아래와 같은 대화상자 (Dialogue Box)가 화면 가운데 나타난다. 이 대화 상자는

세 그룹으로 나뉘어져 있다. 위쪽부분은 PC 의 데이터 파일이나 FPGA bitstream

파일을 FPGA board 의 FPGA 나 RAM 에 내려받기(Download)를 하기 위한 부분이

고, 아래 부분은 FPGA board 상의 RAM 에 저장된 정보를 읽어서 PC 의 파일로

올려받기(Upload) 를 하기 위한 부분이다. 내려받기 동작은 2 가지 종류가 있다. 즉,

FPGA 에 bitstream file 만 내려 받거나, FPGA bitstream file 과 RAM 의 데이터 파일

을 동시에 내려 받을 수 있다. 우측에 작은 크기로 있는 Sel RAM 그룹은 내려받기

또는 올려 받기를 할 경우, MP3100X 보드에 있는 2 개의 RAM 중 어느 RAM 을

사용할 것인지를 선택하는 부분이다. MPLOAD 대화상자가 한번 화면에 나타나면

여러 가지 형태의 내려 받기와 올려 받기를 몇 번이고 반복해서 수행할 수 있다.

Exit 버튼은 프로그램의 종료를 위해서 사용한다. 가운데 있는 progress bar 는 내

려받기 또는 올려받기 작업의 진행 상황을 나타내는데, RAM 과 관련된 작업을 할

때는 progress bar 가 모두 2 번씩 진행 된다.

그림 49. MPLOAD 실행 화면

79

Page 81: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

6.3 FPGA Bit stream 다운로드 하기

대화상자의 위쪽 그룹에서 Bit File 난의 Edit Box 에 직접 사용자가 bit file 의 전

체 경로를 적어넣어도 되고 [browse...] 버튼을 클릭해서 bitstream 파일을 선택할

수도 있다.

그림 50. bitstream 파일 선택

FPGA bitstream 파일을 선택이 잘못 입력된 경우에는 [clear]버튼을 클릭하면 파

일명이 Edit Box 에서 사라진다. 파일명이 (경로를 포함하여) 정확히 입력되었으면,

[Strat Download To Board] 버튼을 클릭한다. 만일, 파일의 확장자가 bit 가 아닌 다

른 파일을 선택했을 경우에는 에러메시지가 출력된다. 다운로드가 되는 동안 대화

상자 가운데 있는 progress bar 의 움직임을 통해 작업의 진행 정도를 보여준다.

FPGA bitstream 내려받기가 끝난 다음에는 아래 그림과 같이 확인 메시지가 화면

에 나타난다. [확인]을 클릭한다.

80

Page 82: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

그림 51. FPGA bitstream 다운로드 완료

6.4 RAM (HEX 파일) + FPGA (Bit 파일) 다운로드 하기

FPGA 에 bitstream 을 다운로드 하면서 동시에 FPGA 의 download 된 회로의 동

작에 필요한 초기 데이터 값을 RAM 에 download 할 수가 있다. 이 때, RAM1 과

RAM2 중에 원하는 RAM 을 대화상자 우측 그룹의 RADIO button 을 선택함으로써

사용자가 임의로 정할 수 있다. RAM 에 저장될 데이터는 파일로부터 불러오게 되

어 있는데, 이 파일의 확장자는 HEX 이고 그 형식은 설명과 같다. 이 파일은 text

파일이며 파일 내의 모든 숫자는 16 진수를 사용한다. 여러 줄로 구성되어 있고 각

줄의 양식은 다음과 같다.

$(이 줄의 데이터 갯수) RAM 의 시작번지(4 자리 16 진수) 데이터값(1 바이트

단위로 띄어쓴다)

예: $0A 0000 12 34 56 78 90 12 23 34 45 56 $10 000A 67 78 89 99 88 77 66 55 44 33 22 11 00 13 15 57

위와 같은 HEX 파일을 사용한 경우, RAM 의 0000 번지에는 '12'라는 데이터가

들어가며, 0001 번지에는 '34'라는 데이터가 들어간다. 이러식으로 0009 번지에는

'56'이라는 데이터가 들어가며, 000A 번지에는 '67'., 000B 번지에는 '78'이라는 데이

81

Page 83: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

터가 들어간다.

RAM 에 download 할 HEX 파일과 FPGA 에 download 할 BIT 파일의 입력이

끝나고, 대상 RAM 의 선택(RAM1 또는 RAM2)이 되었으면, 준비가 끝난 것이다.

[Start Download to Board] 버튼을 클릭함으로써 download 작업이 시작된다.

그림 52. HEX 파일과 BIT 파일을 동시에 다운로드할 경우

다운로드가 끝났으면 다음과 같은 메시지 창이 화면 중앙에 나타난다. [확인]을

클릭한다.

그림 53. HEX 파일과 BIT 파일 다운로드 완료

82

Page 84: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

83

만약에, 2 개의 RAM 을 모두 사용하는 회로를 FPGA 에 download 하면서 2 개의

RAM 에 모두 초기값을 설정하고 싶다면 동일한 Bit file 을 지정한 채로 Hex 파일명

과 sel RAM 만을 변경 (한번은 RAM1 또 한번은 RAM2 를 선택) 하여 전체

download 를 2 회 수행하면 된다.

(주의) RAM download 시에 주의할 것은, FPGA에 download 되는 bitstream은 반드시 해당 RAM을 access하는 회로이거나, 적어도 RAM1과 RAM2의 제어핀

(CSB, WEB, OEB)에 연결된 핀에 High (‘1’) 을 출력하는 회로이어야 한다. 그렇

지 않으면, RAM의 0번지의 값이 깨어지게 된다. (Spartan-II FPGA의 사용하지 않는 핀은 low 출력을 하기 때문이다.)

6.5 RAM의 데이터 값을 PC로 읽어 들이기

FPGA 보드 상의 RAM 의 값을 읽어 들일 수 있다. 읽어 들인 데이터는 PC 의

텍스트 파일로 저장된다. 그 파일의 양식은 다운로드를 위한 HEX 파일과 같은 양

식이다. download 시와는 달리, FPGA bitstream 파일을 지정하지 않는다. 읽기 원하

는 대상 RAM 을 선택한다. 2 개의 RAM 을 동시에 읽어 들일 수는 없고 한번에 하

나씩만 읽어 들일 수 있다. 다음은, 읽을 주소 범위를 (10 진수로) 설정하고, FPGA

type 을 선택한다. RAM download 시에는 함께 download 하는 FPGA bitstream 파일

로부터 FPGA type 정보를 추출하지만, upload 시에는 사용자가 직접 FPGA type 을

지정해주어야 한다. 사용하는 board 의 FPGA 칩 패키지에 적혀있는 type 명을 읽

어서 판단해야 한다. XC2S 로 시작하는 FPGA 는 Spartan-2 임을 의미하는 것이고

그 뒤의 숫자는 그 FPGA 로 구현 가능한 회로의 총 게이트 수를 의미한다. (예컨

대, 100 이면 10 만 게이트, 50 이면 5 만 게이트이다.)

Page 85: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

그림 54. RAM 의 값을 PC 로 Upload 할 경우

준비가 완료되었으면, [Start Upload From Board] 버튼을 클릭한다. Upload 시에

기존의 FPGA 의 설정 정보가 지워지기 때문에 확인을 위한 메시지가 아래와 같이

나타난다. [Continue]를 선택하면 Upload 가 계속 진행된다. [Cancel]을 선택하면

Upload 가 일어나지 않고, FPGA 설정정보는 보존된다.

그림 55. Upload 시 기존의 FPGA 의 설정이 지워짐을 알리는 경고 메시지

Progress bar 가 3 번 움직이고 나서 RAM 의 값을 성공적으로 읽었으면 아래와

같은 메시지 창이 나타난다.[확인] 을 선택한다

84

Page 86: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

그림 56. Upload 완료

(주의) 현재 FPGA에 작동 중인 설정 정보가 RAM 올려받기(upload)를 하면서 모두 지워지게 된다. upload 시에도 download시와 동일한 방식으로 RAM1과 RAM2 중에서 임의로 하나를 선택할 수 있다. 만약 2개의 RAM에 있는 값을 모두 읽기 원한다면, RAM 올려 받기를 파일명과 Sel RAM을 변경하여 두번 수

행하면 된다.

6.6 종료하기

[Exit]버튼을 클릭함으로써 MPLOAD 는 종료된다.

85

Page 87: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

부록 – 관련교재 소개 서적명 : VHDL 과 FPGA 를 이용한 디지털 시스템 설계 및 응용

저자명 : 이 강, 조 윤석 공저

출판사 : 아진출판사 (http://www.ajin.to)

서적 설명

이 책은 디지털 회로 설계를 실습할 수 있게 만든

설명서. 간단한 조합 논리 회로에서 여러개의 FSM 이

서로 연동하는 복잡한 회로 설계까지를 자세한 이론 배경

설명과 블록도 수준에서 게이트 수준까지의 설계도면에

대해 자세히 설명했다. 각 장별 연습문제를 난이도 별로

제시했고 교육 현장에서 사용했던 검증된 자료들로 꾸몄다.

(부록으로 Xilinx ISE Webpack 과 MPLOAD 프로그램이

포함된 CD 가 제공)

서적명 : Xilinx/Altera FPGA 보드를 이용한 실습으로 배우는 VHDL

저자명 : 이 강, 장경선 공저.

출판사 : 아진출판사 (http://www.ajin.to)

서적 설명

“ 실습으로 배우는 VHDL” 은 처음 VHDL 설계 환경에

입문하는 초보자와 이미 VHDL 을 학습한 고급 응용자

모두를 위하여 “ 다양한 예제 + 친절한 설명 + 철저한

실습” 으로 디지털 하드웨어 설계의 기초를 견고히

다져줄 것이다.

이 책에서는 논리합성을 통해 구현된 회로를 시뮬레이션이

아닌 FPGA 하드웨어 에뮬레이션으로 검증하는

툴인 CLAP(Chungnam national univ. Logic Analyzer and

Pattern injector)라는 Logic Analyzer 소프트웨어와

하드웨어 모듈(VHDL 소스)을 무료로 제공한다.(CD-

ROM 에 수록). CLAP 은 독자가 자신의 설계에 작은

분석용 모듈을 추가해주기만 하면, PC 상에서 GUI

소프트웨어를 통해서 보드 상에서 동작하는 자신의 설계의

동작 여부를 검증할 수 있게 해준다.

86

Page 88: MyProtor MP3100X 사용자 설명서...을 이용한 설계 환경 구축시 전체적으로 소요되는 비용이 줄어든다. 물론, 지원하 ... 설계하였다. 먼저 논리설계

서울시 송파구 가락동 78 번지 IT 벤쳐타워 동관 7 층 TEL : 02-2142-1800 FAX : 02-2142-1818 E-Mail : [email protected] / [email protected]://www.seloco.com http://www.mycad.com