FPGA入门系列实验教程——蜂鸣器发出警车鸣笛声.pdf

5048.com_【官方首页】-v8彩票艾米电子工作室FPGA入门系列实验教程 FPGA 入门系列实验教程V1.0 前言 目前市场销售FPGA 开发板的厂商很多,但大多只提供些简单的代码,没有 详尽的文档和教程提供给初学者。经验表明,很多学生在学习FPGA 设计技术的 过程中,虽然刚开始学习热情很高,但真正坚持下来一直到“学会”的却寥寥无 几,除了学生个人毅力的因素外,另外一个更主要的原因就是所选的开发板缺少 配套的说明文档和手把手系列的入门教程。原本FPGA 的学习门槛相对于单片机 来说就高了不少,再加上缺少手把手系列教程资料,这就给初学者学习FPGA 兴趣和信心。作者从接著到系统学习FPGA 有两年多的时间了,学习FPGA 的时间不长, 期间因为没有专业的老师指导,自己摸索学习FPGA 走了很多的弯路。有过问题 迎刃而解的快乐,也有过苦苦寻求结果和答案的痛苦历程,回想起自己学习 FPGA 的历程,从开始的茫然,到后来的疯狂看书,购买开发板,在开发板上练 习各种 FPGA 实例,到最后能独立完成项目,一路走来,感受颇多。发觉学习 FPGA 只要选择正确的方法是有捷径可走的,有很多人学习 FPGA 很长时间, 因为没有找到正确的方法还是停留在入门阶段。5048.com_【官方首页】-v8彩票 针对现状,作者从初学者的角度出发,结合作者学习FPGA 的经验和亲身体 会,遵循“宁可啰嗦一点,也不放过细节”的原则编写了详尽的实验教程作为艾 米电子工作室开发套件的配套教程使用,主要面向FPGA 初学者。FPGA 的学习 只有通过大量的操作与实践才能很好并快速的掌握。5048.com_【官方首页】-v8彩票为此本实验教程从点亮LED 灯写起,深入浅出,以图文并茂的方式由易到难地列举了很多实例,采用手把手、 Step Step的方式让初学者以最快的方式掌握 FPGA 技术的开发流程以及 Quartus II 软件的使用,从而激起初学者学习FPGA 的兴趣。在教程中作者采用 “授人以渔”的方式,努力做到不仅讲述怎样进行试验,而且分析为什么这样做, 以便初学者深刻理解并快速掌握FPGA 的学习方法。 本实验教程的所有实例均在艾米电子工作室开发套件上验证通过,本教程虽 然简单但编写也花费了作者大量的时间和精力,对于转载需要注明出处: http://www.amy-studio.com(艾米电子工作室 作者:静水流深),并未经艾米电子 工作室同意不得用于其他商业用途。5048.com_【官方首页】-v8彩票 FPGA 技术是不断发展变化的,要掌握FPGA 技术的精髓,需要设计者在实 践中不懈地摸索与积累,逐步提高自己的设计水平,本实验教程试图对初学者起 到快速入门的作用。但由于作者学习FPGA 时间不长,水平有限,错漏和不严谨 之处在所难免,欢迎大家批评指正。并请您将阅读中发现的错误或建议发送到作 者Email:zhoujie9220@163.com,以使本教程不断地完善。5048.com_【官方首页】-v8彩票 艾米电子工作室—让开发变得更简单 http://www.amy-studio.com FPGA 入门系列实验教程——蜂鸣器发出警车鸣笛声 实验任务实现开发板上的蜂鸣器发出警车鸣笛声。通过这个实验,掌握采用 Verilog HDL 语言编程实现蜂鸣器发声的方法。5048.com_【官方首页】-v8彩票 实验环境硬件实验环境为艾米电子工作室型号EP2C8Q208C8 增强版开发套件。 软件实验环境为QuartusII 8.1 开发软件。 实验原理艾米电子工作室开发板板载50MHZ 的晶振,通过Verilog HDL 语言编程将 此频率分频后驱动一个I/O口。这个I/O口连接到一个交流蜂鸣器。5048.com_【官方首页】-v8彩票通过改 变这个I/O口的输出频率,就可以使蜂鸣器发出各种声音和音乐。5048.com_【官方首页】-v8彩票本次实验 实现蜂鸣器发出警车鸣笛声,问题现在变得比上个实验复杂起来。5048.com_【官方首页】-v8彩票我们需要 产生一个音调的变化,使之听起来像是警车的笛声。仍然从“tone”计数器开 始。我们仅使用 23 位,这样便可以得到两倍与前面的频率(最高有效位大 约以3Hz 的频率翻转)。 下面是如何产生变化的音调的技巧。使用一个寄存器“ramp”来表征当前的音 ...-2-1-0-1-2-3-...-127-126-125-...-2-1-0-1-2-... 。考虑“tone”计数器的 15 (tone[21:15]),这是一个在0 到127 之间循环递增的值,0-1-2-...-127-0-。5048.com_【官方首页】-v8彩票 再考虑这几位的反转,即~tone[21:15],这是一个在127-0 之间循环递减的值。 如果能控制 ramp 在这两个值之间来回切换,即可得到一个形 如...-0-1-2-...-127-126-125-...的计数器。而这个变化规律正好符合警车笛声的 音调变化规律。为了让 ramp 在这两个值之间来回切换,我们使用 tone[22] 来控制。可以这样考虑,tone[22: 15]从0 计数,对于前128 个值(0-127), tone[22]等于0,后128 个值(128-255),tone[22]等于1。于是我们就可以使 tone[22]来控制ramp 的取值,当 tone[22]等于 ramp等于 tone[21:15],当tone[22]等于1 时,让ramp 等于~tone[21:15]。这样一来ramp 就会在7b'0000000与7b'1111111之间来回变化. 为了得到一个对于产生声音 有用的值, 我们在其前面补上两位数据"01",并且在其尾部也补上 即"000000"。艾米电子工作室—让开发变得更简单 http://www.amy-studio.com 通过这样的处理,"clkdivider" 就拥有了一个在 15'b010000000000000 15'b011111111000000之间来回变化的值(或者以16 进制表示在15'h2000 16320之间变化)。当输入频率为50MHz 时,将产生频率在765Hz 到1525Hz 之间变化的音调,从而产生类似于警车 笛声的声音。 实验程序modulebeep(clk, beep); input clk; output beep; regbeep; reg[22:0] tone; reg[14:0] counter; always@(posedgeclk) begin tone<= tone+1; end wire[6:0] ramp= (tone[22] ?tone[21:15] ~tone[21:15]);wire[14:0] clkdivider {2'b01,ramp, 6'b000000}; always@(posedgeclk) if(counter==0) counter clkdivider;elsecounter counter-1;always@(posedgeclk) begin if(counter==0) beep<= ~beep; end endmodule 艾米电子工作室—让开发变得更简单 http://www.amy-studio.com 实验步骤(1)建立新工程项目: 打开 Quartus II 软件,进入集成开发环境,点击 FileNew project wizard 建立一个工程项目beep。 (2)建立文本编辑文件: 点击FileNew..在该项目下新建VerilogHDL 源程序文件beep.v,输入 试验程序中的源程序代码保存后选择工具栏中的 按钮启动编译,若 在编译中发现错误,则找出并更正错误,直到编译成功为止。 (3)选择器件型号及引脚的其他设置: 选择所用的FPGA 器件----EP2C8Q208C8,以及进行一些配置。选择配置 器件EPCS4,设置不需要使用的IO功能为Asinputs,tri-stated。点击两 次ok,回到主界面。 (4)配置FPGA 引脚: QuartusII 软件主页面下,选择 AssignmentsPins 或选择工具栏上 按钮,配置beep以及clk 的引脚。 (5)编译工程项目: 在QuartusII 主页面下,选择ProcessingStart Compilation或点击工具 按钮启动编译,直到出现“FullCompilation Report”对话框,点 击OK 即可。 (6)波形仿真:由于本次试验比较简单,波形仿真将在后面实验详细讲解。 (7)下载设计程序.sof 文件到目标FPGA,下载采用JTAG方式(由于配置芯 片擦写次数有限,实验均采用JTAG下载方式)。 艾米电子工作室—让开发变得更简单 http://www.amy-studio.com 实验现象开发板上的蜂鸣器发出警车鸣笛声。现在让我们在本实验的基础上如何让 FPGA 发出“高速追击”的声音。这个时候警笛声时快时慢。因此使用 "tone[21:15]" 来得到一个快速的变调,而使用 "tone[24:18]"来得到一个慢速 的变调。 带高速追击的警车鸣笛声程序modulebeep(clk, beep); input clk; output beep; regbeep; reg[27:0] tone; reg[14:0] counter; always@(posedgeclk) begin tone<= tone+1; end wire[6:0] fastsweep= (tone[22] ?tone[21:15] ~tone[21:15]);wire[6:0] slowsweep= (tone[25] ?tone[24:18] ~tone[24:18]);wire[14:0] clkdivider {2'b01,(tone[27] ?slowsweep: fastsweep), 6'b000000}; always@(posedgeclk) begin if(counter==0) counter clkdivider;elsecounter counter-1;end always@(posedgeclk) begin if(counter==0) beep<= ~beep; end endmodule

暂无简介

文档格式:
.pdf
文档页数:
5页
文档大小:
194.68K
文档热度:
文档分类:
IT计算机 --  软件工程
文档标签:
FPGA 入门系列 实验教程 蜂鸣器 发出警车 鸣笛声

更多>> 相关文档

页面底部区域 foot.htm