일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Edge Detector
- LED
- Pspice
- FND
- soc 설계
- Recursion
- DHT11
- Linked List
- pwm
- stop watch
- prescaling
- hc-sr04
- D Flip Flop
- dataflow modeling
- half adder
- behavioral modeling
- test bench
- BASYS3
- KEYPAD
- gpio
- verilog
- i2c 통신
- vivado
- structural modeling
- java
- ring counter
- atmega 128a
- uart 통신
- Algorithm
- ATMEGA128A
- Today
- Total
목록RTL Design (108)
거북이처럼 천천히
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..
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을 주게된다면 ..
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 = (..
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..
1. Chattering 문제 발생 1.1. 문제의 원인button을 눌러 초나 분 값을 증가시키고자 하는데, Chattering으로 인해 한 번의 버튼 누름으로 값이 2 이상 씩 증가한다.chattering 문제는 다양한 원인을 갖고 있지만, 대표적으로 버튼의 내부에 있는 스프링 노후화로 인한 발생, 저렴한 버튼으로 인한 문제 발생이 있다. 1.2. 문제 해결 방법 (소프트웨어적인 해결 방법 사용)Chattering 문제를 해결하는 방법에는 소프트웨어적으로 해결하는 방법과 하드웨어적으로 해결하는 방법이 있다. ▶ 하드웨어적인 해결 방법하드웨어적으로 해결하는 방법에는 capacitor를 Switch와 병렬 연결시켜 Chattering 문제를 해결할 수 있다.capacitor에 충전된 전하를 ..
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를 발생시켜 분 값을 증가 ..
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 변수 값들..
1. 서로 다른 숫자들을 FND을 통해 동시 출력하기이번에는 4자리 16진수 데이터를 FND을 통해 한 번에 동시 출력 되도록 설계해보도록 하겠다.이번 구현 동작은 다음과 같이 동작한다.- 16개의 Switch를 활성화시켜 0 ~ 3번째 Switch는 첫 번째 FND, 4 ~ 7번째 Switch는 두 번째 FND, 8 ~ 11번째 Switch는 세 번째 FND, 12 ~ 15번째 Switch는 네 번째 FND를 컨트롤 한다.- 해당 FND의 스위치로 16진수 값을 표현하면 해당 16진수 값이 해당 FND에 출력된다 1.1. 한 번에 동시 출력하도록 만들기 위해서는 몇 초를 주기로 Shifting 시켜야 하는가?사람 눈을 속이기 위해서는 최대 10ms 정도 FND Shifting해야 사람의 눈으로 보았을..