数字频率计设计

更新时间:2024-01-13 21:31:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计论文 数字频率计设计

【摘要】:

在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法。如周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本文阐述了基于VHDL语言设计了一个简单的数字频率计的过程。

【关键字】: 数字频率计、信号、周期

I

Abstract 毕业设计论文

【Abstract】:

Be one of the most fundamental parameter in electron technology medium frequency, parameter measurement scheme, measurement result all have very close something to do with a lot of electricity and, the frequency measurement looks like being more important therefore right away. The method measuring frequency has various, among them the electronic counter measures frequency having accuracy height, usage is convenient, measurement is prompt, easy to realize measurement process automation waits for merit and, counter measures frequency having two kinds way: sure frequency law first directly ,be to measure the pulse number the signal is measured within certain sluice gate time; Two is indirect measure frequency law, if the period measures frequency law, Measure frequency law directly applying to the high frequency signal's.

【Keyword】: Figure frequency meter、Signal、period

II

毕业设计论文 数字频率计设计

目录

绪论: ..................................................... 1 第一章 概述 ................................................ 2

1.1 设计概述 .......................................................... 2 1.2 设计目的 .......................................................... 2 1.3 设计内容 .......................................................... 2 1.4 设计原理 .......................................................... 3 1.5 设计功能 .......................................................... 3

第二章 数字频率计的设计思路 ................................ 4

2.1 时基的设计 ........................................................ 4 2.2 计数器的设计 ...................................................... 5 2.3 模块的划分 ........................................................ 5

第三章 数字频率计各模块的设计和实现 ......................... 6

3.1 计数器的设计和实现 ................................................ 6 3.2 7段译码器的设计 ................................................. 8 3.3 数字频率计综合设计 ................................................ 9

第四章 数字频率计波形仿真 ................................. 15

4.1 省略分频进程 ..................................................... 15 4.2 10KHZ、100KHZ和1MHZ三挡仿真 ..................................... 15 4.3 测周期挡仿真 ..................................................... 17

第五章 调试常见错误及解决办法 ............................. 19

5.1 常见错误与解决办法 .............................................. 19

总结 ...................................................... 20 致谢 ...................................................... 21 附录 ...................................................... 22

附录A MAX+PLUSⅡ简介 ................................................ 22 附录B 软件的安装 .................................................... 23 附录C 软件组成 ...................................................... 23

III

Abstract 毕业设计论文

附录D 设计流程 ...................................................... 24

参考文献 .................................................. 25

IV

毕业设计论文 数字频率计设计

绪论:

随着电子技术的发展,当前数字系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。推动该潮流迅猛发展的引擎就是日趋进步和完善的设计技术。目前数字频率计的设计可以直接面向用户需求,根据系统的行为和功能要求,自上至下的逐层完成相应的描述、综合、优化、仿真与验证,直到生成器件。上述设计过程除了系统行为和功能描述以外,其余所有的设计过程几乎都可以用计算机来自动地完成,也就是说做到了电子设计自动化(EDA)。这样做可以大大地缩短系统的设计周期,以适应当今品种多、批量小的电子市场的需求,提高产品的竞争能力。

电子设计自动化(EDA)的关键技术之一是要求用形式化方法来描述数字系统的硬件电路,即要用所谓硬件描述语言来描述硬件电路。所以硬件描述语言及相关的仿真、综合等技术的研究是当今电子设计自动化领域的一个重要课题。

硬件描述语言的发展至今已有几十年的历史,并已成功地应用到系统的仿真、验证和设计综合等方面。到本世纪80年代后期,已出现了上百种的硬件描述语言,它们对设计自动化起到了促进和推动作用。但是,它们大多各自针对特定设计领域,没有统一的标准,从而使一般用户难以使用。广大用户所期盼的是一种面向设计的多层次、多领域且得到一致认同的标准的硬件描述语言。80年代后期由美国国防部开发的VHDL语言(VHSIC Hardware Description Language)恰好满足了上述这样的要求,并在1987年12月由IEEE标准化(定为 IEEE std 1076--1987标准,1993年进一步修订,被定为ANSI/IEEE std 1076--1993标准)。它的出现为电子设计自动化(EDA)的普及和推广奠定了坚实的基础。据1991年有关统计表明,VHDL语言业已被广大设计者所接受。另外,众多的CAD厂商也纷纷使自己新开发的电子设计软件与VHDL语言兼容。由此可见,使用VHDL语言来设计数字系统是电子设计技术的大势所趋。

