利用VHDL的设计数字频率计.docx

上传人:b****4 文档编号:5412710 上传时间:2022-12-16 格式:DOCX 页数:18 大小:157.21KB
下载 相关 举报
利用VHDL的设计数字频率计.docx_第1页
第1页 / 共18页
利用VHDL的设计数字频率计.docx_第2页
第2页 / 共18页
利用VHDL的设计数字频率计.docx_第3页
第3页 / 共18页
利用VHDL的设计数字频率计.docx_第4页
第4页 / 共18页
利用VHDL的设计数字频率计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

利用VHDL的设计数字频率计.docx

《利用VHDL的设计数字频率计.docx》由会员分享,可在线阅读,更多相关《利用VHDL的设计数字频率计.docx(18页珍藏版)》请在冰豆网上搜索。

利用VHDL的设计数字频率计.docx

利用VHDL的设计数字频率计

目录

第一章概述1

1.1设计概述1

1.2设计内容1

1.3设计原理1

1.4设计功能2

第二章技术与开发工具3

2.1VHDL简介3

2.2MAX+PLUSⅡ5

第三章系统分析8

3.1数字频率计的设计任务及要求8

3.2模块的划分8

3.3设计分析9

第四章各功能模块基于VHDL的设计10

4.1时基产生与测频时序控制电路模块的VHDL源程序10

4.2待测信号脉冲计数电路模块的VHDL源程序11

4.3锁存与译码显示控制电路模块的VHDL源程序13

4.4顶层电路的VHDL源程序16

第五章数字频率计波形仿真18

5.1时基产生与测频时序控制电路模块的仿真18

5.2待测信号脉冲计数电路模块的仿真18

5.3锁存与译码显示控制电路模块的仿真19

5.4数字频率计系统的仿真20

第一章概述

1.1设计概述

所谓频率,就是周期信号在单位时间(1s)里变化的次数。

本数字频率计的设计思路是:

(1)根据频率计的测频原理,可以选择合适的时基信号对输入被测信号脉冲进行计数,实现测频的目的。

(2)根据数字频率计的基本原理,本文设计方案的基本思想是分为三个模块来实现其功能,即时基产生与测频时序控制电路模块、待测信号脉冲计数电路模块和锁存与译码显示控制电路模块,并且分别用VHDL对其进行编程,实现计数电路、锁存电路、显示电路等。

1.2设计内容

分析数字频率计的功能,完成功能模块的划分,分别用VHDL语言完成底层模块的设计和以原理图的方法完成顶层模块的设计,分别对各个模块以及顶层模块进行仿真分析,最后在硬件开发平台上进行测试。

1.3设计原理

我们都知道,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。

因此,频率检测是电子测量领域最基本的测量之一。

频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。

通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1s。

闸门时间可以根据需要取值,大于或小于1S都可以。

闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。

闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。

一般取1s作为闸门时间。

数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,其原理框图如图1.1所示。

1.4设计功能

四位十进制数字频率计用四组七段译码显示的数字频率计,其频率测量范围为1Hz~10kHz。

采用记忆显示的方法,即在测量过程中不刷新数据,等数据过程结束后才显示测量结果,给出待测信号的频率值,并保存到下一次测量结束,显示时间不少于1秒。

 

第二章技术与开发工具

2.1VHDL简介

2.1.1简介

VHDL主要用于描述数字系统的结构,行为,功能和接口。

VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

VHDL语言能够成为标准化的硬件描述语言并获得广泛应用,它自身必然具有很多其他硬件描述语言所不具备的优点。

归纳起来,VHDL语言主要具有以下优点:

(1)VHDL语言功能强大,设计方式多样

  VHDL语言具有强大的语言结构,只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。

同时,它还具有多层次的电路设计描述功能。

此外,VHDL语言能够同时支持同步电路、异步电路和随机电路的设计实现,这是其他硬件描述语言所不能比拟的。

VHDL语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;既支持模块化设计方法,也支持层次化设计方法。

(2)VHDL语言具有强大的硬件描述能力

  VHDL语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。

同时,VHDL语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。

VHDL语言的强大描述能力还体现在它具有丰富的数据类型。

VHDL语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。

(3)VHDL语言具有很强的移植能力

  VHDL语言很强的移植能力主要体现在:

对于同一个硬件电路的VHDL语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。

(4)VHDL语言的设计描述与器件无关

  采用VHDL语言描述硬件电路时,设计人员并不需要首先考虑选择进行设计的器件。

这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题。

当硬件电路的设计描述完成以后,VHDL语言允许采用多种不同的器件结构来实现。

