基于FPGA的波形发生器设计

该博客介绍了一种基于Spartan6 FPGA开发板的波形发生器设计,利用lcd1602液晶显示器和TLC5615 DAC模块。设计通过MATLAB生成波形数据的ROM查找表,并提供了包括dds_top.v、button_bind.v等关键模块的代码,但未进行实际硬件调试。工程文件和仿真图可供下载。
摘要由CSDN通过智能技术生成

用Spartan6的FPGA开发板实现,外接lcd1602液晶显示和TLC5615 dac数模转换模块。仅通过仿真未在实物上调试过。使用matlab生成波形数据的ROM查找表方法设计。

目录

dds_top.v

button_bind.v

dds_ctrl.v

lcd1602.v

dac_module.v

工程图

仿真图

工程文件


dds_top.v

`timescale 1ns / 1ps
//不带矩阵键盘的顶层
module dds_top(
    input               clk50m      ,   //系统时钟50MHz
    input               rstn        ,   //系统复位低有效
    
    input               key_rang    ,   //调幅
    input               key_freq    ,   //调频
    input               key_phas    ,   //调相
    input               key_wave    ,   //调波
    
    output              lcd_rs      ,   //0:命令,1:数据
    output              lcd_rw      ,   //0:写,1:读
    output              lcd_en      ,   //下降沿执行
    output    [7:0]     lcd_data    ,   //8位双向并行数据
    
    output              ad_sclk     ,   //dac的spi接口
    output              ad_sdata    ,   //dac的spi接口
    output              ad_cs           //dac的spi接口
);
    
    wire [2:0]       Rang_word ;    //幅度控制字,初始值为1
    wire [14:0]      Freq_word ;    //频率控制字,初始值为1
    wire [11:0]      Phas_word ;    //相位控制字,初始值为1
    wire [1:0]       Wave_word ;    //波形控制字,初始值为0
    
    wire            fclk;           //dds的工作时钟
    wire            fclk_locked;    //fclk稳定标志
    wire            flag_keypress;  //按键按下标志,打一拍
    wire [9:0]      wave_data;      //dds输出波形数据
    
    
    //==========================fclk_gen======================//
    //功能:用来生成dds工作时钟
    
    fclk_gen fclk_gen_inst(
        .CLK_IN1    (   clk50m      ),
        .CLK_OUT1   (   fclk        ),
        .RESET      (   !rstn       ),
        .LOCKED     (   fclk_locked )
    );
    
    
    //=========================button_bind=======================//
    //功能:给按键绑定控制字步进
    
    button_bind button_bind_inst(
        .clk50m         (   clk50m          ),
        .rstn           (   rstn            ),
        .ikey_rang      (   key_rang        ),
        .ikey_freq      (   key_freq        ),
        .ikey_phas      (   key_phas        ),
        .ikey_wave      (   key_wave        ),
        .oRang_word     (   Rang_word       ),
        .oFreq_word     (   Freq_word       ),
        .oPhas_word     (   Phas_word       ),
        .oWave_word     (   Wave_word       ),
        .oflag_keypress (   flag_keypress   )
    );
    
    //========================dds_ctrl============================//
    //生成波形
    
    dds_ctrl dds_ctrl_inst(
            .clk50m             (   clk50m          ),
            .rstn               (   rstn            ),
            .fclk               (   fclk            ),
            .fclk_locked        (   fclk_locked     ),
            .iRang_word         (   Rang_word       ),
            .iFreq_word         (   Freq_word       ),
            .iPhas_word         (   Phas_word       ),
            .iWave_word         (   Wave_word       ),
            .owave_data         (   wave_data       )
    );
    
    //========================lcd1602============================//
    //功能:显示当前波形参数
    
    lcd1602 lcd1602_inst(
            .clk50m             (    clk50m     ),
            .rstn               (    rstn       ),
            
            .iflag_keypress     (    flag_keypress      ),
            .iRang_word         (    Rang_word          ),
            .iFreq_word         (    Freq_word          ),
            .iPhas_word         (    Phas_word          ),
            .iWave_word         (    Wave_word          ),
            
            .lcd_rs             (    lcd_rs             ),
            .lcd_rw             (    lcd_rw             ),
            .lcd_en             (    lcd_en             ),
            .lcd_data           (    lcd_data           )
    );
    
    //=====================dac_module=============================//
    //功能:模数转换
    
    dac_module dac_module_inst(
            .clk50m     (   clk50m      ),
            .rstn       (   rstn        ),
            
            .din_in     (   wave_data   ),
            .sclk       (   ad_sclk     ),
            .cs         (   ad_cs       ),
            .din_out    (   ad_sdata    )
            
    );
    
    
endmodule

button_bind.v

`timescale 1ns / 1ps

module button_bind(
    input               clk50m          ,   //系统时钟50MHz
    input               rstn            ,   //低有效复位
    input               ikey_rang       ,   //调幅按键
    input               ikey_freq       ,   //调频按键
    input               ikey_phas       ,   //调相按键
    input               ikey_wave       ,   //调波按键
    output reg [2:0]    oRang_word      ,   //幅度控制字,初始值为1
    output reg [14:0]   oFreq_word      ,   //频率控制字,初始值为1
    output reg [11
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值