ROM_IP的调用 用蜂鸣器播放歌曲

电子说

1.3w人已加入

描述

1.新建一个存储文件(mif文件)。

存储器

2.设定为256个存储单元,每个单元8位宽。

存储器

3.自行往每个单元中填充自己需要的数值。

存储器

4.保存到文件夹中。

存储器

5.查看生成的文件,上部分是注释,中间会显示单元个数和位宽,下部分是存储的数据。

存储器

6.调用ROM_IP核,按下图箭头顺序保存。

存储器

7.基本使用默认设置就行,注意单元个数和位宽与之前设定的要一样。

存储器

8.在初始化选项栏中,选择最初生成的mif文件,然后和之前PLL的调用一样,选择生成inst文件,点击finish,rom的调用到此结束。

存储器

9.下图是野火FPGA给的电路框图,用了两个按键,电路的效果为从1到256读取对应单元存储的数据并通过数码管显示出来,两个按键按下后,会分别从99和199开始往后读取,具体参考野火教程,这里不详细展开。

存储器

10.我这里选择通过在rom中存储《恭喜发财》的乐谱频率,使蜂鸣器播放歌曲。下面是网上找到的音调和频率的对应关系,我先是使用了野火给的蜂鸣器例程(例程是循环播放七个音节),只需要在原有基础上加一个rom就行,但是他给定的是0.5秒一个音调,播放恭喜发财就有点拖沓,修改成0.5秒又会有明显的停顿,至今没搞清楚为啥,所以我换成之前FPGA实验课上做的程序。

存储器

12.这是之前程序的顶层,由于器件不同,需要把调用的ip核都换掉。(需要程序的,拿到手,可以按以下流程操作)

存储器

13.首先新建一个工程,选定自己的器件,将这四个文件复制到自己的工程文件夹下。

存储器

14.按照上文给出的rom_ip调用,还有之前一篇pll_ip调用的方法,各自重新生成一个放到文件夹中,其中pll输出的时钟要改为12Mhz,并且在最后输出的选项卡中要勾选bsf文件,之后的顶层文件中要用,两个ip核的名字就按之前给出的写就行,否则自己还要到程序里再改一下,如下。

存储器

存储器

存储器

存储器

15.新建一个顶层的bdf文件。

存储器

16.在bdf文件的空白处双击,打开symbol栏,点击下方三个点,跳转到自己的文件夹,将复制的song.bsf,ctclk.bsf,还有新生成的pll.bsf都添加进来,然后按下图连线,此时编译成功就没问题了。

存储器

存储器

17.最后,按照自己的板子,搞定引脚,程序完成。

存储器

18.之后,只需要修改mif文件,就能播放自己要的歌曲,不过因为速度和音调会有些问题,有些效果可能不好。具体mif修改如下,以恭喜发财为例:

存储器

这里的11~17是七个音节,5,6,7是三个低音音节,如果需要其它的音节,需要自己计算。

存储器

根据乐谱画线的这一段,编出来的mif文件应该是下面这样的:

存储器

然后复制到mif文件中

存储器

重新编译并下载就可以了,其它歌曲一样的操作。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分