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

下载本文档

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

文档简介

1、EDA课程的地位和作用课程的地位和作用项目项目8 时序电路的时序电路的VHDL设计设计工作任务:工作任务:n1. 1. 基础知识学习基础知识学习n2. 2. 通用计数器设计通用计数器设计n3. 3. 十进制减法计数器设计十进制减法计数器设计n4. 4. 十二进制加法计数器设计十二进制加法计数器设计8-2 计数器的计数器的VHDL设计设计1. 1. 基础知识学习基础知识学习n计数器功能:对输入脉冲计数计数器功能:对输入脉冲计数n计数器应用:计数、定时、控制、分频等计数器应用:计数、定时、控制、分频等n计数器分类:计数器分类:n 按同步方式分按同步方式分:同步计数器、异步计数器:同步计数器、异步计

2、数器n 同步:受同一个时钟控制同步:受同一个时钟控制n 异步:不受同一个时钟控制异步:不受同一个时钟控制n 按计数方向分按计数方向分:加法计数器、减法计数器:加法计数器、减法计数器n 按模数分按模数分:二进制、五进制、十进制等:二进制、五进制、十进制等计数器:计数器:1. 基础知识学习基础知识学习nPLD原理原理nPLD分类分类CPLD:PAL扩展型扩展型FPGA:逻辑单元型:逻辑单元型可编程逻辑器件(可编程逻辑器件(PLD):):输入电路与门阵列或门阵列输出电路输入输出1. 基础知识学习基础知识学习nPLD优点:优点: 密度大密度大 功耗低功耗低 速度快速度快 结构灵活结构灵活 开发工具先进

3、开发工具先进可编程逻辑器件(可编程逻辑器件(PLD):):VHDL语言要点语言要点:结合结合VHDL源程序实例讲解源程序实例讲解2. 2. 通用计数器设计通用计数器设计设计一个通用计数器,要求:设计一个通用计数器,要求:n复位信号为高电平时计数器清零或赋初值;复位信号为高电平时计数器清零或赋初值;n使能信号为高电平时计数器正常工作,低电平时使能信号为高电平时计数器正常工作,低电平时计数值不变;计数值不变;n计数方向控制信号为高电平时,按加法规则计数,计数方向控制信号为高电平时,按加法规则计数,即来一个时钟计数器加即来一个时钟计数器加1 1,计数器达到最大值时再,计数器达到最大值时再来一个时钟自

4、动清零;否则,按减法规则计数,来一个时钟自动清零;否则,按减法规则计数,减到减到0 0时再来一个时钟计数器为最大值;时再来一个时钟计数器为最大值;n计数器的模可调计数器的模可调; ;n计数器触发边沿可调。计数器触发边沿可调。设计要求:设计要求:resetenableclkQ0N-1通用计数器通用计数器dir(1)构思)构思拟定设计方案拟定设计方案CDIO(构思、设计、实现、运行构思、设计、实现、运行)理念)理念(2)设计)设计编写编写VHDL源程序源程序n方案一方案一、用硬件搭接,缺、用硬件搭接,缺点是电路复杂,焊点多,点是电路复杂,焊点多,可靠性差,不够灵活;可靠性差,不够灵活;n方案二方案

5、二、用单片机实现,、用单片机实现,但可靠性差,速度慢;但可靠性差,速度慢;n方案三方案三、用硬件描述语言、用硬件描述语言(HDL)编程,用可编程逻编程,用可编程逻辑器件(辑器件(PLD)实现,好)实现,好处是可靠性高、灵活性好。处是可靠性高、灵活性好。 VHDL源程序源程序library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity countn is generic (N: integer:=10); -N为正整数为正整数port(clk,dir : in std_logic;reset : in std_l

6、ogic;enable : in std_logic;q : out integer range 0 to N-1);end entity;architecture rtl of countn is begin process (clk) variable cnt : integer range 0 to N-1; begin if reset = 1 then cnt := 0; - 计数器复位计数器复位 elsif enable = 1 then - 计数器正常工作计数器正常工作 if(clkevent and clk=1) then -时钟上升沿到来时钟上升沿到来 if dir=1 th

7、en if(cnt0 ) then -减法计数减法计数 cnt:= cnt-1; else cnt := N-1; end if; end if; end if; end if; q = cnt; - 输出计数值输出计数值 end process;end rtl;(3 3)实现)实现编辑、编译、仿真、编程编辑、编译、仿真、编程n由波形图可以看出,由波形图可以看出, 由于由于dirdir为高电平为高电平,N=10N=10,这时,这时countncountn就是一个就是一个十进制十进制加法计数器加法计数器。n如果要生成其它进制的加法计数器,只要修改如果要生成其它进制的加法计数器,只要修改gener

