基于VHDL语言数字频率计的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于数字频率计设计
[摘要]本报告介绍了一种以大规模可编程逻辑芯片为设计载体,由顶到底分层设计,多功能数字频率计的设计方法。

该频率计采用VHDL语言程序与原理图相结合的方法,极大地减少了硬件资源占用。

该数字频率计测量范围为0到9999HZ,基准频率为1HZ,结果用4只7段数码管显示十进制结果。

中间用到了设置控制电路、计数电路、锁存电路和译码电路等模块。

仿真结果表明,该数字频率计性能优异,设计语言灵活,硬件更简单,速度更快。

[关键词]数字频率计;控制电路;计数电路;锁存电路
With regard to the design of digital frequency meter
[Abstract] The present report describes a large-scale programmable logic chip design carrier, in the end by a top-tiered design, multi-function digital frequency meter design methods. The frequency counter using VHDL language programs, and the method of combining schematic, greatly reducing the hardware footprint. The digital frequency meter measurement range from 0 to 9999HZ, the base frequency of 1HZ, the results with the four 7-segment LED display decimal results. Intermediate used for setting up control circuit, counting circuit, latch circuit and decoding circuit modules. The simulation results show that the digital frequency meter high-performance, design language flexibility, hardware simpler and faster.
[Key words]digital frequency meter; control circuit; counting circuit; Latch Circuit
目录
摘要 (I)
Abstract (II)
第1章引言 (3)
第2章VHDL的简述 (4)
2.1 VHDL的发展 (4)
2.2 VHDL的特点 (4)
2.3 VHDL语言结构 (4)
2.3.1 实体(ENTITY) (5)
2.3.2结构体(ARCHITECTURE) (6)
2.4 VHDL软件设计简介 (6)
第3章频率计方案的设计 (8)
3.1 方案一 (8)
3.2 方案二 (11)
3.3 方案比较 (12)
3.4 方案改造 (12)
第4章利用VHDL语言设计频率计 (13)
4.1 系统功能的分析与电路设置 (13)
4.2 测频原理 (13)
4.3 测频模块工作描述及VHDL程序 (13)
4.3.1 计数模块(CNT10) (13)
4.3.2 锁存模块(REG16B) (14)
4.3.3 控制模块(TESTCTL) (15)
4.3.4 译码模块(DISPLAR) (15)
4.3.5 测频主系统实现(FREQ) (16)
4.3.6 原理图的制作 (18)
第5章数字频率计仿真及分析 (19)
5.1 MAX+PLUS II的特点 (19)
5.2 MAX+PLUS II的编译、仿真简介 (19)
5.3 多功能数字频率计编译及仿真 (20)
5.3.1 编译结果的记载 (20)
5.3.2 仿真结果的记载 (22)
5.4 引脚锁定 (23)
5.5 程序的下载和测试 (24)
第6章实验过程中遇到的问题及分析 (25)
结论 (25)
致谢 (26)
参考文献 (27)
附录 (28)
附录一方案一总程序 (28)
附录二原理图 (34)
附录三实验结果记录 (35)
第1章引言
随着计算机技术和半导体技术的发展,传统的硬件电路电路设计方法已大大落后于当今技术的发展,一种崭新的、采用硬件描述语言的硬件电路设计方法已经兴起,这是电子设计自动化(EDA)领域的一次重大变革。

目前,广泛使用的硬件描述语言有VHDL(Very Speed Integrated Circuit Hardware Description Language)和Verilog HDL;它们先后被批准为国际标准语言。

据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计,VHDL的应用已成为当今以及未来EDA解决方案的核心,而且是复杂数字系统设计的核心。

多功能数字频率计是一种用十进制数字显示被测信号频率、周期、占空比的数字测量仪器,是在数字电路中的一个典型应用;实际的硬件设计的多功能数字频率计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差,随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL语言,将使整大大简化,提高整体个系统的性能和可靠性;它是计算机、通信设备、音频视频等科研生产领域不可缺少的测量仪器。

采用VHDL编程设计实习的多功能数字频率计,具有体积小,可靠性高,功耗低的特点;整个系统非常精简,且具有灵活的现场可更改性。

