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