Verilog-HDL数字设计教程(贺敬凯)第7课件.ppt

上传人(卖家):三亚风情 文档编号:3006936 上传时间:2022-06-21 格式:PPT 页数:237 大小:2.62MB
下载 相关 举报
Verilog-HDL数字设计教程(贺敬凯)第7课件.ppt_第1页
第1页 / 共237页
Verilog-HDL数字设计教程(贺敬凯)第7课件.ppt_第2页
第2页 / 共237页
Verilog-HDL数字设计教程(贺敬凯)第7课件.ppt_第3页
第3页 / 共237页
Verilog-HDL数字设计教程(贺敬凯)第7课件.ppt_第4页
第4页 / 共237页
Verilog-HDL数字设计教程(贺敬凯)第7课件.ppt_第5页
第5页 / 共237页
点击查看更多>>
资源描述

1、第7章 Verilog HDL可综合设计举例 7.1 跑马灯控制器的设计7.2 8位数码扫描显示电路的设计7.3 数控分频器的设计7.4 乐曲硬件演奏电路的设计7.5 数字跑表和数字钟的设计7.6 用Verilog HDL状态机实现A/D采样控制电路7.7 交通控制器的设计7.8 空调控制器的设计7.9 饮料自动售卖机的设计7.10 小结习题7第7章 Verilog HDL可综合设计举例 7.1 跑马灯控制器的设计跑马灯控制器的设计1. 设计要求设计要求共8个LED灯,连成一排。要求实现几种灯的组合显示。具体要求如下:(1) 模式1:先奇数灯,即第1、3、5、7灯亮0.25 s,然后偶数灯,即

2、第2、4、6、8灯亮0.25 s,依次循环。(2) 模式2:按照1、2、3、4、5、6、7、8的顺序依次点亮所有灯,间隔时间为0.25 s;然后再按1/2/3/4/5/6/7/8的顺序依次熄灭所有灯,间隔时间为0.25 s。 第7章 Verilog HDL可综合设计举例 (3) 模式3:按照1/8、2/7、3/6、4/5的顺序依次点亮所有灯,间隔时间为0.25 s,每次同时点亮两个灯;然后再按照1/8、2/7、3/6、4/5的顺序依次熄灭所有灯,间隔时间为0.25 s,每次同时熄灭两个灯。(4) 以上模式可以选择。 第7章 Verilog HDL可综合设计举例 2. 设计说明设计说明LED灯与

3、FPGA的连接如图7-1所示,设计要求很容易实现,在此不再说明。 第7章 Verilog HDL可综合设计举例 图7-1 8个LED灯与FPGA的连接图第7章 Verilog HDL可综合设计举例 使用两个键进行模式选择,两个键有00、01、10、11四种组合,使用其中的三种组合,分别对应设计要求的三种情况。第7章 Verilog HDL可综合设计举例 3. 设计模块设计模块(包含模块划分包含模块划分)该设计比较简单,仅用一个模块即可,输入端口为rst、clk、sel1.0,输出端口为led7.0,其中sel用于模式选择,led用于控制8个LED灯,如图7-2所示。第7章 Verilog HD

4、L可综合设计举例 图7-2 跑马灯模块端口框图第7章 Verilog HDL可综合设计举例 4. 代码分析代码分析【例7-1】 设计源码。module paomadeng(rst,clk,sel,led);input rst,clk;input1:0 sel;output7:0 led;reg7:0 led;reg7:0 led_r,led_r1;reg cnt1,dir;reg2:0 cnt2;reg1:0 cnt3;第7章 Verilog HDL可综合设计举例 always (posedge clk)beginif(rst) begin cnt1=0; cnt2=0; cnt3=0; di

5、r=0; endelsecase(sel) 2b00:beginled_r=8b01010101;if(cnt1=0) led=led_r;else led=led_r1;cnt1=cnt1+1;end第7章 Verilog HDL可综合设计举例 2b01:beginif(!dir) beginif(cnt2=0) begin led_r=8b00000001;led=led_r; endelse begin led=(led1)+led_r; endif(cnt2=7) begin dir=dir; endcnt2=cnt2+1; end第7章 Verilog HDL可综合设计举例 else

