《基于FPGA的现代数字电路设计》-第7章_第1页
《基于FPGA的现代数字电路设计》-第7章_第2页
《基于FPGA的现代数字电路设计》-第7章_第3页
《基于FPGA的现代数字电路设计》-第7章_第4页
《基于FPGA的现代数字电路设计》-第7章_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.1分频电路设计7.1.1偶数分频电路偶数倍分频是最简单的一种分频方式,是通过计数器计数实现的,有多种实现方法。最常用的方法是,如要进行N倍偶数分频,由待分频的时钟触发计数器计数,当计数器从0计数到N/21时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数,以此循环下去。这种方法可以实现任意的偶数分频。给出使用VerilogHDL语言描述的16分频电路,下一页返回7.1分频电路设计

代码如下上一页下一页返回7.1分频电路设计

继续上一页下一页返回7.1分频电路设计

上面程序的仿真结果如图7.1所示,从中可以看出,在复位信号rst为高的情况下,一个clk_out的周期内有16个clk_in信号,说明clk_out的频率是clk_in的1/16,也就是在计数到3'b111时开始翻转,从而达到了16分频的目的。上一页下一页返回7.1分频电路设计

7.1.2奇数分频电路奇数倍分频有多种实现方法,下面介绍常用的错位“异或”法。如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转。如在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转,即在邻近的1和2时刻进行两次翻转,这样实现的三分频占空比为1/3或者2/3。若要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后将下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,就可得到占空比为50%的三分频时钟。上一页下一页返回7.1分频电路设计

这种错位“异或”法可以推广实现所有的奇数分频:对于实现占空比为50%的N倍奇数分频,首先采用上升沿触发的模N计数,计数到某一选定值时进行输出时钟翻转,然后经过(N-1)/2再次翻转得到一个占空比非50%奇数N分频时钟。同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同时,进行输出时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数N分频时钟。两个占空比非50%的N分频时钟相或运算,得到占空比为50%的奇数N分频时钟。上一页下一页返回7.1分频电路设计

使用VerilogHDL语言描述的三分频电路,占空比为50%,代码如下:moduleclk_div_3(clk_in,rst_n,clk_out);inputclk_in;inputrst_n;outputclk_out;reg[1:0]cnt,cnt1;regclk_1to3p,clk_1to3n;上一页下一页返回7.1分频电路设计

always@(posedgeclk_in)beginif(!rst_n)begincnt<=0;clk_1to3p<=0;endelsebeginif(cnt==2’b10)begincnt<=0;clk_1to3p<=clk_1to3p;上一页下一页返回7.1分频电路设计

endelsebegincnt<=cnt+1;clk_1to3p<=!clk_1to3p;endendendalways@(negedgeclk_in)begin上一页下一页返回7.1分频电路设计

if(!rst_n)begincnt1<=0;clk_1to3n<=0;endelsebeginif(cnt1==2’b10)begincnt1<=0;clk_1to3n<=clk_1to3n;上一页下一页返回7.1分频电路设计

endelsebegincnt1<=cnt1+1;clk_1to3n<=!clk_1to3n;endendendassignclk_out=clk_1to3n|clk_1to3n;endmodule上一页下一页返回7.1分频电路设计

