VHDL을 이용한 디지털 회로 설계

Download Report

Transcript VHDL을 이용한 디지털 회로 설계

그 밖의 회로 설계
IT CookBook, VHDL을 이용한 디지털 회로 설계
학습목표
배렬 시프트 설계를 통해 설계 전반적 개념 이해
유부호 및 무부호 비교기 설계로 설계 절차 이해
여러 덧셈기 설계로 성능 분석과 구현 결과 이해
기타 응용 회로
목차
1. 배럴 시프터
2. 유부호 비교기와 무부호 비교기
3. 캐리 리플 및 캐리 예측 덧셈기
4. 고정 소수점 나눗셈
5. 자동판매기 제어기
6. 직렬 데이터 수신기
7. 병렬-직렬 변환기
8. SSD를 가지고 하는 게임
9. 신호 발생기
10. 메모리 설계
Section 9.1 배럴 시프터
 barrel shifter
• 시프트 양(shift)에 따라 0~7까지
입력(inp)를 시프트한 출력(outp)
- 입력/출력은 8 비트 벡터
- 시프터는 3단으로 구성:
첫째단은 1 비트 시프트,
둘째단은 그 결과를 2 비트 시프트,
셋째단은 그 결과를 다시 4비트 시프트
- 시프트하여 생긴 빈자리에는 ‘0’을 채움
(예) shift = “001”이면 첫째 배럴 시프터만
동작하여 1 비트 시프트한 결과
shift = “111”이면 첫째, 둘째, 셋째단에서
각각, 1비트, 2비트, 4비트,
총 7비트 시프트한 결과
shift = “101”이면 첫째, 셋째단에 각각
1비트, 4비트 총 5비트 시프트
[그림 9-1] 배럴 시프터
Section 9.2 유부호 비교기와 무부호 비교기
 comparator
• (n+1) 벡터의 두 입력(a, b)의 크기 비교
- 입력 형태 : signed integser 또는 unsigned integer
• 3개의 출력
- a>b인 경우 x1, a=b인 경우 x2, a<b인 경우 x3
• 3개의 설계 해를 제시
- 설계 해 1: 유부호 수에 대한 크기 비교
- 설계 해 2와 3: 무부호 수에 대한 크기 비교
[그림 9-2] 크기 비교기
Section 9.3 캐리 리플 덧셈기와 캐리 예측 덧셈
기
 CRA(Carry Ripple Adder)
• 4 비트 무부호 수: FAU(Full Adder Unit) 4 개를 직렬로 연결
• 전파지연 시간 증가로 속도 느리나 최소한의 하드웨어
• 출력을 위한 표현식
- s = a XOR b XOR cin
- cout = (a AND b) OR (a AND cin) OR (b AND cin)
[그림 9-6] 4 비트 CRA 및 FAU 진리표
Section 9.3 캐리 리플 덧셈기와 캐리 예측 덧셈
기
 CLA(Carry Look-ahead Adder)
• 동작 설명
- 각 비트의 두 입력 a( j)와 b( j)에 대해
generate signal: g( j) = a( j) AND b( j)
propagation signal p( j) = a( j) XOR b( j)
- 각 비트의 carry vector c = c(n-1) … c(2)c(1)c(0)를 계산해 보면
c(0) = cin
c(1) = c(0)p(0) + g(0)
c(2) = c(0)p(0)p(1) + g(0)p(1) + g(1)
c(3) = c(0)p(0)p(1)p(2) + g(0)p(1)p(2) + g(1)p(2) + g(2)
• 장단점
- CRA와는 다르게 각 캐리 비트가 따로따로 계산되므로 회로가 빠르게 동작하나,
- 하드웨어 복잡도가 급속히 커지므로 4비트로 제한
더 큰 규모의 CLA를 설계하려면
4 비트 단위 회로를
계속 연계하여 구현
[그림 9-8] 4 비트 CLA
Section 8.4 고정 소수점 나눗셈
 고정 소수점 나눗셈 알고리즘
• y = a/b를 계산: (예) a(“1011”)/b(“0011”) = y(“0011”)
- 피젯수(divisor) a, 젯수(dividend) b, 몫(quotient) y가 모두 (n+1) 비트라면 (2n+1) 비트로 표현
0001011
<
0001011
<
0001011
>=
0000101
>=
(나머지)0010
[그림 9-9] 나눗셈 알고리즘
• 계산 과정 설명
- (n+1) 비트 자리의 몫 계산
피젯수 b를 n 비트만큼 시프트(또는 2n 만큼 곱함)
a >= b이면, y(n+1) = 1, a = a – b(시프트시킨 값)이 되고, 아니면 y(n+1) = 0
- n 비트 자리의 몫 계산
피젯수 b를 (n-1) 비트만큼 시프트(또는 2n-1 만큼 곱함)
a >= b이면, y(n) = 1, a = a – b(시프트시킨 값)이 되고, 아니면 y(n) = 0
- 이러한 계산을 n+1 번 반복
Section 9.5 자동판매기 제어기
 Vending-Machine Controller : 막대사탕을 25센트에 판매
