[Demux]
Demux
: 한 선의 입력을 받아 출력선들 중 하나를 선택하여 받은 정보를 전송하는 회로.
<Mux와 Demux의 결합>
앞에서 만든 Mux와 Demux를 instance 하여 Top module에 장착
top module을 Test_bench로 보내 시뮬레이션 시행
우리는 d에 clk들을 넣어 줄 것므로, 위와 같이 수정해준다.
<Test_bench 설계 sequence>
1. 테스트하고자하는 모듈의 입/출력을 복사해 온다.
2. 입력은 reg, 출력은 wire로 연결해해준다.
3. 모듈의 instance 선언
4. clock 설정
- clock 초기화
- clock toggle
5. 입력해서 test하고 싶은 값들을 initial 문 안에 넣어준다.
충분한 출력이 나올 수 있도록 여유롭게 시간을 주어야 함.
6. 시뮬레이션하고 결과 확인
[코드 변환기]
<Gray code>
: 서로 인접한 값들 끼리는 1bit만 달라지게 변환한 코드
→ 인접성을 최대화 하여 오류를 최소화한다.
보통 HDD, 카세트 테이프 등에 사용
예시) 왜놈 출현(봉화를 올린다고 가정해보자)
그냥 2진수 코드
00 : 평화로움
01 : 멀리서 보임
10 : 가까이 옴
11 : 상륙함
01에서 10으로 바뀔 때, 하나 끄고 하나 켜야 된다.
→ 번거롭고 느리고 오류 발생할 가능성이 커짐
Gray code
00 : 평화로움
01 : 멀리서 보임
11 : 가까이 옴
10 : 상륙함
01에서 11으로 바뀔 때, 하나만 키면 된다.
→ 빠르고 오류 생길 가능성 적어짐
<BCD란?>
= Binary Coded Decimal
이진화 십진법이라고도 부르며, 10진수처럼 코딩된 2진수이다. 컴퓨터는 0 또는 1의 2진수로 모든 것을 표현하고 사람은 10진수로 표현한다.2진수로만 표현이 된다면, 가독성이 현저히 떨어지므로 2진수를 10진수로 변환하는 과정을 거쳐 결과를 모니터에 출력해야 한다.
이렇게 10진수를 2진수로 표현하는 방법은 여러 가지가 있는데,
그 중 하나가 BCD 코드이다.(현재는 ASCII 코드를 가장 많이 사용)
즉, 10진수의 자릿수마다 1:1 매칭해서 2진수로 변환하는 것.
4bit(0000~1001)2진수를 사용하여 0~9까지 표현한다.
Decimal | Binary | BCD |
0 | 0000_0000 | 0000_0000 |
1 | 0000_0001 | 0000_0001 |
2 | 0000_0010 | 0000_0010 |
3 | 0000_0011 | 0000_0011 |
4 | 0000_0100 | 0000_0100 |
5 | 0000_0101 | 0000_0101 |
6 | 0000_0110 | 0000_0110 |
7 | 0000_0111 | 0000_0111 |
8 | 0000_1000 | 0000_1000 |
9 | 0000_1001 | 0000_1001 |
10 | 0000_1010 | 0001_0000 |
11 | 0000_1011 | 0001_0001 |
12 | 0000_1100 | 0001_0010 |
13 | 0000_1101 | 0001_0011 |
4bit BCD code | |
0000 | 0을 표현 |
0001 | 1을 표현 |
0010 | 2을 표현 |
0011 | 3을 표현 |
0100 | 4을 표현 |
0101 | 5을 표현 |
0110 | 6을 표현 |
0111 | 7을 표현 |
1000 | 8을 표현 |
1001 | 9을 표현 |
1010 | x |
1011 | x |
1100 | x |
1101 | x |
1110 | x |
1111 | x |
예시)
Decimal | Binary | BCD |
248 | 1_1111_0000 | 0010_0100_1000 |
BCD로 표현하면, Binary보다 좀 더 쉽게 10진수로의 전환이 가능하다
<Binary → BCD 변환기>
100보다 큰 것을 좌쉬프트하면 1010을 넘어가는데,
BCD에서는 사용 불가하니까 건너뛰어야함.
쉬프트 전 3을 더하는 것 = 쉬프트 후 6 더하는 것
∵ n진수 쉬프트하면 이전 값의 n배이므로
※ 쉬프트 연산자(<<, >>)
<<,>>를 써도 되지만, 회로가 더 복잡해지기 때문에
{bin[10:0], 1'b0} 과 같이 결합연산자를 활용하여 쉬프트한다.
bin[12:0]일 경우,
<< : 하위 11bit와 0을 결합해준다.
{bin[10:0], 1'b0}
>> : 상위 11bit와 0을 결합해준다.
{1'b0, bin[11:1]}
<Debug>
bin = 0000 0000 1010 → dec = 10
bin 0000 0000 1010
bcd 0000 0000 0000 0000
i = 0
bcd[14:0] 0000 0000 0000 000
bin[11] 0
→ bcd 0000 0000 0000 0000
if(bcd[ ]>? 4?) FLASE
...
i = 8
bcd[14:0] 0000 0000 0000 000
bin[3] 1
→ bcd 0000 0000 0000 0001
if(bcd[ ]>100?) FLASE
i = 9
bcd[14:0] 0000 0000 0000 001
bin[2] 0
→ bcd 0000 0000 0000 0010
if(bcd[ ]>100?) FLASE
i = 10
bcd[14:0] 0000 0000 0000 010
bin[1] 1
→ bcd 0000 0000 0000 0101
if(bcd[ ]>100?) TRUE
bcd 0000 0000 0000 0101
+3 0000 0000 0000 0011
→ bcd 0000 0000 0000 1000
i = 11
bcd[14:0] 0000 0000 0001 000_
bin[0] 0
→ bcd 0000 0000 0001 0000
if(bcd[ ]>? 4?) FALSE
∴ i = 11일때, bcd : 0000 0000 0001 0000
= Decimal 10
Combilational Logic은 여까지~
'# Semiconductor > [Semicon Academy]' 카테고리의 다른 글
[Harman 세미콘 아카데미] 6~7일차 - 취업 특강 (0) | 2023.06.26 |
---|---|
[Harman 세미콘 아카데미] 5일차 - Sequential Logic(LATCH, FF) (0) | 2023.06.23 |
[Harman 세미콘 아카데미] 4일차 - Encoder 설계, MUX, LUT (0) | 2023.06.22 |
[Harman 세미콘 아카데미] 4일차 - 7_segment로 디코더 회로 출력하기 (0) | 2023.06.22 |
[Harman 세미콘 아카데미] 3일차 - Cora z7 setting, Decoder (0) | 2023.06.21 |