1

第一章 概述 毕业设计论文

第一章 概述

1.1 设计概述

所谓频率,就是周期性信号在单位时间(1s)里变化的次数。 本数字频率计的设计思路是:

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

2.根据数字频率计的基本原理,本文设计方案的基本思想是分为五个模块来实现其功能,即整个数字频率计系统分为分频模块、控制模块、计数模块、译码模块和量程自动切换模块等几个单元,并且分别用VHDL对其进行编程,实现了闸门控制信号、计数电路、锁存电路、显示电路等。

3.在进行设计之前,首先搞清楚在什么情况下是测频率,在什么情况下是测周期,其实就是一个选择合适的时基信号的问题。在这个设计中,要在频率计提供的时基信号和输入信号之间做出选择,充当时基信号即闸门时间。当测频率的时候,要以输入信号作为时钟信号,因为输入信号的频率大于频率计提供的基准频率,在频率计提供的基准信号周期内,计算输入信号的周期数目,再乘以频率计基准频率,就是输入信号的频率值了。此时的时基信号为频率计的基准信号。当测周期的时候,要以频率计提供的基准信号作为时钟信号,因为频率计提供的时基频率大于输入信号的频率,在输入信号周期内,计算频率计提供的基准信号的周期数目,再乘以基准信号频率,就是输入信号的周期值了。此时的时基信号为输入信号。 1.2 设计目的

1.学会利用MAX+PLUSⅡ进行层次化设计; 2.练习混合设计设计输入的方法; 3.巩固用试验箱验证设计的方法。 1.3 设计内容

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

2

毕业设计论文 数字频率计设计

1.4 设计原理

众所周知,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。因此,频率检测是电子测量领域最基本的测量之一。频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。闸门时间可以根据需要取值,大于或小于1 s都可以。闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。一般取1 s作为闸门时间。

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

1.5 设计功能

3位数字频率计是用3个十进制数字显示的数字式频率计,其频率测量范围为1MHz。为了提高测量精度,量程分别为10kHz、100kHz和1MHz三挡,即最大读数分别为9.99kHz,99.9kHz和999kHz。要求量程自动换挡。具体功能如下:

1.当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增大一挡。

2.当读数小雨099时,频率计处于欠量程状态,下一次测量时,量程自动减少一挡。

3.当超出频率测量范围时,显示器显示溢出。

4.采用记忆显示方法,即测量过程中不显示数据,待测量过程结束以后,显示测频结果,并将此结果保持到下次测量结束。显示时间不少于1秒。

5.小数点位置随量程变化自动移位。

6.增加测周期功能,就是当时钟频率低于0.99kHz的时候,显示的数值变成周期,以毫秒为单位。

3

第二章 数字频率计的设计思路 毕业设计论文

第二章 数字频率计的设计思路

2.1 时基的设计

输入信号是随意的,没法预知其频率是多少,如何选取频率计提供的基准信号是关键。设计要求量程分别为10kHz,100kHz和1MHz三挡。测频率时,在某个挡进行测量的时候,就需要提供该挡的时基。在10kHz挡,该挡最大读数为9.99kHz,同时也说明最小的读数是0.01kHz,所以提供的时基应该是频率为0.01kHz的脉冲。同样的道理100kHz挡提供的时基应该是0.1kHz的脉冲,1MHz挡提供的时基应该是频率为1kHz的脉冲。要产生这3种脉冲,就得从输入的时钟中提取(这里假设输入的是20MHz的脉冲),分别采用分频的方法来产生这3种时基信号显然不可取,太浪费资源,因为分别产生得用到3个分频器,一个为20kHz分频器,用于产生频率为1kHz的脉冲;一个200kHz分频器,用于产生频率为0.1kHz的脉冲;一个2M分频器,用于产生频率为0.01kHz的脉冲。可以考虑先用一个20kHz分频器,产生频率为1kHz的脉冲,再利用一个10倍分频器对1kHz脉冲进行分频,产生0.1kHz的脉冲,一个100倍分频器对1kHz脉冲进行分频,产生0.01kHz的脉冲。同样用到了3个分频器,但是节约了资源。

