MAX+PLUS II 개요
단원목차 1. PLD란 무엇인가? 2. MAX+PLUS II를 사용하여 PLDs를 프로그래밍 3. 그래픽 설계 파일(Graphic Design File) 4. MAX+PLUS II 파일의 컴파일 5. 계층적 설계 6. 문자 설계 파일(VHDL) 7. 물리 디자인 생성
Programmable Logic Device (PLD) 미리 정해지지 않은 로직 기능으로 제공된다. 임의의 디지털 로직 기능을 구현하기 위해서는 사용자에 의해 프로그래밍 된다. 설계와 프로그래밍을 위해서는 특별한 소프트웨어가 요구된다.
PLDs 사용 시의 장점 사용되는 칩의 수를 줄일 수 있다. (예4.1 참조) 사용되는 칩의 종류를 줄일 수 있다. 설계과정이 빨라진다. 설계의 융통성이 있다.
Complex PLD (CPLD) A PLD that has several programmable sections with internal interconnections between the sections. In effect, CPLD is several interconnected PLDs on a single chip.
PLD 프로그래밍 특별한 컴퓨터 소프트웨어가 요구된다. PLD Design Cycle로 알려진 일련의 과정을 통해 프로그램 된다. 한 가지 가능한 프로그램은 Altera사의 MAX+PLUS II 이다.
PLD Design Cycle - 1 Design entry – 회로를 설계한다. Simulation – 설계회로출력이 입력에 따라 올바르게 동작하는 지를 입증한다. Compilation – CPLD를 프로그램 하기 위해서 설계 정보를 발생시키는 과정이다.
PLD Design Cycle - 2 Fitting – 요구된 설계에 대해 회로를 할당하기 위해 CPLD의 일부를 결정한다. Programming – 원하는 로직 기능을 수행하기 위해 CPLD를 배열한다.
Altera Target Devices 설계를 구현하기 위해 CPLDs를 사용한다. MAX7000S family – EPM7128SLC84-7, 비휘발성(non-volatile) CPLD, EEPROM 셀을 이용하여 프로그램. (128 : number of macrocells, S : in-system programmable) FLEX10K family – EPF10K20RC240-4, 휘발성(volatile) CPLD, LUT SRAM을 이용하여 프로그램.
Volatile vs. Non-Volatile – 정보(프로그램)은 단지 소자에 전원이 공급되는 동안만 유지된다. 비휘발성(Non-Volatile) – 정보(프로그램)은 전원이 제거되고 다시 공급되어도 유지된다.
CPLD Design Entry 두 가지 일반적인 방법 1. 회로도 입력(그래픽) 2. 문자기반 입력(VHDL, Verilog HDL)
MAX+PLUS II Graphic Entry 디지털 설계를 회로도로 입력하기위해 ‘Graphic Design File(.gdf)’을 사용하라. 컴포넌트와 이들의 연결과 회로의 입력, 출력 이름을 보여라. (Figure 4.3 참조)
Figure 4.3 Majority Vote Circuit
Graphic Design File 생성 Figure 4.6 참조 회로도 입력방법을 사용하라. MAX+PLUS II는 프로그램을 위해 요구되는 파일들을 생성시킨다. 모든 파일은 프로젝트(project)로 제시된다. Figure 4.6 참조
Figure 4.6
MAX+PLUS II Project 특정 PLD 설계와 관련되는 일련의 파일. 항상 현재 프로젝트가 어디인 지를 그 트랙을 유지하라.
MAX+PLUS II Graphic Design Files 생성 먼저, 적절한 폴더에 파일을 Save 하라. 두 번째, Set Project to Current File. Figure 4.8
Components 불러오기 컴포넌트 위치를 지정하기 위해 커서를 사용하고, 마우스의 왼쪽 버튼을 누른다. 삽입 메뉴를 활성화 하기위해 마우스 오른쪽 버튼을 사용한다. ‘Enter Symbol’을 선택 Figure 4.9
‘Enter Symbol’ 메뉴 기본 컴포넌트를 이름이나 라이브러리 로부터 선택한다. 기본 컴포넌트를 ‘프리미티브(primitive)’라 한다. 컴포넌트의 각 copy는 ‘인스턴스(instance)’ 라 한다. Figure 4.10
심볼 배열과 이동하기(1) Symbol은 마우스 왼쪽버튼을 이용하여 클릭함으로써 밝게 되고, 이 때 드래그 함으로 원하는 위치로 이동시킬 수 있다. Figure 4.11
심볼 배열과 이동하기(2) Figure 4.12 Figure 4.13
컴포넌트 연결 컴포넌트는 한 컴포넌트의 한 끝을 클릭하고, 다른 컴포넌트의 또 다른 끝으로 선을 드래그함으로 연결된다. Figure 4.14
핀 이름의 할당 입력과 출력은 이름이 할당되어야 한다. 핀 이름을 더블 클릭하면 밝게 되고(e.g. INPUT_VCC, 그 때 이름을 입력한다. Figure 4.17
Target Device(1) 컴파일 하기 전에 타깃 디바이스를 규정해야 한다. 타깃 디바이스를 선택하기 위해 Assign 메뉴를 사용하라. Figure 4.18, 4.19
Target Device(2) Device Dialog Box
Compile Options(1) Design Doctor : 좋은 설계 습관을 위해 체크하라. Timing SNF Extractor : 타이밍 시뮬레이션을 위해 필요한 파일을 생성한다. Smart Recompile : 이전에 컴파일 한 부분을 바꾸지 않고 다시 사용할 수 있다.
Compile Options(2) Figure 4.20 MAX+PLUS II Figure 4.21 Compiler 세팅
Compile 메세지 3가지 종류의 메시지가 있다. 첫 번째, Info (green text)로 단지 정보용임. 두 번째, Warning (blue text)으로 잠정적 문제를 가리킴. 그러나 치명적이지는 않음. 세 번째, Error (red text)로 디자인을 사용할 수 없는 설계 결점임.
Compile Files non-volatile CLPDs (e.g. MAX series)를 위한 Programmer Object File(.pof) 생성 volatile CPLDs (e.g. FLEX series)를 위한 SRAM Object File (.sof) 생성
계층적(Hierarchical) 설계 PLD 설계는 층 또는 레벨로 계층화 된다. Top 레벨은 완전한 설계의 컴포넌트를 포함한다. Lower 레벨은 최상위 레벨의 컴포넌트 내에 내장되는 하위 혹은 그 이하의 컴포넌트를 포함한다.
Default Symbol 그래픽 심벌은 PLD 디자인을 블록으로 나타내기 위해 사용된다. 단지 디자인의 입력과 출력만을 보여준다. 계층적 디자인에서 하나의 컴포넌트로 사용된다.
문자기반 입력(Text Based Entry) Hardware Description Language (HDL)를 사용한다. 그래픽 입력방법보다 더욱 더 강력한 설계 기법이다.
Hardware Description Language(HDL) 회로를 설계할 때 설계회로를 문자형태로 기술하는 컴퓨터 언어이다. VHDL(VHSIC Hardware Description Language)는 PLDs를 프로그램 하는데 사용되는 산업표준어 이다.
VHDL 역사 회로를 프로그램으로 개발하기 위해서 (미) 국방성 계약에 의해 개발되었음. 현재는 IEEE Std. 1076-1993에서 표준화 되었음.
VHDL 기본규칙 구성규칙은 “syntax”로 불린다. 대소문자를 구별하지 않는다. 하지만, 키워드, 소자, 상수, 프리미티브는 대문자로 표시할 것을 권장한다. 주석(Comments)은 텍스트 앞에 이중 사선( double dashes)으로 표시한다. 주석은 컴파일 되지 않는다.
VHDL 구조 entity 선언 과 architecture body를 요구한다.
VHDL Entity 기능의 외부적 측면을 정의한다. 각 입력 혹은 출력은 포트(port) 이다. 포트의 형식은 모드(mode) 로 정의된다. Fig 4.28 VHDL Design Entity의 그래픽 표현
포트 모드의 형식(1) IN: 단지 입력으로만 사용되는 포트이다. OUT: 단지 출력으로만 사용되는 포트이다. INOUT: 양방향(bidirectional) 포트이다. BUFFER: OUT 포트의 특별한 경우로 CPLD 로직으로 피드백이 있을 때 사용된다.
포트 모드의 형식(2) Fig 4.29 VHDL Port Modes Fig 4.30 BUFFER and OUT Modes
Port 형식 포트 형식은 포트가 가질 수 있는 값을 정의한다. 단일비트나 복수비트를 가질 수 있다.
단일비트 포트형식 BIT는 ‘0’ 혹은 ‘1’의 값을 가진다. STD_LOGIC는 9개의 값 중에 하나를 가질 수 있다. INTEGER는 전체 수 값을 가질 수 있다.
STD_LOGIC 형식 가능한 값: ‘U’ – uninitialized ‘X’ – forcing unknown ‘0’ – forcing 0 ‘1’ – forcing 1 ‘Z’ – high impedance ‘W’ – weak unknown ‘L’ – weak 0 ‘H’ – weak 1 ‘-’ – don’t care. 일반적으로 ‘X’, ‘0’, ‘1’, ‘Z’가 사용된다.
복수비트 포트형식 BIT_VECTOR는 0 또는 1의 복수 개의 개체을 가질 수 있다. STD_LOGIC_VECTOR는 U, X, 0, 1, Z, W, L, H, -의 복수 개의 개체를 가질 수 있다. 벡터(Vector)는 단일 복수비트 변수로 취급되는 신호그룹을 의미한다.
VHDL Architecture 내부적 측면을 정의한다. 즉, 입력과 출력이 서로서로 어떻게 행동하며, 또한 다른 내부신호 혹은 기능과 어떻게 행동하는 지를 정의한다. 논리적 관계를 정의하기 위해 연산자 (operators)를 사용한다.
Architecture Operators <= : 식의 오른쪽 값을 왼쪽으로 할당하는 연산자 논리 연산자는 ‘and’ 와 ‘or’ 과 같이 이름으로 할당한다.
우선순위 모든 논리 연산자는 동일한 우선순위를 가진다. 우선순위를 명확히 하고자 할 때는 괄호를 사용한다.
병행적 신호 할당(Concurrent Signal Assignment) 병행적(Concurrent)은 동시적(simultaneous)을 의미한다. ‘architecture body’에서 신호의 순위는 그들이 쓰여진 순서대로 평가되지 않는다. 일부 회로에 대한 공통입력에 변화가 있을 때, 동시에 다른 모든 회로에 영향을 미친다.
Example - Majority Vote2 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY maj_vot2 IS PORT( a, b, c : IN STD_LOGIC; y : OUT STD_LOGIC); END maj_vot2; ARCHITECTURE majority OF maj_vot2 IS BEGIN y <= (a and b) or (b and c) or (a and c); END majority;
Example 4.3 – 2-Line-to-4-Line Decoder 여러 가지 가능한 방법이 있다. 개별 입력이나 벡터를 사용하여 묘사될 수 있다. Figure 4.31
Example 4.3 – Vector Definitions 벡터는 상한선과 하한선을 정의함으로 규정될 수 있다.– (3 downto 0), (0 to 3), (4 downto 1), (1 to 4). 벡터는 선택적 신호 할당문(selected signal assignment statement)을 사용하여 규정할 수 있다.
경우1 – Separate variables LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY decode1 IS PORT( d1, d0 : IN STD_LOGIC; y0, y1, y2, y3 : OUT STD_LOGIC); END decode1; ARCHITECTURE decoder1 OF decode1 IS BEGIN y0 <= (not d1) and (not d0); y1 <= (not d1) and ( d0); y2 <= ( d1) and (not d0); y3 <= ( d1) and ( d0); END decoder1;
경우2 – Vectors(요소가 개별적으로 취급됨) LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY decode2 IS PORT( d : IN STD_LOGIC_VECTOR (1 downto 0); y : OUT STD_LOGIC_VECTOR (3 downto 0)); END decode2; ARCHITECTURE decoder2 OF decode2 IS BEGIN y(0) <= (not d(1)) and (not d(0)); y(1) <= (not d(1)) and ( d(0)); y(2) <= ( d(1)) and (not d(0)); y(3) <= ( d(1)) and ( d(0)); END decoder2;
경우3 – Vectors(요소가 그룹으로 취급됨) ; 선택적 신호 할당문 -- decode2a.vhd -- 4-channel decoder -- Makes one and only one output HIGH for each binary combination of (d1, d0). LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY decode2a IS PORT( d : IN STD_LOGIC_VECTOR (1 downto 0); y : OUT STD_LOGIC_VECTOR (3 downto 0)); END decode2a; ARCHITECTURE decoder OF decode2a IS BEGIN -- Choose a signal assignment for y based on binary value of d -- Default case: all outputs deactivated WITH d SELECT y <= "1000" WHEN "00", "0100" WHEN "01", "0010" WHEN "10", "0001" WHEN "11", "0000" WHEN others; END decoder;
MAX+PLUS II VHDL Templates VHDL structure를 생성하는 지름길을 마련 해준다. Template 메뉴를 사용하여 이용 가능하다. Figure 4.32
Creating a Physical Design Pin Numbers 할당(1)
Pin Numbers 할당(2)
Altera UP-1 Circuit Board의 프로그래밍 보드와 IBM-PC의 병렬포트 사이에 리본 케이블인 ByteBlaster를 사용한다 ByteBlaster는 컴퓨터의 LPT 포트에 연결된다. ByteBlaster는 또한 UP-1 보드의 JTAG 표준 포트에 연결된다.
ByteBlaster Download Cable
Altera UP-1 Circuit Board
JTAG Interface 4선 + 전원 + 접지선. 데이터는 TDI 선을 통해 입력되고, TDO 선을 통해 출력된다. 전송은 TMS 선과 TCK 선의 클록 신호에 의해 제어된다.
Programming the Design
SUMMARY The STD_LOGIC type can take on any of the following values: - ‘U’ ‘X’ ‘0’ ‘1’ ‘Z’ ‘W’ ‘L’ ‘H’ ‘-’ STD_LOGIC is defined in a library called ieee. To use STD_LOGIC, include the following two statements at the beginning of a file. LIBRARY ieee; USE ieee.std_logic_1164.ALL; A port in VHDL is an input or output. A signal is an internal connection like a wire. Concurrent signal assignment statement : the simplest way to relate inputs and outputs in a VHDL EX) x <= (a and b) or c; Selected signal assignment statement can act as a truth table in VHDL.