版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主要内容D任务实现A项目任务B项目目标C知识准备E考核评价F拓展提高A.项目任务项目任务ElectronicDesignAutomation
3
《EDA技术》…本项目利用FPGA器件和VerilogHDL语言设计一个音乐播放器,能够实现乐曲的播放功能,同时在音乐播放时能够显示音调符号及音的高低。B项目目标ElectronicDesignAutomation
4
《EDA技术》通过简易电子琴设计项目训练及相关知识学习,达到如下目标:1、理解简易电子琴设计方案2、了解Verilog中两种结构语句3、掌握Verilog函数和任务的语句格式4、能用函数和任务进行逻辑电路设计5、学会利用Verilog语言宏功能函数进行较高层次的设计6、能按照现场管理要求(整理、整顿、清扫、清洁、素养、安全、环保、节能)安全文明生产7、会查找相关资料8、会撰写项目报告并答辩9、具有团队合作精神,具有一定的组织协调能力C.知识准备1
结构说明语句Verilog语言中的任何过程模块都从属于以下四种结构的说明语句。1)initial说明语句2)always说明语句3)task说明语句4)function说明语句initial和always说明语句在仿真的一开始即开始执行。initial语句只执行一次。相反,always语句则是不断地重复执行,直到仿真过程结束。一、结构语句(1)initial语句initial语句的格式如下:initialbegin语句1;语句2;......语句n;end举例说明:initialbeginareg=0;//初始化寄存器aregfor(index=0;index<size;index=index+1)memory[index]=0;//初始化一个memoryendalways语句在仿真过程中是不断重复执行的。其声明格式如下:always<时序控制><语句>always语句由于其不断重复执行的特性,只有和一定的时序控制结合在一起才有用。
如果一个always语句没有时序控制,则这个always语句将会发成一个仿真死锁。如下:alwaysareg=~areg;
这个always语句将会生成一个0延迟的无限循环跳变过程,这时会发生仿真死锁。如果加上时序控制,则这个always语句将变为一条非常有用的描述语句。如下:always#half_periodareg=~areg;(2)always语句2task和function说明语句task和function说明语句分别用来定义任务和函数。利用任务和函数可以把一个很大的程序模块分解成许多较小的任务和函数便于理解和调试。输入、输出和总线信号的值可以传入、传出任务和函数。任务和函数有些不同,主要的不同有以下四点:1)函数只能与主模块共用同一个仿真时间单位,而任务可以定义自己的仿真时间单位。2)函数不能启动任务,而任务能启动其它任务和函数。3)函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量。4)函数返回一个值,而任务则不返回值。一、结构语句(1)task说明语句1)任务的定义定义任务的语法如下:任务:task<任务名>;<端口及数据类型声明语句><语句1><语句2>.....<语句n>endtask这些声明语句的语法与模块定义中的对应声明语句的语法是一致的。2)任务的调用及变量的传递启动任务并传递输入输出变量的声明语句的语法如下:任务的调用:<任务名>(端口1,端口2,...,端口n);下面的例子说明怎样定义任务和调用任务:任务定义:taskmy_task;inputa,b;inoutc;outputd,e;…<语句>//执行任务工作相应的语句…c=foo1;//赋初始值d=foo2;//对任务的输出变量赋值te=foo3;endtask函数的目的是返回一个用于表达式的值。(2)function说明语句1)定义函数的语法:function<返回值的类型或范围>(函数名);<端口说明语句><变量类型说明语句>begin<语句>........endendfunction2)从函数返回的值
函数的定义蕴含声明了与函数同名的、函数内部的寄存器。如在函数的声明语句中<返回值的类型或范围>为缺省,则这个寄存器是一位的,否则是与函数定义中<返回值的类型或范围>一致的寄存器。函数的定义把函数返回值所赋值寄存器的名称初始化为与函数同名的内部变量。3)函数的调用函数的调用是通过将函数作为表达式中的操作数来实现的。其调用格式如下:<函数名>(<表达式><,<表达式>>*)其中函数名作为确认符。下面的例子中通过对两次调用函数getbyte的结果值进行位拼接运算来生成一个字。word=control?{getbyte(msbyte),getbyte(lsbyte)}:0;《EDA技术》ElectronicDesignAutomation
12
三VerilogHDL设计中LPM函数的应用
本节介绍VerilogHDL设计中LPM函数的应用1、通过端口和参数定义例化LPM下面以设计一个计数器的例子说明在VerilogHDL设计文件中通过端口和参数定义例化LPM的方法。本例使用QuartusII自带的基本宏功能模块lpm_counter,创建一个计数器。《EDA技术》ElectronicDesignAutomation
13
常用的LPM兆功能块分类宏单元注释门单元函数Lpm_andLpm_bustriLpm_clshiftLpm_constantLpm_decodeLpm_invLpm_muxbusmuxmuxLpm_orLpm_xor
参数化与门参数化三态缓冲器参数化组合逻辑移位器参数化常数产生器参数化解码器参数化反向器参数化多路选择器参数化总线选择器多路选择器参数化或门参数化异或门算术运算函数Lpm_absLpm_add_subLpm_compareLpm_counterLpm_mult
参数化绝对值运算参数化加/减法器参数化比较器参数化计数器参数化乘法器存储函数Lpm_ffLpm_latchLpm_ram_dqLpm_ram_ioLpm_romLpm_shiftreg
参数化D触发器参数化锁存器输入/输出分开的参数化RAM输入/输出复用的参数化RAM参数化ROM参数化移位寄存器用户定制函数CsfifoCsdpram
参数化先进先出队列
参数化双口RAM《EDA技术》ElectronicDesignAutomation
14
应用lpm_counter组件设计一个12进制计数器《EDA技术》ElectronicDesignAutomation
15
…………通过MegaWizardPlug-InManager例化LPM
下面我们利用MegaWizardPlug-InManager方法例化LPM,创建一个12进制计数器.
《EDA技术》ElectronicDesignAutomation
16
打开MegaWizardPlug-InManager(Tools-MegaWizardPlug-inManager)《EDA技术》ElectronicDesignAutomation
17
《EDA技术》ElectronicDesignAutomation
18
《EDA技术》ElectronicDesignAutomation
19
《EDA技术》ElectronicDesignAutomation
20
《EDA技术》ElectronicDesignAutomation
21
《EDA技术》ElectronicDesignAutomation
22
《EDA技术》ElectronicDesignAutomation
23
《EDA技术》ElectronicDesignAutomation
24
《EDA技术》ElectronicDesignAutomation
25
《EDA技术》ElectronicDesignAutomation
26
modulecnt4(aclr,clk_en,clock,data,sload,updown,cout,q); input aclr; //异步清零 input clk_en; //时钟使能 input clock; //时钟输入 input [3:0]data;//4位预置数 input sload; //同步预置加载控制端 input updown; //计数方向控制端 output cout; //进位输出 output [3:0]q; //4位计数结果输出
wiresub_wire0; //定义内部连线 wire[3:0]sub_wire1;//定义内部连线 wirecout=sub_wire0;//与assign相同的赋值语句 wire[3:0]q=sub_wire1[3:0];//与assign相同的赋值语句《EDA技术》ElectronicDesignAutomation
27
lpm_counter lpm_counter_component(//注意例化语句中未用端口必须接上指定电平 .sload(sload),.clk_en(clk_en),.aclr(aclr),.clock(clock), .data(data),.updown(updown),.cout(sub_wire0),.q(sub_wire1), .aload(1'b0), .aset(1'b0),.cin(1'b1), .cnt_en(1'b1), .eq(), .sclr(1'b0), .sset(1'b0)); Defparam //参数传递说明语句lpm_counter_component.lpm_direction="UNUSED",//单方向计数参数未用lpm_counter_component.lpm_modulus=12, //模12计数器lpm_counter_component.lpm_port_updown="PORT_USED",//使用加减计数lpm_counter_component.lpm_type="LPM_COUNTER",//计数器类型 lpm_counter_component.lpm_width=4; //计数器位宽endmodule《EDA技术》ElectronicDesignAutomation
28
仿真结果如图所示《EDA技术》ElectronicDesignAutomation
29
任务1简易电子琴设计方案分析
一般来说,所有乐音有四个基本要素——“音的长短”(决定节拍)、“音的高低”(频率决定)、“音的强度”、“音色”。而其中最重要的是“音的长短”和“音的高低”。为了简化设计,本任务设计的音乐播放电路只考虑音的最重要的两个方面:“音的长短”和“音的高低”,忽略音的强度和音色。要求音乐播放电路最少能连续循环播放一首歌曲,在此基础上可再做进一步的扩展。为实现播放“音的长短”和“音的高低”,可根据乐谱用一个控制电路模块产生“音的长短”和“音的高低”信号,控制电路模块包括一个节拍产生子模块(控制“音的长短”)与音符产生子模块(控制“音的高低”)。用一个分频系数、音符显示数据产生模块把音符信号转换为分频系数、音符显示数据和高低音显示电平。用一个可控分频模块根据分频系数产生不同频率信号驱动喇叭或蜂鸣器播放音乐。D任务实现《EDA技术》ElectronicDesignAutomation
30
电路输入只有系统时钟信号,经分频后,产生两路时钟信号:一路作为可控分频电路模块的输入时钟,经可控分频电路模块分频后,得到各种所需的乐音信号。另一路作为控制电路模块的输入时钟,用来产生节拍。这两路时钟信号的频率根据具体的实验条件和所选歌曲可有所不同。电路的输出有:一路一线是乐音信号输出,用来驱动外接喇叭或蜂鸣器播放音乐;一路八线用来驱动外接的数码管段选信号,一路一线用来驱动数码管位选信号,二者结合使用用来显示播放的音符简谱符号;一路一线用来驱动外接的一个LED,播放高音时发光。《EDA技术》ElectronicDesignAutomation
31
音乐电路是模仿人歌唱的电路,故可用人歌唱作为原型来分析设计本任务的总体方案。人通过声带振动发出声音,声带振动频率不同发出不同声音。故在用数字电路来模仿时,用一个控制电路,实现声带振动功能,控制音符信号的产生;用一个电路把音符信号转换为可控分频模块可用的分频系数;可控分频电路在分频系数作用下产生不同频率信号来驱动外接喇叭或蜂鸣器播放音乐。控制电路模块根据歌谱控制可控分频电路模块按照一定节拍在不同时间发出不同的乐音。而控制电路模块应该分为两个子模块,一个用于产生节拍,称节拍产生模块;另一个用于根据歌谱控制可控分频电路模块在不同时间发出不同的乐音,称音符产生模块。音乐电路是连续循环播放的,故控制电路模块的核心部分——节拍产生模块是一个计数器,每个状态持续的时间是需播放的所有音的音长的最小公因数,比如是一个十六分音符时值,具体时间长度应根据需播放的歌曲而定。这样,每个音符持续的时间是每个状态持续的时间的整数倍,故占据整数倍个状态。具体占据状态的个数要根据每个音的音长来决定。控制电路的计数器的模即状态数,可由需播放歌曲的各个音所占据状态个数累加而得。例如,一首用于播放“两只老虎”乐曲的音乐电路的控制电路的计数器的模是136。节拍产生电路的计数器是用来产生节拍定的,音符产生模块则将节拍产生电路的计数器的状态翻译成对应的音符,如需播放的歌曲中所用到的音符为9~16个,则音符产生模块的输出信号应有四位,其他情况依此类推。《EDA技术》ElectronicDesignAutomation
32
控制电路模块只是根据歌谱产生控制可控分频模块按照一定节拍在不同时间发出不同乐音的音符信号。控制电路模块要具体控制可控分频模块,还要把音符信号转换为分频系数作为可控分频模块的输入信号,也要根据音符信号决定提供给外围数码管的用于显示简谱音符符号的数据和提供给外围LED的用于显示高低音的数据,这就需要另一个模块——分频系数、LED数据产生模块。分频系数、LED数据产生模块根据音符产生模块输出的音符信息,产生每个时刻提供给可控分频模块的分频系数、提供给外围数码管的用于显示谱音符符号的数据和提供给外围LED的用于显示高低音的数据。可控分频模块根据分频系数产生不同频率信号驱动喇叭或蜂鸣器播放音乐。播放音乐电路设计总体参考方案如图5-13所示,其中的两个时钟频率的取值将在下面介绍实施的部分做分析。LedHighClk1MHzClk8HzIndexToneSpkout节拍产生模块音符产生模块分频系数、LED数据产生模块可控分频模块SegCode系统分频模块图5-13播放电路总体方案《EDA技术》ElectronicDesignAutomation
33
本音乐电路设计重点在控制电路模块和可控分频模块设计,下面讨论这两个模块以及顶层模块的设计方案的选择。1.控制电路模块(节拍产生模块与音符产生模块)设计方案的选择节拍产生模块是一个计数器,可采用通常的方法设计。音符产生模块的输入信号是节拍产生模块输出的计数值,输出信号是表示音符的音符序号。在节拍产生模块输出的计数值变化范围不大并且音符产生模块的输出数值不需灵活改变时,可用VerilogHDL语句直接来描述音符产生模块。在节拍产生模块输出的计数值变化范围较大或音符产生模块的输出数值需灵活改变时,可使用LPM_ROM来存储对应于不同计数值的音符序号。这里我们分别用这两种方法来实现,可对比学习。2.可控分频模块设计方案的选择(1)等占空比和非等占空比方案选择可控分频电路按输出时钟的占空比来分,有等占空比和非等占空比两类方案。为了得到足够驱动蜂鸣器的功率,采用等占空比输出的可控分频电路方案。《EDA技术》ElectronicDesignAutomation
34
(2)偶数分频、整数分频方案的选择常见的分频电路有偶数分频、奇数分频和整数分频电路,本任务从原理来看,既有偶数分频又有奇数分频,故应属于整数分频电路。非等占空比的偶数分频、奇数分频电路有统一的设计方法并且比较简单,但等占空比的偶数分频、奇数分频电路设计方法则不相同。对于偶数(2N)的等占空比分频,可先做N非等占空比分频,再做2分频即可,比较简单。对于等占空比的奇数分频电路则不能采用这种方法,比较复杂。本任务可采取用较高频率(比如50MHz)的输入时钟,这样分频比就比较大,故对于初学者,作为初步解决方案,可采用偶数分频比近似代替奇数分频比的方法,把整数分频电路变成偶数(2N)分频电路,用先做N非等占空比分频,再做2分频这种较简单的方法来设计;作为提高,可采用比较复杂的真正的整数分频电路设计方法设计。3.VerilogHDL输入设计法和原理图输入设计法的选择在本任务中,底层模块采用VerilogHDL语言设计较简单,顶层模块采用原理图设计与VerilogHDL设计均可,我们采用原理图设计顶层电路。《EDA技术》ElectronicDesignAutomation
35
任务2简易电子琴VerilogHDL程序设计下面以用于播放“两只老虎”乐曲的音乐电路为例,对音乐电路各模块的实施进行进一步的设计实现。
(一)控制电路模块控制电路模块包含节拍产生模块和音符产生模块两个子模块,合写成一个文件。
1.节拍产生模块设计分析根据以上分析,此模块为一个计数器,现在需进一步决定计数器的模与输入时钟频率。根据乐曲“两只老虎”简谱,见图5-14,此乐曲以四分音符为一拍,四拍为一节,所有音的音长最小公因数是一个十六分音符时值,所以,以十六分音符时值作为一个状态持续时间,把乐曲“两只老虎”中各个音符所占据状态个数累加而得知节拍产生模块计数器的模是136,其中最后体止符用了8个时间单位。乐曲“两只老虎”的简谱没有明确标出播放速度,根据经验设定1min播放60拍,但一般儿歌均是比较轻快的,因此此处设定1min播放120拍,一拍持续时间即四分音符的时值为0.5s,一个状态持续时间即一个十六分音符时值为0.125s。故节拍产生模块输入时钟周期为0.125s,频率为8Hz。《EDA技术》ElectronicDesignAutomation
36
图5-17《两只老虎》简谱《EDA技术》ElectronicDesignAutomation
37
2、音符产生模块设计分析音符产生模块的功能是将节拍产生电路的计数器的值按照乐曲“两只老虎”的简谱翻译成对应的音符。规定用Counter表示计数器的值,Index表示15个音符符号。播放乐曲一般需低音7个、中音7个与高音1个,共15个音符,用15个数字(Index)1—15来表示,则乐曲“两只老虎”简谱的15个音符与数字(Index)的对应关系见表5-4。表5-4乐曲“两只老虎”简谱音符与数字对应关系《EDA技术》ElectronicDesignAutomation
38
根据乐曲“两只老虎”简谱可得其计数器值与音符对应关系,见表5-5。表5-5音符产生模块——计数器值与音符对应表《EDA技术》ElectronicDesignAutomation
39
3.控制电路模块VerilogHDL描述方式一
控制电路模块的输入时钟信号与Clk8Hz相连;Index表示音符信息,因为Index取值为1∽15,故为四位二进制信号。
此控制电路模块Verilog描述有两个always块,一个描述的是一个时序逻辑电路计数器(节拍产生模块),另一个描述的是一个组合逻辑译码电路(音符产生模块),两模块由Counter信号相连,这是一个数字系统的控制模块描述。具体程序描述如下:《EDA技术》ElectronicDesignAutomation
40
《EDA技术》ElectronicDesignAutomation
41
《EDA技术》ElectronicDesignAutomation
42
4、仿真图图5-25是控制电路模块在Quartus软件中的仿真图,其中四位二进制数Index用十进制表示。图5-25控制电路模块《EDA技术》ElectronicDesignAutomation
43
(二)分频系数、音符显示数据产生模块1.设计分析
此模块的功能是产生提供给可控分频模块的分频系数、提供给外围数码管和外围LED的数据。乐曲“两只老虎”是F调,其音符对应的频率数据见表5-6,又因为可控分频模块的输入时钟设为1MHz,则最大分频系数为1000000/349.2≈2864,需用12位二进制表示,故可控分频模块的计数器为12位二进制计数器。可得音符信号对应的分频系数、音符显示数据和高低音指示电平见表5-6。
《EDA技术》ElectronicDesignAutomation
44
表5-6音符信号对应的分频系数、音符显示数据和高低音指示电平《EDA技术》ElectronicDesignAutomation
45
2、设计文件VerilogHDL描述对于简单的组合逻辑模块的VerilogHDL描述,最常用的方法是应用CASE语句或IF语句来描述。在设计文件中:Index为四位二进制信号,表示输入音符信息;SEG为八位二进制信号,是提供给外围数码管的位选信号,数码管用于显示简谱音符符号的数据;SEG_SEL为一位二进制信号,是提供给外围数码管的位选信号;LED是提供给外围LED的用于显示高低音的数据;Tone是供给可控分频模块的分频系数。《EDA技术》ElectronicDesignAutomation
46
《EDA技术》ElectronicDesignAutomation
47
3、仿真图图5-26是分频系数、音符显示数据产生模块在Quartus软件中的仿真图,其中SEG用十六进制(总线形式)表示简谱音符符号的数码管译码信号(段码表),Index用十进制(总线形式)表示输入音符信息、Tone用十进制(总线形式)表示分频系数。图5-26分频系数、音符显示数据产生模块仿真图《EDA技术》ElectronicDesignAutomation
48
(三)可控分频模块1、设计分析此模块的功能是用一个可控分频电路来产生播放音乐所需的每个音。其实质是设计一个可预置数的计数器,预置数就是分频系数。作为初步解决方案,本任务采用偶数分频近似代替奇数分频的方法,把整数分频电路变成偶数分频电路来设计。可控分频模块是一个2后分频的可控分频电路。可控分频模块的输入时钟clk频率选1MHz,为了使可控分频模块分频系数取值范围比较合适,输入时钟先经(211-Tone)的可控分频,同时为了使输出信号SpkS具有较高的驱动功率,可控分频后再经2分频,使输出信号SpkS具有50%的占空比,从而具有较高的驱动功率。《EDA技术》ElectronicDesignAutomation
49
《EDA技术》ElectronicDesignAutomation
50
3、仿真图图5-27是可控分频模块在Quartus软件中的仿真图。其中clk输入频率为1M,由于频率太大,显示的是一条黑带,Tone是用二进制(总线形式)表示的分频系数,Spks是可控分频模块输出音频信号。分频系数,Spks是可控分频模块输出音频信号。图5-27可控分频模块仿真图《EDA技术》ElectronicDesignAutomation
51
(四)简易电子琴顶层模块设计简易电子琴顶层模块用原理图输入法设计。把以上各子模块在Quartus创建图元,新建一个原理图编辑文件,然后把创建的图元组装起来构成一个完整的电路进行编译,仿真。
1、简易电子琴顶层原理图输入描述。图5-28简易电子琴顶层原理图输入《EDA技术》ElectronicDesignAutomation
52
2、简易电子琴顶层模块仿真图图5-29简易电子琴顶层模块仿真图《EDA技术》ElectronicDesignAutomation
53
(五)简易电子琴硬件实现(1)简易电子琴管脚指定,按照表5-7所示的端口管脚分配表,进行如图5-31所示的管脚指定。表5-7端口管脚分配表端口名使用模块信号对应FPGA管脚说
明clk50Mhz系统时钟PIN_2350Mhz的系统时钟seg[7]数码管dp段段选PIN_1717段数码管段选信号输出,低电平有效seg[6]数码管g段段选PIN_164seg[5]数码管f段段选PIN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年注册安全工程师真题及答案
- 2025年注册安全工程师建筑实务考试真题卷含解析
- 2025消防隐患考试重点考试题及答案
- 2025医院医疗卫生法律法规题库和参考答案
- 2026年AI大模型应用实战模拟试题集
- 2026年《医疗器械经营质量管理规范》试卷及答案
- 2026年人工智能训练师(三级)案例实操试题及评分标准
- 小学数学教资面试计算易错题试卷及解析
- 2026下半年小学美术教资面试专项试卷
- 口译职业就业前景
- 深化岗区队建设实施方案
- 土方开挖及基坑支护专项施工方案
- GB/T 47552-2026精细陶瓷钛酸钡粉体化学分析方法
- GB/T 47543-2026无障碍旅游服务规范旅游饭店
- GB/T 34395-2026展览场馆功能性设计指南
- 检察院保密培训
- 储能方面培训
- 广东省职业卫生管理制度
- 系统集成保密培训课件
- 强迫障碍课件教学
- 2026年国企文旅集团高频面试题
评论
0/150
提交评论