再考虑具体的实现,在测频率的时候,由于采用输入信号作为时基,以输入信号为时钟,用一个计数器测量在一个时基周期里,输入信号的周期数目,如此就可以得到输入信号的频率。但是一个时基信号,例如频率为0.01kHz(周期为100ms)的脉冲信号,在整个100ms的周期里,根据占空比,有高电平也有低电平,这就给计数器计数的判断带来了麻烦。最好是能够产生一个高电平为100ms的脉冲信号作为时基,那么就能够在程序中以“如果时基信号为1”作为判断条件,如果满足条件则计数器计数,方便了程序的书写。同理,在这个设计中还要产生高电平为10ms和1ms的脉冲信号作为时基。

可以考虑使用状态机来实现这3种时基,因为采用状态机来控制时序很清楚,不容易出错。状态机用1kHz(周期为1ms)的脉冲信号触发,因为所要生产的时基中,频率最大(周期最小)的就是1kHz的脉冲,要产生高电平为10ms和1ms的脉冲信号,可以采用100个状态的状态机,从状态1,状态2......到状态100.要产生高电平为1ms的脉冲信号,只要在状态99的时候产生高电平,状态100的时候回到低电平即可;要产生高电平为10ms的脉冲信号,则要在状态90的时候产生高电平,在状态100的时候回到低电平。需要产生哪个时基得根据此时频率计所在的

4

毕业设计论文 数字频率计设计

挡作为判断条件进行控制。在100个状态中,有很多状态的功能相同的,可以将它们合并。

2.2 计数器的设计

各个挡之间的转换应遵循设计要求,要根据在时基有效时间内的计数值进行判断。计数器可以直接定义成一个整型信号,这样计数器计数(即加1)就十分方便,只要使用语句“计数器<=计数器+1;”就可以。但是这个计数值要作为显示输出,就要将这个计数器用个位、十位、百位分开表示,而且要遵循加法“逢十进一”的规则。这样可以直接通过7段译码器进行显示。因为在不同的挡位,小数点的位置是不同的,所以小数点的显示以所在挡为判断条件。 2.3 模块的划分

计数器在各个挡被反复应用的,如果在各个挡分别设计计数器,就造成资源的浪费,而且在测周期和测频率的时候,计数器的时候信号和输入信号要进行调换,但是计数功能是一样的,所以将计数器设计成单独的模块。7段译码器在个位、十位、百位中也都被利用到,因此也将其设计成单独的模块,重复引用就不需要在3个位显示的时候重复书写译码电路了。

另外,计数器的输入信号和时钟信号要通过一个进程来提供。在测频率时,进程向计数器提供的时钟信号是输入频率计的测量信号,计数器的输入信号是频率计提供的时基;在测周期时,进程向计数器提供的时钟信号是频率计提供的时基,计数器的输入信号是输入频率计的测量信号。

5

数字频率计各模块的设计和实现 毕业设计论文

第三章 数字频率计各模块的设计和实现

3.1 计数器的设计和实现 --计数器模块 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity frequency is

port(treset:in std_logic;--异步复位端口

tclk:in std_logic;--时钟输入 tsig:in std_logic;--信号输入

tkeep1:out std_logic_vector(3 downto 0);--计数值个位 tkeep2:out std_logic_vector(3 downto 0);--计数值十位

tkeep3:out std_logic_vector(3 downto 0));--计数值百位 end entity frequency;

architecture one of frequency is

signal tcou1:std_logic_vector(3 downto 0);--内部计数值个位 signal tcou2:std_logic_vector(3 downto 0);--内部计数值十位 signal tcou3:std_logic_vector(3 downto 0);--内部计数值百位 begin

ctrcou:process(treset,tclk)--控制计数功能的进程 begin

if treset='1' then else

tcou1<=\ if tclk'event and tclk='1' then

if tsig='1' then--时基信号高电平为判断条件有效的时候遇到时 --钟上升沿触发 if tcou3=\

tcou3<=\如果百位为10,百位数值不变

6

毕业设计论文 数字频率计设计

else

if tcou1=\ --如果计数值为999

tcou1<=\ -- 则计数值百位变成10,十位、个位变成0 elsif tcou1=\ --如果百位小于9,十位为9且个位为9的时候 tcou1<=\ --百位数值加1,十位、个位清零 elsif tcou1=\

--如果百位和十位都小于9且个位为9的时候 tcou1<=\ --个位清零,十位数值加1

else tcou1<=tcou1+1; --其他情况就是个位数值加1 end if; end if;

else –如果时基信号为0,那么判断条件无效 tcou1<=\ end if; end if; end if;

end process ctrcou;

oputctr:process(treset,tsig)--控制数值输出的进程 begin

if treset='1' then

tkeep1<=\ else