上述程序的仿真结果如图7.2所示,从中可以看出,在复位信号rst_n为高的情况下,一个clk_out的周期内有3个clk_in信号,表明clk_out的频率是clk_in的1/3,达到了三分频的目的。上一页返回7.2同步整形电路在数字电路设计中经常需要将外部输入的异步信号进行同步处理,即让外部信号与系统时钟同步,有时候外部输入信号为不规则的波形,则需要对其进行整形,使之成为具有一个时钟周期长的脉冲波形。同步整形的方法是通过时钟对外部输入的异步信号连续抽样而得到同步信号,然后由前后两次的同步抽样进行逻辑组合,从而得到整形信号。下面给出利用时钟上升沿抽样得到同步整形设计的例子,具体代码如下:modulesyn_sam(clk,rst_n,din,dout);inputclk;下一页返回7.2同步整形电路inputrst_n;inputdin;outputdout;regtemp1,temp2;always@(posedgeclk)beginif(!rst_n)begintemp1<=0;temp2<=0;上一页下一页返回7.2同步整形电路endelsebegintemp1<=din;temp2<=temp1;endend仿真结果如图7.3所示,该程序对输入信号din进行两次抽样,在时钟的上升沿,由dout=temp1&&(~temp2)可知,信号不是在改变值之后立即变化的,如果din=1小于一个时钟宽,则有temp1=1,temp2=0(虽然进程中改变了值,但不会立即被使用),则dout=1;上一页下一页返回7.2同步整形电路如果din=1超过一个时钟宽,则有temp1=1,temp2=1(前次执行进程后,temp2的值已经改变为1),则dout=0;如果din在时钟周期内出现抖动,那么因为不执行进程,所以输出无影响,还是被整成一个时钟宽度。所以不管是输入信号din=1的时间是长还是短,有效高电平宽度都等于时钟的周期。下面使用VHDL语言编写的同样功能的程序,代码如下:libraryieee;useieee.std_logic_1164.all;entitysyn_samisport(din,clk:instd_logic;上一页下一页返回7.2同步整形电路dout:outstd_logic);endsyn_sam;architecturebehaofsyn_samissignaltemp1,temp2:std_logic;beginprocess(clk)beginifclk'eventandclk='1'then上一页下一页返回7.2同步整形电路temp1<=din;temp2<=temp1;endif;dout<=temp1&&(~temp2);endprocess;endbeha;上一页返回7.3按键电路设计7.3.1按键的连接方式按键接口分为独立式和矩阵键盘式两大类。独立式按键是指每个按键都有一个信号线与FPGA/CPLD的引脚相连,所有按键有一个公共地和公共正极,每个按键彼此独立互不影响。独立式按键电路结构如图7.4所示,每个按键一端接地(GND),另一端分两路,一路通过一个10的上拉电阻接电源正极,另一路接入FPGA或CPLD的I/O引脚。当按键按下,相应的I/O引脚直接接地变为低电平‘0’,告诉FPGA或CPLD已按下;当按键没有按下时,相应的I/O引脚是高电平‘1’,告诉FPGA或CPLD没有按下。下一页返回7.3按键电路设计

矩阵键盘式按键也是常见的,如手机键盘和ATM机的输入键盘,其电路结构如图7.5示。这种键盘由行线和列线组成,按键位于行、列线的交叉点上,共16个按键。当某个按键按下时,按键相应行线和列线就会相通,告诉FPGA或CPLD哪个位置的按键已按下。一个4×4的行、列结构构成一个含有16个按键的键盘,却只占用8个I/O口线,因此,矩阵键盘式按键较之独立式按键可以节省很多I/O口。上一页下一页返回7.3按键电路设计

7.3.2矩阵键盘工作原理矩阵键盘中识别按键的方法采用扫描法。在图7.5中的连接方式中,当某个按键按下时,按键相应行线和列线就会相通,图中的四根列线分别接在FPGA或CPLD的I/O引脚上,让这四个引脚依次输出“0111”“1011”“1101”“1110”信号,这样每个时刻都有一根列线是低电平,就像低电平信号在四根列线上不停地扫描一样。假若某时刻8号按键按下,第2条行线和第1条列线连通,恰好这时第1条列线出现低电平,上一页下一页返回7.3按键电路设计

那么第2条行线也会变成低电平,连接第2条行线的I/O引脚也为低电平,该时刻四根行线的输入信号是“1011”,四根列线的输出信号是“0111”,出现这种情况,我们就认为8号按键被按下,“10110111”被认为是8号按键的编码。按下其他按键的机理基本类似。按键扫描模块的仿真结果如图7.6所示。上一页下一页返回7.3按键电路设计

7.3.3按键防抖电路的设计按键大多是机械式开关结构,按键开关在闭合时是不会马上接通的,在断开时也不会一下子断开,而是会产生一系列的抖动现象,在释放按键时,按键信号稳定前出现了多个段脉冲。若将这样的信号直接送到计数器之类的时序电路,结果将可能发生计数超过一次的误动作,被误以为键盘按了多次。因此必须加上抖动消除电路,除去杂脉冲。常见的消抖方法可分为软件和硬件两种方式。软件消抖通过计数器对键值进行判断,当某一键值保持一段时间不变时,才确认其为有效值。简单的硬件消抖主要通过电容的充放电来消除按键的毛刺。上一页下一页返回7.3按键电路设计

