본문 바로가기

분류 전체보기

(270)
Verilog RTL 설계(7월 18일 - 4, Stop Watch - 3) 1. Clear 기능 추가하기이번 게시글은 지난 게시글에 이어 Clear 기능을 추가하도록 하겠다.이전 게시글에 대해서 궁금하다면 아래 링크를 통해 이전 게시글을 참조 하길 바란다.https://jbhdeve.tistory.com/271 Verilog RTL 설계(7월 18일 - 3, Stop Watch - 2)1. Lap 기능 추가하기이전 게시글에서 구현한 기본적인 Stop Watch에 이어 랩 기능을 추가하도록 하겠다.https://jbhdeve.tistory.com/270 Verilog RTL 설계(7월 18일 - 2, Stop Watch - 1)1. Stop Watch 이전 게시글에서jbhdeve.tistory.comClear 버튼을 누르면 랩 모드에 저장된 시간과 Stop Watch 모드에서 이..
Verilog RTL 설계(7월 18일 - 3, Stop Watch - 2) 1. Lap 기능 추가하기이전 게시글에서 구현한 기본적인 Stop Watch에 이어 랩 기능을 추가하도록 하겠다.https://jbhdeve.tistory.com/270 Verilog RTL 설계(7월 18일 - 2, Stop Watch - 1)1. Stop Watch 이전 게시글에서 다루었던 Clock 지식을 기반으로 Stop Watch을 구현해보도록 하겠다.단계별로 기능을 하나씩 추가해 나아가도록 하겠다.   2. Basic Stop Watch기본적인 Stop Watch는 다음과jbhdeve.tistory.com이번 구현은 다음과 같이 동작한다.- 랩 버튼을 누르면 현재의 시간에서 멈춰 현재의 시간을 기록하여 디스플레이에 표시한다.- 주의 할 점은 비록 디스플레이 상에서는 시간은 멈춰 있지만, Sto..
Verilog RTL 설계(7월 18일 - 2, Stop Watch - 1) 1. Stop Watch 이전 게시글에서 다루었던 Clock 지식을 기반으로 Stop Watch을 구현해보도록 하겠다.단계별로 기능을 하나씩 추가해 나아가도록 하겠다.   2. Basic Stop Watch기본적인 Stop Watch는 다음과 같이 동작한다.- 초기에는 00 : 00초로 시작하며, 시작 버튼을 누르기 전까지는 시계는 동작하지 않는다.- btn[0], btn_start을 누르면 시계가 동작하며, 다시 btn_start을 누르면 다시 시계가 멈춘다.  2.1. Stop watch에서 시계를 어떻게 멈추게 할 것인가?Basys3의 기본 클럭 펄스를 기반으로 분주화를 통해 1sec / 1min을 주기로 갖는 One Cycle Pulse를 얻는다.이 과정에서 기본 클럭 펄스 대신 0을 주게된다면 ..
Verilog RTL 설계(7월 18일 - 1, Advanced Clock Mode - 4) 1. 초 값이 30초 이상일 때, btn_set 버튼을 누를 때마다 분 값이 1씩 증가한다. (또 다른 해결책)해당 문제에 대해서 이미 이전 게시글을 통해서 다루어 보았다.Verilog RTL 설계(7월 17일 - 5, Advanced Clock Mode - 2) (tistory.com) Verilog RTL 설계(7월 17일 - 5, Advanced Clock Mode - 2)1. Set 모드에서 시간을 설정한 뒤, 다시 Watch 모드로 가면 초와 분이 동기화되지 않는다. 1.1 문제 현상Set 모드에서 시간을 세팅한 뒤, 다시 Watch 모드로 돌아가 시계로서 동작하면 초와 분 값이 동jbhdeve.tistory.com 해당 문제의 원인은 아래 코드가 원인이 되었다.assign inc_min = (..
Verilog RTL 설계(7월 17일 - 7, Advanced Clock Mode) 1. 지금까지 설계한 Advanced Clock 소스 코드// Root of modulemodule Set_Clock_Mode( input clk, reset_p, input [3:0] btn, output [3:0] com, output [7:0] seg_7 ); // Get pulse wave of sec, min wire clk_usec, clk_sec, clk_min; clk_div_100 clk_div_usec (.clk(clk), .reset_p(reset_p), .clk_div_100(clk_usec)); clk_div_n clk_div_sec(.clk(clk), .reset_p(reset_p), .clk_source(clk_usec), .p..
Verilog RTL 설계(7월 17일 - 6, Advanced Clock Mode - 3) 1.  Chattering 문제 발생  1.1. 문제의 원인button을 눌러 초나 분 값을 증가시키고자 하는데, Chattering으로 인해 한 번의 버튼 누름으로 값이 2 이상 씩 증가한다.chattering 문제는 다양한 원인을 갖고 있지만, 대표적으로 버튼의 내부에 있는 스프링 노후화로 인한 발생, 저렴한 버튼으로 인한 문제 발생이 있다.    1.2. 문제 해결 방법 (소프트웨어적인 해결 방법 사용)Chattering 문제를 해결하는 방법에는 소프트웨어적으로 해결하는 방법과 하드웨어적으로 해결하는 방법이 있다.   ▶ 하드웨어적인 해결 방법하드웨어적으로 해결하는 방법에는 capacitor를 Switch와 병렬 연결시켜 Chattering 문제를 해결할 수 있다.capacitor에 충전된 전하를 ..
Verilog RTL 설계(7월 17일 - 5, Advanced Clock Mode - 2) 1. Set 모드에서 시간을 설정한 뒤, 다시 Watch 모드로 가면 초와 분이 동기화되지 않는다. 1.1 문제 현상Set 모드에서 시간을 세팅한 뒤, 다시 Watch 모드로 돌아가 시계로서 동작하면 초와 분 값이 동기화 되지 않고, 개별적으로 동작하는 문제점이 발생한다.ex) 아직 59초에서 60초로 넘어가지 않았음에도 분 값이 증가하거나 59초에서 60초로 넘아갔음에도 분 값이 증가하지 않는다. 1.2. 문제의 원인Set 모드로 돌아 왔을 경우, 분을 BCD 60진 카운터에서 기준 펄스가 되는 clk_min이 멈춰야 하지만, 멈추지 않고, 계속해서 진행하여 모드와 상관없이 계속해서 clk_min 기준 펄스가 Counting하다가 60초 되는 순간 One Cycle Pulse를 발생시켜 분 값을 증가 ..
Verilog RTL 설계(7월 17일 - 3, Clock Mode) 1. Clock Pulse를 이용하여 Clock 만들기basys3의 기본 클럭 펄스의 주기는 10ns이다. 이를 활용하여 시계를 만들고자 한다.다음과 같이 동작한다.- 4개의 FND를 이용하여 첫 번째, 두 번째 FND는 초 단위, 세 번째, 네 번째 FND는 분 단위를 출력한다.- 초 단위는 0 ~ 59초 까지 Counting이 가능하며, 60초가 되면 0초로 초기화되며, 분 값이 1씩 증가한다.- 분 단위도 0 ~ 59분 까지 Counting이 가능하며, 60분이 되면 0분으로 초기화된다.   1.1. 동시에 서로 다른 숫자들을 동시에 출력하기시간을 분의 십의 자리, 분의 일의 자리, 초의 십의 자리, 초의 일의 자리로 나눈다.각각의 시간의 데이터를 Ring Counter를 이용하여 com 변수 값들..