if tsig'event and tsig='0' then --时钟下降沿触发输出各位数值 tkeep1<=tcou1; tkeep2<=tcou2; tkeep3<=tcou3; end if; end if;

7

数字频率计各模块的设计和实现 毕业设计论文

end process oputctr; end one;

3.2 7段译码器的设计

7段译码器将输入的4位BCD码以7段译码的方式输入。可以使用一个7位向量来分别表示7段译码器中的7段。 --译码器模块 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity display is

port(data_in:in std_logic_vector(3 downto 0);

--输入为4位二进制,范围从0到9

data_out:out std_logic_vector(0 to 3));--7段译码输出 end entity display;

architecture one of display is

signal indata:std_logic_vector(3 downto 0);--内部数值信号 begin

process(data_in)--输入信号作为进程的敏感量触发进程 begin

indata<=data_in;

case indata is when\ when\ when\ when\ when\ when\ when\ when\ when\

when\

8

毕业设计论文 数字频率计设计

when others=>data_out<=\

end case; end process; end one;

3.3 数字频率计综合设计

要设计的数字频率计需要3个输入端口,一个脉 冲 输 入 端 口 clk (频率为4.19MHz);一个异步复位端口rest,用于使系统回到初始状态;还有一个就是测试信号的输入端口testsignal,用于输入待测试的信号。

该频率计需要7个输出端口,要有一个表示是显示频率还是周期的输出端口unit;还有3个显示频率值的7段译码输出端口display1,display2和display3,以及3个小数点输出端口dot向量。 --频率计源文件 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity dfre is

port(reset:in std_logic;

clk:in std_logic;--时钟信号

testsignal:in std_logic;--测试信号输入端 display1:out std_logic_vector(0 to 3); display2:out std_logic_vector(0 to 3);

display3:out std_logic_vector(0 to 3); --3个7段译码器输出 unit:out std_logic;--表示是周期还是频率的信号灯 dot:out std_logic_vector(2 downto 0)); --小数点

end entity dfre;

architecture one of dfre is type state is

(start,judge,count1,count2to89,count90,count91to98,count99,count100); signal myfre:state;

signal frecou:integer range 0 to 99;--用于状态机中的计数器,计数值从0~99 signal clk1k:std_logic;--产生频率为1kHz的脉冲信号

9

数字频率计各模块的设计和实现 毕业设计论文

signal cou1k:integer range 0 to 2094;--用于分频的计数器 signal enfre:std_logic;--代表时基的脉冲信号 signal flag:std_logic_vector(2 downto 0);

--标志信号,1表示10kHz测频挡,2表示100kHz测频挡,3表示1MHz测频挡,0表示测周期挡,4表示溢出

signal keepcou1:std_logic_vector(3 downto 0); signal keepcou2:std_logic_vector(3 downto 0); signal keepcou3:std_logic_vector(3 downto 0); signal ttclk:std_logic;--输入计数器的时钟信号即时基 signal ttsig:std_logic;--输入计数器的测试信号 component display is --引用7段译码器

port(data_in:in std_logic_vector(3 downto 0);

data_out:out std_logic_vector(0 to 6) );

end component;

component frequency is –引用计数器 程

begin

cou1k<=0;clk1k<='0'; else

if clk'event and clk='1' then if cou1k=9999 then cou1k<=0; clk1k<=not clk1k; else

10

port(treset:in std_logic; tclk,tsig:in std_logic;

tkeep1:out std_logic_vector(3 downto 0); tkeep2:out std_logic_vector(3 downto 0); tkeep3:out std_logic_vector(3 downto 0));

end component;

begin

constrclk1k:process(reset,clk)--用4.19MHz的脉冲产生频率为1kHz脉冲进

if reset='1' then

毕业设计论文 数字频率计设计

cou1k<=cou1k+1;

end if; end if; end if;

end process constrclk1k; begin

case flag is

when\when\when\when\when others=>dot<=\

ctrdot:process(flag) --控制小数点显示的进程,标志flag为敏感量

end case; end process ctrdot;

ctrfre:process(reset,clk1k)--用于产生时基的状态机

begin

if reset='1' then else

if clk1k'event and clk1k='1' then case myfre is

when start=>frecou<=0;enfre<='0';flag<=\when judge=>

if flag=\如果标志为0,即频率计处于测周期挡

if keepcou3=\

flag<=\ else flag<=\ end if;

elsif flag=\如果标志为4,即处于溢出挡 if keepcou3=\ flag<=\ else flag<=\ end if;

11