6、 beginif(cnt2=0) begin led_r=8b11111110;led=led_r; endelse begin led=led1; endif(cnt2=7) begin dir=dir; endcnt2=cnt2+1; endend第7章 Verilog HDL可综合设计举例 2b11:beginif(!dir) beginif(cnt3=0) beginled_r=8b00000001;led_r1=8b10000000;end else begin led_r=(led_r1)| led_r1; endled=led_r | led_r1;if(cnt3=3) begi

7、n dir=dir; endcnt3=cnt3+1; endelse第7章 Verilog HDL可综合设计举例 beginif(cnt3=0) begin led_r=8b11111110;led_r1=8b01111111;endelse begin led_r=led_r1; endled=led_r & led_r1;if(cnt3=3) begin dir=dir; endcnt3=cnt3+1;第7章 Verilog HDL可综合设计举例 endend default: ;endcaseendendmodule第7章 Verilog HDL可综合设计举例 程序说明:(1) case

8、语句用于选择三种模式。当case表达式中的sel为2b00时选择模式1,为2b01时选择模式2,为2b11时选择模式3。(2) cnt1、cnt2、cnt3分别为三种模式下的计数器,用于控制流水灯的转换节奏。(3) dir用于方向控制,与cnt1、cnt2、cnt3的具体数值相关。 第7章 Verilog HDL可综合设计举例 5. 仿真分析仿真分析仿真波形如图7-3所示。该仿真波形仅列出了sel为2b11时跑马灯的运行情况。从图中可以看出,灯的运行与模式3一致,说明程序代码实现了模式3。读者也可以通过修改sel的值对模式1和模式2进行验证。 第7章 Verilog HDL可综合设计举例 图7

9、-3 跑马灯仿真波形第7章 Verilog HDL可综合设计举例 6. 引脚锁定下载硬件验证引脚锁定下载硬件验证选择GW48-PK2系统中的实验电路5,引脚锁定情况如图7-4所示。将设计下载到实验开发系统中,观察实际运行情况。clk接FPGA的93引脚,频率选择4 Hz,然后通过按键选择跑马灯的运行模式,观察跑马灯的实际运行情况。 第7章 Verilog HDL可综合设计举例 图7-4 引脚锁定情况第7章 Verilog HDL可综合设计举例 7. 扩展部分扩展部分请读者思考其他LED显示方式,并实现之。例如:先循环左移,再循环右移(任一时刻只有一个LED灯亮),然后从两头至中间依次点亮(任一

10、时刻只有两个LED灯亮),之后不断重复以上显示方式。 第7章 Verilog HDL可综合设计举例 7.2 8位数码扫描显示电路的设计位数码扫描显示电路的设计1. 设计要求设计要求共8个数码管,连成一排,要求可以任意显示其中一个或多个数码管。具体要求如下:(1) 依次选通8个数码管,并让每个数码管显示相应的值,比如让每个数码管依次显示13579BDF。(2) 要求能在实验台上演示出数码管的动态显示过程。 第7章 Verilog HDL可综合设计举例 2. 设计说明设计说明下面对实验原理作简单介绍。(1) 数码管分共阴极和共阳极两类。7段共阴极数码管如图7-5所示。当数码管的输入为“110110

11、1”时,数码管的7个段g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;由于接有高电平的段发亮,因此数码管显示“5”。注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h。 第7章 Verilog HDL可综合设计举例 图7-5 共阴极数码管及其电路第7章 Verilog HDL可综合设计举例 (2) 图7-6所示的是8位数码扫描显示电路,其中每个数码管的8个段h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号K1、K2、K8来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k1为高电平,其余选通信号为低电平,这时仅K1对应的数码

