第7章数字系统设计实例.ppt
《第7章数字系统设计实例.ppt》由会员分享,可在线阅读,更多相关《第7章数字系统设计实例.ppt(170页珍藏版)》请在三一文库上搜索。
1、第7章 数字系统设计实例,7.1 半整数分频器的设计 7.2 音乐发生器 7.3 2FSK/2PSK信号产生器 7.4 实用多功能电子表 7.5 交通灯控制器 7.6 数字频率计 习题,7.1 半整数分频器的设计,在数字系统设计中,分频器是一种基本电路。分频器的实现非常简单,可采用标准的计数器,也可采用可编程逻辑器件来实现一个整数分频器。分频器通常用来对某个给定频率进行分频,得到所需的频率。在某些场合下,用户所需要的频率与频率时钟源不是整数倍关系,此时可采用小数分频器进行分频。,7.1.1 小数分频的基本原理 设有一个5 MHz的时钟源,但电路中需要产生一个2 MHz的时钟信号,由于分频比为2
2、.5,因此整数分频器将不能胜任。 采用可编程逻辑器件实现分频系数为2.5的分频器,可采用以下方法:设计一个模3的计数器,再设计一个扣除脉冲电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲(实际上是使被扣除的脉冲变成很窄的脉冲,可由异或门实现),就可以得到分频系数为2.5的小数分频器。采用类似方法,可以设计分频系数为任意半整数的分频器。,小数分频的基本原理为脉冲吞吐计数法:设计两个不同分频比的整数分频器,通过控制单位时间内两种分频比出现的不同次数,从而获得所需的小数分频值。例如设计一个分频系数为10.1的分频器,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为 (910+1
3、11)/(9+1) =10.1,从这种实现方法的特点可以看出,由于分频器的分频值在不断改变,因此分频后得到的信号抖动较大。 当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,使输出为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。,7.1.2 电路组成 设需要设计一个分频系数为N-0.5的分频器,其电路可由一个模N计数器、一个二分频器和一个异或门组成,如图7-1所示。 在实现时,模N计数器可设计成带预置的计数器,这样就可以实现任意分频系数为N-0.5的分频器。,图7-1 通用半整数分频器,7.1.3 VHDL程序 LIBRARY IEEE; USE IEEE.STD_LOGIC
4、_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY deccount IS PORT ( inclk: IN STD_LOGIC; -时钟源 preset: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -预置分频值N,outclk1: OUT STD_LOGIC; outclk2: BUFFER STD_LOGIC -输出时钟 ); END deccount; ARCHITECTURE deccount_arch OF deccount IS SIGNAL clk, divide2: STD_LOGIC; SIGNAL c
5、ount: STD_LOGIC_VECTOR(3 DOWNTO 0);,BEGIN clk=inclk XOR divide2; -inclk与divide2异或后作为模N计数器的时钟 outclk1=inclk; PROCESS(clk) BEGIN IF(clkevent AND clk=1) THEN IF(count=“0000“) THEN,count=preset-1; -置整数分频值N outclk2=1; ELSE count=count-1; -模N计数器减法计数 outclk2=0; END IF; END IF; END PROCESS; PROCESS(outclk2)
6、,BEGIN IF(outclk2event AND outclk2=1) THEN divide2=NOT divide2; -输出时钟二分频 END IF; END PROCESS; END deccount_arch;,图7-2 半整数分频器外部接口,以上程序实现对时钟源inclk进行分频系数为N-0.5的分频,得到输出频率outclk2。preset输入端口是预置分频值N,本例中preset设为4位宽的位矢量,也即分频系数为16以内的半整数值。若分频系数大于16,需同时增大preset和count的位宽,两者的位宽则要求始终一致。本设计的外部接口如图7-2所示,程序中设置outclk1
7、是为了方便观察输入信号的波形,以与输出信号outclk2比较。,7.1.4 仿真结果 上述半整数分频器的仿真波形如图7-3所示。,图7-3 半整数分频器仿真波形图,7.1.5 下载验证 锁定引脚时将inclk连至CLK1,preset连至K0K3,outclk1连至TESTOUT1(测试1脚),outclk2连至TESTOUT2(测试2脚),综合适配后将配置数据下载入EDA实验平台(技术资料详见附录)的FPGA中(有关CLK1等引脚在FPGA芯片引脚中的序号, 请参见附录的附图1),通过改变K0K3状态观察测试1脚和测试2脚上的波形,测试结果与仿真结果一致。,7.2 音 乐 发 生 器,本设计
8、利用可编程逻辑器件配以一个小扬声器设计了一个音乐发生器,其结构如图7-4所示。本例产生的音乐选自“梁祝”片段。,图7-4 音乐产生器原理框图,7.2.1 音名与频率的关系 音乐的十二平均率规定:每两个八度音(如简谱中的中音1与高音1)之间的频率相差一倍。在两个八度音之间,又可分为十二个半音,每两个半音的频率比为。另外,音名A(简谱中的低音6)的频率为440 Hz,音名B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音1至高音1之间每个音名的频率如表7-1所示。,表7-1 简谱中的音名与频率的关系,由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入
9、取整。若基准频率过低,则由于分频系数过小,四舍五入取整后的误差较大。若基准频率过高,虽然误码差变小,但分频结构将变大。实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的基准频率。本例中选取4 MHz的基准频率。若无4 MHz的时钟频率,则可以先分频得到4 MHz或换一个新的基准频率。实际上,只要各个音名间的相对频率关系不变,C作1与D作1演奏出的音乐听起来都不会“走调”。,本例需要演奏的是“梁祝”片段,此片段内各音阶频率及相应的分频比如表7-2所示。为了减小输出的偶次谐波分量,最后输出到扬声器的波形应为对称方波,因此在到达扬声器之前,有一个二分频的分频器。表7-2中的分频比就
10、是从4 MHz频率二分频得到的2 MHz频率基础上计算得出的。,表7-2 各音阶频率对应的分频值,由于最大的分频系数为6067,故采用13位二进制计数器已能满足分频要求。在表7-2中,除给出了分频比以外,还给出了对应于各个音阶频率时计数器不同的初始值。对于不同的分频系数,只要加载不同的初始值即可。采用加载初始值而不是将分频输出译码反馈,可以有效地减少本设计占用可编程逻辑器件的资源,这也是同步计数器的一个常用设计技巧。 对于乐曲中的休止符,只要将分频系数设为0,即初始值为213-1=8191即可,此时扬声器将不会发声。,7.2.2 音长的控制 本例演奏的“梁祝”片段,最小的节拍为1/4拍。将1拍
11、的时长定为1秒,则只需要再提供一个4 Hz的时钟频率即可产生1/4拍的时长。演奏的时间控制通过记谱来完成,对于占用时间较长的节拍(一定是1/4拍的整数倍),如2/4拍,只需将该音名连续记录两次即可。 本例要求演奏时能循环进行,因此需另外设置一个时长计数器,当乐曲演奏完成时,保证能自动从头开始演奏。,7.2.3 演奏时音名的动态显示 如果有必要,可以通过一个数码管或LED来显示乐曲演奏时对应的音符。如用三个数码管,分别显示本例中的高、中、低音名,就可实现演奏的动态显示,且十分直观。本设计通过三个数码管来动态显示演奏时的音名,其中HIGH显示为高音区音阶(仅高音1),MED20显示的是中音区音阶(
12、中音6, 5, 3, 2, 1),LOW20显示的是低音区音阶(低音7, 6, 5, 3)。数码管显示的七段译码电路在此不作专门讨论。需要说明的是,七段译码电路输入为4位,而将HIGH、MED、LOW用作输入时,不足4位的高位均为低电平“0”。,图7-5 音乐产生器外部接口,7.2.4 VHDL程序 本设计的外部接口如图7-5所示,程序中定义了一个5位宽的zero40,这是由于实验平台上连向数码管的引脚在不赋值的情况下为高电平,这将导致显示音名错误,设置zero40就是要将没用到的引脚(高音的高3位、中音的高1位和低音的高1位)赋一个低电平,从而避免显示错误。,LIBRARY IEEE; US
13、E IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY song IS PORT( clk_4MHz,clk_4Hz: IN STD_LOGIC; -预置计数器和乐谱产生器的时钟,digit: BUFFER STD_LOGIC_VECTOR(6 DOWNTO 0); -高、中、低音数码管指示 zero:OUT STD_LOGIC_VECTOR(4 DOWNTO 0); -用于数码管高位置低 speaker: out STD_LOGIC -扬声器 ); END song; ARCHITECTURE song_arch
14、OF song IS,SIGNALdivider,origin:STD_LOGIC_VECTOR(12 DOWNTO 0); -13位计数值和预置值 SIGNAL counter:integer range 0 to 140; -7位计数器 SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0); -记录1/4拍 SIGNAL carrier:STD_LOGIC; BEGIN zero=“00000“; PROCESS(clk_4MHz),BEGIN IF(clk_4MHzevent AND clk_4MHz=1) THEN IF(divider=“11111111
15、11111“) THEN carrier=1; divider=origin; ELSE divider=divider+1; carrier=0; END IF; END IF; END PROCESS;,PROCESS(carrier) BEGIN IF(carrierevent AND carrier=1) THEN count=count+1; -输出时钟四分频 IF count=“00“ THEN speaker=1; ELSE speaker=0; END IF; END IF; END PROCESS;,PROCESS(clk_4Hz) BEGIN IF(clk_4Hzevent
16、 AND clk_4Hz=1) THEN IF(counter=140) THEN counter=0; ELSE counter=counter+1; END IF; END IF; CASE counter IS,WHEN 0=digitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigit=“0101000“;,WHEN 22=digitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigi
17、tdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigit=“0000110“;,WHEN 44=digitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigit=“0001000“;,WHEN 74=digitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigi
18、tdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigit=“0010000“;,WHEN 100=digitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigitdigit=“0000101“;,WHEN 126=digitdigitdigitdigitdigitdigitdigitdigitdigitdigitdi
19、gitdigitdigitdigitdigit=“0000000“; END CASE; CASE digit IS,WHEN “0000011“=originoriginoriginoriginoriginoriginoriginoriginoriginoriginorigin=“1111111111111“; -8191,END CASE; END PROCESS; END song_arch;,7.2.5 仿真结果 音乐发生器的仿真波形如图7-6所示。,图7-6 音乐发生器仿真波形图,7.2.6 下载验证 锁定引脚时将clk_4 MHz和clk_4 Hz分别连至CLK1和CLK2,spe
20、aker接扬声器,zero42、digit6接一个数码管,zero1、digit53接一个数码管,zero0、digit20接另一个数码管。综合适配后将配置数据下载入EDA实验平台(技术资料详见附录)的FPGA中(有关CLK1等引脚在FPGA芯片引脚中的序号,请参见附录的附图1),扬声器短接线短路(接入扬声器),即可听到MIDI音乐。,7.3 2FSK/2PSK信号产生器,7.3.1 2FSK基本原理 在通信领域中,为了传送信息,一般都将原始的信号进行某种变换变成适合于通信传输的信号形式。在数字通信系统中,一般将原始信号(图像、声音等)经过量化编码变成二进制码流,称为基带信号。,但数字基带信号
21、一般不适合于直接传输。例如,通过公共电话网络传输数字信号时,由于电话网络的带宽为4 kHz以下,因此数字信号不能直接在其上传输。此时可将数字信号进行调制,FSK即为一种常用的数字调制方式,由FSK调制的波形如图7-7示。,FSK又称移频键控, 它利用载频频率的变化来传递数字信息。数字调频信号可以分为相位离散和相位连续两种。若两个载频由不同的独立振荡器提供,它们之间相位互不相关,就称相位离散的数字调频信号;若两个频率由同一振荡信号源提供,只是对其中一个载频进行分频,这样产生的两个载频就是相位连续的数字调频信号。,图7-7 FSK调制的波形,7.3.2 2FSK信号产生器 由于FSK为模拟信号,而
22、FPGA只能产生数字信号,因此需对正弦信号采样并经模数变换来得到所需的FSK信号。本例由FPGA产生正弦信号的采样值。FSK信号发生器框图如图7-8所示,整个系统共分为分频器、m序列产生器、跳变检测、2:1数据选择器、正弦波信号产生器和DAC数模变换器等6部分,其中前5部分由FPGA器件完成。,图7-8 FSK调制信号发生器框图,1分频器 本实例中数据速率为1.2 kHz,要求产生1.2 kHz和2.4 kHz两个正弦信号。对正弦信号每周期取100个采样点,因此要求能产生3个时钟信号:1.2 kHz(数据速率)、120 kHz(产生1.2 kHz正弦信号的输入时钟)和240 kHz(产生2.4
23、 kHz正弦信号的输入时钟)。基准时钟由一个12 MHz的晶振提供。设计中要求一个50分频(产生240 kHz信号),再2分频(产生120 kHz信号)和100分频(产生1.2 kHz信号),共有三个分频值。,2m序列产生器 m序列是伪随机序列的一种,它的显著特点是:随机特性,预先可确定性,循环特性。正因为这些特性,使得m序列产生器在通信领域得到了广泛的应用。 本例用一种带有两个反馈抽头的3级反馈移位寄存器,得到一串“1110010”循环序列,并采取措施防止进入全“0”状态。通过更换时钟频率可以方便地改变输入码元的速率。m序列产生器的电路结构如图7-9所示。,图7-9 m序列产生器电路结构,3
24、跳变检测 将跳变检测引入正弦波的产生中,可以使每次基带码元上升沿或下降沿到来时,对应输出波形位于正弦波形的sin0处。引入跳变检测主要是为了便于观察,确保示波器上显示为一个连续的波形。 基带信号的跳变检测可以有很多方法,图7-10为一种便于在可编程逻辑器件中实现的方案。,图7-10 信号跳变检测电路,42:1数据选择器 2:1数据选择器用于选择正弦波产生器的两个输入时钟。一个时钟的频率为120 kHz,此时正弦波产生器产生一个1.2 kHz的正弦波,代表数字信号“0”;另一个时钟的频率为240 kHz,此时产生一个2.4 kHz的正弦波信号,代表数字信号“1”。,5正弦信号的产生 用数字电路和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 系统 设计 实例
链接地址:https://www.31doc.com/p-2980477.html