频率计程序设计.docx

上传人:b****5 文档编号:8242040 上传时间:2023-01-30 格式:DOCX 页数:11 大小:53.89KB
下载 相关 举报
频率计程序设计.docx_第1页
第1页 / 共11页
频率计程序设计.docx_第2页
第2页 / 共11页
频率计程序设计.docx_第3页
第3页 / 共11页
频率计程序设计.docx_第4页
第4页 / 共11页
频率计程序设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

频率计程序设计.docx

《频率计程序设计.docx》由会员分享,可在线阅读,更多相关《频率计程序设计.docx(11页珍藏版)》请在冰豆网上搜索。

频率计程序设计.docx

频率计程序设计

黑龙江科技学院

课程设计任务书

一、设计题目:

二、设计的主要内容:

指导教师:

日期:

教师评语:

 

评阅成绩:

评阅人:

日期:

摘要

数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。

它不仅可以测量正弦波和其它具有周期特性的信号的频率,而且还可以测量它们的周期。

数字频率计在测量物理量方面应用广泛。

本设计用VHDL实现数字频率计测频系统,能够用十进制数码显示被测信号的频率,能够测量正弦波等信号的频率,而且还能对其他多种物理量进行测量。

采用VHDL编程设计实现的数字频率计,包括被测信号的整形部分、键输入部分和数码显示部分,整个系统非常精简,而且具有灵活的现场可更改性。

该数字频率计具有高速、精确、可靠、抗干扰性强和现场可编程等优点。

关键词:

数字频率计,VHDL,数码显示

第一章频率计的概述

1.1设计背景及目的

信号的频率是很难被准确测出来的,为了更加准确的测出信号,我们用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。

数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。

针对上述问题设计数字频率计。

数字频率计具有体积小、可靠性高、功耗低的特点。

数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。

随着复杂可编程逻辑器件的广泛应用,以EDA工具作为开发手段,运用VHDL语言,使整个系统大大简化,提高整体的性能和可靠性。

通常状况下,计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。

闸门时间也可以大于或者小于1秒。

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

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

所以,选择闸门时间也是很重要的。

1.2主要实现的功能

通过VHDL的设计,实现四大模块,包括:

测频控制信号发生器,计数器,锁存器和数码管显示。

设定基准时钟,将要测信号的频率与之相比较,这样就能知道被测信号的频率。

计数器和锁存器中,采用十进制计数,每当锁存使能信号来临,锁存器便将锁存结果读入、锁存。

在译码显示电路和顶层文件的设计中,采用循环扫描方式。

可以将频率计数的结果译成能在数码管上显示相对应的阿拉伯数字,便于读取测量的结果。

在顶层设计中,就是将现成元件的端口号映射成高层次设计电路中的信号。

各模块之间、各元件之间的信号连接都是在顶层文件中连接的。

第2章频率计的设计思想

2.1设计思想

本课程设计是要设计一个8位的数字频率计,主要有4个模块组成,分别是:

测频控制信号发生器、计数器、锁存器、译码、顶层设计。

在系统正常工作时,脉冲发生器提供1HZ的输入信号,经过测频控制信号发生器进行信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码管上可以显示的十进制结果。

在数码显示管上可以看到计数结果。

系统原理图如图2—1。

脉冲发生器

频率控制型号发生器

数码显示

译码驱动电路

锁存器

计数器

信号整形电路

图2—1系统原理图

2.2测频控制信号的设计

频率信号发生器(TESTCTL)的计数使能信号TSTEN能产生一个1s宽的周期信号,并保持其所计的脉冲数在停止计数器件,首先需要一个锁存信号LOAD的上升沿将计数器在前一秒钟的计数值锁存在32位锁存器REG32中,并由外部的7段译码器议出,并稳定显示。

2.3计数器和锁存器的设计

有一时钟使能输入端ENA,用于锁定计数值。

当高电平时允许计数,低电平时禁止计数。

采用十进制计数,遵循“逢10进1”的原则。

每当锁存使能信号来临,锁存器便将锁存结果读入、锁存。