12、管显示来自段信号端的数据,而其他7个数码管均不显示。因此,如果希望在8个数码管显示不同的数据,就必须使得8个选通信号K1、K2、K8轮流被单独选通,同时,在段信号输入口加上希望在对应数码管上显示的数据,这样随着选通信号的变化,才能实现扫描显示的目的。第7章 Verilog HDL可综合设计举例 图7-6 8位数码扫描显示电路第7章 Verilog HDL可综合设计举例 3. 设计模块设计模块(包含模块划分包含模块划分)该设计使用了2个模块,如图7-7所示。该设计的输入为clk,输出为SM_7S6.0、SM_B7.0。其中SM_7S为段选信号,对数码管的每一段进行控制;SM_B为位选信号,用于在

13、8个数码管中选择。 第7章 Verilog HDL可综合设计举例 图7-7 数码管顶层模块框图第7章 Verilog HDL可综合设计举例 4. 代码分析代码分析例7-2的Dec7S模块为7段译码器,输入信号SM_in可取十六进制数0F,输出信号SM_7S的7位分别接数码管的7个段,高位在左,低位在右。 第7章 Verilog HDL可综合设计举例 【例7-2】 7段数码显示译码器设计。module Dec7S(SM_in,SM_7S); /七段译码电路input3:0 SM_in;output reg6:0 SM_7S;always (SM_in) begincase(SM_in)第7章 V

14、erilog HDL可综合设计举例 4d0: SM_7S=7b0111111;4d1: SM_7S=7b0000110;4d2: SM_7S=7b1011011;4d3: SM_7S=7b1001111;4d4: SM_7S=7b1100110;4d5: SM_7S=7b1101101;4d6: SM_7S=7b1111101;4d7: SM_7S=7b0000111;4d8: SM_7S=7b1111111;第7章 Verilog HDL可综合设计举例 4d9: SM_7S=7b1101111;4d10: SM_7S=7b1110111;4d11: SM_7S=7b1111100;4d12:

15、 SM_7S=7b0111001;4d13: SM_7S=7b1011110;4d14: SM_7S=7b1111001;4d15: SM_7S=7b1110001;default: ; endcase endendmodule第7章 Verilog HDL可综合设计举例 例7-3的GenBS模块用于生成位选信号和待显示数据。程序中的cnt8是一个3位计数器,产生扫描计数信号,SM_B=1cnt8;用于对8个数码管扫描选通,SM_in =7) cnt8=0; else cnt8=cnt8+1; SM_in = 2*cnt8+1; /生成待显示数据为1, 3, 5, . SM_B=1cnt8;

16、/生成位选信号 endendmodule例7-4是扫描显示的顶层模块。其中:clk是扫描时钟;SM_7S为7段控制信号,由高位至低位分别接g、f、e、d、c、b、a 7个段;SM_B是位选控制信号,接图7-6中的8个选通信号K1、K2、K8。 第7章 Verilog HDL可综合设计举例 【例7-4】 8位数码扫描显示电路顶层模块。module shumaguan(clk,SM_7S,SM_B);input clk;output6:0 SM_7S; /段控制信号输出output7:0 SM_B; /位控制信号输出wire3:0 SM_in;GenBS inst1(clk,SM_in,SM_B)

17、; /调用位选和待显示数据生成电路Dec7S inst2(SM_in,SM_7S); /调用译码电路endmodule 第7章 Verilog HDL可综合设计举例 5. 仿真分析仿真波形如图7-8所示。从图中可以看出,在每一个时钟上升沿选中下一个数码管,同时送相应的数据给该数码管显示。 图7-8 数码管仿真波形第7章 Verilog HDL可综合设计举例 6. 引脚锁定下载硬件验证引脚锁定下载硬件验证将设计下载到实验开发系统中,观察实际运行情况。实验方式:若考虑小数点,则SM_7S的8个段分别与PIO49、PIO48、PIO42(高位在左)连接、SM_B的8个位分别与PIO34、PIO35、