本实验报告注重书本知识与实验的结合,在报告中有介绍到VHDL语言以及MAXPLUSMAX+PLUSII的特点,软件应用的介绍,具体的实验步骤等等。

对数字频率计的设计过程做了详细的说明。

在本实验报告的编写过程中,我力求解决实验中遇到的各个问题,在第六章有详细的说明。

现代电子设计技术是发展的,相应的设计方法以及设计软件也会随之不断改进,其中一定有许多问题值得深入探讨。

我真诚的欢迎老师以及其他读者对报告中的有关问题给予批评指正。

第2章 VHDL的简述
2.1 VHDL的发展
VHDL诞生于1982年。

在1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言,自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA 公司相继推出了自己的VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。

而Verilog HDL是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具,1985年Moorby推出它的第三个商用仿真器Verilog XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。

1989年CADENCE公司收购了GDA公司公开发表了Verilog HDL,并成立LV1组织以促进Verilog HDL成为IEEE标准,即IEEE Standard 1364-1995. VHDL的英文全名是VHSIC(Very High Speed Interated Circuit)Hardare Description Language,支持各种模式的设计方法:自顶向下与自底向上或混合方法,在面对当今许多电子产品生命周期的缩短,需要多次重新设计以其融入最新技术、改变工艺等方面,VHDL具有良好的适应性。

用VHDL设计的最大优点是设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。

2.2 VHDL的特点
VHDL语言主要用于描述数字系统的结构、行为功能和接口,与其他硬件描述语言相比,VHDL语言有如下优越之处:
1)VHDL语言支持自上而下(Top Down)和基于库(Library Base)的设计方法,还支持同步电路、异步电路,FPGA以及其他随机电路的设计;
2)VHDL语言具有多层次描述系统硬件功能的能力可以从系统的数字模型直到门级电路,其高层次的行为描述可以与低层次的RTL描述和结构描述混合使用,还可以自定义数据,给编程人员带来较大的自由和方便;
3)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必关心最终设计实现的目标器件是什么;
4)VHDL具有电路仿真与验证功能,可以保证设计的正确性,用户甚至不必编写如何测试向量便可以进行源代码级的调试,而且设计者可以非常方便地比较各种方案之间的可行性及其优劣,不需要任何实际的电路实验;
5)VHDL语言可以与工艺无关编程;
6)VHDL语言标准、规范,易于共享和复用。

2.3VHDL语言结构
图2.1vhdl 程序结构框图
图2.1中是VHDL 的全部结构,但实际上并不需要全部结构,就像在许多设计项目中,大部分工程师只用到VHDL 其中的30%的语法;通常图2.2结构才是基本和必须的。

图2.2VHDL 程序基本结构
2.3.1实体(ENTITY )
实体作为一个设计实体的组成部分,其功能是对这个设计实体与外部电路进行接口描述,它是设计实体的表层设计单元;实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实体对外一个通信界面,就一个设计实体而言,外界所看到得仅仅是他的界面上的各种接口。

它可以拥有一个或多个结构体,用于描述此设计实体的逻辑结构和逻辑功能对于外界来看,这一部分是不可见的。

不同逻辑功能的实体可以拥有相同的实体描述,这是因为实体类似于原理图中的一
个邮件符号,而其的逻辑功能是有设计实体中结构的描述确定的。

实体是VHDL的基本设计单元,他可以对一个门电路,一个芯片、一块电路板乃至整个系统进行接口描述,其结构:
ENTITY 实体名 IS
【GENERIC (常数名:数据类型【:设定值】;
{常数名:数据类型【:设定值】});】
【PORT(端口名:端口模式数据类型;
{端口名:端口模式数据类型});】
END ENTITY 实体名;
2.3.2结构体(ARCHITECTURE)
结构体是实体所定义的设计实体中的一个组成部分,结构体描述设计实体的内部结构和实体端口间的逻辑关系。

结构体由两部分组成:
1)对数据类型、常数、信号、子程序和元件等元素的说明部分;
2)描述实体逻辑行为的,一各种不同的描述风格表达的功能描述语句,他们包括各种形式的顺序描述语句和并行描述语句。