(5)VHDL语言程序易于共享和复用

  VHDL语言采用基于库(library)的设计方法。

在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加。

这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用。

2.1.2VHDL程序组成部分

全部的VHDL程序由实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)、库(Library)5个部分组成。

各组成部分的作用是:

(1)实体用于描述所设计的系统的外部接口信号。

(2)构造体用于描述系统内部的结构和行为。

(3)配置用于从库中选取不同单元(器件)来组成系统设计的不同版本。

(4)包集合存放各设计模块都能共享的数据类型、常数和子程序等。

(5)库存放已经编译了的实体、构造体、包集合和配置。

库可由系统工程师生成或由ASIC芯片商提供,以便在设计中共享。

2.1.3VHDL系统优势

(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。

强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。

符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

2.2MAX+PLUSⅡ

2.2.1软件简介

MAX+PLUSⅡ(MultipleArrayandProgrammingLogicUserSystem)开发工具是Altera公司推出的一种EDA工具,具有灵活高效、使用便捷和易学易用等特点。

Altera公司在推出各种CPLD的同时,也在不断地升级相应的开发工具软件,已从早起的第一代A+PLUS、第二代MAX+PLUS发展到第三代MAX+PLUSⅡ和第四代Quartus。

使用MAX+PLUSⅡ软件,设计者无需精通器件内部的复杂结构,只需用业已熟悉的设计输入工具,如硬件描述语言、原理图等进行输入即可,MAX+PLUSⅡ就会自动将设计转换成目标文件下载到器件中去。

MAX+PLUSⅡ开发系统具有以下特点

(1)多平台。

MAX+PLUSⅡ软件可以在基于PC机的操作系统如Windows95、Windows98、Windows2000、WindowsNT下运行,也可以在SunSPACstation等工作站上运行。

(2)开放的界面。

MAX+PLUSⅡ提供了与其他设计输入、综合和校验工具的接口,借口符合EDIF200/300、LPM、VHDL、Verilog-HDL等标准。

目前MAX+PLUSⅡ所支持的主流第三方EDA工具主要有Synopsys、Viewlogic、Mentor、Graphics、Cadence、OrCAD、Xilinx等公司提供的工具。

(3)模块组合式工具软件。

MAX+PLUSⅡ具有一个完整的可编程逻辑设计环境,包括设计输入、设计处理、设计校验和下载编程4个模块,设计者可以按设计流程选择工作模块。

(4)与结构无关。

MAX+PLUSⅡ开发系统的核心——Compiler(编译器)能够自动完成逻辑综合和优化,它支持Altera的Classic、MAX7000、FLEX8000和FLEX10K等可编程器件系列,提供一个与结构无关的PLD开发环境。

(5)支持硬件描述语言。

MAX+PLUSⅡ支持各种HDL设计输入语言,包括VHDL、Verilog-HDL和Altera的硬件描述语言AHDL。

(6)丰富的设计库。

MAX+PLUSⅡ提供丰富的库单元供设计者调用,其中包括一些基本的逻辑单元,74系列的器件和多种特定功能的宏功能模块以及参数化的兆功能模块。

调用库单元进行设计,可以大大减轻设计人员的工作量,缩短设计周期。

2.2.2软件组成

MAX+PLUSⅡ软件采用模块化结构,包括设计输入、项目处理、项目校验和器件编程4个部分,所有这些部分都集成在一个可视化的操作环境下。

(1)设计输入

MAX+PLUSⅡ的设计输入方法有多种,主要包括文本设计输入、原理图输入、波形设计输入等多种方式。

另外,还可以利用第三方EDA工具生成的网表文件输入,该软件可接受的网表有EDIF格式、VHDL格式及Verilog格式。

MAX+PLUSⅡ是一种层次设计工具,可根据实际情况灵活地使用最适合每一层次的设计方法。

(2)项目处理

设计处理的任务就是对项目进行编译(Compile),编译实际就是将设计者编写的设计改为可以用于生产的“语言”。

编译器通过读入设计文件并产生用于编程、仿真和定时分析的输出文件来完成编译工作。

MAX+PLUSⅡ提供的编译软件,只需简单的操作,如参数选择、指定功能等,就可进行网表转换、逻辑分割和布线布局。

(3)项目校验

MAX+PLUSⅡ提供的设计校验过程包括仿真和定时分析,项目编译后,为确保设计无误,要再用专用软件进行仿真。

如果发现了错误,则应对设计输入进行部分修改直至无误。

(4)器件编程

MAX+PLUSⅡ通过编程器(DeviceProgrammer)将编译器生成的编程文件编程或配置到AlteraCPLD器件中,然后加入实际激励信号进行测试,检查是否达到了设计要求?

Altera公司器件的编程方法有许多种,可通过编程器、JTAG在系统编程及Altera在线配置等方式进行。

在设计过程中,如果出现错误,则需要重新回到设计输入阶段,改正错误或调整电路后重复上述过程。

2.2.3设计流程

使用MAX+PLUSⅡ进行可编程逻辑器件开发主要包括4个阶段:

设计输入、编译处理、验证(包括功能仿真、时序仿真、和定时分析)和器件编程,流程如图2.1所示:

第三章系统分析

3.1数字频率计的设计任务及要求

设计一个四位十进制的数字频率计,要求具有以下功能:

(1)测量范围:

1Hz~10kHz。

(2)测量误差

1%。

(3)响应时间

15s。

(4)显示时间不少于1s。

(5)具有记忆显示的功能,即在测量的过程中不刷新数据,等数据过程结束后才显示测量结果,给出待测信号的频率值,并保存到下一次测量结束。

3.2模块的划分

根据系统设计要求,系统设计采用自顶向下的设计方法,系统的组成框图如图3.1所示,包括时基产生与测频时序控制电路模块,以及待测信号脉冲计数电路模块和锁存与译码显示控制电路模块。

(1)时基产生与测频时序控制电路模块

时基产生与测频时序控制电路的主要产生计数允许信号EN、清零信号CLR和锁存信号LOCK。

(2)待测信号脉冲计数电路模块

待测信号脉冲计数电路是对待测脉冲信号的频率进行测量,它可由4个十进制加法计数器组成,其中EN为计数选通控制信号,CLR为计数器清零信号。

在计数器清零信号CLR清零后,当计数选通控制信号EN有效时,开始对待测信号进行计数。

如果计数选通控制信号EN的宽度为1s,那么计数结果就为待测信号的频率;如果计数选通信号EN的宽度为100ms,那么待测信号的频率等于计数结果

10。

(3)锁存与译码显示控制电路模块

锁存与译码显示控制电路用于实现记忆显示,在测量过程中不刷新新的数据,直到测量过程结束后,锁存显示测量结果,并且保存到下一次测量结束。

锁存与译码显示电路的功能是对四位BCD码进行锁存,并转换为对应的4组七段码,用于驱动数码管。

3.3设计分析

采用VHDL语言设计一个复杂的电路系统,运用自顶向下的设计思想,将系统按功能逐层分割的层次化设计方法进行设计。

在顶层对内部各功能块的连接关系和对外的接口关系进行了描述,而功能块的逻辑功能和具体实现形式则由下一层模块来描述。

各功能模块采用VHDL语言来描述。

 

第四章各功能模块基于VHDL的设计

4.1时基产生与测频时序控制电路模块的VHDL源程序

程序ctrl.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCTRLIS

PORT(CLK:

INSTD_LOGIC;-系统时钟

LOCK:

OUTSTD_LOGIC;-锁存信号

EN:

OUTSTD_LOGIC;-计数允许信号

CLR:

OUTSTD_LOGIC);-清零信号

END;

ARCHITECTUREARTOFCTRLIS

SIGNALQ:

STD_LOGIC_VECTOR(3DOWNTO0);-定义变量

BEGIN

PROCESS(CLK)

BEGIN

IF(CLK'EVENTANDCLK='1')THEN-检测时钟上升沿

IFQ="1111"THEN

Q<="0000";-计数大于15,清零

ELSE

Q<=Q+'1';-允许计数

ENDIF;

ENDIF;

EN<=NOTQ(3);

LOCK<=Q(3)ANDNOT(Q

(2))ANDQ

(1);

CLR<=Q(3)ANDQ

(2)ANDNOT(Q

(1));

ENDPROCESS;

ENDART;

程序主要讲述了由时钟信号产生计数允许信号、清零信号和锁存信号,而且限定了响应时间为不超过15s。

4.2待测信号脉冲计数电路模块的VHDL源程序

4.2.1十进制加法计数器的VHDL源程序

程序cb10.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCB10IS

PORT(CLK,EN,CLR:

INSTD_LOGIC;

COUNT10:

BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));-计数输

信号

ENDCB10;

ARCHITECTUREARTOFCB10IS-结构体

BEGIN

PROCESS(CLK,CLR,EN)

BEGIN

IFCLR='1'THEN

COUNT10<="0000";-计数器清零

ELSIFRISING_EDGE(CLK)THEN-检测时钟上升沿

IF(EN='1')THEN-检测是否允许计数

IFCOUNT10="1001"THEN

COUNT10<="0000";-计数值满9清零

ELSE

COUNT10<=COUNT10+'1';-允许计数

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

ENDART;

程序主要讲述了十进制加法计数器的使用,在符合了一定的标准以后十进制的使用,在计数器满9后清零。

4.2.2待测信号脉冲计数器的VHDL源程序

程序count.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNTIS

PORT(CLK:

INSTD_LOGIC;-待测时钟信号

EN:

INSTD_LOGIC;-计数选通控制信号

CLR:

INSTD_LOGIC;-计数器清零信号

QA,QB,QC,QD:

BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));-结果输出信号

