330 likes | 959 Views
ABEL. SOC 연구실 최지호 원천관 339-2 호 (zigprid@ajou.ac.kr/219-2390). PLD 란 ?. PLD (Programmable Logic Device) PLD 는 사용자가 필요로 하는 논리기능을 직접 program 하여 사용할 수 있는 IC PROM (Programmable Read Only Memory) PLA (Programmable Logic Array) PAL (Programmable Array Logic)
E N D
ABEL SOC 연구실 최지호 원천관 339-2호 (zigprid@ajou.ac.kr/219-2390)
PLD 란? • PLD (Programmable Logic Device) • PLD는 사용자가 필요로 하는 논리기능을 직접 program하여 사용할 수 있는 IC • PROM (Programmable Read Only Memory) • PLA (Programmable Logic Array) • PAL (Programmable Array Logic) • SPLD (Simple Programmable Logic Device) • CPLD (Complex Programmable Logic Device) • FPGA (Field Programmable Gate Array)
PLD의 종류 (1) • PROM (Programmable Read Only Memory) • 한 개의 디코더(AND 배열부분)와 메모리셀(Memory array)의 이차원 배열(OR 배열)로 이루어짐 • PLA(Programmable Logic Array) • PROM과 달리 AND 배열은 입력에 관한 어떤 논리곱을 표현할 있고, OR 배열은 앞에서 구현된 논리곱들의 논리합을 구현 SOP(Sum of Product) 구현에 잘 맞는 구조이나, 두개의 배열을 통해서 신호가 전달되므로 delay를 가지는 단점
PLD의 종류 (2) • PAL (Programmable Array Logic) • PAL은 PLA의 구조와 비슷하나 PAL은 AND 배열은 사용자가 프로그램 할 수 있고, OR 배열은 고정 생산 비용이 비교적 적게 들고, 속도가 빠름 • SPLD(Simple Programmable Logic Device) • PAL과 거의 유사한 구조를 가지며 사용할 수 있는 게이트의 개수는 약 200개 정도
PLD의 종류 (3) • CPLD(Complex Programmable Logic Device) • CPLD는 Altera에서 상업용으로 제품화 • CPLD는 빠른 성능이나 정확한 타이밍의 예측이 필요로 하는 곳에 적합 • 여러 개의 LAB (Logic Array Block)와 연결선인 PIA (Programmable Interconnection Array)로 구성되며, LAB은 PAL과 같은 logic임
PLD의 종류 (4) • FPGA (Field Programmable Gate Array) • CPLD와 달리 복잡한 LAB을 사용하지 않고 비교적 간단하고 동일한 PLD가 여러 개 나열되는 구조 • 구현 가능한 게이트의 수와 구조의 복잡도가 가장 높음
PLD를 이용한 회로 개발 과정 • PLD 프로그래밍 언어 • ABEL (Advanced Boolean Expression Language) • PALASM • CUPL (University Compiler for Programmable Logic) 소스 파일 작성 (파일이름.abl) 컴파일 롬 라이터를 사용 PLD에 회로 구현 Target board 장착 파일이름.JED
ABEL의 기본 문법 (1) • 예약어 : 대문자, 소문자, 대소문자 혼용 가능 식별자로 사용 불가능 • 식별자 : 프로그래머 정의
ABEL의 기본 문법 (2) Logical Operator
ABEL의 기본 문법 (3) Arithmetic Operator
ABEL의 기본 문법 (4) Relational Operator (unsigned)
사용하는 PLD의 핀 배치 • P22V10 • Pin 1 : Clock • Pin 12 : GND • Pin 24 : VCC • Pin 1, 12와 24를 제외하고 자유롭게 입출력으로 사용하면 됨 편의상 입력은 2번부터 순서대로, 출력은 23번부터 순서대로 사용하는 것으로 함
Typical structure of an ABEL program Device를 알려준다. Pin declaration function을 정의한다 test_vectors – 입력과 출력을 예상하여 적는다 안 적어도 상관없다. 목적은 이 chip이 원하는 대로 동작하는지 시뮬레이션 해보기 위한 목적이다.
Example ABEL Program 1 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1
X 3 input AND Y D0 Z 3 input OR D1 Example ABEL Program 1 • Module Name을 시작과 끝을 항상 일치시켜줌 • 어떤 이름이든 관계는 없음 • 편의상 자신이 짜는 프로그램과 관계 있는 것으로 함 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1
Example ABEL Program 1 1. Module Name을 시작과 끝을 항상 일치시켜줌 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1 2. Title Name은 어떤 이름이든 상관 없음
Example ABEL Program 1 1. Module Name을 시작과 끝을 항상 일치시켜줌 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1 2. Title Name은 어떤 이름이든 상관 없음 3. DeviceName이 출력파일의 이름 저장하는 소스 파일의 이름과 일치 시키는 것이 좋음(편의상) DeviceName.JED 즉, 오류없이 올바로 수행되면 결과물로 myExam1.JED파일이 생성되며, 이 파일을 이용하여 롬라이터로 P22v10을 구울수 있음
Example ABEL Program 1 1. Module Name을 시작과 끝을 항상 일치시켜줌 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1 2. Title Name은 어떤 이름이든 상관 없음 3. DeviceName이 출력파일의 이름 DeviceName.JED 즉, 오류없이 올바로 수행되면 결과물로 myExam1.JED파일이 생성되며, 이 파일을 이용하여 롬라이터로 P22v10을 구울수 있음 4. DeviceType을 적어준다. 여러 종류가 있을 수 있는데, 여기에선 P22v10을 사용
Example ABEL Program 1 1. Module Name을 시작과 끝을 항상 일치시켜줌 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1 2. Title Name은 어떤 이름이든 상관 없음 3. DeviceName이 출력파일의 이름 DeviceName.JED 즉, 오류없이 올바로 수행되면 결과물로 myExam1.JED파일이 생성되며, 이 파일을 이용하여 롬라이터로 P22v10을 구울수 있음 4. DeviceType을 적어준다. 여러 종류가 있을 수 있는데, 여기에선 P22v10을 사용 5. P22v10에 대해 Input Output pin declaration 을 한다. 아무렇게나 할 수 있는 것이 아니고 datasheet를 참고하여 작성 교재의 경우 Output Pin에는 istype ‘com’을 기술하나 제공한 컴파일러는 인식하지 못함
Example ABEL Program 1 6. Symbol을 정의. 목적은 readability를 개선하기 위함이다. 사용자의 기호에 맞게 정의 꼭 정의해서 사용하지 않아도 관계는 없음 정의하지 않을 경우 0과 1을 사용 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1
Example ABEL Program 1 6. Symbol을 정의. 목적은 readability를 개선하기 위함이다. 사용자의 기호에 맞게 정의 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1 7. Equation을 기술. D0는 X and Y and Z이고 D1은 X or Y or Z이다. & 기호는 ‘logical and’ # 기호는 ‘logical or’
Example ABEL Program 1 6. Symbol을 정의. 목적은 readability를 개선하기 위함이다. 사용자의 기호에 맞게 정의 MODULE Example1 TITLE 'My Sample Program' myExam1 DEVICE 'P22V10'; "INPUT PINS X, Y, Z PIN 2,3,4; "OUTPUT PINS D0,D1 PIN 23,22; "SYMBOL DEFINE H,L = 1,0; EQUATIONS D0 = Z & Y & X; D1 = Z # Y # X; TEST_VECTORS ([Z,Y,X]->[D0,D1]) [L,L,L]->[L,L]; [L,L,H]->[L,H]; [L,H,L]->[L,H]; [L,H,H]->[L,H]; [H,L,L]->[L,H]; [H,L,H]->[L,H]; [H,H,L]->[L,H]; [H,H,H]->[H,H]; END Example1 7. Equation을 기술. D0는 X and Y and Z이고 D1은 X or Y or Z이다. & 기호는 ‘logical and’ # 기호는 ‘logical or’ 8. Test_Vectors를 기술. 이 블록은 빼도 전혀 상관은 없다. 다만, 이 chip이 올바로 동작하는지 확인하기 위해서 기술. 이 예에서는 모든 가능한 입력에 대해서 출력을 기술해 주고 있음.
Structure of ABEL truth table • test_vector에서 .X.가 들어간 value는 don’t care • 설계한 회로의 정확한 동작을 검증하기 위해 Truth_table은 모든 경우를 입력해 주는 것이 좋으나 그렇지 못한 경우 가급적 많이 기술해 주는 것이 좋음
Example ABEL Program 2 4bit 2by1 Mux "MUX2TO1.ABL 프로그램 MODULE MULTIPLEXER TITLE 'Quadruple 2-to-1 line MULTIPLEXER' MUXTTO DEVICE 'P22V10'; “INPUT PINS A3,A2,A1,A0, B3,B2,B1,B0, S PIN 2,3,4,5,6,7,8,9,10; "OUTPUT PINS Y3,Y2,Y1,Y0 PIN 23,22,21,20; "Variable A = [A3, A2, A1, A0]; B = [B3, B2, B1, B0]; Y = [Y3, Y2, Y1, Y0]; SEL =[S,S,S,S]; EQUATIONS Y = A & !SEL # B & SEL; END MULTIPLEXER
ABEL compiler • Web 에 올린 ABEL 컴파일러 다운로드 및 압축 풀기 • ABEL.zip • 가급적 최상위 경로에 압축 푸는 것이 경로 찾기 쉬움 (예) c드라이브 바로 밑에
ABEL compiler • 윈도우 시작 메뉴의 ‘실행’ 메뉴 실행 cmd 입력 • 도스창에서 ABEL.zip 압축을 해제한 경로로 이동 • “cd ..”입력 (한폴더 상위로 이동) “cd ..” 입력 “cd ABEL”입력 (ABEL 폴더로 이동) “dir/w” 입력 (폴더에 있는 파일 display)
ABEL compiler • 설계한 코드 컴파일 • ABEL.BAT 배치 파일에 컴파일 설정을 해 놓았음 • ABEL DeviceName ABEL 확장자는 입력하지 않음 • 컴파일 실행 결과 • DeviceName.DOC • DeviceName.JED • DeviceName.LST • DeviceName.OUT • DeviceName.SIM 5개 파일 생성
ABEL compiler • DeviceName.DOC : Document 파일 • DeviceName.JED : 롬파이터로 구울 파일 • DeviceName.SIM : 시뮬레이션 결과 파일 자신이 설정한 테스트 벡터에 대해서 모두 pass하면 오류 없이 설계한 것임
ABEL compiler • 에러 발생 • 5개의 파일이 모두 생성되지 않음 • 아래와 같이 에러라고 표시됨 • 구체적으로 어디에 에러가 났다고 표시해주는 경우도 있으나 단순히 에러라고만 표시하는 경우가 더 많음 직접 분석해서 찾아야 함