You are on page 1of 12

디지털 시스템 실험 결과 보고서

- 5주차 -
과목(학수번호) : 디지털 시스템 실험 (KECE210)

분반 : 07

이름 : 전태현

학번 : 2019170956

학과(부) : 전기전자공학부

실험 날짜 : 9월 15일 (목요일)

[실험 제목]

7-Segment

[실험 목표]

1. BCD_to_7segment.v 코드 완성

2. seven_seg.v 코드 완성

3. seven_seg RTL viewer


[실험 과정 및 결과]

1. line-decoder 설계

- input : 4bit 이진수

- process : in이 5 이상일 시 3을 더해서 해당 값을 out으로 출력

- output : 4bit 이진수

1-1. 코드

1-2. 코드 설명

- line 6 : output은 4 bit 크기의 reg에 저장이 된다

- line 8 : input 값이 바뀔 때 (즉, 이 경우에는 input 값이 입력 될 때) 해당 always 블록이 시행 된다

- line 9, 23 : always 블록의 시작과 끝을 표시


- line 10 ~ 21 : 예) in이 4’b1001 인 경우 out에 4’b1100을 입력한다

- line 21 : in이 line 11 ~ 20이 아닌 경우 out에 4’b0000을 입력한다

2. binary to BCD 설계

- input : 4bit 이진수 // binary

- process : shift and add 3 알고리즘 구현

- output : 4bit 이진수 2개 (일의 자리, 십의 자리) 2bit 이진수 1개 (백의 자리) // binary

2-1. 코드
2-2. 코드 설명
3. BCD to 7 Segment 설계

- Input : 1개의 4bit 이진수 // BCD

- process : BCD를 7 Segment 형식으로 바꾼다

- Output : 1개의 7bit 이진수 // 7 Segment

3-1. 코드

3-2. 코드 설명
- 이진수로 0 ~ 9 까지의 숫자를 a~g (그림 에서는 A~G) 아웃풋을 조절하면서 7 Segment로 숫자가 표
시한다.

- 예) BCD가 4’b0101 일 때 out은 7’b1011011가 된다. 즉 A, C, D, F, G에만 신호가 들어간다.

-> 5가 표시되는 것을 볼 수 있다.

- 여기서 DP에는 일절 신호가 들어가지 않으므로 모든 경우에서 빛이 켜지지 않는다.

4. Seven Segment Controller 설계

- Input

- iCLK : 1 bit. 클럭 // 신호는 하나의 7 segment에만 보낼 수 있다. 코드에서 8개의 7 Segment에 순차


적으로 신호를 주게 되는데, 이때 신호가 바뀌는 속도를 지칭한다. 클럭 수 가 낮을수록 하나 하나의 세그
먼트에 신호가 보내지는 게 보일 것이고, 클락 수가 빠를수록 8개 7 segment에 신호가 동시에 들어가는
것 처럼 보일 것이다.

- nRST : 1 bit. 리셋버튼 // 계산기의 리셋버튼 생각하면 편하다. 7 Segment에 표시된 숫자를 없앤다.

- iSEG7 ~ iSEG0 : 7bit. 각 7 세그먼트에 표시되는 수. 예) iSEG3가 7’b1011011일 때, 오른쪽에서 4번째


세그먼트에 5가 표시된다.

- process : 8개의 7 Segment에 원하는 숫자가 나오게 해준다.

- Output

- oS_COM : 8 bit. 8개의 7 세그먼트 중 어떤 것에 신호를 보낼 지 정해준다. 0이 켜짐, 1이 꺼짐 이다.

- oS_ENS : 7 bit. 해당 7 세그먼트에 어떤 세그먼트에 신호를 보낼 지 (빛 나게 할 지) 정해준다.

4-1. 코드

(다음 두 페이지)
4-2. 코드 설명

- CNT_SCAN 은 1자리 정수로, 프로그램이 돌아가는 시점에서 몇 번 째 7 segment에 신호가 들어가는


지 알려 준다. 즉 CNT_SCAN이 3일 경우 오른쪽에서 4번째 (0,1,2,3 순서) 7 segment에 신호가 들어가고
있다는 뜻이다.

- posedge = (pos)itive (edge)

- iCLK가 양의 엣지, 즉 0에서 1이 될 때 always block이 시행된다

- 클락은 0과 1 신호를 주기적으로 넣어준다. 즉 정해준 주기에 따라 always 블록이 반복된다.

- line 26의 begin은 line 88의 end에 대응한다.

- 리셋 버튼이 눌러졌을 경우 // if nRST is 1

- 8개의 7 segment에 신호를 보낸다 // oS_COM에 8’b00000000을 입력한다

- 동시에 2개 이상의 7 segment에 신호를 보내는 것은 불가능 하다. 즉 8개의 7 segment에 신호를 보
내는 것은 그냥 신호를 안 보내겠다는 뜻과 동일하다.

- 각 7 segment에 아무런 신호를 보내지 않는다 // oS_ENS에 0을 입력한다


- 리셋 버튼을 누르지 않았을 경우 // if nRST is not 1

- line 34에 begin은 line 87의 end에 대응한다

- 신호가 오른쪽에서 8번째 7 Segment에 들어가고 있는 중이면 다음 신호를 오른쪽에서 1번째 7


Segment에 넣어준다. // CNT_SCAN이 7 이상일 경우 CNT_SCAN을 0으로 갱신한다.

- 신호가 첫 7개 (오른쪽 기준)의 7 segment 중 한 곳에 들어가는 중 이면 다음 신호를 그 바로 왼쪽에


있는 7 segment 에 넣어준다.

- 예) 오른쪽에서 3번 째 7 Segment에 신호가 들어가고 있는 중이면 다음 신호는 오른쪽에서 4번 째


7 segment에 신호를 넣는다. // CNT_SCAN이 4이면, CNT_SCAN을 4+1 즉 5로 재지정한다.

- 예) CNT_SCAN이 5일 경우 오른쪽에서 6번째 7 Segment에 인풋한 숫자를 표시한다 //

If CNT_SCAN is 5, oS_COM에 8’b11101111을 입력하고 oS_ENS에 iSEG4를 입력한다

- iSEG4에 7’b1011011이 입력 된 경우, 5라는 숫자가 오른 쪽에서 6번째 7 segment에 표시 된다.

- default 즉 CNT_SCAN이 0~7 8개 중 하나도 아닐 때, 모든 7 segment에 신호를 보내지 않는다.

5. Seven Segment 설계

- 여태 나온 모든 코드의 종합
5-1. 코드

5-2. RTL viewer


5-3. 구현

input이 0000일 경우 7 segment에 00 표시

input이 0101일 경우 7 segment에 05 표시

input이 1111일 경우 7 segment에 15 표시

You might also like