文档库 最新最全的文档下载
当前位置:文档库 › 基于CPLD的脉冲计数器的设计

基于CPLD的脉冲计数器的设计

####

毕业设计(论文)说明书

作者### 学号1###

系部电子##系

专业EE

题目基于CPLD的脉冲计数器的设计

指导教师XX

评阅教师XX

完成时间:2010 年3 月10日

毕业设计(论文)中文摘要

毕业设计(论文)外文摘要

目录

1序言 (5)

2.CPLD芯片及VHDL语言介绍 (5)

2.1CPLD芯片介绍 (5)

2.1.1 概述 (5)

2.1.2MAX7000特点 (5)

2.1.3 EPM7160S (7)

3 脉冲计数器的设计原理 (8)

3.1器件特点 (9)

3.2如何使用 (10)

3.3计数器组模块 (10)

3.3.1计数器作用 (10)

3.3.2主要的指标 (10)

3.4控制器模块 (11)

3.4.1控制器 (11)

3.4.2主要功能 (12)

3.4.3控制器模块 (12)

3.5译码器模块 (13)

3.5.1译码器概述 (13)

3.5.2译码器分类 (13)

3.5.3译码器工作原理 (14)

3.5.4译码器模块 (14)

3.6分频器模块 (15)

4功能仿真与测试 (16)

结论 (17)

致谢 (17)

主要参考文献 (17)

1序言

CPLD( Complex Programmable Logic Device )是一种复杂的用户可编程逻辑器件,由于用连续连接结构,易于预测延时,从而使电路仿真更加准确。利用CPLD高速、高可靠性、可编程、体积小的特点,采用CPLD+HDL的EDA开发方案,必将有效解决传统的电子系统中由来已久的设计瓶颈。脉冲计数器是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生较大的时延,可靠性差。随着复杂可编程逻辑器件的广泛应用,以EDA工具作为开发手段,将使整个系统大大简化,提高整体性能和可靠性。

本文选用Altera 公司的MAX7000 系列芯片EPM7160S,实现了对16路脉冲进行计数。具有体积小、可靠性高、低功耗、开发周期的特点。

2.CPLD芯片及VHDL语言介绍

2.1 CPLD芯片介绍

2.1.1 概述

ALTERA的MAX7000系列CPLD提供高性能的逻辑解决方案,密度从600-10000个可用门不等(32-512个宏单元),同时MAX7000系列的同一密度产品还提供多种封装形式,对于各种应用具有相当灵活的适应性。

2.1.2 MAX7000特点

高性能低功耗CMOS EEPROM技术

遵循IEEE Std. 1149.1 Joint Test Action Group (JTAG)– ISP circuitry compliant with IEEE Std. 1532

标准ISP特性

5–ns pin to pin延时,最高频率175.4 MHz

I/O接口支持5V、3.3V和2.5V等多种电平

PCI兼容

功能:本设计采用EDA技术,根据图1所示的脉冲计数器电路图,按照自顶向下的设计思路,先编写各个模块的VHDL源程序,然后再对各个模块进行组合,最后编写顶层描述的VHDL源程序。如图2所示,16位计数器是设计的最低层,而计数器组、译码器、控制器,分频器为设计的第二层,脉冲计数器组装程序为设计的最高层。复杂可编程逻辑器件(CPLD)几乎可适用于所有的门阵列和各种规模的数字集成电路,它以其编程方便、集成度高、速度快、价格低等特点越来越受到设计者的欢迎。本设计中选用的CPLD为ALTERA公司的EPM7128SLC84-10,属于MAX7000系列.是工业界速度最快的高集成度可编程逻辑器件。本文中CPLD 开发软件用MAX+PLUS lI,该软件是一个完全集成化、易学易用的可编程逻辑设计环境。并且广泛支持各种硬件描述语言。它还具有与结构无关性、多平台运行、丰富的设计库和模块化的工具等许多功能特点。本设计中CPLD是脉冲发生器设计的核心所在,其内部集成了两组脉冲发生器,具体包括译码器、锁存器和可置数计数器。每组脉冲发生器中有三个8位锁存器、一个16位可置数计数器和一个8位可置数计数器。

CPLD主要是由可编程逻辑宏单元(MC,Macro Cell)围绕中心的可编程互连矩阵单元组成。其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。

2.1.3 EPM7160S

3 脉冲计数器的设计原理

生产实践中变化着的各种物理量,通过光电、声电、热电、压电等效应转换成电脉冲信号,输人计数器。计数器则通过电路元件本身固有的特殊功能,组成