18、PIO41(高位在左)连接。在GW48 EDA系统数码管左边有一个跳线冒,将其跳下端“CLOSE”(平时跳上端“ENAB”),这时实验系统的8个数码管构成图7-6所示的电路结构,时钟clk可选择clock0,通过跳线选择16 384 Hz信号。引脚锁定后进行编译、下载和硬件测试实验。引脚锁定如图7-9所示。 第7章 Verilog HDL可综合设计举例 图7-9 引脚锁定情况第7章 Verilog HDL可综合设计举例 时钟clk选择clock0,通过跳线选择4 Hz信号,可演示数码管的动态扫描过程。7. 扩展部分扩展部分请读者尝试完成以下几种显示方式:(1) 8个数码管同时显示,每个数码管的

19、8个段,即a、b、c、d、e、f、g、dp依次显示,每个段持续显示时间为0.25 s。第7章 Verilog HDL可综合设计举例 (2) 8个段和8个数码管依次显示,a段显示在第1个数码管上,b段显示在第2个数码管上,dp段显示在第8个数码管上,显示持续时间为0.25 s。(3) 将0F这16个十六制数依次显示在数码管中,每个时刻只有一个数码管显示,持续时间为0.25 s,即0显示在第1个数码管、1显示在第2个数码管、7显示在第8个数码管、8显示在第1个数码管、F显示在第8个数码管。 第7章 Verilog HDL可综合设计举例 7.3 数控分频器的设计数控分频器的设计1. 设计要求设计要求

20、(1) 对于任意频率,均可以对其进行数控分频,以得较低的频率。(2) 对于预定频率,均可以通过对较高频率分频得到。第7章 Verilog HDL可综合设计举例 2. 设计说明设计说明数控分频器的功能是:当在输入端给定不同输入数据时,对输入的时钟信号有不同的分频比。数控分频器是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接,详细设计程序如例7-5所示。 第7章 Verilog HDL可综合设计举例 3. 设计模块设计模块(包含模块划分包含模块划分)本例仅有一个模块,图7-10给出了分频器模块的端口框图。其中,CLK为时钟信号;D为输入数据,根据这个数据进行分

21、频;FOUT为分频后的输出。第7章 Verilog HDL可综合设计举例 图7-10 分频器模块的端口框图第7章 Verilog HDL可综合设计举例 4. 代码分析代码分析【例7-5】 数控分频器的设计。module DVF_v(CLK,D,FOUT);input CLK;input7:0 D;output reg FOUT;reg7:0 FULL;always (posedge CLK) begin:P_REG reg7:0 CNT8; if(CNT8=8b11111111) 第7章 Verilog HDL可综合设计举例 begin CNT8 = D; /当CNT8计数计满时,输入数据D被

22、同步预置给计数器CNT8 FULL = 1b1; /同时使溢出标志信号FULL输出为高电平 endelse begin CNT8 = CNT8 + 1; /否则继续作加1计数 FULL = 1b0; /且输出溢出标志信号FULL为低电平end 第7章 Verilog HDL可综合设计举例 endalways (posedge FULL) begin:P_DIVreg CNT2;CNT2=CNT2; /如果溢出标志信号FULL为高电平,则D触发器输出取反if(CNT2=1b1) FOUT=1b1; else FOUT=1b0; endendmodule第7章 Verilog HDL可综合设计举例

23、 5. 仿真分析仿真分析图7-11为数控分频器的仿真结果。从图中可以看出,FOUT的输出频率随D的变化而变化,实现了数控分频。 图7-11 数控分频器的仿真结果第7章 Verilog HDL可综合设计举例 6. 引脚锁定下载硬件验证引脚锁定下载硬件验证将设计下载到实验开发系统中,观察实际运行情况。选实验电路模式1,键2/键1负责输入8位预置数D(PIO7PIO0),CLK由clock0输入,频率选65 536 Hz或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER)。编译下载后进行硬件测试:改变键2/键1的输入值,可听到不同音调的声音。引脚锁定如图7-12所示。 第7章 Ver

