분류 전체보기 58

Vivado : Basys3 종합 시계 프로젝트 (타이머, 스톱워치, 시계)

이번에는 여러 기능을 갖춘 종합 시계 프로젝트를 진행하려고 한다.종합 시계 프로젝트 구현할 종합시계의 기능은 일반 시계 기능, 스톱워치 기능 그리고 타이머 기능을 갖는다. 일반 시계 기능에서는 분과 초를 제어할 수 있으며 59분 59초가 넘을 시 00분 00초로 다시 리셋이 되는 특징을 지닌다. 스톱워치 기능에서는 기본적으로 ms단위로 시계가 흐르며, Lap 기능을 갖추어 원하는 시간에 동작을 멈춘 후, 멈춘 시간으로부터 Lap을 해제할 때까지의 시간을 잴 수 있다. 타이머 기능에서는 초와 분을 설정하여, 설정된 시간으로부터 00분 00초가 될 때까지의 타이머 기능을 구현한다. 타이머가 00분 00초가 되었을 때에는 부저가 울리며, 외부의 스위치로 부저를 제어할 수 있다.타이머타이머를 동작시킬 코드는 아..

Language/Verilog 2024.07.30

Vivado : 온도 습도 센서

온/습도 센서 이번에는 온습도 센서를 사용할려고자 한다. 온습도 센서는 DHT11 모듈을 사용하여 진행할 예정이며, 모듈의 회로 구성은 아래와 같다.  온/습도 센서의 총 동작도는 아래와 같다. MCU 시그널이 주어진 후 센서의 신호가 응답하는 방식으로 진행된다.   아래 그림은 MCU가 시작 신호를 보낸 후에 DHT 센서의 응답 과정을 나타낸다. 온습도센서가 MCU의 신호를 감지 후, MCU를 감지하려면 최소 18ms의 시간이 소요된다. 그러고 난 후 20~40us만큼 센서의 응답을 기다린다. DHT가 시작 신호를 감지하면 저전압레벨의 응답신호를 80us 간 보낸다. 응답 신호를 보낸 후, 센서는 데이터 전송을 위해서 데이터 단일 버스 전압레벨을 저에서 고로 설정하고 80us동안 유지한다. 그다음 모듈..

Language/Verilog 2024.07.25

Vivado : 키패드

키패드이번에는 16개의 버튼이 달려있는 키패드를 제어하려고 한다. 키패드의 회로 구성도는 아래와 같다. 우선 키패드를 동작시키기 위해 키패드를 제어할 controler 모듈을 구현해야 한다. 키패드를 제어할 controler 모듈에서는 링카운터와 case문을 사용하여 4 digit 7 segment와 column을 제어하려고 한다. 코드 내 링카운터 부분에서는 column이 출력 부분으로 작동한다. 키가 눌려있는 상태에서는 column값이 유지된다.단, Key_valid가 1 일시에는 현재 상태를 유지하는 것을 볼 수 있다. 링카운터의 동작 상태도는 아래와 같다. 16개의 스위치 제어에서는 case문을 사용하여 제어하려고 한다. case문에서는 row(행)과 col(열)의 입력을 통하여 출력을 결정하며,..

Language/Verilog 2024.07.25

Vivado : 초음파 센서

초음파 센서오늘은 초음파 센서를 통해 물체 사이의 거리를 측정해보려 한다. 초음파 센서 모듈의 데이터 시트를 확인하면 아래와 같은 Timing Diagram 정보를 확인할 수 있다.   Echo Pulse Output부분은 초음파가 왔다가 가는 걸리는 시간을 의미한다. IDLE은 최소 10ms이지만, 여유 있게 3초로 적용할 예정이다. 그리고 물체와의 거리를 cm 단위로 측정하기 위하여 위 그림에 나와있는 바와 같이 us를 58로 나누어 진행할 예정이다.아래는 초음파 센서 모듈을 동작시킬 코드이다.. 입출력 부분에 선언된 에코는 입력, 트리거는 출력으로 설정하여 진행하였다. 즉, 물체까지 도달하는 속도 및 거리는 트리거, 다시 입력으로 돌아오는 것은 에코로 설정하였다.  FSM 방식으로 진행할 예정이기 ..

Language/Verilog 2024.07.25

Vivado : Basys3 Stop watch

