본문 바로가기

FPGA

[FPGA] Prescale Memory + Buzzer

Editor : Vivado 2020.2

FPGA Board : Cmod A7-35t (xc7a35tcpg236-1)

AVR Board : ATmega128A


[ 요구사항 ]

1. 분주비를 Memory 에 저장하고 저장된 분주비에 따른 Buzzer 출력

2. 분주비 : 16bit , Memory Address : 0 (8bit), 1 (8bit)

3. PWM duty rate = 50%

 


1. 구조 다이어그램

 

2. Timing Chart (Prescaler Memory)

 

cs(chip select) : Low 일때 동작

Addr : register 의 주소값

Pres_val [7:0] : 분주비 Data 값

clk : Addr 와 Pres_val 동기화 clock

 

3. Vivado  Top Code

1) PWM_MEM_Gen.v

`timescale 1ns / 1ps

module PWM_MEM_Gen(
    input sysclk,
    input i_en,
    input i_addr,
    input i_cs,
    input [7:0] i_pres_value,
    input i_clk,
    output o_pwm_clk
    );
    
    prescaler(
        .sysclk(sysclk),
        .o_100khz_clk(w_100khz_clk)
    );
    
    wire w_100khz_clk;
    
    pwm_gen(
        .i_en(i_en),
        .i_clk(w_100khz_clk),
        .i_value(w_value),
        .o_pwm_clk(o_pwm_clk)
    );
    
    wire [15:0]  w_value;
    
    PWM_Reg(
        .i_cs(i_cs),
        .i_addr(i_addr),
        .i_pres_value(i_pres_value),
        .i_clk(i_clk),
        .o_pres_reg(w_value)
        );
    
endmodule

 

4) 측정값 ( OSCILLOSCOPE)

분주비 : 1kHz 로 설정

 

5) 동작영상

 

 

'FPGA' 카테고리의 다른 글

[FPGA] AVR+FPGA+LCD Shift register 설계  (0) 2021.11.12
[FPGA] FPGA+AVR Buzzer_Motor 동작 구현  (0) 2021.11.10
[FPGA] FPGA + AVR 연동 UpCounter  (0) 2021.11.09
[FPGA] IP Package 하기  (0) 2021.11.09
[FPGA] Watch + Fan  (0) 2021.11.06