对于稳定性要求比较高的应用,需要借助专门的防抖芯片来实现消抖。不同开关的最长抖动时间也不同,抖动时间的长短和机械开关特性有关,一般为5~10ms。也有某些开关的抖动时间长达20ms,甚至更长。一般按键按下去的时间由操作人员决定,通常为零点几秒至数秒。用FPGA实现防抖电路的原理是通过定期采样的方法来实现的,在一定时间内对按键信息只采样一次,以避免出现抖动现象。在实现时需要注意计数器的时间门限的取值,如果门限值太大,即采样时间过长,会漏掉正确的信号;如果计数器的门限值过小,即采样时间太短,则会将毛刺误认为是正确信号。一般我们认为计数器的门限值为50ms。上一页返回7.4数码管显示电路设计7.4.1数码管的工作原理数码管是用8段发光二极管封装在一起组成的“8”字形器件,如图7.8(a)所示,数码管常用段数一般为7段另加一个小数点,每一段是一个条形发光二极管,把所有段的阴极相连,并连接到地成为共阴极,如图7.8(b)所示,另一端接驱动电路输出端(FPGA输出引脚);所有段的阳极相连,并连接到电源成为共阳极,如图7.8(c)所示,另一端接驱动电路输出端。驱动输出端的输出电压就决定这些发光二极管是点亮还是熄灭,这样驱动输出端的不同输出组合就可以使数码管显示不同的数字,如0~9和字符A~F。要使数码管显示不同的数字和字符,必须使驱动输出端输出相应的字形编码。下一页返回7.4数码管显示电路设计

7.4.2静态显示原理和FPGA驱动设计所谓静态显示,是指在显示字符时相应的发光二极管字段固定地接在FPGA引脚上。采用这种显示方式的各个数码管彼此独立,公共端恒定接地或接正电源,每个数码管占用8个FPGA引脚,FPGA引脚只要有输出,数码管就会显示相应字符,并保持不变,直到FPGA引脚有新的输出。采用静态显示方式,其优点是较小的电流可获得较好的亮度,占用CPU时间少,编程简单。其缺点是占用FPGA引脚多,尤其是有多个数码管时的情况,接线复杂,成本高。因此静态显示方式只适合显示位数较少的场合。上一页下一页返回7.4数码管显示电路设计

7.4.3动态显示原理和FPGA驱动设计假如N个LED数码管以静态方式显示,就需用到8×N条引脚线。在较为复杂的系统中,FPGA的引脚端资源是有限的,对于多个LED数码管显示很不经济,因此采用扫描方式来实现LED数码管动态显示。所谓动态扫描显示,是各个数码管的段选线并联在一起,由8位FPGA引脚线控制,每个数码管的片选线连接到另外的FPGA引脚线,各位片选线一次有效,依次点亮各个LED数码管,使各个数码管循环进行显示,即一个数码管显示之后另一个数码管马上显示,利用人眼的视觉暂留特性,可以到多个数码管同时显示的效果,如图7.10所示。上一页下一页返回7.4数码管显示电路设计

采用动态扫描方式来实现数码管动态显示,需要很好地控制数码管之间的延时。根据人眼视觉暂留原理,数码管每秒导通16次以上,人眼就无法分辨LED数码管短暂的不亮,认为是一直点亮的(其实LED数码管本身是以一定频率在闪动的)。但是,导通频率也不是越大越好,因为LED数码管达到一定亮度需要一定时间,如果延时控制得不好会出现闪动,或者亮度不够。根据实践经验,最少0.005s可以达到满意的效果。修改延时,亦能得到更多的显示效果,如加长延时,使得数码管显示一小段时间,再点亮下一个,可得到数码管逐个显示的效果。流水灯就是根据这个原理设计的。上一页下一页返回7.4数码管显示电路设计

另外,当显示的字符有变化时,可在延时到达后送一个低电平(共阴极数码管)让LED数码管短暂熄灭,再显示下一个字符,这可使得在视觉上字符的变化更清晰。采用动态扫描方式可以节约FPGA的I/O引脚数量,硬件电路也比静态显示方式简单,只是亮度要差一些。每次向数码管写数据时,需要先选通1个数码管,然后送出该数码管需要的显示数据。下面给出一段实现动态显示的VHDL程序代码,其功能是在8个数码管上面分别显示01234567。上一页下一页返回7.4数码管显示电路设计

在程序中,p1和p2进程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论