24、ilog HDL可综合设计举例 图7-12 引脚锁定第7章 Verilog HDL可综合设计举例 7. 扩展部分扩展部分(1) 利用本节的数控分频器得到的频率,其占空比为50%。若占空比可调,比如占空比为30%,如何实现?提示:可使用两个8位输入数据控制输出脉冲的高低电平持续时间。(2) 尝试使用其他分频器的设计方法,例如第4章提出的方法,并比较这些方法的异同。第7章 Verilog HDL可综合设计举例 7.4 乐曲硬件演奏电路的设计乐曲硬件演奏电路的设计1. 设计要求设计要求(1) 利用7.3节的数控分频器设计硬件乐曲演奏电路。(2) 了解乐谱的一些基本知识,可以将乐谱转换为相应的Quar

25、tus 文件,掌握其演奏原理。(3) 掌握本设计中各模块的功能,能够填入并演奏一些新的曲子。第7章 Verilog HDL可综合设计举例 2. 设计说明设计说明乐曲演奏的原理:组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声。(1) 音调的控制。简谱中音名与音频的对应关系如图7-13所示。 第7章 Verilog HDL可综合设计举例 图7-13 简谱中音名与音频的对应关系第7章 Verilog HDL可综合设计举例 图7-13中仅列出了低音、中音和高音的频率,对于

26、比低音低八度或者比高音高八度的音,可依据2倍规则很容易地求出。所谓2倍规则,是指中音1是低音1频率的2倍,高音1是中音1频率的2倍,依此类推。简谱中音频与分频预置数的对应关系如图7-14所示。 第7章 Verilog HDL可综合设计举例 图7-14 简谱中音频与分频预置数的对应关系第7章 Verilog HDL可综合设计举例 音名与音频的对应关系以及计算音频与分频值、11位计数器的预置数的对应关系可由程序计算得出,相应的C语言程序代码如例7-6所示。【例7-6】 计算分频比与分频预置数的程序。/音名与音调之间的对应关系的计算程序#include #include math.h#define

27、N 3#define M 7main()第7章 Verilog HDL可综合设计举例 int i,j; double aNM=0.0,freq_div_ratioNM=0.0,ToneIndexNM=0.0; /频率, 分频比,预置数 double ratio,counter_11,freq=12000000; /freq为系统频率, 12 MHz ratio=pow(2.0,1.0/12); printf(ratio=%lfn,ratio); /计算低音1, 2, 3, 4, 5, 6, 7 a05=440.0; 第7章 Verilog HDL可综合设计举例 a06=a05*ratio*ra

28、tio;a04=a05/ratio/ratio;a03=a04/ratio/ratio;a02=a03/ratio;a01=a02/ratio/ratio;a00=a01/ratio/ratio;/计算中音和高音:1,2,3,4,5,6,7for(i=1;i=2;i+)第7章 Verilog HDL可综合设计举例 for(j=0;j7;j+)aij=ai-1j*2; /打印低中高音1,2,3,4,5,6,7 printf(音调频率如下:0-低音,1-中音,2-高音n); for(i=0;i=2;i+)第7章 Verilog HDL可综合设计举例 for(j=0;j7;j+)printf(%d音

29、%d:%.0lf ,i,j+1,aij);printf(n); /计算各音调的分频值 counter_11=pow(2.0,11); /分频值对应的位数应为11位, 该位数由系统频率分频后的频率决定 freq=freq/(12*2); /12 MHz, 12分频, 再2分频第7章 Verilog HDL可综合设计举例 freq=freq/(12*2); /12 MHz, 12分频, 再2分频 printf(音调分频比freq_div_ratio如下:0-低音,1-中音,2-高音n); for(i=0;i=2;i+) for(j=0;j7;j+)freq_div_ratioij=freq/aij

30、;第7章 Verilog HDL可综合设计举例 printf(%d音%d:%.0lf ,i,j+1,freq_div_ratioij);printf(n); /计算各音调的分频值相对应的预置数 printf(音调预置数ToneIndex如下:0-低音,1-中音,2-高音n); for(i=0;i=2;i+)第7章 Verilog HDL可综合设计举例 for(j=0;j7;j+)ToneIndexij=counter_11-freq_div_ratioij;printf(%d音%d:%.0lf ,i,j+1,ToneIndexij);printf(n); 第7章 Verilog HDL可综合设