• FSM 모델로 설계하면 유용
• 제어기의 입출력
- 입력: 클록(clk), 리셋(rst), 해당 동전 투입(nickel_in, dime_in, quarter_in)
- 출력: 사탕 분출 완료(candy_out), 거스름돈(nickel_out, dime_out)
[그림 9-11] 자판기 제어기: 회로도 및 상태도
여기서
ni=nickel_in, di=dime_in, qi=quater_in, no=nikel_out, do=dime_out, co=candy_out
Section 9.6 직렬 데이터 수신기
 Serial Data Receiver
• 동작 설명
전송 완료 표시로 H
- 입력 데이터는 10 비트로 구성
start bit(1) + 실제 data bit(7) + parity bit(1) + stop bit(1)
H이면 수신 시작
데이터의 ‘1’의 개수가 짝수이면 ‘0’
- 입력 : 클록(clk), 직렬 입력(din)
- 출력: 병렬 데이터 출력(data(6:0), 감시 신호로서 에러(err)과 유효한 데이터(data_valid)
패리티가 일치하지 않거나 정지 비트가 ‘1’이 아니면 오류 검출
오류없이 수신이 완료되면,
내부 레지스터(reg)에 저장된 데이터를 data(6:0)에 출력하고 data_valid는 H
[그림 9-13] Serial Data Receiver
Section 9.7 병렬-직렬 변환기
 Parallel-to-Serial Converter
• 동작 설명
- 병렬 데이터를 직렬로 변환시키는 회로: 시프트 레지스터의 전형적인 응용 분야
(적용 예) ASIC 칩에서 모든 데이터 비트를 출력하는데 사용 가능한 핀 수가 모자랄 때
- 입력 : 클록(clk), 적재(load), 병렬 입력 데이터(d(7:0))
load가 H가 되면, 병렬 입력 데이터(d)가 동기적으로 시프트 레지스터(reg)에 저장
- 출력: 직렬 데이터 출력(dout)
load가 L이 되면, clk의 상승 에지에 맞추어 연속되는 비트들이 차례로 출력
8 개의 비트를 모두 출력한 후, 다음 전송 때까지 출력은 L로 유지
[그림 9-15] Parallel-to-Serial Converter
Section 9.8 SSD를 가지고 하는 게임
 SSD(Seven-Segment Display)가 붙어있는 게임기
• 동작 설명: 전형적인 FSM
- 입력 : 클록(clk), 중지(stop)
- 출력: 출력(dout(6:0)) -> SSD의 입력으로 사용
- stop이 입력될 때까지, SSD의 세그먼트가 시계방향으로 계속해서 움직임
(예) a → ab → b → bc → c → cd → d → de → e → ef → f → fa → a …….
부드러운 움직임을 보여주기 위해 전/후 신호를 수 밀리초 동안 중첩시킴
[그림 9-18] 게임기의 상태도
Section 9.9 신호 발생기
 Signal Generator
• 동작 설명
- 클록 신호(clk)에 따라 그림과 같은 출력 파형(wave)을 생성
• 설계 방식
- FSM 방식
- 기존 방식
[그림 9-20] 신호 발생기
Section 9.10 메모리 설계
 3 가지 형태의 memory 설계
 ROM
• 동작 설명
- 메모리 내에 data word들이 이미 저장되어 있음
- 읽기 전용이기 때문에 클록 신호와 write-enable pin 불필요
- 주소 입력(addr)에 의해 선택된 word 하나를 출력(data)에 전달
• 설계(VHDL 코드 설명)
-
words : 메모리에 저장되는 워드 수
bits : 각 워드의 크기
8x8 ROM을 나타내기 위해 vector_array라는 배열을 선언하고
이미 저장된 데이터를 나타내기 위하여 memory라는 CONSTANT를 사용하여 값을 줌
[그림 9-23] ROM
Section 9.10 메모리 설계
 별도의 입력/출력 데이터 버스를 가진 RAM
• 동작 설명
- 입력: 데이터 입력 버스(data_in), 주소 버스(addr), 클록(clk), 쓰기 가능 신호(wr_ena)
- 출력: 데이터 출력 버스(data_out)
- 쓰기 동작
wr_ena가 입력되면, clk의 다음 상승 에지에서 data_in에 주어진 데이터를 addr이 명시한 위치에
저장
- 읽기 동작
addr이 명시한 위치의 메모리 데이터를 data_out으로 출력
[그림 9-25] 별도의 입력/출력 데이터 버스를 가진 RAM
Section 9.10 메모리 설계
 양방향 입력/출력 데이터 버스를 가진 RAM
• 동작 설명
- bidir은 입출력 동시 가능
- wr_ena이 L이면 읽기 동작,
- wr_ena이 H이면 쓰기 동작으로, q가 d에 연결되어 clk의 다음 상승 에지에서 새로운 데이터 저장
[그림 9-27] 양방향 입력/출력 데이터 버스를 가진 RAM
9장 그 밖의 회로 설계 끝