计数器与分频器VHDL设计_第1页
计数器与分频器VHDL设计_第2页
计数器与分频器VHDL设计_第3页
计数器与分频器VHDL设计_第4页
计数器与分频器VHDL设计_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

EDA课程的地位和作用

项目8

时序电路的VHDL设计

工作任务:1.基础知识学习2.通用计数器设计3.十进制减法计数器设计4.十二进制加法计数器设计8-2计数器的VHDL设计1.基础知识学习计数器功能:对输入脉冲计数计数器应用:计数、定时、控制、分频等计数器分类:

按同步方式分:同步计数器、异步计数器

同步:受同一个时钟控制异步:不受同一个时钟控制

按计数方向分:加法计数器、减法计数器

按模数分:二进制、五进制、十进制等计数器:1.基础知识学习PLD原理PLD分类CPLD:PAL扩展型FPGA:逻辑单元型可编程逻辑器件(PLD):输入电路与门阵列或门阵列输出电路输入输出1.基础知识学习PLD优点:

密度大功耗低速度快结构灵活开发工具先进可编程逻辑器件(PLD):VHDL语言要点:结合VHDL源程序实例讲解2.通用计数器设计设计一个通用计数器,要求:复位信号为高电平时计数器清零或赋初值;使能信号为高电平时计数器正常工作,低电平时计数值不变;计数方向控制信号为高电平时,按加法规则计数,即来一个时钟计数器加1,计数器达到最大值时再来一个时钟自动清零;否则,按减法规则计数,减到0时再来一个时钟计数器为最大值;计数器的模可调;计数器触发边沿可调。设计要求:resetenableclkQ[0…N-1]通用计数器dir(1)构思——拟定设计方案CDIO(构思、设计、实现、运行)理念(2)设计——编写VHDL源程序方案一、用硬件搭接,缺点是电路复杂,焊点多,可靠性差,不够灵活;方案二、用单片机实现,但可靠性差,速度慢;方案三、用硬件描述语言(HDL)编程,用可编程逻辑器件(PLD)实现,好处是可靠性高、灵活性好。

VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entitycountnis

generic(N:integer:=10);--N为正整数 port ( clk,dir :instd_logic; reset :instd_logic; enable:instd_logic; q:outintegerrange0toN-1 );endentity;architecturertlofcountnisbeginprocess(clk)

variablecnt :integerrange0toN-1;begin

ifreset='1'then

cnt:=0;--计数器复位

elsifenable='1'then--