31、计举例 (2) 音长的控制。音乐中的音除了有高低之分外,还有长短之分。如何记录音的长短呢?简谱中用一条横线“”在音符的右面或下面来标注音的长短。表7-1列出了常用音符和它们的长度标记。第7章 Verilog HDL可综合设计举例 第7章 Verilog HDL可综合设计举例 从表7-1中可以看出横线有记在音符后面的,也有记在音符下面的,横线标记的位置不同,被标记的音符的时值也不同。从表7-1中可以发现一个规律:要使音符时值延长,在四分音符右边加横线“”,这时的横线叫延时线。延时线越多,音持续的时间(时值)越长。第7章 Verilog HDL可综合设计举例 记在音符右边的小圆点称为附点,表示增加

32、前面音符时值的一半,带附点的音符叫附点音符。例如:四分附点音符,八分附点音符:。音乐中除了有音的高低、长短之外,也有音的休止。表示声音休止的符号叫休止符,用“0”标记。每增加一个0,就增加一个四分休止符的时值。第7章 Verilog HDL可综合设计举例 3. 设计模块设计模块(包含模块划分包含模块划分)主系统由3个模块组成,例7-7是顶层设计文件,其内部有3个功能模块(如图7-15所示):ToneTaba、NoteTabs和Speakera。第7章 Verilog HDL可综合设计举例 图7-15 硬件乐曲演奏电路结构第7章 Verilog HDL可综合设计举例 与利用微处理器(CPU或MC

33、U)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。本例实现的乐曲演奏电路结构如图7-15所示。在图7-15中,模块u1类似于弹琴的人的手指;u2类似于琴键;u3类似于琴弦或音调发声器。 第7章 Verilog HDL可综合设计举例 下面首先来了解图7-15的工作原理:(1) 音符的频率可以由图7-15中的模块Speakera获得。它是一个数控分频器,由其clk端输入一具有较高频率(这里是12MHz)的信号,通过Speakera分频后由SPKOUT输出。由于直接从数控分频器中出

34、来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2。Speakera对clk输入信号的分频比由11位预置数Tone10.0决定。SPKOUT的输出频率将决定每一音符的音调。这样,分频计数器的预置值Tone10.0 与SPKOUT的输出频率就有了对应关系。例如在ToneTaba模块中若取Tone10.0=1036,将发音符为“3”音的信号频率。 第7章 Verilog HDL可综合设计举例 (2) 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,图7-15中模块ToneTaba的功能首先是为Speakera提供决定所发

35、音符的分频预置数,而此数在Speakera输入口停留的时间即为此音符的节拍值。模块ToneTaba是乐曲简谱码对应的分频预置数查表电路,其中设置了高音、中音、低音全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和音调发生器模块NoteTabs的clk的输入频率决定,这里为4Hz。这13个值的输出由对应于ToneTaba的4位输入值Index3.0确定,而Index3.0最多有16种可选值。ToneIndex3.0输向ToneTaba中的Index3.0,其值与持续的时间由模块NoteTabs决定。第7章 Verilog HDL可综合设计举例 (3) 在NoteTabs中设置了

36、一个9位二进制计数器(计数最大值为512),作为音符数据ROM的地址发生器。这个计数器的计数频率选为4 Hz,即每一计数值的停留时间为0.25s,恰为当全音符设为1s时,四四拍的4分音符的持续时间。当NoteTabs中的计数器按4Hz的时钟速率作加法计数(即地址值递增)时,音符数据ROM中的音符数据将从ROM中通过ToneIndex3.0端口输向ToneTaba模块,乐曲就开始连续自然地演奏起来了。第7章 Verilog HDL可综合设计举例 需定制例7-10的NoteTabs模块中的音符数据ROM“music”。该ROM中的音符数据已列在例7-11中。注意该例数据表中的数据位宽、深度和数据的