frecou<=0;enfre<='0';flag<=\

数字频率计各模块的设计和实现 毕业设计论文

elsif flag=\如果标志为2,即处于100kHz挡 if keepcou3<\ flag<=flag-1; enfre<='1';

elsif keepcou3=\ flag<=flag+1; else flag<=flag;

end if;

elsif flag=\如果标志为1,即处于10kHz挡 if keepcou3<\ flag<=flag-1;

elsif keepcou3=\ flag<=flag+1; else flag<=flag; enfre<='1'; end if;

else --如果标志为3,即处于1MHz挡 if keepcou3<\ flag<=flag-1;

elsif keepcou3=\

flag<=flag+1;

else flag<=flag; end if;

end if;

myfre<=count1; --处于计数状态1的时候 when count1=> if flag=\

enfre<='1'; else enfre<=enfre; end if; frecou<=1;

myfre<=count2to89;

when count2to89=> --处于计数状态2~89的时候

if frecou=88 then

12

毕业设计论文 数字频率计设计

frecou<=89; myfre<=count90; else frecou<=frecou+1;

myfre<=count2to89;

end if;

when count90=> --处于计数状态90的时候 if flag=\

enfre<='1'; else enfre<=enfre;

end if; frecou<=90; myfre<=count91to98; when count91to98=> --处于计数状态91~98的时候

if frecou=97 then frecou<=98; myfre<=count99; else frecou<=frecou+1; myfre<=count91to98; end if;

when count99=> --处于计数状态99的时候 if flag=\

enfre<='1';

else enfre<=enfre; end if; frecou<=99; myfre<=count100;

when count100=> --处于计数状态100的时候 frecou<=100; enfre<='0';

myfre<=judge;--状态转移到判断状态

when others=>null;

end case;

end if; end if;

13

数字频率计各模块的设计和实现 毕业设计论文

end process ctrfre;

ctrtt:process(reset,flag)--用于控制计数器输入的进程

begin

if reset='1' then

ttclk<='0';ttsig<='0';unit<='0'; --异步置位使得输入信号都为0 if flag=0 then ttclk<=clk1k;ttsig<=testsignal;unit<='1';

else

--如果标志为0即频率计处于测周期挡

else ttclk<=testsignal;ttsig<=enfre;unit<='0'; end if;

--如果标志不为0即频率计处于测频率挡 end if;

end process ctrtt;

c1: frequency port map(reset,ttclk,ttsig,keepcou1,keepcou2,keepcou3); --引用计数器

dis1: display port map(keepcou1,display1); dis2: display port map(keepcou2,display2); dis3: display port map(keepcou3,display3);

end one;

上图中,state是用于产生时基的状态机类型,共有开始状态(start)、判断

状态(judge)、计数状态1(count 1)、计数状态2~89(count 2 to 89)、计数状态90(count 90)、计数状态91~98(count 91 to 98)、计数状态99(count 99)、计数状态100(count 100)。这里,将计数状态2、计数状态3一直到计数状态89进行了合并,将计数状态91到计数状态98进行了合并,因为这些状态功能一致,所以合并。将计数状态1、计数状态90、计数状态99和计数状态100单独提取出来的原因是时基信号都在状态100清零,产生高电平为100ms的时基,需要在计数状态1的时候将时基信号置1,由于从1~99只有99ms,因此在计数状态1之前的judge状态中,如果处于10kHz测频挡,就要将时基信号置1;产生高电平为10ms的时基,需要在计数状态90的时候将时基信号置1;产生高电平为1ms的时基,则需要在计数状态99将时基信号置1,所以计数状态1、计数状态90和计数状态99要单独提取。

14

毕业设计论文 数字频率计设计

第四章 数字频率计波形仿真

4.1 省略分频进程

由于设计输入的脉冲信号为4.19MHz,所以如果直接采用上面的设计进行仿真,那么将很浪费时间。在能够保证分频不错误的情况下,可以在结构体中省略分频的进程,并且将实体设计作出如下改动: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity dfre is

port(reset:in std_logic;

clk1k:in std_logic; --1k时钟信号

testsignal:in std_logic;--测试信号输入端 display1:out std_logic_vector(0 to 3); display2:out std_logic_vector(0 to 3);

display3:out std_logic_vector(0 to 3); --3个7段译码器输出 unit:out std_logic;--表示是周期还是频率的信号灯 dot:out std_logic_vector(2 downto 0)); --小数点

end entity dfre;