8、icgeneric类类属变量参数属变量参数N N的值即可。例如:设计五进制计数器时,令的值即可。例如:设计五进制计数器时,令N=5N=5;设计十二进制计数器时,令;设计十二进制计数器时,令N=12N=12。n如果需要对输入脉冲下降沿计数,只要将如果需要对输入脉冲下降沿计数,只要将if(clkevent if(clkevent and clk=and clk=1)1) then then 语句中的语句中的11改为改为00即可即可。(4 4)运行)运行测试、改进、总结测试、改进、总结3. 学中做学中做十进制减法计数器十进制减法计数器n要求:要求: 设计一个设计一个十进制十进制减法计数器,初值为减法

9、计数器,初值为9。n构思:构思: 方案一方案一、仿照、仿照countn重新设计,好处是可以省掉加法计数重新设计,好处是可以省掉加法计数部分的的语句,节省资源,但改动地方较多,容易出错;部分的的语句,节省资源,但改动地方较多,容易出错; 方案二方案二、在通用计数器、在通用计数器countn源程序的基础上稍作修改即源程序的基础上稍作修改即可满足设计要求,好处是可以简化程序设计,但占用资源可满足设计要求,好处是可以简化程序设计,但占用资源稍多。稍多。n设计:设计: 采用方案二。将采用方案二。将countn中语句中语句if reset = 1 then cnt := 0; 改改为为if reset =

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

11、求:设计要求:输输 入入输输 出出resetresetenableenableclkclkQ3Q3Q2Q2Q1Q1Q0Q01 1X XX X0 00 00 00 00 00 0X X不变不变不变不变不变不变不变不变0 01 1计数器计数器+1(N=11+1(N=11时清零时清零) )十二进制加法计数器功能表十二进制加法计数器功能表 (1)构思)构思拟定设计方案拟定设计方案resetenableclkQ011十二进制加法计数器十二进制加法计数器dir1 (2)设计)设计编写编写VHDL源程序源程序 将将countn源程序中的语句源程序中的语句generic(N: integer:=10)改为改为

12、generic(N: integer:= 12即可。即可。n方案一方案一、仿照、仿照countn重新重新设计,好处是可以省掉减设计,好处是可以省掉减法计数部分的语句,节省法计数部分的语句,节省资源;资源;n方案二方案二、在通用计数器、在通用计数器countn源程序的基础上稍源程序的基础上稍作修改,好处是可以简化作修改,好处是可以简化程序设计。程序设计。 (3)实现)实现编辑、编译、仿真、编程编辑、编译、仿真、编程(4)运行)运行测试、改进、总结测试、改进、总结n仿真时令仿真时令dir为高电平。图中可以看出,为高电平。图中可以看出, 由于由于dir=1,N=12,这时,这时countn就变成一个

13、就变成一个十二进制加法计数器。十二进制加法计数器。课后作业:课后作业:n按照按照“构思、设计、实现、运行构思、设计、实现、运行”的步骤,的步骤,完成初值为完成初值为5的六进制减法计数器设计。的六进制减法计数器设计。课堂练习:课堂练习:n按照按照“构思、设计、实现、运行构思、设计、实现、运行”的步骤,的步骤,设计一个初值为设计一个初值为2的五进制双向计数器。的五进制双向计数器。工作任务:工作任务:n1. 分频器概念分频器概念n2. 通用分频器设计通用分频器设计n3. 占空比占空比50%的奇数分频器设计的奇数分频器设计8-3 分频器的分频器的VHDL设计设计1. 1. 分频器概念分频器概念n分频器

14、功能:分频器功能: 把频率较高的信号变成频率较低的信号。把频率较高的信号变成频率较低的信号。n分频器参数:分频器参数: 分频系数:分频系数: rate=rate=f fin in / / f foutout 占空比:输出脉冲持续高电平的时间:周期。占空比:输出脉冲持续高电平的时间:周期。n分频器种类:分频器种类: 偶数分频器、奇数分频器、占空比可调的分频器。偶数分频器、奇数分频器、占空比可调的分频器。 clkinclkout分频器分频器2. 设计举例设计举例通用分频器通用分频器n设计要求设计要求:分频系数可调,占空比为可调(占空比为:分频系数可调,占空比为可调(占空比为50%时分频系数不能是奇

15、数时分频系数不能是奇数 )。)。n构思构思: 假设,分频系数为假设,分频系数为n,占空比为,占空比为m:n(m,n为正整数,且为正整数,且mn;m:n=50%时时n不能为奇数不能为奇数 )。)。 方案一方案一、用硬件搭接,缺点是电路复杂,焊点多,可靠性、用硬件搭接,缺点是电路复杂,焊点多,可靠性、灵活性差;灵活性差; 方案二方案二、用单片机实现,虽然灵活性较好,但速度慢;、用单片机实现,虽然灵活性较好,但速度慢; 方案三方案三、用硬件描述语言(、用硬件描述语言(HDL)编程,用可编程逻辑器件编程,用可编程逻辑器件(PLD)实现,好处是可靠性高、灵活性好。)实现,好处是可靠性高、灵活性好。clk