37、表达类型。此外,为了节省篇幅,例中的数据都横排了,实用中应该以每一分号为一行来展开,否则会出错。最后对该ROM进行仿真,确认例7-11中的音符数据已经进入ROM中。 第7章 Verilog HDL可综合设计举例 4. 代码分析代码分析乐曲演奏电路的Verilog HDL描述见例7-7例7-11。【例7-7】 硬件演奏电路的顶层设计。module Songer(Song_sel,CLK12MHZ,CLK8HZ,CODE1,HIGH_LOW,SPKOUT);input1:0 Song_sel; /对四首乐曲进行选择input CLK12MHZ; /音调频率信号input CLK8HZ; /节拍频率

38、信号output3:0 CODE1; /简谱码输出显示第7章 Verilog HDL可综合设计举例 output1:0 HIGH_LOW; /高、中、低8度指示: 00低, 01中, 10高 output SPKOUT; /声音输出wire10:0 Tone;wire4:0 ToneIndex;NoteTabs u1(.sel(Song_sel),.clk(CLK8HZ),.ToneIndex(ToneIndex);ToneTaba u2(.Index(ToneIndex),.Tone(Tone),.CODE(CODE1),.HIGH(HIGH_LOW);Speakera u3(.clk(CL

39、K12MHZ),.Tone(Tone),.SpkS(SPKOUT);endmodule第7章 Verilog HDL可综合设计举例 【例7-8】 Speakera模块。module Speakera(clk,Tone,SpkS);input clk;input10:0 Tone; /分频预置数-跟音调相匹配output reg SpkS; /声音输出reg PreCLK, FullSpkS;always (posedge clk) begin:DivideCLK第7章 Verilog HDL可综合设计举例 reg3:0 Count4; PreCLK 11) begin PreCLK = 1;

40、Count4=0; end elseCount4=Count4+1; end第7章 Verilog HDL可综合设计举例 always (posedge PreCLK) begin:GenSpkS /11位可预置计数器 reg10:0 Count11; if(Count11 = 11h7FF) /首先进行12分频 begin Count11 = Tone ; FullSpkS = 1; end else begin Count11 = Count11 + 1; FullSpkS = 0; end end第7章 Verilog HDL可综合设计举例 always (posedge FullSpk

41、S) begin:DelaySpkS /将输出再2分频,展宽脉冲,使扬声器有足够功率发音 reg Count2; Count2 = Count2; if(Count2=1) SpkS = 1; else SpkS = 0; endendmodule第7章 Verilog HDL可综合设计举例 【例7-9】 ToneTaba模块。module ToneTaba(Index,CODE,HIGH,Tone);input4:0 Index; /音符output reg3:0 CODE; /简谱码输出output reg1:0 HIGH; /高、中、低8度指示: 00低, 01中, 10高output

42、reg10:0 Tone; /分频预置数-跟音调相匹配always (Index) begin:Search第7章 Verilog HDL可综合设计举例 case(Index) 5b00000: begin Tone=11b11111111111 ; end /2047 5b00001: begin Tone=11d137 ; end /137; 5b00010: 第7章 Verilog HDL可综合设计举例 begin Tone=11d345 ; end /345; 5b00011: begin Tone=11d531 ; end /531; 5b00100: begin第7章 Verilo

43、g HDL可综合设计举例 Tone=11d616 ; end /616;5b00101: beginTone=11d773 ; end /773;5b00110: beginTone=11d912 ; end /912;5b0111: 第7章 Verilog HDL可综合设计举例 beginTone=11d1036 ; end /1036;5b1000: beginTone=11d1092 ; end /1092;5b1001: 第7章 Verilog HDL可综合设计举例 beginTone=11d1197 ; end /1197;5b1010: beginTone=11d1290 ; en

44、d /1290;5b1011: begin第7章 Verilog HDL可综合设计举例 Tone=11d1332 ; end /1332;5b1100: beginTone=11d1410 ;end /1410; 5b1101: beginTone=11d1480 ; end /1480;第7章 Verilog HDL可综合设计举例 5b1110: beginTone=11d1542 ; end /15425b1111: beginTone=11d1570 ;end /1570第7章 Verilog HDL可综合设计举例 5b10000: beginTone=11d1622 ; end /16

45、225b10001: beginTone=11d1668; end /16685b10010: begin第7章 Verilog HDL可综合设计举例 Tone=11d1690 ; end /16905b10011: beginTone=11d1728 ; end /17285b10100: beginTone=11d1764 ; end /17645b10101: 第7章 Verilog HDL可综合设计举例 beginTone=15) 第7章 Verilog HDL可综合设计举例 begintemp_Index=Index+2;CODE=1b0,temp_Index2:0;HIGH =8)