计数器正常工作 if(clk'eventandclk='1')then--时钟上升沿到来

ifdir='1'then

if(cnt<N-1)then--加法计数cnt:=cnt+1;elsecnt:=0;endif;

else

if(cnt>0)then--减法计数cnt:=cnt-1;elsecnt:=N-1;endif;

endif;

endif;

endif;q<=cnt;--输出计数值endprocess;endrtl;(3)实现——编辑、编译、仿真、编程由波形图可以看出,由于dir为高电平,N=10,这时countn就是一个十进制加法计数器。如果要生成其它进制的加法计数器,只要修改generic类属变量参数N的值即可。例如:设计五进制计数器时,令N=5;设计十二进制计数器时,令N=12。如果需要对输入脉冲下降沿计数,只要将if(clk‘eventandclk=‘1’)then语句中的’1’改为’0’即可。(4)运行——测试、改进、总结3.学中做——十进制减法计数器要求:设计一个十进制减法计数器,初值为9。构思:

方案一、仿照countn重新设计,好处是可以省掉加法计数部分的的语句,节省资源,但改动地方较多,容易出错;

方案二、在通用计数器countn源程序的基础上稍作修改即可满足设计要求,好处是可以简化程序设计,但占用资源稍多。设计:采用方案二。将countn中语句ifreset=‘1’thencnt:=0;

改为ifreset=‘1’thencnt:=9;实现初值为9的要求;仿真时令dir为低电平,实现减法计数的要求。3.学中做——十进制减法计数器图中可以看出,reset为高电平时计数器输出为9;由于dir为低电平,N=10,所以countn变成了一个十进制减法计数器。实现:编辑、编译、仿真、编程运行:测试、改进、总结4.做中学——设计一个十二进制加法计数器

设计要求:输入输出resetenableclkQ3Q2Q1Q01XX000000X不变不变不变不变01计数器+1(N=11时清零)十二进制加法计数器功能表(1)构思——拟定设计方案resetenableclkQ[0…11]十二进制加法计数器dir‘1’(2)设计——编写VHDL源程序

将countn源程序中的语句generic(N:integer:=10)改为generic(N:integer:=12即可。方案一、仿照countn重新设计,好处是可以省掉减法计数部分的语句,节省资源;方案二、在通用计数器countn源程序的基础上稍作修改,好处是可以简化程序设计。

(3)实现——编辑、编译、仿真、编程(4)运行——测试、改进、总结仿真时令dir为高电平。图中可以看出,由于dir=‘1’,N=12,这时countn就变成一个十二进制加法计数器。课后作业:按照“构思、设计、实现、运行”的步骤,完成初值为5的六进制减法计数器设计。课堂练习:按照“构思、设计、实现、运行”的步骤,设计一个初值为2的五进制双向计数器。工作任务:1.分频器概念2.通用分频器设计3.占空比50%的奇数分频器设计8-3分频器的VHDL设计1.分频器概念分频器功能:把频率较高的信号变成频率较低的信号。分频器参数:分频系数:rate=fin/fout

占空比:输出脉冲持续高电平的时间:周期。分频器种类:偶数分频器、奇数分频器、占空比可调的分频器。clkinclkout分频器2.设计举例——通用分频器设计要求:分频系数可调,占空比为可调(占空比为50%时分频系数不能是奇数)。构思:

假设,分频系数为n,占空比为m:n(m,n为正整数,且m<n;m:n=50%时n不能为奇数)。方案一、用硬件搭接,缺点是电路复杂,焊点多,可靠性、灵活性差;

方案二、用单片机实现,虽然灵活性较好,但速度慢;

方案三、用硬件描述语言(HDL)编程,用可编程逻辑器件(PLD)实现,好处是可靠性高、灵活性好。clkinclkout分频器2.设计举例——通用分频器设计:采用方案三例如,设计占空比为30%的10分频器,其输入输出波形如下图所示。可以看出,输出1个周期=输入信号的10个周期,前3个输入周期,输出高电平;后7个输入周期,输出低电平。

方法:设计一个摸数为分频系数n的计数器,对输入时钟脉冲计数,当计数值为0~m-1时,输出高电平;计数值为m~n-1时,输出低电平。

源程序:见下页通用分频器的VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityfdivnisgeneric(n:integer:=10;m:integer:=3);--n为分频系数,占空比m:n;占空比=50%时n不能为奇数port(clkin:INstd_logic;clkout:OUTstd_logic);endfdivn;architectureaoffdivnissignalcnt:integerrange0ton-1;--定义中间信号(这里为么不用变量?信号与变量有何不同?)beginprocess(clkin)beginif(clkin'eventandclkin='1')thenif(cnt<n-1)thencnt<=cnt+1;elsecnt<=0;endif;endif;endprocess;clkout<='1'whencnt<melse'0';enda;从波形图可以看到,clkout是clkin的10分频,且占空比为3:10,即30%。修改上述程序中generic类属变量m和n的参数值,即可得到不同分频系数和占空比的分频器。实现:编辑、编译、仿真、编程运行:测试、改进、总结做做看——设计一个占空比40%的5分频器做做看——设计占空比40%的5分频器构思:因分频系数为5,占空比40%,故取n=5,m=2。设计:修改fdivn中generic类属变量m和n的参数值,令n=5,m=2。实现:修改程序并存盘,编译、仿真。

3.学中做——占空比50%的奇数分频器设计设计要求:分频系数为奇数,占空比50%构思:

分析:因为计数器模数为奇数,占空比为50%,所以计数器输出的前半个周期和后半个周期所包含的输入时钟的周期数不是整数。例如,5分频器,clkout的前半个周期包含2.5个clkin周期,后半个周期包含2.5个clkin周期。方案:设计两个摸为分频系数的计数器,一个对输入时钟的上升沿计数,另一个对输入时钟的下降沿计数,然后把这两个计数器的输出接到“或门”的输入,“或门”的输做分频器的输出clkout。设计:

源程序:占空比为50%的奇数分频器 占空比为50%的奇数分频器VHDL源程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityfdivoisgeneric(N:integer:=5);--分频系数=N,N是奇数port(clkin:instd_logic;clkout:outstd_logic);endfdivo;architectureaoffdivoissignalcnt1,cnt2:integerrange0toN-1;beginprocess(clkin)beginif(clkin'eventandclkin='1')then--上升沿计数if(cnt1<N-1)thencnt1<=cnt1+1;else cnt1<=0; endif;

温馨提示

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

最新文档

评论

0/150

提交评论