System On Chip 설계 및 응용 - 시계 + 스탑워치 + 시간설정 + 알람설정 구현
페이지 정보
작성일 23-04-01 13:18
본문
Download : System On Chip 설계 및.hwp
알람동작은 알람 <시:분:초>와 같거나 클 경우 그리고 <시:분+1:초>보다 작을 경우 buzzer값에 0을 넣어서 dot_matrix를 작동 시킨다. 그리고 0에서 한 단계 뒤는 그 변수의 최고치이므로 세그먼트 출력부 중 others값은 최고치에 맞춰 주어야한다. 또한 스탑워치의 모든 카운터 값을 ‘0’으로 초기화시킬 수 있었다. 똑같은 방식으로 새로운 파일을 만들어 알람시간을 정하고 그 값이 저장된 변수들을 시계로 보내서 현재 시간과 비교해서 같을 경우 부저신호를 내보내면 되는 것 이였다. 여기서 약간의 문제가 있었다. 앞에서도 말했듯이 카운터값은 현재시각의 한단계 높은 값을 가지고 있기 때문에 1을 빼줘야 하는데 무작정 빼면 0에서 음수가 되어버리기 때문에 그 부분을 고려하여 if문으로 0일 경우는 빼지 않고 최고치로 넘어갈 수 있도록 하여 임시변수에 넣은 뒤 십의 자리에는 10을 곱한 후 일의자리와 더해서 하나의 10진수를 만들었다. 시계에서 시간 부분을 제거한 후 1/100초 부분을 추가해줬다.
use ieee.std_logic_arith.all;
순서
use ieee.std_logic_unsigned.all;
처음 스탑워치 구현은 전자회로 test(실험) 시간에도 자주해 본 알고리즘이고 시계소스도 이미 만들어져 있기 때문에 큰 어려움없이 구현 할 수 있었다. 그리고 카운터가 1/100초를 셀수 있도록 125,000번 클럭(25Mhz)이 발생하면 Clk_out을 반전되도록 하였다. 시계의 경우는 12,500,000번이다.두 번째로 시간을 설정하는 부분에서 많은 시행착오를 겪다가 시계소스 안에서 스위치 라이징엣지를 clk_in라이징엣지와 중복해서 사용하는 건 부적절한 듯싶어서 새롭게 파일을 만들었다. 원래는 0으로 설정되어있다. 알람을 어느 정도 동작되고 꺼야 했는데 이 프로젝트에서는 알람시각으로부터 1분간 작동되고 알람이 꺼지도록 했다. 스탑워치 제어는 put변수를 만들어 각각의 스위치 눌러지면 미리 정해놓은 값이 들어가 다른 버튼이 눌러지기 전까지 그 값을 유지하게 하였다. 시계와 소스는 대부분 같지만 클럭으로 시분초가 올라가는게 아니라 각각의 스위치 라이징엣지에 反應(반응)하여 시분초가 올라가도록 만들고 그 값들을 설정모드 일 경우에만 시계의 시분초 카운터들과 연결시켜서 시간설정을 구현 할 수 있었다.
port (
use ieee.std_logic_1164.all;
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity easy_clock is port ( clk_in: in std_logic; resetn: in std_logic;
Download : System On Chip 설계 및.hwp( 57 )
System On Chip 설계 및 응용,시계,스탑워치,시간설정, 알람설정 구현
설명
resetn: in std_logic;
dotmatrix에는 한글로 “알람”을 표시하도록 코딩하였다. 그러기 위해서는 십의자리와 일의자리로 나누어진 초의 변수들을 하나의 십진수로 만들어서 현재시각과 비교가 필요했다. if문을 안쓰고 rem을 써보려했지만 카운터 자료(資料)형이 unsigned형이 아니라 명령어를 쓸 수 없었다. 여기서 전달되는 카운터 값은 세그먼트에 표시된 값보다 한 단계 증가해서 전해지기 때문에 시계에서 세그먼트로 갱신 될 때 한 단계만큼 감소시켜 출력시켜야 정상적으로 출력되었다. 이렇게 만들고 나니 의도하지는 않았지만 알람설정도 자연스럽게 되었다. 그 다음 put변수값을 비교하여 카운터를 증가시키거나 유지할 수 있었다.
clk_in: in std_logic;
레포트 > 공학,기술계열
entity easy_clock is
System On Chip 설계 및 응용 - 시계 + 스탑워치 + 시간설정 + 알람설정 구현
library ieee;
다.