其语句格式如下:
ARCHITECTURE 结构体名;
【说明语句】
BEGIN
【功能描述语句】
END ARCHITECTURE 结构体名;
图2.3的五种结构的基本组成和功能分别是:
1)块语句是由一个系列并行执行语句构成的组成体,它的功能是将结构中的并行语句组成一个或多个模块。

2)进程语句定义顺序语句模块,用以将从外部获得的信号值,或内部的运算数据向其它的信号进行赋值。

3)信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。

4)子程序调用语句用意调用过程或者函数,并将此元件的端口与其它的元件、信号或高层次实体的界面端口进行连接。

2.4 VHDL软件设计简介
系统电路的软件设计可采用工具MAX+PLUSⅡ,用该工具软件所支持的语言—硬件描述语言VHDL,以文本的方式进行编程输入。

在编程时分别对控制、技术、锁存、译码等电路模块进行VHDL文本描述,使每个电路模块以及器件都以文本的形式出现,然后通过编译、波形分析、仿真,调试来完善每个器件的功能,单个器件制作完成后,然后将它们生成库文件,并产生相应的符号,最后言语将各个已生成库文件的器件的各个端口连接在一起,从而形成了系统主电路的软件结构。

在连接器件
时,也可以采用图形输入方式,即在图形输入界面中调出先制作的库文件器件符号,再将每个器件符号的各端口直接连接,从而构成系统主电路。

在上述工作的基础上,再进行波形分析、仿真调试便完成整个软件设计。

图2.3结构体构造图
第3章频率计方案的设计
3.1 方案一
根据频率计的测频原理,可以选择合适的时基信号即闸门时间,对输入被测信号脉冲进行计数,实现测频的目的。

在这个设计前,我们加入了一项测试周期的功能。

在实验过程中,要在频率计提供的基信号和输入信号之间做出选择,充当时基信号即闸门时间。

当测频率的时候,要以输入信号作为时钟信号,因为输入信号的频率大于频率计提供的基准频率,在频率计提供的基准信号周期内,计算输入信号的周期数目,再乘以频率计基准频率,就是输入信号的频率值了。

此时的时基信号为频率计的基准信号。

当测周期的时候,要以频率及提供的基准信号作为时钟信号,因为频率及提供的时基频率大于输入信号的频率,在输入信号周期内,计算频率计提供的基准信号的周期数目,再乘以基准信号频率,就是输入信号的周期值了。

此时的时基信号为输入信号。

㈠方案一的设计思路
1.时基的设计
输入信号是随意的,没法预知其频率是多少,如何选取频率计提供的基准信号是关键。

测量频率时,在某个挡进行测量的时候,就需要提供该挡的时基。

在10KHZ 挡,该挡最大读数为9.99KHZ,同时也说明最小的读数是0.0KHZ,所以提供的时基应该是频率为0.01KHZ的脉冲.同样的方法100KHZ挡提供的时基应该是频率为0.1KHZ的脉冲,1MHZ挡提供的时基应该是频率为1KHZ的脉冲。

同样用到3个分频器,但是节约了资源。

可以考虑使用状态机来实现这3种时基,因为采用状态机来控制时序很清楚,不容易出错。

状态机用1KHZ(周期为1ms)的脉冲信号触发,因为所要生产的时基中,频率最大的就是1KHZ的脉冲,要产生高电频为10ms和1ms 的脉冲信号,可以采用100个状态的状态机,从状态1,状态2……到状态100. 2.计数器的设计
各个档之间的转换应遵循设计要求,要根据在时基有效时间内的计数值进行判断。

计数器可以直接定义成一个整形信号,这样计数器(即加1)就十分方便,只要使用语句“计数器<=计数器+1;”就可以。

但这个计数值要作为显示输出,就要将这个计数器用个位、十位,百位分开表示,而且要遵循“加一逢十”的规则。

这样可以直接通过七段译码器进行显示。

3.模块的划分
计数器在各个挡是被反复应用的,如果在各个挡分别设计计数器,就造成资源的浪费,而且在测量周期和频率时,计数器的时钟信号和输入信号要进行调换,但是计数功能是一样的,所以将计数器设计成单独的模块。

