580 likes | 1.28k Views
오브젝트. 연산회로. IT CookBook , VHDL 을 이용한 디지털 회로 입문. 기본 연산회로. 1. 덧셈회로. 2. 전가산기를 사용한 뺄셈회로. 3. 보수를 사용한 덧뺄셈회로. 4. unsigned 와 signed. 5. Section 01 기본 연산회로 ( 반가산기 ). 반가산기 반가산기 : 하위의 자리올림수는 연산에 포함시키지 않은 간단한 기능의 덧셈기. Section 01 기본 연산회로. 논리 연산자에 의한 반가산기의 VHDL 기술. Section 01 기본 연산회로.
E N D
오브젝트 연산회로 IT CookBook, VHDL을 이용한 디지털 회로 입문
기본 연산회로 1 덧셈회로 2 전가산기를 사용한 뺄셈회로 3 보수를 사용한 덧뺄셈회로 4 unsigned와 signed 5
Section 01기본연산회로 (반가산기) • 반가산기 • 반가산기: 하위의 자리올림수는연산에 포함시키지 않은 간단한 기능의 덧셈기
Section 01기본연산회로 • 논리 연산자에 의한 반가산기의 VHDL 기술
Section 01기본연산회로 • 덧셈 연산자 [+]에 의한 반가산기의 VHDL 기술
Section 01기본연산회로 (전가산기) • 전가산기
Section 01기본연산회로 (반가산기를 이용한 전가산기) 앞의 전가산기와 같은 논리식이 된다
Section 01기본연산회로 • 논리 연산자에 의한 전가산기의 VHDL 기술
Section 01기본연산회로 • 덧셈 연산자에 의한 전가산기의 VHDL 기술
Section 01기본연산회로 • 반가산기를 이용한 전가산기의 VHDL 기술 • 컴포넌트 인스턴스문으로하위층엔티티[HalfAdder]를 2회 호출하지만, 인스턴스명은[HA0], [HA1]과 같이 따로 따로 붙여야 함 • 포트 관련 리스트에서는 그림 9.4를 참조해서 필요한 신호를 필요한 포트에 접속
Section 01기본연산회로 (반감산기) DIF = Difference BR = Borrow • 반감산기 • 동작 DIF = A - B
Section 01기본연산회로 • 논리 연산자에 의한 반감산기의 VHDL 기술
Section 01기본연산회로 • 뺄셈 연산자 [-]에 의한 반감산기의 VHDL기술
Section 01기본연산회로 (전감산기) DIF = A - B 1 1 0 0 -) 0 1 1 1 ------------- BR 1 Dif1 ------------- BR 1 1 Dif0 1 ------------- BR 1 1 1 Dif1 0 1 ------------- BR 0 1 1 1 Dif0 1 0 1 아래 자리에서 빌려간 것 표시
Section 01기본연산회로 (전감산기) DIF = A - B 1 1 0 0 -) 0 1 1 1 ------------- BR 1 Dif1 ------------- BR 1 1 Dif0 1 ------------- BR 1 1 1 Dif1 0 1 ------------- BR 0 1 1 1 Dif0 1 0 1
Section 01기본연산회로 (반감산기를 이용한 전감산기) 아래 진리표 카르노맵 [전감산기]논리식이 얻어짐
Section 01기본연산회로 • 논리 연산자에 의한 전감산기의 VHDL 기술
Section 01기본연산회로 • 뺄셈 연산자 [-]에 의한 전감산기의 VHDL 기술
Section 01기본연산회로 • 반감산기를 이용한 전감산기의 VHDL 기술
Section 02덧셈 회로 • 전가산기를 사용한 덧셈 회로 • 여기서는 4개의 전가산기로 구성 • [Cin]이 필요 없는 경우에는 이것을 '0'으로 고정하거나 또는 전가산기 대신에 반가산기를 사용가능 • 비트 수만큼 전가산기를 사용하여모든 비트를 동시에 더하고 있기 때문에, 병렬 덧셈 회로 • 전가산기를 1개만 사용하여 피가수[A]나 가수 [B]를 시프트 레지스터로 제어하는 것으로, 1비트씩 연산을 반복하며 덧셈을 하는 회로를 직렬 덧셈 회로
Section 02덧셈 회로 • 논리 연산자에 의한 VHDL 기술
Section 02덧셈 회로 • 덧셈 연산자에 의한 VHDL 기술
Section 02덧셈 회로 • 덧셈 회로의 고속화 • 덧셈 회로에서는 하위 비트의 자리올림수가 차례차례 상위 비트로 전달되는 일까지 해야 하기 때문에 연산 속도가 저하 • 또한 전파지연은 비트수가 늘어날수록 증가 • 덧셈 회로를 고속화하려면 하위 비트의 자리올림수를 기다리지 말고 하위 비트의 데이터를 관찰해서 자리올림수의 유무를 판단 • 이 방식을 캐리 룩업(carry look up) 방식 혹은 동시 올림(simultaneous carry) 방식이라 함 • 자리 올림수의 발생에 기인한 것 • 자리 올림수의 논리식 • 4비트 덧셈 회로의 자리올림수에 적용
Section 02덧셈 회로 • 각 식의 우변의 자리올림수에도 논리식을 대입
Section 02덧셈 회로 • 동시 자리 올림 방식에 의한 덧셈 회로의 VHDL 기술 • 반가산기의 [SUM]을 위해 [HA_SUM_OUT] • 반가산기의 [CY_OUT]을 위해 [HA_CY_OUT] • 식 9.6~식 9.9의 자리올림수를 위해 [CY]
Section 02덧셈 회로 • 연산 속도의 검증 • 전제 조건으로 각 덧셈 회로에서 사용하는 논리소자의 전파지연시간(tPD)을 아래의 값으로 정함 • AND 회로 → 5.5[ns] • OR 회로→ 5.8[ns] • EXOR 회로→ 6.5[ns] • 전가산기에 의한 덧셈 회로의 연산 속도 • 전파지연시간을 after로 기술 • 각 출력의 전파지연 시간 • [SUM]은 2단 EXOR 회로이므로 13.0[ns] • [CY_OUT]는 AND-OR 즉, 곱들의합 형식이기 때문에 11.3[ns] • [SUM]은 그림 9.19와 같이 회로 구성에 따라 각각의 입력에 해당하는 전파지연시간이 다르지만, 여기에서는 일률적으로 13.0[ns]로 간단화
Section 02덧셈 회로 • CIN]의 ON이 [COUT]에 반영되기까지 45.2[ns]가 걸린다는 것을 확인 • 이 시간은 자리올림수 발생에 11.3[ns]가 걸리며, 그것이 4단이기 때문에 11.3[ns]×4=45.2[ns] 임 • [CIN]의 ON부터 [S]까지가 46.9[ns]라고 하는 것은, 세번째단의 전가산기 자리올림수와네번째단의[S]의 지연시간 • 11.3[ns]×3+13.0[ns]=46.9[ns]
Section 02덧셈 회로 • 동시 올림 방식에 의한 덧셈 회로의 연산 속도
Section 02덧셈 회로 • [CIN]의 ON이 [COUT]에 반영될 때까지는 모든 자리올림수의 논리식이 AND-OR 즉, 곱들의합 형식이기 때문에 11.3[ns] • 또, 자리올림수의 발생에 11.3[ns], 네번째단의[S]는 EXOR 회로를 1단으로 통과하므로 6.5[ns] 이것으로부터, [CIN]의 ON부터 [S]까지의 17.8[ns]는 아래 식에 의해 구할 수 있음 • 11.3[ns]+6.5[ns]=17.8[ns]
Section 02덧셈 회로 • BCD 덧셈 회로
Section 02덧셈 회로 • 2진 덧셈 결과가 16 이상일 경우에는 자리올림수가 ON이 되기 때문에 카르노 맵에서 구한 논리식에 [CY_OUT]을 OR함으로써 보정 조작을 위한 신호를 생성 • 신호의 논리식
Section 02덧셈 회로 • BCD 덧셈 회로의 VHDL 기술 • 첫째단의 4비트 덧셈 회로의 출력(2진 덧셈 결과)은 [S] • 첫째단의 4비트 덧셈 회로의 자리올림수 출력은 [CY_OUT] • ·보정 검출 회로의 출력은 [REVICE] • ·둘째단의 4비트 덧셈 회로의 B입력은 [ADDER1_BIN]
Section 02덧셈 회로 • 시뮬레이션 결과 (500[ns]부분) • BCD 덧셈 회로의 입력 [A]= [9], [B]= [5], [CIN]=‘1’ • 첫째단의 4비트 덧셈 회로의 [S]= [15], [CY_OUT]=‘0’ • 보정 검출 회로의 출력 [REVICE]=‘1’ • 둘째단의 4비트 덧셈 회로의 입력 [A]= [15], [B]= [6], [CIN]=‘0’ • BCD 덧셈 회로의 덧셈 결과는, 10진수로 생각하면 [21], 2진수에서는 "10101"이므로, [BCD_COUT]=‘1’, [BCD_SUM]= [5]
Section 02덧셈 회로 • 덧셈 연산자에 의한 VHDL 기술
Section 03전가산기를 사용한 뺄셈회로 • 상위 비트에서 빌린 것(빌림수)을 가지고 다음 비트의 값을 뺄셈해 나가기 때문에, 4비트의 2진수 뺄셈 회로는 4개의 전감산기를 사용 • 4비트 뺄셈 회로의 VHDL 기술
Section 03전가산기를 사용한 뺄셈회로 • 600[ns]까지는 B=[0], BIN='0'이기 때문에 [A] 값이 그대로 [DIF]에 출력 • 600[ns]에서 A=[15], BIN='1'이기 때문에 BOUT='0', S=[14] • 700[ns]에서는 [15-5-1(BIN)]로 BOUT='0', DIF=[9] • 800[ns]에서는 [0-10]으로 BOUT='1', S=[6]
Section 04보수를 사용한 덧셈 뺄셈 회로 • A-B는 A에 B의 2의 보수를 더해서 구할 수 있음 • [2의 보수]는 [1의 보수]에 [1]을 더해서 구할 수 있고, [1의 보수]는 각 비트 자리의 '1'/'0'을 반전시킴으로써 구할 수 있음 • 1의 보수 • [SUB]='0' → 덧셈 동작 → [B]는 반전불필요 • [SUB]='1' → 뺄셈 동작 → [B]를 반전 • 2의 보수 • 4비트 덧셈 회로 [Adder4]의 [CY_IN]에 '1'을 접속 • 이 조작은 [B]를 반전했을 때, 즉, 뺄셈일 때만 필요한 조작이기 때문에 [CY_IN]에 [SUB]를 접속
Section 04보수를 사용한 덧셈 뺄셈 회로 • 보수를 이용한 덧셈뺄셈 회로의 VHDL 기술
Section 04보수를 사용한 덧셈 뺄셈 회로 • 시뮬레이션 결과 • 300[ns]까지는 A= [0]이기 때문에 [B]값이 그대로 [ANS]에 출력 • 300[ns]에서는 A= [7], B= [7]이므로 [7+7=14]가 되지만, [ANS]에 표시되는 결과는 [-2]가 되는데 오버플로우가 발생 • 4비트로 표현할 수 있는 유부호 수치는 최대 +7까지이므로 그 이상의 값은 정상적으로 표현되지 않음 • 800[ns]에서는 A= [-7], B=[7], SUB='1'이므로 [-7-7=-14]가 되지만, [ANS]에 표시되는 결과는 [-2]가 되는데 오버플로우가 발생 • 4비트로 표현할 수 있는 유부호 수치는 최하 -8까지이므로 그 이하의 값은 정상적으로 표현되지 않음 • 1100[ns]에서는 A= [0], B=[-8], SUB='1'이므로 [0-(-8)=8]이 되지만, [ANS]에 표시되는 결과는 [-8]이 되는데 오버플로우가 발생 • 4비트로 표현할 수 있는 유부호 수치는 최대 +7까지이므로 그 이상의 값은 정상적으로 표현되지 않음
Section 04보수를 사용한 덧셈 뺄셈 회로 • 덧셈 연산자에 의한 VHDL 기술
Section 04보수를 사용한 덧셈 뺄셈 회로 • integer 형 변수에 의한 VHDL 기술
Section 05 unsigned와 signed • 연산 회로의 VHDL 기술에서는 2의 보수를 사용한 부호를 포함한 수치를 대상으로 할 경우와 부호를 포함하지 않는 수치를 대상으로 할 경우와는 다르기 때문에 주의가 필요 • std_logic_vector형으로 산술 연산을 할 때 부호 비트가 없는 연산을 한다면 use 문으로 패키지 [std_logic_unsigned]를 호출하고, 부호 비트를 추가하여 연산하면 패키지 [std_logic_signed]를 호출하는 것에 주의 • 2개의 패키지를 양쪽 모두 동시에 호출할 수 없음 • 부호 비트를 추가한 값과 부호 비트가 없는 값이 혼재할 경우에는 패키지 [std_logic_arith]를 호출