16、inclkout分频器分频器2. 设计举例设计举例通用分频器通用分频器n设计:设计:采用方案三采用方案三 例如,例如,设计占空比为设计占空比为30%的的10分频器分频器,其输入输出波形如下,其输入输出波形如下图所示。可以看出,输出图所示。可以看出,输出1个周期个周期=输入信号的输入信号的10个周期,个周期,前前3个输入周期,输出高电平;后个输入周期,输出高电平;后7个输入周期,输出低电个输入周期,输出低电平。平。 方法方法:设计一个摸数为分频系数:设计一个摸数为分频系数n的计数器,对输入时钟脉的计数器,对输入时钟脉冲计数,当计数值为冲计数,当计数值为0m-1时,输出高电平;计数值为时,输出高电

17、平;计数值为mn-1时,输出低电平。时,输出低电平。 源程序源程序:见下页:见下页通用分频器的通用分频器的VHDL源程序源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fdivn is generic( n: integer:=10; m: integer:=3 ); - n为分频系数,为分频系数,占空比占空比m:n;占空比;占空比=50%时时n不能为奇数不能为奇数 port( clkin : IN std_logic;

18、 clkout : OUT std_logic );end fdivn;architecture a of fdivn is signal cnt: integer range 0 to n-1;-定义中间信号定义中间信号(这里为么不用变量?信号与变量有何不同?)begin process(clkin) begin if(clkinevent and clkin=1) then if(cntn-1) then cnt = cnt+1; else cnt = 0; end if; end if; end process; clkout = 1 when cntm else 0;end a;n从波

19、形图可以看到,从波形图可以看到,clkout是是clkin的的10分频,且分频,且占空比为占空比为3:10,即,即30%。n修改上述程序中修改上述程序中generic类属变量类属变量m和和n的参数值,的参数值,即可得到不同分频系数和占空比的分频器。即可得到不同分频系数和占空比的分频器。n实现:编辑、编译、仿真、编程实现:编辑、编译、仿真、编程n运行:测试、改进、总结运行:测试、改进、总结n做做看做做看设计一个占空比设计一个占空比40%的的5分频器分频器做做看做做看设计占空比设计占空比40%的的5分频器分频器n构思构思:因分频系数为:因分频系数为5,占空比,占空比40%,故取,故取n=5, m=

20、2。n设计设计:修改:修改fdivn中中generic类属变量类属变量m和和n的参数的参数值,令值,令n=5,m=2。n实现实现:修改程序并存盘,编译、仿真。:修改程序并存盘,编译、仿真。 3. 学中做学中做占空比占空比50%的奇数分频器设计的奇数分频器设计n设计要求:分频系数为奇数,占空比设计要求:分频系数为奇数,占空比50%n构思:构思: 分析:分析:因为计数器模数为奇数,占空比为因为计数器模数为奇数,占空比为50%,所以计数,所以计数器输出的前半个周期和后半个周期所包含的输入时钟的周器输出的前半个周期和后半个周期所包含的输入时钟的周期数不是整数。例如,期数不是整数。例如,5分频器,分频器

21、,clkout的前半个周期包含的前半个周期包含2.5个个clkin周期,后半个周期包含周期,后半个周期包含2.5个个clkin周期。周期。 方案方案:设计两个摸为分频系数的计数器,一个对输入时钟:设计两个摸为分频系数的计数器,一个对输入时钟的上升沿计数,另一个对输入时钟的下降沿计数,然后把的上升沿计数,另一个对输入时钟的下降沿计数,然后把这两个计数器的输出接到这两个计数器的输出接到“或门或门”的输入,的输入, “或门或门”的的输做分频器的输出输做分频器的输出clkout。n设计:设计: 源程序源程序:占空比为:占空比为50%的奇数分频器的奇数分频器占空比为占空比为50%的奇数分频器的奇数分频器

22、VHDL源程序源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fdivo is generic(N: integer:=5); -分频系数分频系数=N,N是奇数是奇数 port( clkin : in std_logic; clkout: out std_logic );end fdivo;architecture a of fdivo is signal cnt1, cnt2: integer range 0 to N-1;begin process(clkin) begin if(clkinevent and clkin=1 ) then -上升沿计数上升沿计数 if(cnt1N-1) then cnt1

温馨提示

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

评论

0/150

提交评论