在信号LOAD的上升沿时,立即对模块的输入口的数据锁存到REG32B的内部,并由REG32B的输出端输出,然后,七段译码器可以译码输出。

在这里使用了锁存器,好处是可以稳定显示数据,不会由于周期性的清零信号而不断闪烁。

2.4译码显示电路和顶层的设计

由于小数点由锁存器输出,故在此仅考虑数码管7段驱动。

采用循环扫描方式。

可以将频率计数的结果译成能在数码管上显示相对应的阿拉伯数字,便于读取测量的结果。

将各个模块做出来之后,我进行连接,形成一个完整的数字频率计,在顶层设计中,我们要将各个端口进行连接,这就要用到端口映射。

就是将现成元件的端口号映射成高层次设计电路中的信号。

各模块之间、各元件之间的信号连接关系就是用这种语句将信号映射来实现的。

 

第3章频率计的设计说明

3.1测频控制信号发生器

CLK为1HZ测频控制时钟输入端口,TSTEN为计数时钟使能输出端口,CLR_CNT为计数器清零输出端口,LOAD为锁存信号输出端。

在测频控制时钟上升沿有效地时候,将1HZ时钟二分频,在测频控制时钟为低电平有效而且div2clk(二分频)为低电平有效时,产生计数器清零信号,否则不进行清零。

锁存信号输出的是不是两分频,计数时钟使能端输出的是二分频。

仿真波形如

3—1。

 

图3—1测频控制发生器波形

 

3.2计数器及锁存器

CLK为计数时钟端口,CLR为清零端口,ENA为计数使能端口,CQ为4位计数结果输出端口,CARRY_OUT为计数进位输出端口。

当清零信号为低电平时,产生计数器异步清零信号,否则,当计数时钟在上升沿时,如果计数器等于九时,计数器清零,计数进位。

否则,不进位。

4位计数结果输出的是信号量count。

波形图如3—2—1。

LOAD为锁存信号输入端口,DIN为32位锁存器的输入端口,DOUT为32位锁存器的输出端口。

若锁存信号为上升沿有效时,锁存器输出地就是输入信号。

其波形图如3—2—2。

 

图3—2—1计数器波形图

图3—2—2锁存器波形图

 

3.3译码管及顶层设计说明

SIN为四位输入,DOUT为七位输出。

用CASE语句,当SIN从0变到15时,数码管的显示。

在顶层文件中,要调用之前设计好的模块,这些被调用的模块放在元件库中。

在COMPONENT中,无须对所调用的模块、元件进行行为描述。

在顶层文件中还有端口映射,将现成元件的端口号映射成高层次设计电路中的信号。

其波形图如3—3。

 

图3—3译码管波形图

 

参考文献

[l]侯伯亨顾新《vhdl硬件描述语言与数字逻辑硬件》西安电子工科

技出版社2004年

[2]潘松王国栋《vhdl实用教程》电子科技大学出版社出版社2007

[3]乔建良徐源田思张风蕊《EDA技术及应用实践》清华大学出版

2006年

[4]潘松黄继业《EDA技术实用教程》科学出版社2008年

 

程序代码:

锁存器

Libraryieee;—32位锁存器

Useieee.std_logic_1164.all;

Entityreg32bis

Port(load:

instd_logic;

din:

instd_logic_vector(31downto0);

dout:

outstd_logic_vector(31downto0));

Endreg32b;

Architecturebehavofreg32bis

Begin

Process(load,din)

Begin

Ifload'eventandload='1'thendout<=din;—锁存输入数据

Endif;

Endprocess;

Endbehav;

译码显示电路

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYLED7SIS