再次编译以后,在仿真中就可以直接采用clk1k的脉冲作为触发,即采用频率为1kHz的脉冲作为时钟信号。这是一种明智的仿真方法,很多时候都可以借鉴。 4.2 10kHz、100kHz和1MHz三挡仿真

第一次仿真采用测试信号的周期为200us,即频率为5kHz,按照频率计的设计,应该是自动换到10kHz测频挡,显示为5.00,单位为kHz。仿真波形如图:

15

数字频率计波形仿真 毕业设计论文

测试信号是频率为5kHz脉冲时的仿真波形图

在波形图中可以看到,开始的时候flag为2,表示频率计处于100kHz测频挡,但是这个挡提供的时基不能满足要求,时基太小,计数器在时基为高电平的时候计数次数太少,不能达到100次,所以要自动换挡。100kHz测频挡提供一个时基以后,马上换到10kHz测频挡。可以看到flag变成1了,如下图所示。此时的时基符合要求,因此最后就稳定地显示频率数值。

第一次仿真中的换挡情况

第二次仿真待用测试信号的周期为40us,即频率为25kHz,按照频率计的设计,应该自动换挡到100kHz测频挡,显示为25.0,单位为kHz。仿真波形如图所示:

测试信号是频率为25kHz脉冲时的仿真波形图

第三次仿真采用测试信号的周期为4us,即频率为250kHz,按照频率计的设计,应该自动换挡到1MHz测频挡,显示为250,单位为kHz。仿真波形如图所示:

16

毕业设计论文 数字频率计设计

测试信号是频率为250kHz脉冲时的仿真波形图

在波形图中可以看到,开始的时候flag为2,表示频率计处于100kHz测频挡,但是这个挡提供的时基不能满足要求,时基太小,计数器在时基为高电平的时候计数次数超过了要求的范围,所以要自动换挡。100kHz测频挡一个时基以后,马上换到1MHz测频挡。可以看到flag变成3了,如上图。此时的时基符合要求,因此最后就稳定地显示频率数值。 4.3 测周期挡仿真

这次仿真采用测试信号的周期为6ms,按照频率计的设计,应该自动换挡到测周期挡,显示为006,单位为ms。测周期的仿真如图:

测试信号是周期为6ms脉冲的仿真波形图

值得注意的是,测周期显示的数值是真正周期的一半,造成这种显示的原因和程序的设计有关,当测周期的时候,频率计提供的时基作为计数器的触发时钟,而测试信号作为输入信号,测试信号是占空比为1的信号,在计数器设计中,计数值加1的判断条件是输入信号为1,因此,在一个输入信号周期里,只有半个周期计数器在计数,所以显示的周期只是真正周期的一半。

为了解决这个问题,可以考虑将输入信号锁存,就是当在输入信号上升沿的时候触发锁存器,并且将输入信号的高电平锁存一个周期。锁存的程序: --锁存源程序

17

数字频率计波形仿真 毕业设计论文

library ieee;

use ieee.std_logic_1164,all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity lock is

port(reset:in std_logic;

lockin:in std_logic; lockout:out std_logic);

end lock;

architecture behave of lock is signal inlock:std_logic; begin

process(reset,lockin) begin

if reset='1' then

inlock<='0'; inlock<=not inlock;

elsif lockin'event and lockin='1' then end if;

lockout<=inlock;

当测量周期的时候,输入信号通过锁存器后再输入计数器,这样就能正确显示周期。

18

end process; end behave;

毕业设计论文 数字频率计设计

第五章 调试常见错误及解决办法

5.1 常见错误与解决办法

1. 在编译时候出现如下图提示错误:

解决办法:把文本文档保存名以程序实体名命名,然后问题就可以解决了。 2. 在编译时候出现如下图提示错误:

解决办法:将计数器模块和译码器模块的的VHD文件拷贝到频率计源文件的文件夹下,然后再次编译就能解决了。 3. 在编译时候出现如下图提示错误:

解决办法:设计程序少考虑一种情况,即少考虑一种others情况,在其他情况下添加others,即添加“when others=>data_out<=”1111””,然后再次编译问题就能解决了。

19

总结 毕业设计论文

总结

09

年10月,我开始了我的毕业论文工作,时至今日,论文基本完成。从最初

的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,整个写作过程难以用语言来表达。历经了几个月的奋战,紧张而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。