不同的电路状态来表示不同的“数”,将输入的脉冲信号,按数”的关系,一一接收下来,进行传送、运算.并通过数字管显示出来。所以计数器就是把电路不同稳定状态跟敷对应起来.用状态的有规律变化表示“数”的规律性变化。

我们习惯于使用十进位计数制.如数字仪表,计算机和数控计数器的数字管都是按十进制显示的。但是在电子技术中很难找到一种基本单元电路具有十个不同的状态,用来代表十个数。而两个不同稳定状态的电路则很易找到如双稳态触发器就具有两个稳定状态。因此,通常就将十进制的数“数”编成数字装置容易接受的二进制的数,经数字装置运算后.再把二进制的数“翻译”成人们所习惯的十进制的数。

在数字技术中,用符号 0”和 1”表示两种对立的状态.倒如把输出低电位记为“0”.输出高电位记为“1”。我们把它叫做“代码”。虽然.代码只是一种符号.但不同于十进制数字运算中的0,1.2,3??。

用代码组合来表示一个El的数建项工作口q傲编码”,而编码的方案有好多种.

把计数电路所算出的二进制结果,“翻译”成十进制数.口q做“译码”,由门电路构成的译码器担负着译码任务。

译码以后的十进制数,再通过显示电路和数码管显示出来。

所以一般说来,计数器包括按一定编码要求的计数电路.和把二进制数译成十进制数的译码器及把十进制数表示出来的显示器这三个基本部分。

3.1器件特点

它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。CPLD器件已成为电子产品不可缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。

3.2如何使用

CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。

3.3计数器组模块

3.3.1计数器作用

计数器可以用来显示产品的工作状态,一般来说主要是用来表示产品已经完成了多少份的折页配页工作。

3.3.2主要的指标

在于计数器的位数,常见的有3位,4位和6位的。很显然,3位数的计数器最大可以显示到999,4位数的最大可以显示到9999,6位数的计数器最大可以显示到999999。

计数器组由16个16位加法计数器组成。每个16位加法计数器结构均相同,单个计数器的VHDL语言描述如下:

其中,en为计数器使能信号。en为1,计数器开始计数;

en 为0,计数器停止工作,并把计数结果锁存。rst为复位信号,高电平有效。将16个这样相同的计数器装配起来,就组成了计数器组。

3.4 控制器模块

3.4.1控制器

由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成,它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。

3.4.2主要功能

从内存中取出一条指令,并指出下一条指令在内存中位置

对指令进行译码或测试,并产生相应的操作控制信号,以便启动规定的动作;

指挥并控制CPU、内存和输入/输出设备之间数据流动的方向。

3.4.3控制器模块

本模块的功能是在控制器使能信号cnt_cntrl_ld_en的下降沿使计数器组置位信号rst置1,en置0,ready置0,并初始化内部定时器timer,在cnt _cntrl_ld_en 的上升沿将Po口的数据赋给内部定时器,并发计数器组使能信号en,此时内部定时器开始定时,同时脉冲计数器组开始计数。当定时器值为0时,使en 置0,脉冲计数器停止计数,同时ready置1,通知主机计数结束。控制器Block-controler的VHDL语言描述如下:

entity block_controler is

port(cnt_cntrl_ld_en:in std_1ogic;

p0:in std_logic_vector(7 downto 0);

clk:in std—logic;

en:Out std—logic;

rst:out std—logie

ready:out std—logic);

end block_eontroler;

architure archcontroler og block_

controler is signal timer:std_logic_vector(7 downto 0);

begin process(clk,cnt_cntrl_ld_en)

begin if(cnt_cntrl_ld_en ’event and ent_cntrl_ld_en=’

0 ’)then

timer< =” 00000000”:

en < =’0’;rst< =’ 1 ’;ready< = ’0’;

elsif(cnt_entsl_ld_en’event and cnt_cntrl_ld_en

=’1’ )then timer<=p0;

en < =’1’;rst< =’0’;ready< =’0’;

elseif(clk’event and clk=’1’)

then timer< =timer一1:

if(timer=”00000000”)then en<=’0’;

rst< =’0’;timer< = ”00000000”;ready< =’1’;

end if;

end if;

end if;

end process ;

end archcontroler;

其中,cnt_cntrl_ld_en是控制器使能信号,P0为定时器初值数据端口。

3.5译码器模块

3.5.1译码器概述

译码器是组合逻辑电路的一个重要的器件,其可以分为:变量译码和显示译码两类。

变量译码一般是一种较少输入变为较多输出的器件,一般分为2n译码和8421BCD码译码两类。