END;

ARCHITECTUREARTOFCOUNTIS

COMPONENTCB10-元件CB10引用说明语句

PORT(CLK,EN,CLR:

INSTD_LOGIC;

COUNT10:

BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));-计数输出信号

ENDCOMPONENT;

SIGNALCLK2:

STD_LOGIC;

SIGNALCLK3:

STD_LOGIC;

SIGNALCLK4:

STD_LOGIC;

BEGIN

CLK2<=NOTQA(3);

CLK3<=NOTQB(3);

CLK4<=NOTQC(3);

U1:

CB10PORTMAP(CLK,EN,CLR,QA);-元件引用例示

U2:

CB10PORTMAP(CLK2,EN,CLR,QB);-元件引用例示

U3:

CB10PORTMAP(CLK3,EN,CLR,QC);-元件引用例示

U4:

CB10PORTMAP(CLK4,EN,CLR,QD);-元件引用例示

ENDART;

4.3锁存与译码显示控制电路模块的VHDL源程序

4.3.1译码显示电路的VHDL源程序

程序bcd7.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYBCD7IS

PORT(BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);-BCD输入信号

LED:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));-七段译码输出信号

END;

ARCHITECTUREARTOFBCD7IS

BEGIN

LED<="0111111"WHENBCD="0000"ELSE-对照七段字形显示译码器真值表