我在学校图书馆搜集资料,还在网上查找各类相关资料,将这些宝贵的资料全部保存起来,尽量使我的资料完整、精确、数量多,这有利于论文的撰写。当资料查找完毕了,我开始着手论文的写作。在写作过程中遇到困难我就及时和我的指导老师晏文靖老师联系,在晏老师的帮助下,困难一个一个解决掉,论文也慢慢成型。这次毕业论文的制作过程是我的一次再学习,再提高的过程。

我不会忘记这难忘的几个月的时间,毕业论文的制作给了我难忘的回忆。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;这段旅程看似荆棘密布,实则蕴藏着无尽的宝藏。

脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。

在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。

在此更要感谢我的指导老师晏文靖老师,是你的细心指导和关怀,使我能够顺利的完成毕业设计及毕业论文。老师的严谨治学态度、渊博的知识、无私的奉献精神使我深受启迪。从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我的导师致以最衷心的感谢和深深的敬意。

20

毕业设计论文 数字频率计设计

致谢

三年寒窗,所收获的不仅仅是愈加丰厚的知识,更重要的是在阅读、实践中所培养的思维方式、表达能力和广阔视野。很庆幸这些年来我遇到了许多恩师益友,无论在学习上、生活上还是工作上都给予了我无私的帮助和热心的照顾,让我在诸多方面都有所成长。感恩之情难以用语言量度,谨以最朴实的话语致以最崇高的敬意。

感谢我的导师晏文靖老师。本论文能够顺利完成,离不开晏老师的悉心指导和严格要求,晏老师在论文的选题、研究理论、框架结构、数据整理,直至撰写、修改和定稿等各个环节均严格把关,并投入了大量的时间和精力。晏老师治学严谨,学识渊博,为我营造了一种良好的研究氛围。在跟随晏老师学习的过程中,我不仅掌握了全新而实用的学术思想和研究方法,也领会了许多待人接物与为人处世的道理。W老师严以律己、宽以待人的崇高风范,平易近人的人格魅力,令人如沐春风,倍感温馨。

感谢2007级微电子技术专业的同窗好友。在同大家的交往中我学到很多,也非常快乐,正因为有大家我在商院的生活才能如此丰富而充实。三年时光转瞬即逝,然而这段短暂时光的点点滴滴都将是我生命中的美好回忆。因而在今后新的征程中,无论面临多大的困难,我也将怀抱着感激、怀抱着情谊、怀抱着责任、怀抱着期望和梦想,坚定、自信地走下去。

感谢我最亲爱的父母。你们数十年含辛茹苦、无私的关爱和奉献,让我在漫长的求学道路上不感到孤单,让我在拼搏和奋斗的历程中不感到疲倦,你们是我永远的牵挂和眷念

最后,我要向在百忙之中抽时间对本文进行审阅、评议和参加本人论文答辩的各位师长表示感谢!

21

附录 毕业设计论文

附录

附录A MAX+PLUSⅡ简介

MAX+PLUSⅡ(Multiple Array and Programming Logic User System)开发工具是Altera公司推出的一种EDA工具,具有灵活高效、使用便捷和易学易用等特点。Altera公司在推出各种CPLD的同时,也在不断地升级相应的开发工具软件,已从早起的第一代A+PLUS、第二代MAX+PLUS发展到第三代MAX+PLUSⅡ和第四代Quartus。使用MAX+PLUSⅡ软件,设计者无需精通器件内部的复杂结构,只需用业已熟悉的设计输入工具,如硬件描述语言、原理图等进行输入即可,MAX+PLUSⅡ就会自动将设计转换成目标文件下载到器件中去。MAX+PLUSⅡ开发系统具有以下特点。

(1) 多平台。MAX+PLUSⅡ软件可以在基于PC机的操作系统如Windows95、

Windows98、Windows2000、Windows NT下运行,也可以在Sun SPAC station等工作站上运行。

(2) 开放的界面。MAX+PLUSⅡ提供了与其他设计输入、综合和校验工具的接口,

借口符合EDIF 200/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系列的器件和多种特定功能的宏功能模块以及参数化的兆功能模块。调用库单元进行设计,可以大大减轻设计人员的工作量,缩短设计周期。

22

毕业设计论文 数字频率计设计

附录B 软件的安装

MAX+PLUSⅡ软件按使用平台可以分为PC机版和工作站版;按使用的对象可以分为商业版、基本版和学生版。

商业版:支持全部输入方式和版本发行时间的除APEX系列外的所有Altera CPLD器件。商业版运行时需要一个授权码和一个附加的并口硬件狗。

