0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习系列:38. 电子琴的设计

FPGA学习交流 2018-09-26 12:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

设计背景:

FPGA的学习也算是是一种日积月累才能有成就的过程,前面我们学习了各个模块,各个芯片的配置等等,之后笔者通过两个简单的例子来让大家去系统的学习和认识FPGA。所学习的电子琴设计也算是一次简单的各个模块的联系调用的一个过程,对以后工作中的学习有很好的帮助。

设计原理:

本次的设计主要是通过控制ps2键盘来使蜂鸣器发出哆来咪法嗦拉西7种音来,音符主要又高低音等等,本设计只选择发出高音的多来咪发嗦啦西。本设计中还用到了VGA的设计,通过VGA来在显示屏上画出如下图的黑白的电子琴键:


当按下多来咪发嗦啦西时,对应的键值变颜色表示按下,不变色表示不按下,颜色自己可以调节,但是琴的按键必须为黑白色来显示出来。

当按下按键的时候,蜂鸣器来鸣响对应时间的音符,本设计蜂鸣器响的时间为0.25S一个音符持续的时间。

本次设计用到的PS2和VGA的设计原理笔者在这里就不过多的介绍了,不明白的可以翻看前面发的文档内容。

在本设计中介绍蜂鸣器的使用和各音符发声的频率大小。本设计用的是无源蜂鸣器,原理图如下:

image.png

由于FPGA的驱动能力不够,我们添加了一个三极管来驱动这个无源蜂鸣器,而无源蜂鸣器的主要特点是内部不带振荡源,所以如果使用直流信号是无法使无源蜂鸣器鸣叫的,必须使用方波去驱动它。

现在我们明白了,只要往蜂鸣器发送一定频率的方波,就可以使得蜂鸣器发出声音,然后现在的问题是,我们究竟要往蜂鸣器发送什么频率的方波信号呢?具体的频率可以查看下图:

现在我们知道了如何让蜂鸣器响起,又知道发送什么频率可以让蜂鸣器响起什么的声音,所以我相信我们已经有能力让蜂鸣器响起我们需要的音乐了。

image.png


设计架构图:

image.png

设计代码:

顶层模块

0modulemusic_ps2(clk,rst_n,hs,vs,r_g_b,ps2_clk,ps2_data,beep);

1

2 inputclk;

3 inputrst_n;

4

5 outpuths;

6 outputvs;

7 output[7:0]r_g_b;

8 outputbeep;

9

10 inputps2_clk;

11 inputps2_data;

12

13 wireflag;

14 wire[7:0]data,data_n;

15 wireclk_1M;

16

17

18 frenp frep_dut(

19 .clk(clk),

20 .rst_n(rst_n),

21 .clk_1M(clk_1M)

22 );

23

24 ps2_rec rec_dut(

25 .clk(clk_1M),

26 .rst_n(rst_n),

27 .ps2_clk(ps2_clk),

28 .ps2_data(ps2_data),

29 .flag(flag),

30 .data(data)

31 );

32

33 decode decode_dut(

34 .clk(clk_1M),

35 .rst_n(rst_n),

36 .flag(flag),

37 .data(data),

38 .data_n(data_n)

39 );

40

41 music music_dut(

42 .clk(clk_1M),

43 .rst_n(rst_n),

44 .data_n(data_n),

45 .beep(beep)

46 );

47

48 vga vga_dut(

49 .clk(clk),

50 .rst_n(rst_n),

51 .hs(hs),

52 .vs(vs),

53 .r_g_b(r_g_b),

54 .data_n(data_n)

55 );

56

57endmodule

蜂鸣器模块

0modulemusic(clk,rst_n,data_n,beep);端口列表

1

2 inputclk;

3 inputrst_n;

4 input[7:0]data_n;//输入的键值

5 outputregbeep;//蜂鸣器

6

7 reg[10:0]music_data;

8 wire[10:0]data;

9

10 always@(posedgeclk)

11 if(!rst_n)

12 begin

13 music_data <=0;

14 end

15 else

16 case(data_n)

17 1 : music_data <=478;//蜂鸣器的高音1

18 2 : music_data <=425; //蜂鸣器的高音2

19 3 : music_data <=379; //蜂鸣器的高音3

20 4 : music_data <=358;//蜂鸣器的高音4

21

22 5 : music_data <=319; //蜂鸣器的高音5

23 6 : music_data <=284; //蜂鸣器的高音6

24 7 : music_data <=253; //蜂鸣器的高音7

25 default:music_data <=0;

26 endcase

27

28

29 reg[20:0]count,cnt;

30

31 always@(posedgeclk)

32 if(!rst_n &&!data_n)

33 begin

34 count <=0;

35 end

36 else

37 if(count <250_000-1)

38 begin

39 count <=count +1;

40 end

41 else

42 begin

43 count <=0;

44 end

45

46 //计数0.25S的时间

47 assigndata =(count ==250_000-1)?music_data :data;

48

49 always@(posedgeclk)

50 if(!rst_n)

51 begin

52 cnt <=1;

53 beep <=0;

54 end

55 else

56 if(data ==0)//控制蜂鸣器不响

57 begin

58 cnt <=1;

59 beep <=0;

60 end

61 elseif(cnt <data)//计数对应的频率

62 begin

63 cnt <=cnt +1;

64 end

65 else

66 begin

67 cnt <=1;//蜂鸣器响

68 beep <=~beep;

69 end

70

71

72

73endmodule