7段译码器在各位,十位,百位中也都被利用了,因此也将其设计成单独的模块,重复引用就不需要在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
tcou1<="0000";tcou2<="0000";tcou3<="0000";
ELSE
IF tclk'EVENT and tclk='1'THEN
IF tsig='1'THEN
--时基信号高电平为判断条件有效的时候遇到时钟上升沿触发IF tcou3="1010"THEN
tcou3<="1010"; --如果百位为10,百位不变
ELSE
IF tcou1="1001"AND tcou2="1001"AND tcou3="1001"THEN
--如果计数值为999
tcou1<="0000";tcou2<="0000";tcou3<="1010";
--则计数值百位变成10,十位、个位变成0 ELSIF tcou1="1001"AND tcou2="1001"THEN
--如果百位小于9,十位为9且个位为9的时候
tcou1<="0000";tcou2<="0000";tcou3<=tcou3+1;
百位数值加1,十位、个位清零
ELSIF tcou1="1001"THEN
--如果百位和十位都小于9且个位为9的时候tcou1<="0000";tcou2<=tcou2+1;
--个位清零,十为数值加1
ELSE tcou1<=tcou1+1; --其他情况就是个位数值加1
END IF;
END IF;
ELSE
tcou1<="0000";tcou2<="0000";tcou3<="0000";
END IF;
END IF;
END IF;
END PROCESS ctrcou;
oputctr:PROCESS(treset,tsig) --控制数值输出的进程
BEGIN
IF treset='1'THEN
tkeep1<="0000";tkeep2<="0000";tkeep3<="0000";
ELSE
IF tsig'EVENT AND tsig='0' THEN --时钟下降沿触发输出各位数值tkeep1<=tcou1;
tkeep2<=tcou2;
tkeep3<=tcou3;
END IF;
END IF;
END PROCESS oputctr;
END one;
2.7段译码器的设计
七段译码器将4位BCD码以七段译码器的形式输出。

可以使用一个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 DOWNTO 6)); --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"0000"=>data_out<="1111110"; --0到7段译码(以下类推) WHEN"0001"=>data_out<="0110000";
WHEN"0010"=>data_out<="1101101";
WHEN"0011"=>data_out<="1111001";
WHEN"0100"=>data_out<="0110011";
WHEN "0101"=>data_out<="1011011";
WHEN "0110"=>data_out<="1011111";
WHEN "0111"=>data_out<="1110000";
WHEN "1000"=>data_out<="1111111";
WHEN "1001"=>data_out<="1111011";
WHEN OTHERS=>data_out<="0110001"; --其他时候输出出错表示
END CASE;
END PROCESS;
END one;
错误!未找到引用源。

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

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

程序如附录错误!未找到引用源。

3.2 方案二
本方案是由8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器
TESTCTL,8个有时钟使能的十进制计数器CNT10,一个32位锁存器REG32B组成。

以下分别叙述频率计各逻辑模块的功能与设计方法。

1.测频信号发生器设计
频率测量的基本原理使计算每秒钟内待测信号的脉冲个数,这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计每一计数器CNT10的ENA使能端进行同步测控。

当TETEN高电频时允许计数;低电频时,停止计数,并保持其所计的数。

在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒钟的计数值锁存进32位锁存器REG32B中,并由外部的七段译码器译出并稳定显示。

锁存信号之后,必须有一个清零信号CLR_CNT对计数器进行清零,为下1秒钟的技术操作作准备。

2.寄存器REG32B的设计
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

若已有32位BCD码存在于此模块的输入端口,在信号LOAD的上升沿后即被锁存到寄存器REG32B的输出端输出,然后由实验板上的7段译码器译成能在数码管上显示的相对的数值。

3.十进制计时器CNT10的设计
设计一个有一时钟使能输入端ENA,用于锁定计数值。

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

3.3 方案比较
方案一可同时实现测频率和测周期两个功能,且可实现小数点随量程变化自动移位的功能,测试的最大频率能达到1MHZ。

同时采用了记忆显示方法,及测量过程中不显示数据,待测量过程结束以后,显示测频结果,并将此结果保持到下次测量结束。

虽然实现的功能较多,但是程序繁杂,且管脚众多,实验室无法达到此程序所需的硬件要求。

而方案二仅仅只能测量频率,测量范围为99999999HZ,其程序分块明了,调用简单。

与方案一比较方案二更为合理。

3.4 方案改造
方案二虽然程序分块明了,调用简单。

