- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《FPGA播放声音和音乐
这里我们将让我们的FPGA播放声音和音乐。我们从产生一个单频音开始。然后,逐步让它实现一些更加有趣的功能,例如播放警笛和曲子。
这个工程中用到的硬件器件包括:一块Pluto板、一个扬声器(speaker)以及一个1千欧姆的电阻(resistor)。
?
关于此硬件系统的一个更加正式的表示方法如下图所示:
?
振荡器(oscillator)产生一个固定频率输入到FPGA,FPGA将此频率分频后驱动一个I/O口。这个I/O口通过一个1千欧姆的电阻连接到一个扬声器。通过改变这个I/O口的输出频率,就可以使扬声器发出各种声音。
HDL(硬件描述语言)设计
这里将分三部分来描述它:
?第一部分 - 简单的哔哔声
?第二部分 - 警笛声
?第三部分 - 曲调
简单的哔哔声
FPGA 可以很容易就实现二进制的计数。让我们从一个16位的计数器开始。首先从25MHz的时钟开始,对于这个时钟信号,我们可以简单的应用计数器来实现“分频”。一个16位的计数器从0计到65535(一共65536个不同的值)。计数器的最高位将65536=381Hz的频率翻转。
对应的Verilog HDL语言如下所示:
代码
module?music(clk,?speaker); ??
input?clk; ??
output?speaker; ??
??
//?16位的2进制计数器 ??
reg?[15:0]?counter; ??
always?@(posedge?clk)?counter?=?counter+1; ??
??
//?使用计数器的最高有效位驱动扬声器 ??
assign?speaker?=?counter[15]; ??
??
endmodule??
计数器的最低有效位(counter[0])以12.5MHz的频率翻转,类似的counter[1]以6.125MHz的频率翻转,以此类推。我们使用最高有效位(counter[15])来驱动扬声器。这样就可以给扬声器输出一个很好的381Hz的方波。
A 调 (440Hz)
好了,与其产生一个随机的频率,为何不试试得到一个440Hz的频率。这个频率就是“A”调的频率。这样一来,我们需要将25MHz的信号56818分频,下面是对应的Verilog HDL代码。
代码
module?music(clk,?speaker); ??
input?clk; ??
output?speaker; ??
??
reg?[15:0]?counter; ??
always?@(posedge?clk)?if(counter==56817)?counter?=?0;?else?counter?=?counter+1; ??
??
assign?speaker?=?counter[15]; ??
??
endmodule??
问题来了,输出信号的频率虽然是希望的440Hz,但是其占空比不再是50%。因为低电平从0一直维持到32767(期间counter[15]等于0),而高电平则从32768维持到56817。这样输出信号中,高电平的占空比仅为42%。
最简单的得到50%占空比的办法是添加一个状态,使输出信号先28409分频(56818的一半),然后再2分频。以下是修改后的Verilog HDL代码。
代码
module?music(clk,?speaker); ??
input?clk; ??
output?speaker; ??
??
reg?[14:0]?counter; ??
always?@(posedge?clk)?if(counter==28408)?counter?=?0;?else?counter?=?counter+1; ??
??
reg?speaker; ??
always?@(posedge?clk)?if(counter==28408)?speaker?=?~speaker; ??
??
endmodule??
添加一个参数
下面的代码跟上面的代码效果完全一样,一个名为“clkdivider”的参数被添加到代码中,而计数器则变为向下技术(这个只是个人爱好问题).
代码
module?music(clk,?speaker); ??
input?clk; ??
output?speaker; ??
parameter?clkdivider?=440/2; ??
??
reg?[14:0]?counter; ??
always?@(posedge?clk)?if(counter==0)?counter?=?clkdivider-1;?else?counter?=?counter-1; ??
您可能关注的文档
- 《Excel2007快捷键汇总.doc
- 《Excels使用技巧.doc
- 《exceltocad的表格转换.doc
- 《EXCELVBA~SQL 经典写法范本汇集.doc
- 《Excel2010数据清单管理及函数综合应用.docx
- 《Excel_2003板书.doc
- 《Excel_基础应用实验报告.doc
- 《Excel_电子表格运用技巧汇总.doc
- 《excel、Access、powerpoint、Word.在企.业管理.中的.高级.应用 2.doc
- 《excel、Access、powerpoint、Word.在企.业管理.中的.高级.应用.doc
- 奢侈品零售业2025年数字化营销工具创新与效果评估报告.docx
- 2025年零售行业自有品牌市场潜力与品牌战略研究报告.docx
- 脑机接口技术在智能机器人情感交互中的应用前景分析.docx
- 药品原辅料供应链风险管理2025:趋势分析与应对策略报告.docx
- 农村青年职业素养提升:2025年职业技能培训策略研究报告.docx
- 社交媒体平台舆情监测与危机公关策略优化与升级报告2025.docx
- 2025年家居行业线上线下融合趋势下的消费行为研究报告.docx
- 2025年夜间餐饮市场餐饮企业竞争策略研究报告.docx
- 2025年新能源汽车充电网络建设资金申请与投资策略研究报告.docx
- 城市更新中历史文化街区保护与社区文化设施建设报告.docx
最近下载
- 猪主要传染性腹泻病的流行情况与防控对策.docx
- 机电工程投标方案.docx VIP
- 人教PEP版小学英语五年级 下册(1-6单元)思维导图.pdf
- 国际金融附微课杜玉兰习题答案.docx VIP
- 2023年大连大学计算机科学与技术专业《计算机系统结构》科目期末试卷A(有答案).docx VIP
- 2023年大连大学计算机科学与技术专业《计算机网络》科目期末试卷B(有答案).docx VIP
- 知识产权法智慧树知到期末考试答案章节答案2024年同济大学.docx VIP
- 临床医学教学模式创新与课堂互动设计.pptx
- 生猪屠宰兽医卫生检验人员理论考试题库资料及答案.pdf VIP
- 天津市静海区2024-2025学年高一下学期6月学生学业能力调研试题 地理试卷含答案.docx VIP
文档评论(0)