1. frequency divider(=주파수 분주)
; 입력 클럭을 이용하여 이보다 낮은 클럭을 생성하는 것.
- 디지털 로직으로 구현 가능
- 주파수 체배기(frequency multiplier)의 경우는 PLL과 같은 아날로그 방식을 이용해야 함
1.1 종류
2^N 분주기 ; 일반화된 형태로 설계 가능, 예) 2, 4, 8, 16, 32, 64 분주기
2N 분주기 ;각 분주비 별로 설계 가능, 예) 6, 10, 60, 100 분주기
N 분주기 ; N이 홀수일 경우에는 duty비 50%로는 디지털 방식으로 설계 불가능
1.2 VHDL 구현 (N만 바뀐 것을 유심히 보자)
- 2분주 회로
2분주 회로
2분주 회로
- 3분주 회로
3분주 회로
3분주 회로
- 16 분주 회로
16분주 회로
- 2^N 분주회로
2^N 분주회로
2N분주 회로의 시뮬레이션 파형 예(N = 4)
- 100분주 회로
100분주 회로
100분주 회로의 시뮬레이션 파형
2. 시계 카운터
; 초, 분, 시간의 각 단위마다 카운터를 만들어서 돌려야 한다.
2.1 초 단위 카운터
2.1.1 요구사항
; 10Hz의 클럭 입력을 이용한 초단위 카운터 설계
- 입력 : 10Hz 클럭, 리셋 신호
- 출력 : 현재의 초 카운트 값, 분 증가 신호
- 고려 사항
=> 1Hz의 제어 신호 생성 : second_pulse_gen process에서 구현
=> 현재의 초 카운트 값 생성 : second_count signal 이용
=> 분 증가 신호 : 59초에서 0초 되는 순간 펄스 출력 : min_increase 출력
2.1.2 VHDL 로직 구현
초 단위 카운터
초 단위 카운터
초 단위 카운터
2.1.3 testbench ; 추후 작성
2.1.4 simulation
초 단위 카운터
2.2 분 단위 카운터
2.2.1 요구사항
; 10Hz의 클럭 입력을 이용한 분단위 카운터 설계
- 입력
=> 10Hz 클럭, 리셋 신호
=> 현재의 초 카운트 값, 분 증가 신호
- 출력
=> 현재의 초 카운트 값, 현재의 분 카운트 값
=> 시간 증가 신호
- 고려 사항
=> 현재의 초 카운트 값을 한 클럭 지연 시켜 출력
=> 현재의 분 카운트 값 출력
=> 시간 증가 신호 : 59분 59초에서 0분 0초 되는 순간 펄스 출력
2.2.2 VHDL 로직 구현
분 단위 카운터
분 단위 카운터
2.2.3 testbench ; 추후 작성
2.2.4 simulation
분 단위 카운터
분 단위 카운터
2.3 시간 단위 카운터
2.3.1 요구사항
; 10Hz의 클럭 입력을 이용한 시간단위 카운터 설계
- 입력
=> 10Hz 클럭, 리셋 신호
=> 현재의 초 카운트 값, 분 카운트 값, 시간 증가 신호
- 출력
=> 현재의 초 카운트 값, 현재의 분 카운트 값 , 현재의 시간 카운트 값
- 고려 사항
=> 현재의 초, 분 카운트 값을 한 클럭 지연 시켜 출력
=> 23시 59분 59초에서 0시 0분 0초로 변경
2.3.2 VHDL 로직 구현
시간 단위 카운터
시간 단위 카운터
2.3.3 testbench;추후 작성
2.3.4 simulation
시간 단위 카운터
시간 단위 카운터
3. 디지털 시계
; 위에서 만든 단위 카운터(초,분,시간)에 디스플레이 등의 모듈을 섞어서 디지털 시계를 구현해 보자.
디지털 시계
- 구성 블록
button interface(=버튼 인터페이스) : DC_BI
time preset(=시각 설정 모듈) : DC_TP
clock counter(=시계용 카운터) : DC_CC
display selector(=디스플레이 선택부): DC_DS
3.1 요구조건
디지털 시계 블록도
- 동작 모드
=> mode 0 : 시 설정
=> mode 1 : 분 설정
=> mode 2 : 초 설정
=> mode 3 : 시각 디스플레이 : 시, 분, 초
- 입력 신호
=> mode 선택 신호 : mode_button
=> 시, 분, 초 증가 신호 : up_button
=> 10Hz 클럭 신호 : clk, 리셋 신호 : rst_n
- 출력 신호
=> 시 정보 : hour(4 downto 0)
=> 분 정보 : minute(5 downto 0)
=> 초 정보 : second(5 downto 0)
3.2 Button interface(버튼 인터페이스) 구현
3.2.1 요구사항
- mode_button 신호를 입력 받아서 2 비트의 mode 신호를 출력
- up_button 신호를 입력 받아서 10Hz로 동기되는 펄스 형태의 up 신호를 출력
=> 각 모드에서 시, 분, 초 정보의 조정 신호
- 입력 신호
=> mode_button, up_button
- 출력 신호
=> mode(1 downto 0), up_pulse
3.2.2 VHDL 로직 구현
버튼 인터페이스 VHDL코드
버튼 인터페이스 VHDL코드
버튼 인터페이스 VHDL코드
3.2.3 testbench ; 추후작성
3.2.4 simulation
버튼 인터페이스
3.3 Time preset(시각 설정) 모듈
3.3.1 요구사항
- 설정된 현재의 시각을 제공
- 설정값이 유효할 때 시계 회로에 인가하기 위한 set_pulse 신호를 제공
- 입력 신호
=> mode(1 downto 0)
=> up_pulse
- 출력 신호
=> ps_hour(4 downto 0) : preset hour information
=> ps_minute(5 downto 0 ) : preset minute information
=> ps_second(5 downto 0 ) : preset second information
=> set_pulse : preset current time information
3.3.2 VHDL 로직 구현
선언부
hour gen
minute_gen
second_gen
pulse_gen
3.3.3 testbench ; 추후 작성
3.3.4 simulation
Time preset
3.4 clock_counter(시계용 카운터) 모듈
3.4.1 요구사항
- set_pulse에 의해서 현재 입력되는 시각을 설정
- 이후 계속적인 시각 정보를 제공
- 13.2절의 시계용 카운터 설계와 기본 로직 일치
- 현재값 설정 기능만 추가 필요
- 내부 블록
=> 초 정보 발생부
=> 분 정보 발생부
=> 시 정보 발생부
3.4.2 VHDL 로직 구현
- 초 정보 발생부
초 정보 발생부
- 현재값 설정 기능 추가된 초 정보 발생부
현재값 설정 기능 추가된 초 정보 발생부
3.4.3 testbench
3.4.4 simulation
3.5 Display selector(디스플레이 선택) 모듈
3.5.1 요구사항
- 시각 설정부에서 제공하는 시각 설정값과 시계용 카운터 부에서 제공하는 현재의 시각 정보를 선택적으로 디스플레이
- 0 ~ 2번 모드 : 시, 분, 초 시각을 설정
- 3번 모드 : 현재의 시각을 디스플레이
- 입력 신호
=> mode(1 downto 0)
=> 설정된 초, 분, 시 정보, 현재의 초, 분, 시 정보
- 출력 신호
=> hour(4 downto 0)
=> minute(5 downto 0)
=> second(5 downto 0)
3.5.2 VHDL 로직 구현
디스플레이 선택부의 VHDL
3.5.3 Simulation
디스플레이 선택부의 시뮬레이션 파형
4. 입출력 타이밍도
디지털시계 회로의 입출력 타이밍도
모드 3 변경 시의 입출력 타이밍도
'전공지식정리 > 디지털시스템설계' 카테고리의 다른 글
VHDL13. 영상회로 (0) | 2020.12.08 |
---|---|
VHDL11. 메모리 인터페이스 회로 설계(ROM,RAM,SDRAM) (0) | 2020.12.08 |
VHDL10. buffer, state machine, ALU (0) | 2020.12.08 |
VHDL9. 기법(논리합성, 설계) (0) | 2020.12.08 |
VHDL8. 순차회로 (0) | 2020.12.08 |