FPGA (13) 썸네일형 리스트형 [FPGA] 13. Basys3에서 HC-SR04(초음파 센서) 모듈 동작 (TRIG OUTPUT/ECHO INPUT 제어) [FPGA] 12. 디지털 논리 회로 레지스터 1. 레지스터란? 레지스터(register)는 순차논리회로에서 사용되는 기본적인 구성 요소 중 하나이다. 레지스터는 디지털 시스템에서 데이터를 저장하고 처리하는데 사용된다. 레지스터는 보통 비트(bit) 단위로 구성되며, 각 비트는 0 또는 1의 값을 저장할 수 있다. 이를 이용하여 카운터, 가산기 등을 이용한 다양한 데이터 처리 회로를 만들 수 있다. 2. 레지스터의 종류 D플립플롭을 이용한 레지스터는 크게 직렬입력 - 직렬출력, 직렬입력-병렬입력, 병렬입력-직렬출력, 병렬입력-병렬입력 4가지가 있다. 직렬의 경우는 단 하나의 신호선으로 입,출력하는 것이고, 병렬은 여러개의 신호선으로 입,출력 하는 것이다. 자세한 내용과 구조는 아래에서 알아보자. 3. Verilog에서 직렬입력-직렬출력 D플립플롭 4.. [FPGA] 11. 플립플롭과 카운터를 이용하여 Basys3 스톱워치 만들기 1. 스톱워치를 만들기 위한 기본 Flow 및 코드 작성 개괄적인 구상은 다음과 같다. 버튼0(start), 버튼1(lap), 버튼2(clear) 총 세 개를 이용해서 스톱워치를 제어할 것이다. FND 상위 2개는 분(minute), 하위 2개는 초(second)를 나타낸다. 버튼 세 개는 D플립플롭을 통해 Start/Stop과 lap 버튼을 입력으로 주고, 딜레이를 통해 버튼의 바운싱을 제거해서 안정적으로 출력된 Q를 이용한다. 그리고 Q로부터 나온 출력 값을 다시 T플립플롭의 클락으로 입력하여, T플립플롭의 특성을 이용해 On/Off를 구현한다. 한 번 누를 때마다 Q값이 반전될 것이다. 다음 T플립플롭으로부터 나온 각 버튼의 Q값을 always문의 sensitive list로 작동하여 하강엣지일 때.. [FPGA] 10. Basys3의 LED와 FND를 이용한 10진 카운터 실습 1. 10진 카운터를 버튼을 눌러 증가시키고 Basys3의 LED와 FND를 통해 출력해보기 코드는 아래와 같다. module btn_click_counter( input button, output [3:0] com_an, output [6:0] seg_7, output [3:0] led ); wire [3:0] count_value; assign led = count_value; up_counter_sync_BCD ucounter( .clk(button), .reset_n(1),.count(count_value)); decoder_7_seg(.hex_value(count_value), .seg_7(seg_7), .com_an(com_an)); endmodule 코드는 매우 간단하다. 지난 시간에 만들었.. [FPGA] 9. 래치(Latch)와 플립플롭(Flip-Flop) 1. SR 래치와 SR 플립플롭 SR 래치와 SR 플립플롭은 모두 디지털 논리 회로에서 가장 기본이 되는 요소이다. 먼저 이들을 설명하기 이전에 이 회로의 목적은 간단하게 말해서, 메모리와 같이 입력한 데이터를 저장할 수 있는 저장소자로 쓰기 위한 것을 알아야 한다.여기서 래치란 클럭을 사용하지 않는 비동기 방식을 래치라고하고, 플립플롭은 클럭을 사용하는 동기방식이다. 먼저 SR 래치를 알아보자. SR 래치는 클럭을 사용하지 않는다. 먼저 입력 값이 새로 들어오면 즉각적으로 출력 값을 내보낸다. 정확한 비동기 방식의 특성이다. 그러나 S(Set)과 R(Reset)이 동시에 둘 다 1인 상태로 들어오면 회로 특성에 의해 오실레이터와 같이 순간 발진을 하게된다. 이러한 불안정성 때문에 단독으로 회로에서 쓰이.. [FPGA] 8. 2진수를 BCD코드로 변환 프로그램을 Basys3에서 구현하기 1. BCD 코드란? BCD(Binary Coded Decimal) 코드는 10진법 숫자를 2진법으로 표현하는 방식 중 하나이다. BCD 코드는 4비트(1자리수) 단위로 표현되며, 각 4비트는 0부터 9까지의 숫자를 나타낸다. 즉, 0000은 0, 0001은 1, 0010은 2, ..., 1001은 9를 나타낸다. 예를 들어, 105를 표현한다고 하면, 4비트씩 끊어서 2진수로 표현해야 한다. 105(dec) = 0001 0000 0101(bcd) 1 0 5 이렇게 된다는 것이다. 이쯤하고 다음 단계로 넘어가자. 2. 2진수를 BCD코드로 변환하는 Verilog 프로그램 코딩 2진수를 BCD코드로 구현하는 것이 매우 어려웠다. 이산수학이 필요한데, 일단 코드를 먼저 보고 왜 Always문에서 이러한 코드.. [FPGA] 7. 멀티플렉서와 디멀티플렉서 1. 멀티플렉서(Multiplexer) 멀티플렉서란 다수의 입력신호중 하나를 선택해서 보내주는 기능을 가지고 있다. 예를 들어, 핸드폰에 8개의 전화번호가 저장되어 있고, 각각을 1부터 8까지 순서대로 저장했다고 가정하자. 만약 숫자 버튼 1을 꾹 누르면 첫 번째로 저장된 곳 전화가 걸릴 것이고,숫자 버튼 2를 꾹 누르면 두 번째로 저장된 곳 전화가 걸릴 것이다. 결국 n개의 입력 신호 중 하나의 입력 신호를 선택하면 하나의 신호로 출력이 될 수 있게 해주는 것을 멀티플렉서라고 한다. 위 사진은 멀티플렉서를 그림으로 나타낸 사진이다. 보낼 각 주소의 데이터와 신호선 두 가닥을 이용하여 8개의 데이터 중 하나를 선택하여 보낼 수 있다. 이를 Verilog로 구현하면 다음과 같다 module mux_8_1_.. [FPGA] 6. Basys3 두 개로 Encoder <--> Decoder 구현 / 7-SEG Decoder 구현 지난 글에서 Basys3를 이용하여 4Bits 전가산기를 구현해보았다. 이번 글에서는 첫 번째로, Basys3 두 개로 한 쪽에서는 Encoder , Basys3 한 쪽에서는 Decoder의 역할을 지정하여 Decoder 쪽에서 스위치 0번부터 스위치 3번으로 반대편 Decoder의 LED로 버튼의 상태를 체크하도록 구현할 것이다. 통신 방법은 JA포트의 0번과 1번에 점퍼선을 연결하여 통신할 것이다. 두 번째로는 FND를 이용하여 Decoder를 구현할 것이다. 1. Encoder와 Decoder의 코드 작성 먼저 각 Basys3에 입력할 Encoder와 Decoder의 코드를 작성하겠다. `timescale 1ns / 1ps module encoder_4_2( input [3:0] D, output .. 이전 1 2 다음 목록 더보기