电子说
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文件中
重新编译并下载就可以了,其它歌曲一样的操作。
全部0条评论
快来发表一下你的评论吧 !