DDS信号发生器 - 基于电赛综合训练板/小脚丫FPGA
在电赛综合训练板上实现高速DDS信号发生器的功能,1个旋转编码器和2个按键控制参数的输入,通过128 * 64的OLED显示参数信息以及菜单,FPGA连接高速DAC模块
标签
FPGA
测试
数字逻辑
显示
DDS
OLED
硬禾发布
更新2021-04-20
3852

持续更新中,敬请关注。。。。

 

在电赛综合训练板上实现高速DDS信号发生器的功能:

  • 1个旋转编码器和2个按键控制参数的输入
  • 通过128 * 64的OLED显示参数信息以及菜单
  • FPGA连接10bit/120Msps的高速DAC模块

FvrKoCeHzueVDQt-pB9v532AqErg

系统构成:

contest_training_dds_block.png

 

功能框图

以基于Lattice XO2-4000HC小脚丫的FPGA为例

contest_training_dds_logic.png

FPGA内部逻辑

主要Verilog模块:

contest_training_dds_modules.png

主要的Verilog模块

 

按键响应:

按键刚闭合的时候,会产生机械抖动,关于按键抖动的机制以及消抖的方法可以参见文章: Switch Bounce and How to Deal with It

在FPGA逻辑中处理按键消抖的基本原理:将键检测信号bt_pushed作为计数器的清零型号,当没有键按下的时候,bt_pushed为高电平,计数器一直处于清零状态,当按键按下的时候,bt_pushed变为低电平,计数器在时钟信号bt_check_clock作用下进行计数,代码如下:

module bt_debounce(bt_check_clk, bt_pushed, bt_out);
input bt_check_clk, bt_pushed;
output bt_out;

reg [4:0] q;
always @(posedge bt_check_clk)
  begin 
    if(bt_pushed == 1)
      begin q <= 5'b0000;
      end
    else if(q == 16)
      begin q <= 5'b1000;
      end
    else 
      begin q <= q+ 1'b1;
    end
  end
assign bt_out = ~q[4];

endmodule

分频模块

消抖电路需要频率约为1KHz的时钟信号,需要分频电路将锁相环输出的120MHz的时钟信号频率降到1KHz左右,可以通过17位的计数器来实现,217= 128*1024,经过17位计数器分频后得到的频率接近1KHz。Verilog代码如下:

module freq_bt_clk(main_clk, bt_check_clk)
input main_clk;
outout bt_check_clk;
reg [16:0]q;
wire bt_check_clk;

always @(posdge main_clk) q <= q + 1'b1;
 
assign bt_check_clk = q[16];

endmodule

十进制计数器

查表电路

DDS生成模块

DDS生成的机制详细介绍以及响应的代码可以参考DDS生成任意波形的方法及Verilog代码实例

OLED显示模块
 

参考文章:

团队介绍
苏州硬禾信息科技有限公司
团队成员
硬禾发布
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号