분류 전체보기 46

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

디지털 회로 실험 : 멀티플렉서, 디멀티플렉서

이번에는 멀티플렉서와 디멀티플렉서에 대해 다뤄볼 예정이다. 멀티플렉서멀티플렉서는 여러 입력 데이터 중에서 하나를 선택하는 조합 논리회로를 의미한다. 이번에 다룰 멀티플렉서는 4입력 멀티플렉서로, 4개의 데이터(D0 ~ D3) 중 하나를 선택하여 출력 X로 내보낸다. 선택을 할 때에는 선택 신호(S1, S2)가 사용된다.  입력 데이터선택 신호XS1S2D0 ~ D300D001D110D211D3 위 표는 4입력 멀티플렉서의 진리표를 나타내며, 선택 신호에 따라 데이터 D0 ~ D3 중에서 하나가 출력 X에 나타난다. 진리표를 바탕으로 논리식을 구하면 다음과 같다. D0 = S1'S2',  D1 = S1'S2,  D2 = S1S2',  D3 = S1S2 도출한 논리식을 바탕으로 회로를 구현하면 아래와 같은 회..

Tool/PSpice 2024.07.08

디지털 회로 실험 : 가산기, 감산기

이번에는 가산기와 감산기에 대해 다뤄볼 예정이다.가산기가산기는 두 개의 2진수를 더하는 동작을 수행하며 두 개의 입력을 받고 두 개의 출력을 내보낸다.두 개의 출력은 합(Sum)과 자리올림(Carry)으로 구성되어 있다. 일반적으로 가산기라하면 전가산기(Full Adder)를 말하며, 전가산기 외에도 반가산기가 존재한다.전가산기는 두개의 반가산기로 구성이 되며, 1비트의 2진수를 더할 수 있다. 전가산기의 진리표는 아래의 표와 같다.ABCiSCo0000000110010100110110010101011100111111 진리표를 바탕으로 논리식을 구성해보면 S = ( A ⊕ B ) ⊕ Ci,  Co = AB + Ci( A  ⊕ B )가 되는 것을 확인할 수 있다. 아래의 회로는 위 논리식을 바탕으로 구성한 ..

Tool/PSpice 2024.06.30
728x90