46、begin第7章 Verilog HDL可综合设计举例 temp_Index=Index+1;CODE=1b0,temp_Index2:0;HIGH =temp_Index4:3; endelse begintemp_Index=Index;CODE=1b0,temp_Index2:0;HIGH =88) Counter = 8d0; /演奏21个音调, 从低到高else Counter = Counter+1; /此处可通过sel选择其他曲目播放 endmusic u1(.address(Counter),.q(ToneIndex),.inclock(clk);endmodule第7章 Ve

47、rilog HDL可综合设计举例 【例7-11】 演奏从低音到高音共21个音调的ROM文件。WIDTH=8;DEPTH=88;ADDRESS_RADIX=UNS;DATA_RADIX=UNS;CONTENT BEGIN第7章 Verilog HDL可综合设计举例 0.3 : 0; 4.7 : 1;8.11 : 2; 12.15 : 3;16.19 : 4; 20.23 : 5;24.27 : 6;28.31 : 7;32.35 : 8;36.39 : 9;40.43 : 10;44.47 : 11;48.51 : 12;52.55 : 13;56.59 : 14;60.63 : 15;64.6

48、7 : 16;68.71 : 17;72.75 : 18;76.79 : 19;80.83 : 20;84.87 : 21;END;第7章 Verilog HDL可综合设计举例 5. 仿真分析仿真分析请读者自行仿真。6. 引脚锁定下载硬件验证引脚锁定下载硬件验证实验电路结构图为No.1。 第7章 Verilog HDL可综合设计举例 先将引脚锁定,使CLK12MHZ与clock9相接,接收12 MHz时钟频率(用短路帽将clock9接“CLK12MHZ”);CLK8HZ与clock2相接,接收4 Hz频率;发音输出SPKOUT接Speaker;与演奏发音相对应的简谱码输出显示可由CODE1在数

49、码管5显示;HIGH_LOW为高、中、低八度音指示,可由发光管D6/D5指示。最后向目标芯片下载适配后的SOF逻辑设计文件。引脚锁定如图7-16所示。第7章 Verilog HDL可综合设计举例 图7-16 引脚锁定第7章 Verilog HDL可综合设计举例 7. 扩展部分扩展部分(1) 填入新的乐曲,如“梁祝”或其他熟悉的乐曲。操作步骤如下: 根据所填乐曲可能出现的音符,修改例7-11中的音符数据,同时注意每一音符的节拍长短。 如果乐曲比较长,可增加模块NoteTaba中计数器的位数,如设为9位,则可有512个基本节拍。(2) 在一个ROM中装入多首歌曲,可手动或自动选择歌曲(推荐图7-1

50、7图7-19所示的三首)。 第7章 Verilog HDL可综合设计举例 图7-17 梁祝的简谱第7章 Verilog HDL可综合设计举例 图7-18 两只老虎的简谱第7章 Verilog HDL可综合设计举例 图7-19 难忘今宵的简谱第7章 Verilog HDL可综合设计举例 提示:仍采用No.1电路,加入多支曲目后的引脚锁定如图7-20所示。图7-20 引脚锁定第7章 Verilog HDL可综合设计举例 用键8/7控制四首曲目的选择;与演奏发音相对应的简谱码输出由数码管5显示;HIGH_LOW为高、中、低八度音指示,可由发光管D6/D5指示。(3) 结合本实验,读者可以查阅电子琴相

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Verilog-HDL数字设计教程(贺敬凯)第7课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|