但是范围达到99999999HZ,实验室器材无法达到所要管脚的要求,故改为4为计数器来计数,范围达到9999HZ。

此时32位锁存器REG32B应该为16位锁存器REG16B。

第4章利用VHDL语言设计频率计
4.1 系统功能的分析与电路设置
由于多功能数字频率计是一个需对数字信号进行测量和显示的系统,因此需要设置控制电路、计数电路、锁存电路和译码电路等。

测控电路是对计数电路进行工作和时序控制。

锁存电路的主要功能是对计数输出的数据进行锁定保存,即使在前级计数电路的计数器清零以后,锁存器是对单个十进制计数器进行保存,因此锁存器的个数由前一级计数电路的十进制计数器的个数决定。

译码显示电路由译码器和显示器构成。

译码器的功能是,将锁存器保存并输出的四位二进制代码表示的十进制数进行译码转换,将其转换能直接驱动数码管显示与其对应的十进制数字字符的输出信号。

显示器由数码管电路构成。

由于被测信号可能具有多个位数的频率,因此需要多个数码管对其进行显示(本实验需要4个)。

4.2 测频原理
图4.1测试原理框图
如图4.1预测门信号是一个脉冲,cnt1、cnt2是十进制计数器。

4.3 测频模块工作描述及VHDL程序
各个模块的描述在方案二里已经介绍,这里只介绍各个模块的VHDL程序。