代码验证正确无误,笔者在这边就不过多的验证,大家可以自主的补全代码,后续代码会在论坛中发出来供大家参考个学习。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1656

    文章

    22298

    浏览量

    630496
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Altera Agilex 5系列FPGA与SoC产品荣膺2025全球电子成就奖

    近日,全球 FPGA 创新技术领导者 Altera 的 Agilex 5 FPGA 与 SoC 产品系列,荣获 2025 年 AspenCore 全球电子成就奖(WEAA)的处理器/D
    的头像 发表于 12-03 11:13 597次阅读

    DAC38RF83技术手册

    DAC38RFxx 是一系列高性能、双通道/单通道、14 位、9GSPS 射频采样数模转换器 (DAC),能够合成 0 至 4.5 GHz 的宽带信号。高动态范围使 DAC38RFxx 系列
    的头像 发表于 11-10 09:37 314次阅读
    DAC<b class='flag-5'>38</b>RF83技术手册

    DAC38RF93技术手册

    DAC38RFxx 是一系列高性能、双通道/单通道、14 位、9GSPS 射频采样数模转换器 (DAC),能够合成 0 至 4.5 GHz 的宽带信号。高动态范围使 DAC38RFxx 系列
    的头像 发表于 11-07 15:34 393次阅读
    DAC<b class='flag-5'>38</b>RF93技术手册

    DAC38RF80 系列技术文档核心总结

    DAC38RFxx 是一系列高性能、双通道/单通道、14 位、9GSPS 射频采样数模转换器 (DAC),能够合成 0 至 4.5 GHz 的宽带信号。高动态范围使 DAC38RFxx 系列
    的头像 发表于 11-07 14:47 437次阅读
    DAC<b class='flag-5'>38</b>RF80 <b class='flag-5'>系列</b>技术文档核心总结

    DAC38RF86技术手册

    DAC38RF86/96 是一系列高性能、双通道、14 位、9GSPS、射频采样数模转换器 (DAC),能够合成 0 至 4.5 GHz 的宽带信号。DAC38RF87/97 还是一个高性能、双通道
    的头像 发表于 11-07 14:18 446次阅读
    DAC<b class='flag-5'>38</b>RF86技术手册

    SkyOne® Ultra 2.0 前端模块,用于 FDD/TDD LTE 频段 7、30、38、40、41 skyworksinc

    电子发烧友网为你提供()SkyOne® Ultra 2.0 前端模块,用于 FDD/TDD LTE 频段 7、30、38、40、41相关产品参数、数据手册,更有SkyOne® Ultra 2.0
    发表于 10-21 18:30
    SkyOne® Ultra 2.0 前端模块,用于 FDD/TDD LTE 频段 7、30、<b class='flag-5'>38</b>、40、41 skyworksinc

    FPGA在机器学习中的具体应用

    随着机器学习和人工智能技术的迅猛发展,传统的中央处理单元(CPU)和图形处理单元(GPU)已经无法满足高效处理大规模数据和复杂模型的需求。FPGA(现场可编程门阵列)作为一种灵活且高效的硬件加速平台
    的头像 发表于 07-16 15:34 2642次阅读

    Altera Agilex 7 M系列FPGA正式量产出货

    近日,全球 FPGA 创新技术领导者 Altera 宣布, Agilex 7 M 系列 FPGA 正式量产出货,这是现阶段业界领先的集成高带宽存储器,并支持 DDR5 和 LPDDR5 存储器技术
    的头像 发表于 04-10 11:00 1208次阅读

    DS28E38 adi

    电子发烧友网为你提供ADI(ADI)DS28E38相关产品参数、数据手册,更有DS28E38的引脚图、接线图、封装手册、中文资料、英文资料,DS28E38真值表,DS28E
    发表于 03-10 18:55
    DS28E<b class='flag-5'>38</b> adi

    38-1 FCO-3C-LE√

    电子发烧友网站提供《38-1 FCO-3C-LE√.pdf》资料免费下载
    发表于 02-27 14:50 0次下载

    【国产FPGA入学必备】刀剑在鞘,兵器先藏 | 盘古676系列国产FPGA开发板

    刀剑在鞘,兵器先藏 ,AI时代如何立足,首先有过硬的本领和趁手的兵器,给FPGA工程师安利一款趁手的国产FPGA开发板盘古676系列...... 盘古676系列开发板共有2款板卡:盘古
    发表于 02-20 15:38

    flash MP3语音IC芯片厂介绍儿童电子琴智能语音方案

    现在儿童乐器都会配各种音效,这些语音方案是如何实现的呢,是使用了什么语音ic芯片呢,今天语音ic公司九芯电子给大家说一说N9300儿童乐器方案。儿童电子琴智能语音方案主要依赖于特定的语音芯片,‌如
    的头像 发表于 02-07 18:31 794次阅读
    flash MP3语音IC芯片厂介绍儿童<b class='flag-5'>电子琴</b>智能语音方案

    基于FPGA电子琴设计

    过简单的例子来让大家去系统的学习和认识FPGA。本次的电子琴设计也算是一次简单的各个模块的联系调用的一个过程,也可以帮助各位去加深理解,多动手,熟练掌握会有意想不到的效果。
    的头像 发表于 01-20 14:07 1256次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>电子琴</b>设计

    DAC38J84 SYSREF的时钟频率如何确定?

    最近在使用JESD204B协议,遇到一下问题。我使用的是FPGA与DAC38J84。 1:有关SYSREF时钟问题,DAC的时钟为1.2GHz, FPGA中JESD204B IP核配置为发射
    发表于 01-06 08:08

    DAC38J84使用JESD与FPGA对连,CGS阶段过不去怎么解决?

    DAC使用DAC38J84,FPGA使用Xilinx ZYNQ7045。 只想使用DAC输出的A-Channal输出,LMF配置的是841,实际上DAC与FPGA只有4条LANE连接在一起 在
    发表于 12-27 06:03