《基于CPLD的脉冲计数器的设计(共17页).doc》由会员分享,可在线阅读,更多相关《基于CPLD的脉冲计数器的设计(共17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上#毕业设计(论文)说明书作者 # 学号 1# 系部 电子#系 专业 EE 题目 基于CPLD的脉冲计数器的设计 指导教师 XX 评阅教师 XX 完成时间: 2010 年 3 月 10日 毕业设计(论文)中文摘要(题目):基于CPLD的脉冲计数器设计摘要:介绍了用CPLD+HDL的EDA技术作为开发手段,实现对16通道脉冲信号计数的脉冲计数器的设计。该方法具有设计周期短,内部电路模块可移植的特点,解决了以往数字电路小规模多器件组合的设计瓶颈,经实际电路测试,该系统性能可靠。关键词:脉冲计数器;CPLD;VHDL;波形仿真毕业设计(论文)外文摘要Title : Desig
2、n of pulse counter based on CPLDAbstract: The design of a pulse counter to 16 channels pulse with EDA Technology of CPLD+VHDL is presented in the paper. The circuit Is different from the traditional digital circuit design composed Of many small scale devices. Furthermore ,the circuit design Cycle is
3、 short , and parts of the circuit are transplantable Comparing with others .Practical circuit testing shows that The system is reliable.Key words: pulse counter; CPLD; VHDL; wave-shape simulating 专心-专注-专业目 录1序言CPLD( Complex Programmable Logic Device )是一种复杂的用户可编程逻辑器件,由于用连续连接结构,易于预测延时,从而使电路仿真更加准确。利用CP
4、LD高速、高可靠性、可编程、体积小的特点,采用CPLD+HDL的EDA开发方案,必将有效解决传统的电子系统中由来已久的设计瓶颈什么设计瓶颈啊?。脉冲计数器是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生较大的时延,可靠性差。随着复杂可编程逻辑器件的广泛应用,以EDA工具作为开发手段,将使整个系统大大简化,提高整体性能和可靠性。本文选用Altera 公司的MAX7000 系列芯片EPM7160S,实现了对16路脉冲进行计数。具有体积小、可靠性高、低功耗、开发周期的特点。 2CPLD芯片及VHDL语言介绍这个章节里介绍VHDL语言了吗?2.1 CPLD芯片介绍2.
5、1.1 概述ALTERA的MAX7000系列CPLD提供高性能的逻辑解决方案,密度从600-10000个可用门不等(32-512个宏单元),同时MAX7000系列的同一密度产品还提供多种封装形式,对于各种应用具有相当灵活的适应性。2.1.2 MAX7000特点l高性能低功耗CMOS EEPROM技术l遵循IEEE Std. 1149.1 Joint Test Action Group (JTAG) ISP circuitry compliant with IEEE Std. 1532l标准ISP特性l5ns pin to pin延时,最高频率175.4 MHzlI/O接口支持5V、3.3V和2
6、.5V等多种电平lPCI兼容功能:本设计采用EDA技术,根据图1所示的脉冲计数器电路图,按照自顶向下的设计思路,先编写各个模块的VHDL源程序,然后再对各个模块进行组合,最后编写顶层描述的VHDL源程序。如图2所示,16位计数器是设计的最低层,而计数器组、译码器、控制器,分频器为设计的第二层,脉冲计数器组装程序为设计的最高层。复杂可编程逻辑器件(CPLD)几乎可适用于所有的门阵列和各种规模的数字集成电路,它以其编程方便、集成度高、速度快、价格低等特点越来越受到设计者的欢迎。本设计中选用的CPLD为ALTERA公司的EPM7128SLC84-10,属于MAX7000系列 是工业界速度最快的高集成
7、度可编程逻辑器件。本文中CPLD开发软件用MAX+PLUS lI,该软件是一个完全集成化、易学易用的可编程逻辑设计环境。并且广泛支持各种硬件描述语言。它还具有与结构无关性、多平台运行、丰富的设计库和模块化的工具等许多功能特点。本设计中CPLD是脉冲发生器设计的核心所在,其内部集成了两组脉冲发生器,具体包括译码器、锁存器和可置数计数器。每组脉冲发生器中有三个8位锁存器、一个16位可置数计数器和一个8位可置数计数器。CPLD主要是由可编程逻辑宏单元(MC,Macro Cell)围绕中心的可编程互连矩阵单元组成。其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,
8、完成一定的功能。由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。2.1.3 EPM7160S3 脉冲计数器的设计原理生产实践中变化着的各种物理量,通过光电、声电、热电、压电等效应转换成电脉冲信号,输人计数器。计数器则通过电路元件本身固有的特殊功能,组成不同的电路状态来表示不同的 “数”,将输入的脉冲信号,按 数”的关系,一一接收下来,进行传送、运算并通过数字管显示出来。所以计数器就是把电路不同稳定状态跟 敷 对应起来用状态的有规律变化表示“数”的规律性变化。我们习惯于使用十进位计数制如数字仪表,计算机和数控计
9、数器的数字管都是按十进制显示的。但是在电子技术中很难找到一种基本单元电路具有十个不同的状态,用来代表十个数。而两个不同稳定状态的电路则很易找到如双稳态触发器就具有两个稳定状态。因此,通常就将十进制的数“数”编成数字装置容易接受的二进制的数,经数字装置运算后再把二进制的数“翻译”成人们所习惯的十进制的数。在数字技术中,用符号 0”和 1”表示两种对立的状态倒如把输出低电位记为“0”输出高电位记为“1”。我们把它叫做“代码”。虽然代码只是一种符号但不同于十进制数字运算中的0,12,3 。用代码组合来表示一个El的数建项工作口q傲 编码”,而编码的方案有好多种把计数电路所算出的二进制结果,“翻译”成
10、十进制数口q做“译码”,由门电路构成的译码器担负着译码任务。译码以后的十进制数,再通过显示电路和数码管显示出来。所以一般说来,计数器包括按一定编码要求的计数电路和把二进制数译成十进制数的译码器及把十进制数表示出来的显示器这三个基本部分。3.1器件特点它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。CPLD器件已成为电子产品不可
11、缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。3.2如何使用CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。这是在介绍CPLD呢还是脉冲计数器啊?3.3计数器组模块3.3.1计数器作用计数器可以用来显示产品的工作状态,一般来说主要是用来表示产品已经完成了多少份的折页配页工作。3.3.2主要的指标在于计数器的位数,常见的有3位,4位和6位的。很显然,3位数的计数器最大可以显示到999,4位数的最大可以显示到
12、9999,6位数的计数器最大可以显示到。计数器组由16个16位加法计数器组成。每个16位加法计数器结构均相同,单个计数器的VHDL语言描述如下:这图不复杂,能否自己动手画一下啊?entity singlecounter is port(impulse : in stdlogic;res: in stdlogic; en :in stdlogic;ent:inout stdlogicvector(15 downto 0);end singlecounter;architecture archcount of singlecounter isbegin process(impulse,rst,en
13、)begin if rst= 1then cnt (others0;elsif(inpulseevent and inpuse 1)then if en 1then ent = cnt+1;end if;end if;end process;end archcount;其中,en为计数器使能信号。en为1,计数器开始计数;en 为0,计数器停止工作,并把计数结果锁存。rst为复位信号,高电平有效。将16个这样相同的计数器装配起来,就组成了计数器组。3.4 控制器模块3.4.1控制器 由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成,它是发布命令的“决策机构”,即完成协调和指挥整
14、个计算机系统的操作。3.4.2主要功能从内存中取出一条指令,并指出下一条指令在内存中位置对指令进行译码或测试,并产生相应的操作控制信号,以便启动规定的动作;指挥并控制CPU、内存和输入/输出设备之间数据流动的方向。3.4.3控制器模块本模块的功能是在控制器使能信号cntcntrllden的下降沿使计数器组置位信号rst置1,en置0,ready置0,并初始化内部定时器timer,在cntcntrllden 的上升沿将Po口的数据赋给内部定时器,并发计数器组使能信号en,此时内部定时器开始定时,同时脉冲计数器组开始计数。当定时器值为0时,使en 置0,脉冲计数器停止计数,同时ready置1,通知
15、主机计数结束。控制器Block-controler的VHDL语言描述如下:entity block_controler isport(cnt_cntrl_ld_en:in std_1ogic;p0:in std_logic_vector(7 downto 0);clk:in stdlogic;en:Out stdlogic;rst:out stdlogieready:out stdlogic);end block_eontroler;architure archcontroler og block_controler is signal timer:std_logic_vector(7 dow
16、nto 0);begin process(clk,cnt_cntrl_ld_en)begin if(cnt_cntrl_ld_en event and ent_cntrl_ld_en=0 )thentimer =” ” :en =0 ;rst = 1 ;ready = 0;elsif(cnt_entsl_ld_enevent and cnt_cntrl_ld_en=1 )then timer=p0;en =1;rst =0;ready =0;elseif(clkevent and clk=1)then timer =timer一1:if(timer=”)then en=0;rst =0 ;ti
17、mer = ” ;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两类。译码是编码的逆过程,在编码时,每一种二进制代码,都赋予了特定的含义,
18、即都表示了一个确定的信号或者对象。把代码状态的特定含义“翻译”出来的过程叫做译码,实现译码操作的电路称为译码器。或者说,译码器是可以将输入二进制代码的状态翻译成输出信号,以表示其原来含义的电路。3.5.2译码器分类译码器的种类很多,但它们的工作原理和分析设计方法大同小异,其中二进制译码器、二-十进制译码器和显示译码器是三种最典型,使用十分广泛的译码电路。译码器是典型的组合数字电路,译码器是将一种编码转换为另一种编码的逻辑电路,学习译码器必须与各种编码打交道。从广义的角度看,译码器有四类:二进制码译码器,也称最小项译码器,N中取一译码器,最小项译码器一般是将二进制码译为十进制码;代码转换译码器,
19、是从一种编码转换为另一种编码;显示译码器,一般是将一种编码译成十进制码或特定的编码,并通过显示器件将译码器的状态显示出来。编码器,一般是将十进制码转换为相应的其它编码,其实质与代码转换译码器一样,编码是译码的反过程。根据需要,输出信号可以是脉冲,也可以是高电平或者低电平。3.5.3译码器工作原理译码器是一种具有“翻译”功能的逻辑电路,这种电路能将输入二进制代码的各种状态,按照其原意翻译成对应的输出信号。有一些译码器设有一个和多个使能控制输入端,又成为片选端,用来控制允许译码或禁止译码。3.5.4译码器模块本模块的功能是根据地址总线P2和P0上的地址,并集合wr、rd的信号进行译码,输出内部器件
20、的控制信号。译码器Block_decoder的实体说明如下:Entity block decoder isPort(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为控制器装载定时器初值使能信号。它用
21、来通知控制器装载定时器初值,并开始计数,上升沿有效。Rd_cnXX_en为计数/锁存器读使能信号,用于控制计数/锁存器向内部数据总线写数据。3.6分频器模块本模块的功能是将标准的10kHz时钟信号clk.in分频为1Hz的时钟信号clk_out。分频器block_fqdivider的VHDL语言描述如下:Entity block_fqdivider isPort(clk_in:in std_logic;Clk_out:out std_logic);End block_fqdivider;Architecture rtl of block_fqdivider isConstant divide_
22、period:integer range 0 to 65535:=100;Begin process(clk_in)variable cnt:integer range 0 to 65535;begin if clk_inevent and clk_in=1 thenif(cnt (divide_period2)thenclk_out =1 ;cnt:= cnt+ 1;e1sif(cnt (divide_period-1)thenclk_out =0 ;cnt:= cnt+ 1;else cnt:= 0;end if;end if;end process;end rtl:4功能仿真与测试采用L
23、attice公司的Isp Expert EDA软件,对所编写脉冲计数器VHDL源程序进行编译、逻辑综合,自动地把VHDL描述转变为门级电路。然后进行时序仿真,结果表明:本设计中的所有模块的仿真时序都与设计要求的工作时序相吻合。在这里由于篇幅所限,仅以控制器为例,给出仿真后的时序图,如图3所示。 图5 控制器仿真时序结论实践中目标芯片选用了Alter公司的EPM-7160S,实现了对16路脉冲信号的计数。硬件电路简单、体积小,所有电路都集成在了一块芯片上,性能稳定。无论是作为独立的脉冲计数器,还是设计成其它仪器仪表的辅助部分,都有广泛应用,该设计已经应用于湿度微功耗测量记录仪器中,效果很好。致谢 主要参考文献1杜克.CPLD应用与VHDL编程.北京:清华大学出版社,20052周润景.基于Quartus II的FPGA/CPLD数字系统设计实例.北京:电子工业出版社,20073王开军.面向CPLD/FPGA的VHDL设计.北京:机械工业出版社,20074姜立冬.VHDL语言程序设计及应用.北京:北京邮电大学出版社,20045李雪莲.基于CPLD的脉冲计数器设计.山西电子技术,2007