PORT(SIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDLED7S;

ARCHITECTUREbehavOFLED7SIS

BEGIN

PROCESS(SIN)

BEGIN

CASESINIS

WHEN"0000"=>DOUT<="0111111";

WHEN"0001"=>DOUT<="0000110";

WHEN"0010"=>DOUT<="1011011";

WHEN"0011"=>DOUT<="1001111";

WHEN"0100"=>DOUT<="1100110";

WHEN"0101"=>DOUT<="1101101";

WHEN"0110"=>DOUT<="1111101";

WHEN"0111"=>DOUT<="0000111";

WHEN"1000"=>DOUT<="1111111";

WHEN"1001"=>DOUT<="1101111";

WHEN"1010"=>DOUT<="1110111";

WHEN"1011"=>DOUT<="1111100";

WHEN"1100"=>DOUT<="0111001";

WHEN"1101"=>DOUT<="1011110";

WHEN"1110"=>DOUT<="1111001";

WHEN"1111"=>DOUT<="1110001";

WHENOTHERS=>DOUT<="0000000";

ENDCASE;

ENDPROCESS;

ENDbehav;

顶层源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYFREQTESTIS

PORT(CLK:

INSTD_LOGIC;

FSIN:

INSTD_LOGIC;

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0));

ENDFREQTEST;

ARCHITECTUREstrucOFFREQTESTIS

COMPONENTTESTCTL

PORT(CLK:

INSTD_LOGIC;

TSTEN:

OUTSTD_LOGIC;

CLR_CNT:

OUTSTD_LOGIC;

Load:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTCNT10

PORT(CLK:

INSTD_LOGIC;

CLR:

INSTD_LOGIC;

ENA:

INSTD_LOGIC;

CQ:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

CARRY_OUT:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTREG32B

PORT(load:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(31DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0));

ENDCOMPONENT;

SIGNALTSTEN1,CLR_CNT1,load1:

STD_LOGIC;

SIGNALDTO1:

STD_LOGIC_VECTOR(31DOWNTO0);

SIGNALCARRY_OUT1:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN

U1:

TESTCTLPORTMAP(CLK=>CLK,TSTEN=>TSTEN1,

CLR_CNT=>CLR_CNT1,load=>load1);

U2:

REG32BPORTMAP(load=>load1,DIN=>DTO1,DOUT=>DOUT);

U3:

CNT10PORTMAP(CLK=>FSIN,CLR=>CLR_CNT1,

ENA=>TSTEN1,CQ=>DTO1(3DOWNTO0),CARRY_OUT=>CARRY_OUT1(0));

U4:

CNT10PORTMAP(CLK=>CARRY_OUT1(0),CLR=>CLR_CNT1,

 ENA=>TSTEN1,CARRY_OUT=>CARRY_OUT1

(1),CQ=>DTO1(7DOWNTO4));

U5:

CNT10PORTMAP(CLK=>CARRY_OUT1

(1),CLR=>CLR_CNT1,

 ENA=>TSTEN1,CARRY_OUT=>CARRY_OUT1

(2),CQ=>DTO1(11DOWNTO8));

U6:

CNT10PORTMAP(CLK=>CARRY_OUT1

(2),CLR=>CLR_CNT1,

 ENA=>TSTEN1,CARRY_OUT=>CARRY_OUT1(3),CQ=>DTO1(15DOWNTO12));

U7:

CNT10PORTMAP(CLK=>CARRY_OUT1(3),CLR=>CLR_CNT1,

 ENA=>TSTEN1,CARRY_OUT=>CARRY_OUT1(4),CQ=>DTO1(19DOWNTO16));

U8:

CNT10PORTMAP(CLK=>CARRY_OUT1(4),CLR=>CLR_CNT1,

 ENA=>TSTEN1,CARRY_OUT=>CARRY_OUT1(5),CQ=>DTO1(23DOWNTO20));

U9:

CNT10PORTMAP(CLK=>CARRY_OUT1(5),CLR=>CLR_CNT1,

 ENA=>TSTEN1,CARRY_OUT=>CARRY_OUT1(6),CQ=>DTO1(27DOWNTO24));

U10:

CNT10PORTMAP(CLK=>CARRY_OUT1(6),CLR=>CLR_CNT1,

 ENA=>TSTEN1,CQ=>DTO1(31DOWNTO28));

ENDSTRUC;

 

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

当前位置:首页 > 表格模板 > 合同协议

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

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