基本版:在商业版的基础上作了一些限制,如不支持VHDL,不能进行功能仿真和时序仿真,不支持某些器件等。基本版不需要并口硬件狗,只需向Altera申请一个基本授权码即可使用。

学生版:支持商业版的全部功能,但可使用的逻辑功能模块受到限制,且只支持几个器件。若要安装学生版,应向Altera公司大学项目部申请学生版授权码。 MAX+PLUSⅡ几种版本的安装方法基本相同,基本安装步骤如下: (1) 将光盘插入光驱(假定光驱号为F:)。

(2) 选择[开始]/[运行],然后再打开对话框输入:F:\\PC\\maxplus2\\install,

运行后出现安装对话框,按Next按钮继续。

(3) 阅读完授权窗口信息后,选择YES接受协议,再选择适当的安装方式,商业

版选择Full\\Custom\\FLEXlm,基本版或学生版选择BASELINE\\E+MAX。 (4) 选择安装目录,假设选择的目录为C:\\Maxplus2,若要改变目录,则按Browse

按钮,选好目录后,即可开始安装。

(5) 安装成功后,readme文件将自动出现,它包含一些重要信息。

(6) 第一次运行MAX+PLUSⅡ,将会出现MAX+PLUS Ⅱ Manager(管理器)界面,同

时会在管理器窗口上出现License Agreement信息,选择其中的Yes选项。 (7) 接着会出现Copy Protection窗口。选择“是(Y)”选项,将显示如何申请

免费版本的授权文件;如果有硬件狗或授权文件,选择“否(N)”选项,并将硬件狗插在计算机并口上。

(8) 执行MAX+PLUSⅡ管理器中的菜单命令Option/License Setup,在对话框中

输入带路径名的授权文件名,然后单击OK按钮。 附录C 软件组成

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

(1) 设计输入

MAX+PLUSⅡ的设计输入方法有多种,主要包括文本设计输入、原理图输入、波形设计输入等多种方式。另外,还可以利用第三方EDA工具生成的网表文件输入,

23

附录 毕业设计论文

该软件可接受的网表有EDIF格式、VHDL格式及Verilog格式。MAX+PLUSⅡ是一种层次设计工具,可根据实际情况灵活地使用最适合每一层次的设计方法。

(2) 项目处理

设计处理的任务就是对项目进行编译(Compile),编译实际就是将设计者编写的设计改为可以用于生产的“语言”。编译器通过读入设计文件并产生用于编程、仿真和定时分析的输出文件来完成编译工作。MAX+PLUSⅡ提供的编译软件,只需简单的操作,如参数选择、指定功能等,就可进行网表转换、逻辑分割和布线布局。

(3) 项目校验

MAX+PLUSⅡ提供的设计校验过程包括仿真和定时分析,项目编译后,为确保设计无误,要再用专用软件进行仿真。如果发现了错误,则应对设计输入进行部分修改直至无误。

(4) 器件编程

MAX+PLUSⅡ通过编程器(Device Programmer)将编译器生成的编程文件编程或配置到Altera CPLD器件中,然后加入实际激励信号进行测试,检查是否达到了设计要求?Altera公司器件的编程方法有许多种,可通过编程器、JTAG在系统编程及Altera在线配置等方式进行。 附录D 设计流程

使用MAX+PLUSⅡ进行可编程逻辑器件开发主要包括4个阶段:设计输入、编译处理、验证(包括功能仿真、时序仿真、和定时分析)和器件编程,流程如图所示:

设计要求 设计输入 编译处理 验证 器件编程 器件测试 系统产品 设计修改 24

毕业设计论文 数字频率计设计

参考文献

[1] 朱正伟 主编.《EDA技术及应用》[M].北京:清华大学出版社,2005.10 [2] 潘松 黄继业 编著.《EDA技术与VHDL(第2版)》[M]. 北京:清华大学出版社,2007.1

[3] 潘松 黄继业 编著.《EDA技术实用教程》[M].北京:科学出版社,2005 [4] 赵明富 主编.《EDA技术与实践》[M].北京:清华大学出版社,2005.11 [5] 赵明富 刘文进 主编.《EDA技术基础》[M].北京:北京大学出版社,2007.6 [6] 邹彦 等编著.《EDA技术与数字系统设计》[M].北京:电子工业出版社,2007.4 [7] 柳春锋 主编.《电子设计自动化(EDA)教程》[M]. 北京:北京理工大学出版社, 2005.8

25

本文来源:https://www.bwwdw.com/article/7p4o.html

Top