Stop Watch이번에는 여러 가지 기능을 가진 스톱워치를 구현해 볼 예정이다.아래 구현할 스톱워치는 리셋을 누르면 0으로 초기화됨과 동시에 시간이 멈추며, 스위치(버튼)를 누를 때 시간이 멈추고, 다시 누르면 시간이 흐르는 동작을 수행한다. 스톱워치의 코드는 아래와 같다. 1 sec이 흐를 수 있도록 이전글에서 구현한 clock 코드를 가져와 사용하였고, 0번 버튼을 스위치로 사용하기 위해 "btn [0]"을 선언하였다. 이전글을 살펴보면 clock이 어떻게 동작하는지 설명되어 있다.  1101 -> 1011 -> 0" data-og-host="jangdong.tistory.com" data-og-source-url="https://jangdong.tistory.com/36" data-og-url="..

Language/Verilog 2024.07.18

Vivado : Basys3 FND / 디지털 시계, 분주

□ 본 게시글은 수업 내용을 바탕으로 주관적으로 작성한 것이기 때문에, 틀리거나 오류가 있을 수 있습니다!!!  FND Control FND 출력을 링카운터를 활용해 시프트 동작을 시켜 1110 -> 1101 -> 1011 -> 0111과 같은 동작을 반복하려고 한다. 따라서 다음과 같은 코드를 작성하였다. 코드를 살펴보면, reset이 발생하였을 때 1110으로 초기화된 후, clk_div_nedge가 발생할 때마다 1을 1비트씩 옆으로 이동하도록 하였다. 옆으로 이동하는 동작은 "else com = {com [2:0], 1'b1};" 문장에서 실행이 된다.  module ring_counter_fnd2( input clk, reset_p, output reg [3:0] com); ..

Language/Verilog 2024.07.17

Vivado : Basys3 7segment

이번에는 Basys3을 사용하여 7-segment를 제어하고자 한다. 7-segment의 구조는 아래와 같다.  4개의 스위치를 활용하여 4bit 스위치 역할을 수행하며, 세그먼트를 제어할 예정이다. 따라서 코드의 초반에는 '[3:0] hex_value'와 같이 선언하였다. 세그먼트 제어는 직관적으로 변경을 할 것이며, 따라서 비트를 하나하나 선언하여 변경할 것이다.세그먼트를 제어할 때에는 1이 주어지면 LED는 점등을 하며, 0이 주어질 시 꺼지는 동작을 수행한다.  구현된 코드는 아래와 같다.module decoder_7seg( input [3:0] hex_value, output reg [7:0] seg_7); always @(hex_value)begin case..

Language/Verilog 2024.07.16

Vivado : Edge Detector, Shift Register(SISO, SIPO, PISO, PIPO)

Edge Detector Positive Edge Detector Positive 동작은 아래의 그림으로 설명된다.  Clock이 인가되며, cp의 값이 1이 되는 동안 Clock가 posedge일 때 Current는 1이 된다.Current가 1인 동안 Clock이 posedge 되는 순간 old는 1로 변경된다. Positive Edge detector의 코드는 아래와 같다.module edge_detector_p( input clk, reset_p, input cp, output p_edge, n_edge); reg ff_cur, ff_old; //flip flop current always @(posedge clk or posedge reset_p)begin ..

Language/Verilog 2024.07.16

Vivado : 동기식 카운터

Positive 업 카운터module up_counter_p( input clk, reset_p, enable, output reg [3:0] count); always @(posedge clk or posedge reset_p)begin if(reset_p)count=0; else if(enable)count=count + 1; end endmodule Vivado에서는 C언어와 같이 증감 연산자를 사용할 수 없기 때문에 count = count + 1과 같이 코딩한다. 시뮬레이션을 진행할 때, Reset 값에 1을 인가한 뒤 0으로 인가해주어야만 정상적인 동작을 수행한다.Reset을 하지 않으면, 그전에 어떤 값이 들어있는지 모르기 때문..

Language/Verilog 2024.07.12

디지털 회로 실험 : 인코더, 디코더

이번에는 인코더와 디코더에 대해서 다룰 예정이다.인코더인코더(Encoder)는 여러 개의 입력 중에서 신호가 주어진 입력의 정보를 코드로 변환하는 디지털 회로를 의미한다.이번에 다를 인코더는 4 to 2 인코더로, 4개의 입력에 따른 2비트 코드출력으로 구성된다. 4 to 2 인코더의 진리표는 아래와 같다.D0D1D2D3코드AB100000010001001010000111 진리표를 바탕으로 논리식을 도출해 내면 아래와 같다. A = (D0 + D1)'(D2 ⊕ D3),  B = (D0 + D2)'(D1 ⊕ D3) 도출한 논리식을 토대로 회로를 구성하면 아래와 같다.   회로를 시뮬레이션하게 되면 아래와 같은 결과가 도출된다.  시뮬레이션 결과는 위의 진리표와 동일한 것을 확인할 수 있다. 디코더디코더는 인..

Tool/PSpice 2024.07.08
728x90