4.3.1计数模块(CNT10)
Library IEEE;
Use IEEE.STD_LOGIC_1164.ALL;
Entity CNT10 is
Port(CLK:IN STD_LOGIC; --计数时钟信号
ClR:IN STD_LOGIC; --清零信号
ENA:IN STD_LOGIC; --计数使能信号
CQ:OUT INTEGER RANGE 0 TO 15; --4位计数结果输出
CARRY_OUT:OUT STD_LOGIC); --计数进位
End CNT10;
ARCHITECTURE ATR OF CNT10 IS
SIGNAL CQI:INTEGER RANGE 0 TO 15;
BEGIN
PROCESS(CLK,CLR,ENA)
Begin
IF CLR='1'THEN CQI<=0; --计数异步清零
ELSIF CLK'EVENT AND CLK='1' THEN
IF ENA='1'THEN
IF CQI<9 THEN CQI<=CQI+1;
ELSE CQI<=0;END IF; --等于9,则计数器清零END IF;
END IF;
END PROCESS;
PROCESS(CQI)
BEGIN
IF CQI=9 THEN CARRY_OUT<='1'; -进位输出ELSE CARRY_OUT<='0';END IF;
END PROCESS;
CQ<=CQI;
END ATR;
4.3.2 锁存模块(REG16B)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG16B IS
PORT(REG16B:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(15 DOWNTO 0);
DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));
END REG16B;
ARCHITECTURE art OF REG16B IS
BEGIN
PROCESS(REG16B,din)
BEGIN
IF REG16B'EVENT AND REG16B='1'THEN DOUT<=DIN; --锁存输入数据END IF;
END PROCESS;
END ART;
4.3.3 控制模块(TESTCTL)
Library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TESTCTL IS
PORT(CLK:IN STD_LOGIC; --1HZ测频控制信号
TSTEN:OUT STD_LOGIC; --计数器时钟使能
CLR:OUT STD_LOGIC; --计数器清零
LOAD:OUT STD_LOGIC); --输出锁存信号
End TESTCTL;
ARCHITECTURE ATR OF TESTCTL IS
SIGNAL TESTCTL:STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN --1HZ时钟2分频
TESTCTL<=NOT TESTCTL;
End IF;
END PROCESS;
PROCESS(CLK,TESTCTL)
BEGIN
IF CLK='0'AND TESTCTL='0'THEN --产生计数器清零信号
CLR<='1';
ELSE CLR<='0'; END IF;
END PROCESS;
LOAD<=NOT TESTCTL; TSTEN<=TESTCTL;
END ATR;
4.3.4 译码模块(DISPLAR)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DISPLAY IS
PORT(D_IN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
A:OUT STD_LOGIC;
B:OUT STD_LOGIC;
C:OUT STD_LOGIC;
D:OUT STD_LOGIC;
E:OUT STD_LOGIC;
F:OUT STD_LOGIC;
G:OUT STD_LOGIC);
END DISPLAY;
ARCHITECTURE ARCDISPLAY OF DISPLAY IS
BEGIN
PROCESS(D_IN)
TYPE DATA_OUT IS ARRAY(0 TO 6)OF STD_LOGIC;
V ARIABLE OUTP:DATA_OUT;
BEGIN
CASE D_IN IS
WHEN"0000"=>OUTP:="1111110";
WHEN"0001"=>OUTP:="0110000";
WHEN"0010"=>OUTP:="1101101";
WHEN"0011"=>OUTP:="1111001";
WHEN"0100"=>OUTP:="0110011";
WHEN"0101"=>OUTP:="1011011";
WHEN"0110"=>OUTP:="1011111";
WHEN"0111"=>OUTP:="1110000";
WHEN"1000"=>OUTP:="1111111";
WHEN"1001"=>OUTP:="1111011";
WHEN OTHERS=>NULL;
END CASE;
A<=outp(0);
B<=outp(1);
C<=outp(2);
D<=outp(3);
E<=outp(4);
F<=outp(5);
G<=outp(6);
END PROCESS;
END ARCDISPLAY;
4.3.5测频主系统实现(FREQ)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FREQ IS
PORT (CLK:IN STD_LOGIC;
FSIN:IN STD_LOGIC;
result_out:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));
END FREQ;
ARCHITECTURE atr OF FREQ IS
COMPONENT TESTCTL --待调用的测频控制信号发生器端口定义
PORT(CLK:IN STD_LOGIC;
TSTEN:OUT STD_LOGIC;
CLR:OUT STD_LOGIC;
LOAD: OUT STD_LOGIC);
END COMPONENT;
COMPONENT CNT10 --待调用的有时钟使能的十进制计数端口定义PORT(CLK:IN STD_LOGIC;
CLR:IN STD_LOGIC;
ENA:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
CARRY_OUT:OUT STD_LOGIC);
END COMPONENT;
COMPONENT REG16B --待调用的16位锁存器端口定义
PORT(REG16B:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(15 DOWNTO 0);
DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));
END COMPONENT;
SIGNAL FRE_EN1:STD_LOGIC;
SIGNAL CN_CLR1:STD_LOGIC;
SIGNAL LOAD1:STD_LOGIC;
SIGNAL DLATCH1:STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL CNTOUT1:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
U1:TESTCTL PORT MAP(CLK=>CLK,TSTEN=>FRE_EN1,
CLR=>CN_CLR1,LOAD=>LOAD1);
U2:REG16B PORT MAP(REG16B=>LOAD1,DIN=>DLATCH1,DOUT=>RESULT_OUT);
--名字关联
U3:CNT10 PORT MAP(CLK=>FSIN,CLR=>CN_CLR1,ENA=>FRE_EN1,
CQ=>DLATCH1(3 DOWNTO 0),CARRY_OUT=>CNTOUT1(0)); --位置关联
U4:CNT10 PORT MAP(CLK=>CNTOUT1(0),CLR=>CN_CLR1,ENA=>FRE_EN1,
CQ=>DLATCH1(7 DOWNTO 4),CARRY_OUT=>CNTOUT1(1));
U5:CNT10 PORT MAP(CLK=>CNTOUT1(1),CLR=>CN_CLR1,ENA=>FRE_EN1,
CQ=>DLATCH1(11 DOWNTO 8),CARRY_OUT=>CNTOUT1(2));
U6:CNT10 PORT MAP(CLK=>CNTOUT1(2),CLR=>CN_CLR1,ENA=>FRE_EN1,
CQ=>DLATCH1(15 DOWNTO 12),CARRY_OUT=>CNTOUT1(3));
End atr;
4.3.6 原理图的制作
利用EDA工具进行原理图输入设计的优点是,设计者不必具备许多诸如编程技术、硬件语言等新知识就能迅速入门,完成较大规模的电路系统设计。

各个分块模块所能实现的原理图符号如下所示:
(1)计数模块符号(2)锁存模块符号
(3)控制模块符号(4)译码模块符号
(5)输入模块符号(6)输出模块符号
总原理图如附录二所示,具体制作方法在5.2节会介绍到。