显示译码主要解决二进制数显示成对应的十、或十六进制数的转换功能,一般其可分为驱动LED和驱动LCD两类。

译码是编码的逆过程,在编码时,每一种二进制代码,都赋予了特定的含义,即都表示了一个确定的信号或者对象。把代码状态的特定含义“翻译”出来的过程叫做译码,实现译码操作的电路称为译码器。或者说,译码器是可以将输入二进制代码的状态翻译成输出信号,以表示其原来含义的电路。

3.5.2译码器分类

译码器的种类很多,但它们的工作原理和分析设计方法大同小异,其中二进

制译码器、二-十进制译码器和显示译码器是三种最典型,使用十分广泛的译码电路。

译码器是典型的组合数字电路,译码器是将一种编码转换为另一种编码的逻辑电路,学习译码器必须与各种编码打交道。从广义的角度看,译码器有四类:二进制码译码器,也称最小项译码器,N中取一译码器,最小项译码器一般是将二进制码译为十进制码;

代码转换译码器,是从一种编码转换为另一种编码;

显示译码器,一般是将一种编码译成十进制码或特定的编码,并通过显示器件将译码器的状态显示出来。

编码器,一般是将十进制码转换为相应的其它编码,其实质与代码转换译码器一样,编码是译码的反过程。

根据需要,输出信号可以是脉冲,也可以是高电平或者低电平。

3.5.3译码器工作原理

译码器是一种具有“翻译”功能的逻辑电路,这种电路能将输入二进制代码的各种状态,按照其原意翻译成对应的输出信号。有一些译码器设有一个和多个使能控制输入端,又成为片选端,用来控制允许译码或禁止译码。

3.5.4译码器模块

本模块的功能是根据地址总线P2和P0上的地址,并集合wr、rd的信号进行译码,输出内部器件的控制信号。译码器Block_decoder的实体说明如下:Entity block decoder is

Port(p2:in std_logic_vector(7downto0);

P0_adr:in std_logic_vector(7downto0);

Rd: in std_logic;wr:in std_logic;

Cnt_cntrl_ld_en:out std_logic;

Rd_cn0a_en: out std_logic;…

Rd_cn15b_en:out std_logic);

End block decoder;

其中,Cnt_cntrl_ld_en为控制器装载定时器初值使能信号。它用来通知控制器装载定时器初值,并开始计数,上升沿有效。Rd_cnXX_en为计数/锁存器读使能信号,用于控制计数/锁存器向内部数据总线写数据。

3.6分频器模块

本模块的功能是将标准的10kHz时钟信号clk.in分频为1Hz的时钟信号clk_out。分频器block_fqdivider的VHDL语言描述如下:

Entity block_fqdivider is

Port(clk_in:in std_logic;

Clk_out:out std_logic);

End block_fqdivider;

Architecture rtl of block_fqdivider is

Constant divide_period:integer range 0 to 65535:=100;

Begin process(clk_in)

variable cnt:integer range 0 to 65535;

begin if clk_in’event and clk_in=’1’ then

if(cnt< (divide_period/2))then

clk_out< =’1’;cnt:= cnt+ 1;

e1sif(cnt< (divide_period-1))then

clk_out< =’0’;cnt:= cnt+ 1;else cnt:= 0;

end if;

end if;

end process;

end rtl:

4功能仿真与测试

采用Lattice公司的Isp Expert EDA软件,对所编写脉冲计数器VHDL源程序进行编译、逻辑综合,自动地把VHDL描述转变为门级电路。然后进行时序仿真,结果表明:本设计中的所有模块的仿真时序都与设计要求的工作时序相吻合。在这里由于篇幅所限,仅以控制器为例,给出仿真后的时序图,如图3所示。

图5 控制器仿真时序

结论

实践中目标芯片选用了Alter公司的EPM-7160S,实现了对16路脉冲信号的计数。硬件电路简单、体积小,所有电路都集成在了一块芯片上,性能稳定。无论是作为独立的脉冲计数器,还是设计成其它仪器仪表的辅助部分,都有广泛应用,该设计已经应用于湿度微功耗测量记录仪器中,效果很好。

致谢

主要参考文献

[1]杜克.CPLD应用与VHDL编程.北京:清华大学出版社,2005

[2]周润景.基于Quartus II的FPGA/CPLD数字系统设计实例.北京:电子工

业出版社,2007

[3]王开军.面向CPLD/FPGA的VHDL设计.北京:机械工业出版社,2007

[4]姜立冬.VHDL语言程序设计及应用.北京:北京邮电大学出版社,2004

[5]李雪莲.基于CPLD的脉冲计数器设计.山西电子技术,2007

相关文档