"0000110"WHENBCD="0001"ELSE

"1011011"WHENBCD="0010"ELSE

"1001111"WHENBCD="0011"ELSE

"1100110"WHENBCD="0100"ELSE

"1101101"WHENBCD="0101"ELSE

"1111101"WHENBCD="0110"ELSE

"0000111"WHENBCD="0111"ELSE

"1111111"WHENBCD="1000"ELSE

"1101111"WHENBCD="1001"ELSE

"0000000";

ENDART;

程序主要讲述了七段译码器的显示问题,对应的给出了信号输入过程中七段译码器的各种显示。

4.3.2锁存与译码显示控制模块的VHDL源程序

程序lock.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYLOCKIS

PORT(LOCK:

INSTD_LOGIC;

QA,QB,QC,QD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

LEDA,LEDB,LEDC,LEDD:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));-频率

计数输出

END;

ARCHITECTUREARTOFLOCKIS

SIGNALQAL,QBL,QCL,QDL:

STD_LOGIC_VECTOR(3DOWNTO0);

COMPONENTBCD7-元件BCD7引用说明语句

PORT(BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

LED:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDCOMPONENT;

BEGIN

PROCESS(LOCK)

BEGIN

IF(LOCK'EVENTANDLOCK='1')THEN-检测时钟上升沿

QAL<=QA;

QBL<=QB;

QCL<=QC;

QDL<=QD;

ENDIF;

ENDPROCESS;

U0:

BCD7PORTMAP(QAL,LEDA);-元件引用例示

U1:

BCD7PORTMAP(QBL,LEDB);-元件引用例示

U2:

BCD7PORTMAP(QCL,LEDC);-元件引用例示

U3:

BCD7PORTMAP(QDL,LEDD);-元件引用例示

ENDART;

程序主要讲述了调用七段译码器的显示,将输入的信号经过译码之后在七段译码器上进行显示。

4.4顶层电路的VHDL源程序

程序pinlvji.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYPINLVJIIS

PORT(F_IN,CLK:

INSTD_LOGIC;

ENT,LOCKT,CLRT:

BUFFERSTD_LOGIC;

Z1,Z2,Z3,Z4:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDPINLVJI;

ARCHITECTUREARTOFPINLVJIIS

SIGNALENS,LOCKS,CLRS:

STD_LOGIC;

SIGNALQAS,QBS,QCS,QDS:

STD_LOGIC_VECTOR(3DOWNTO0);

COMPONENTCTRL-元件CTRL引用说明语句

PORT(CLK:

INSTD_LOGIC;

EN,LOCK,CLR:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTCOUNT-元件COUNT引用说明语句

PORT(CLK,EN,CLR:

INSTD_LOGIC;

QA,QB,QC,QD:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONEN

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1