第5章数字频率计仿真及分析
5.1 MAX+PLUS错误!未找到引用源。

的特点
1.开放的界面。

MAX+PLUS错误!未找到引用源。

软件可以与其它工业标准的设计输入,综合与校验工具相连。

目前MAX+PLUS错误!未找到引用源。

支持与Candence、Exem-plarlogic、Synopsys等其他公司所提供的EDA工具接口。

2.与结构无关。

MAX+PLUS错误!未找到引用源。

系统的核心Compiler支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAXS000和Classic可编程器件,提供了真正与结构无关的可编程设计环境。

3.多平台。

4.完全集成化。

5.丰富的设计库。

6.模块化工具。

7.支持多种硬件描述语言。

MAX+PLUS错误!未找到引用源。

软件支持多种硬件描述语言设计输入选项,包括VHDL、AHDL和Verilog语言。

5.2 MAX+PLUS错误!未找到引用源。

的编译、仿真和下载简介
1.为工程设计建立文件夹
在E盘中建立一个名为“xuejia”的文件夹。

此文件夹将被EDA软件默认为工作库(Work Library)。

一般不同的设计项目最好放在相应的文件夹中,注意,一个设计项目可以包含多个设计文件。

文件夹名不能用中文,且不可带空格,尽量不用数字表达。

2.输入设计项目、存盘和程序编译
(1)打开MAX PLUS错误!未找到引用源。

,在File菜单中选择New,然后在出现的对话框中选择Text Editor file项,然后按下OK按钮,在出现得文本框中输入实验内容的程序。

输入完保存为后缀名为.vhd的文件。

注意在VHDL中,程序保存的文件夹的文件名必须与文件的实体名一致!而原理图输入设计中保存的原理图文件名可以是任意的。

(2)对刚才输入的程序进行编译,在File菜单中Project里面选择Set Project to Current File将设计的文件设为当前工程,在开始菜单中选择Complier打开编译器,选择Start开始编译,编译成功后关闭窗口。

继续按以上步骤对各个模块进行编译。

3.输入图形元件
(1)建一个Graphic Editor File文件,步骤与(1)相似。

在新建的图形编译窗口的空白处单击鼠标左键以正确输入位置。

(2)双击鼠标左键,在出现的名为Enter Symbol对话框中的第一行Name中输入所需图形元件的名称,选择OK键,这时所需的图形元件就在图形编译框中了。

4.对器件进行连线
连接两个端口时将鼠标移到其中的一个端口,这时鼠标自动变成‘+’字状,然后可以按下步骤重复:
(1)一直按着鼠标的左键并将鼠标拖到第二个端口,放开左键,则一条线就画好了。

(2)若要删除一条线,单击这条线并按住Del键即可。

5.为引脚和节点命名
(1)在引脚的PIN_NAME处双击鼠标左键,键入CLK和FSIN等等。

(2)在需要命名的线中用鼠标选中,键入DOUT【15..0】等等。

6.原理图的编译
先将原理图保存为.gdf形式,其余与程序的编译方式相同。

7.时序仿真
(1)在File文件中选择New打开新建类型对话框。

选择Wavefrom Editor File项单击OK。

(2)在波形编译窗口的Name下单击鼠标右键,出新浮动的菜单,选择Enter NodesFrom SN F…
(3)在Type区选择Input和Output,在默认情况下是打开的,单击List按钮,可在Available Node&Grouo区看到设计文件中使用的输入/输出信号,单击=>按钮可以将这些信号选择到Selected Node&Group区,单击OK按钮,关闭对话框即可看到波形编译窗口。

(4)在右边绘图工具条中给时钟信号赋值,并将Enter Time 设为1ms。

然后进入仿真界面,单击Start 进行时序仿真。

8.器件的下载
(1)将ByteBlzster电缆的一端与微机的并行口相连,另一端与可编程逻辑器件连接,同时接上5V电源电压。

(2)打开编译文件并设为当前工程进行编译,没有错误就在MAX+PLUS中选择Program,单击Program按钮,即完成下载。

5.3 多功能数字频率计编译及仿真
5.3.1 编译结果的记载
T10程序的编译结果图。

相关文档
最新文档