전체 글 129

[FSM] I2C_LCD_Control

목적I2C LCD 디스플레이 제어:FPGA에서 I2C 마스터 역할을 하여, LCD에 명령/문자를 전송LCD 초기화, 문자 출력, 화면 좌/우 이동 등 다양한 제어 명령을 구현버튼 기반 동작:4개의 버튼에 각각 LCD 동작을 할당버튼을 누르면 지정된 명령(문자 출력, HELLO 출력, 화면 이동 등)이 LCD로 전송하드웨어 수준 I2C 통신:MCU처럼 내부 I2C IP를 쓰지 않고, Verilog로 I2C 신호 생성(SCL, SDA)을 직접 구현I2C 통신의 각 단계를 FSM으로 하드웨어화사용 코드 _ 상위 모듈module i2c_txtlcd_top( input clk, reset_p, // 시스템 클록(예: 100MHz), 리셋(Active-high) input [3:..

[PWM]LED_128_Step

PWM_(Pulse Width Modulation) PWM이란 디지털 신호의 펄스 폭(ON 되는 시간)을 조절하여, 출력의 평균값이나 에너지를 조정하는 신호 처리 방식 디지털 신호(0 또는 1, ON/OFF)로 구성된 사각파(펄스)를 일정 주기로 반복적으로 출력한 주기(Period) 동안 신호가 1(ON)인 구간의 비율(%)을 듀티 사이클(Duty Cycle)이라한다.이 듀티 사이클을 변화시키면, 출력의 평균 전압 또는 전달되는 에너지의 양이 변한다. 목적Verilog를 이용하여 128단계의 PWM(Pulse Width Modulation) 신호를 생성하는 하드웨어 회로를 설계PWM이란 디지털 신호의 펄스 폭(ON 되는 시간)을 조절하여, 출력의 평균값이나 에너지를 조정하는 신호 처리 방식사용 코드_..

[FSM] Ultrasonic_sensor_(HC_SR04)

목적초음파 센서로부터 측정된 거리를 사용자에게 직관적으로 7세그먼트 디스플레이로 보여주는 임베디드 하드웨어 시스템을 Verilog로 구현하는 것 HC-SR04 제어trig를 통해 센서에 초음파 발사 신호를 주고echo 신호의 길이를 측정해 물체까지의 거리(cm)를 계산거리 = echo 시간(us) / 58 공식 사용.이진 거리 → BCD 변환계산된 거리 값은 이진(binary)로 저장7세그먼트에 표시하려면 BCD(Binary Coded Decimal)로 변환7세그먼트에 출력변환된 BCD 값을 4자리 7세그먼트 디스플레이에 반복적으로 출력하여 DatasheetDistance 공식사용 코드_ 상위 모듈module hc_sr04_top( input clk, // 시스템 클럭 입력 ..

[FSM] DTH11_Sensor

목적DHT11 센서의 신호 규격(1-wire 프로토콜)을 FPGA 등 디지털 회로에서 순수 하드웨어 논리(FSM, 타이머 등)로 직접 처리하여 온도와 습도 값을 읽어내는 것을 목적 DHT11 센서에 필요한 초기 신호 시퀀스를 하드웨어적으로 생성센서가 응답하는 타이밍을 정확히 감지(엣지 디텍터, 타이머 활용)40비트 데이터(습도 상/하위, 온도 상/하위, 체크섬)를 차례로 수신유효성 검사(체크섬)까지 하드웨어적으로 처리해 병렬 신호로 온습도 값을 출력FSM을 사용한 이유FSM(Finite State Machine) : 시스템의 동작 단계를 상태(state)로 나누고, 입력 조건에 따라 상태를 전이시키며, 각 상태별로 출력을 결정하는 논리적 구조를 의미한다.DHT11은 정해진 순서대로 신호를 주고, 정해진 ..

[Sequential_Circuit] edge_detector

목적입력 신호 cp의 상승 에지(0→1) 또는 하강 에지(1→0)가 발생하는 순간을 클럭(clk)에 동기화하여 감지하고,해당 순간에만 1클럭 동안 '1'을 출력하는 펄스 신호(p_edge, n_edge)를 생성입력 신호(cp)의 상승/하강 에지를 감지하여 클럭 동안 p_edge 또는 n_edge 출력이 1이 되도록 함. 클럭(clk)에 동기화된 순차 회로임사용 목적버튼 입력 처리FSM 입력 트리거스톱워치/타이머 시작_정지 제어카운터 트리거동기화 회로PWM 신호 측정사용 코드module edge_detector_p( input clk, reset_p, // clk: 시스템 클럭, reset_p: 비동기 초기화 신호 (양의 에지에서 리셋) input cp, ..

[Shift_Register] PIPO_(Parallel-In Parallel-Out)

목적여러 비트의 데이터를 한 번에 병렬로 입력(Parallel-In)하고, 내부 레지스터에 저장된 값을 한 번에 병렬로 출력(Parallel-Out)하는 시프트 레지스터이다. _ 입력: 비트를 병렬 입력 단자를 통해 한 번에 입력 _ 클록 신호: 클록이 들어올 때마다 입력 데이터 전체가 레지스터에 저장 _ 출력: 저장된 데이터가 각 비트 단자에서 동시에 병렬로 출력즉, 입력과 출력 모두 병렬이다. 사용 코드module shift_register_PIPO( input clk, // 클록 신호 (상승 에지에서 데이터 저장) input [7:0] d, // 8비트 병렬 입력 데이터 input rd_en, // 출력 활성화(..

[Shift_Register] PISO_(Parallel-In Serial-Out)

목적여러 비트의 데이터를 한 번에 병렬로 입력(Parallel-In)하고, 이를 한 비트씩 직렬로 출력(Serial-Out)하는 시프트 레지스터이다. 병렬 입력(Parallel-In):여러 개의 입력 핀을 통해 데이터를 한 번에 레지스터에 저장한다.일반적으로 ‘load’ 신호를 사용하여 병렬 데이터를 레지스터에 로드한다.직렬 출력(Serial-Out):병렬 입력 후, 클록 신호가 들어올 때마다 저장된 데이터가 한 비트씩 이동(시프트)하면서, 최하위 비트(보통 Q_out)에서 한 비트씩 출력됩니다. 사용 코드module shift_register_PISO( input clk, // 클록 신호 input [7:0] d, // 8비트 병렬 입력 데이터 inp..

[Shift_Register] SIPO_(Serial-In Parallel-Out)

목적직렬로 입력된 데이터를 병렬 데이터로 변환한다.한 비트씩 순서대로 들어오는 직렬(Serial)신호를 내부 레지스터에 차례로 저장한 뒤, 여러 비트를 한 번에 동시에 병렬(Parallel) 출력한다.데이터 버퍼/임시 저장: 데이터를 순차적으로 입력받고, 일정 시점에 한꺼번에 병렬로 처리하거나 출력 사용 코드module shift_register_SIPO_n( input clk, // 클록 신호 (데이터 이동 시점 결정) input d, // 직렬 입력 데이터 (Serial-In) input read_enable, // 병렬 출력 활성화 신호 (1이면 출력, 0이면 high-impedance) output [7:0] q ..

[Shift_Register] SISO_(Serial_in Serial_out)

목적직렬 입력 데이터를 CLK 신호에 맞춰 순차적으로 저장하고, 저장된 데이터를 직렬(Serial)로 출력하기 위한 4bit SISO Shift Register이다.외부에서 한 비트씩 순서대로 들어오는 데이터를 내부 4bit register에 차례애로 밀어 넣고, 맨 마지막에 도달한 데이터로부터 한 비트 씩 순서대로 출력하도록 만들어진 회로이다.사용 코드module shift_register_SISO_n( input clk, // 클록 신호 (데이터 이동 시점 결정) input reset_p, // 비동기식 리셋 입력 (active-high) input d, // 직렬 입력 데이터 output q // 직렬 출력 데이터); ..

[Baysys_3] Stop_Watch

목표시작 / 정지 토글lap time 표시clear1/100초 단위 시간 측정4자리 7세먼트 출력사용 코드module stop_watch( input clk, reset_p, // 시스템 클록, 비동기 리셋 (active high) input [2:0] btn, // 버튼 입력: [0] 시작/정지, [1] 랩, [2] 초기화 output [7:0] seg_7, // 7세그먼트 출력 제어 신호 (a~g, dp) output [3:0] com // 7세그먼트 공통 단자 제어); // 버튼의 네거티브 엣지(떼는 순간)를 감지하는 신호 wire btn_start, btn_lap, btn_clear; // 각..