八位十进制数字频率计的设计Word下载.docx
《八位十进制数字频率计的设计Word下载.docx》由会员分享,可在线阅读,更多相关《八位十进制数字频率计的设计Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
1009121047
软件设计
(2)
付世敏
1009121105
课程设计的撰写
(1)
凌玲
1009121109
课程设计的撰写
(2)
尹凡
1009121081
课程设计方案的检查
设计
要求
设计一个8位10进制数字频率计,能测量最大值小于5V的正弦波、三角波、方波或其他周期性波形的频率,用数码管显示结果。
摘要
数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波、方波或其它周期性变化的信号。
数字频率计广泛应用于科研机构、学校、实验室、企业生产车间等场所。
研究数字频率计的设计和开发,有助于频率计功能的不断完善、性价比的提高和实用性的加强。
本文介绍了一种自顶向下分层设计多功能数字频率计的设计方法。
该频率计采用VHDL硬件描述语言编程,以QuartusII为开发环境,极大地减少了硬件资源的占用。
数字频率计模块划分的设计具有相对独立性,可以对模块单独进行设计、调试和修改,缩短了设计周期。
所设计的VHDL语言通过仿真能够较好的测出所给频率并且满足数字频率计的自动清零和自动测试的功能要求,具有理论与实践意义。
关键词:
VHDL;
数字频率计;
EDA;
QuartusII
第一章绪论
1.1设计背景
数字频率计[1]是电子测量与仪表技术最基础的电子仪表类别之一,数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器,而且它是数字电压必不可少的部件。
当今数字频率计不仅是作为电压表,计算机,天线电广播通讯设备,工艺过程自动化装置、多种仪表仪器与家庭电器等许多电子产品中的数据信息输出显示器反映到人们眼帘。
集成数字频率计由于所用元件少、投资少、体积小、功耗低,且可靠性高、功能强、易于设计和研发,使得它具有技术上的实用性和应用的广泛性。
不论从我们用的彩色电视机、电冰箱、DVD还有我们现在家庭常用到的数字电压表数字万用表等等都包含有频率计。
现在频率计已是向数字智能方向发展,即可以很精确的读数也精巧易于控制。
数字频率计已是现在频率计发展的方向,它不仅可以很方便的读数。
而且还可以使频率的测量范围和测量准确度上都比较先进.而且频率计的使用已设计到很多的方面,数字卫星,数字通讯等高科技的领域都有应用,今天数字频率计的发展已经不仅仅是一个小电子产品的发展也是整个民族乃至整个国家的发展,所以频率计的发展是一个整体的趋势。
而从民族产业上来说,我们在这种产业中还落后于西方发达国家,这将会关系到民族产业的兴衰。
所以我们必须很重视当前的情况,学习发达国家的先进技术来发展本国的电子信息产业。
1.2设计意义
我国的频率计其实不是落后发达国家太多的,我国在这个领域的发展是极其迅速的,现在的技术实际已是多年来见证。
我国现阶段电子产品的市场特点,电子数字化发展很快。
在我国和发达国家的发展情况是趋于一致的,数字频率计已经应用于高科技等产品上面,可以不无夸张的说没有不包含有频率计的电子产品。
我国的CD、VCD、DVD和数字音响广播等新技术已开始大量进入市场。
而在今天这些行业中都必须用到频率计。
频率计已开始并正在向智能,精细方向的发展。
国外的发展比我国要早,所以在这些行业中还领先于我们,我国还是缺少开发和研发的资金投入,很多的电子企业都不太乐意去花大量的时间,资金和精力去研究和开发,这也就使得我国在这方面的人力和资金都不充足,也就无法于发达国家相比,不能够形成一个量产的效果。
从而很多的企业没有竞争力,这也和我国其他的民族产业存在相同的情况,这也正是我国在高速发展后的今天很少有自己的民族品牌的原因,所以我国应该大力的支持自己的民族品牌,不仅仅是要在资金和人才的投入,还要有具体的实际行动并起到一定的保护作用。
1.3本文的主要工作
本文的主要工作为:
(1)首先分析了8位十进制数字频率计的基本原理。
(2)对设计工具QuartusII进行了介绍,对设计中使用的VHDL语言[2-3]进行介绍。
(3)对数字频率计的各个模块功能的分析,进行了功能仿真测试,得出仿真波形图。
本文的安排如下:
第一章介绍数字频率计的设计背景,设计意义,第二章介绍EDA技术原理与概述,本论文是以EDA技术为基础编写的所以对EDA技术的要求比较高,对VHDL语言的编写以及QuartusII的运用都要比较熟练。
介绍了可编程逻辑器件FPGA和硬件描述语言,第三章是对数字频率计的基本原理以及对设计的要求进行概述,对目标芯片的介绍等,第四章介绍各个功能模块的基本功能以及VHDL语言的分析,将各部分进行仿真并对其进行仿真分析,测出所给频率。
对该设计的数字频率计的仿真进行理论值与实验值的验证,第五章是本文的结束语。
第二章数字频率计的系统分析
2.18位十进制数字频率计系统设计的原理
2.1.1数字频率计的基本原理
数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。
闸门时间也可以大于或小于一秒。
闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。
数字频率计的主要功能是测量周期信号的频率。
频率是单位时间(1S)内信号发生周期变化的次数。
如果我们能在给定的1S时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。
这就是数字频率计的基本原理。
2.1.2系统总体框架图
图2.1系统总体框架图
总体框图设计思路:
由50MHz系统时钟分频得到0.5Hz的基准时钟。
在基准时钟的1S高电平期间计被测频率的脉冲个数,1S高电平结束时计数结束,所记录的脉冲个数是被测信号的频率,为了在数码管上显示计数结果需要锁存器将所计的数锁存,因此,在基准时钟下降沿来的时候锁存器实现锁存功能。
为了下次计数必须将本次计数的结果清零,所以在基准时钟低电平期间对计数器清零。
被测频率从计数器的是中端输入实现频率的测试。
将锁存器锁存的数据输入扫描器,通过译码器将锁存的二进制数译成十进制然后显示到数码管上,最终被读出来。
2.28位十进制数字频率计设计任务及要求
用测频法设计一个八位十进制的数字频率器,测频范围是1HZ到49999999HZ。
(1)测量范围信号:
方波、正弦波;
幅度:
0.5V~5V;
频率:
1Hz~4999999HZ。
(2)测量范围信号:
脉冲波;
脉冲宽度≥100μs.测量误差≤1%。
(3)显示器:
十进制数字显示,显示刷新时间1~10秒连续可调,对上述三种测量功能分别用不同颜色的发光二极管指示。
(4)具有自校功能,时标信号频率为1Hz。
2.3目标芯片FLEX10K
目标芯片[11]选用Altera公司生产的FPGA产品FLEX10K系列[9]中的LC84-4,FLEX10K是ALTERA公司研制的第一个嵌入式的PLD可编程逻辑器件系列。
它具有高密度、低成本、低功率等特点,利用FLEX10K系列CPLD可编程逻辑器件的EAB可在系统中实现逻辑功能和存贮功能。
FLEX10K是ALTERA公司研制的第一个嵌入式的PLD,它具有高密度、低成本、低功率等特点,是当今ALTERACPLD中应用前景最好的器件系列之一。
它采用了重复可构造的CMOSSRAM工艺,并把连续的快速通道互连与独特的嵌入式阵列结构相结合,同时可结合众多可编程器件来完成普通门阵列的宏功能。
每一个FLEX10K器件均包括一个嵌入式阵列和一个逻辑阵列,因而设计人员可轻松地开发集存贮器、数字信号处理器及特殊逻辑等强大功能于一身的芯片。
FPGA采用可编程的查找表LUT(LookUpTable)结构。
LUT是可编程的最小逻辑单元,大部分FPGA采用基于SRAM的查找表逻辑形式结构,用SRAM来构成逻辑函数发生器。
FLEX内部结构如图3.2所示。
图2.2FLEX内部芯片结构
第三章各功能模块基于VHDL的设计与仿真
3.18位十进制数字频率计的电路逻辑图
8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B[8]组成。
以下分别叙述频率计各逻辑模块的功能与设计方法。
8位十进制数字频率计的电路逻辑如图4.18所示。
图3.18位十进制数字频率计的电路逻辑图
3.2测频控制信号发生器的功能模块及仿真
(1)测频控制信号发生器的功能模块如图4.2所示。
图3.2测频控制信号发生器的功能模块图
(2)源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYTESTCTLIS
PORT(CLK:
INSTD_LOGIC;
--1Hz测频控制时钟
TSTEN:
OUTSTD_LOGIC;
--计数器时钟使能
CLR_CNT:
--计数器清零
LOAD:
OUTSTD_LOGIC);
--输出锁存信号
ENDENTITYTESTCTL;
ARCHITECTUREARTOFTESTCTLIS
SIGNALDIV2CLK:
STD_LOGIC;
BEGIN
PROCESS(CLK)IS
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN--1HZ时钟二分频
DIV2CLK<
=NOTDIV2CLK;
ENDIF;
ENDPROCESS;
PROCESS(CLK,DIV2CLK)IS
BEGIN
IFCLK='
0'
ANDDIV2CLK='
THEN--产生计数器清零信号
CLR_CNT<
='
;
ELSECLR_CNT<
;
ENDIF;
ENDPROCESS;
LOAD<
TSTEN<
=DIV2CLK;
ENDARCHITECTUREART;
频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。
控制时钟信号CLK取为1Hz,2分频后即可产生一个脉宽为1秒的时钟TSTEN,以此作为计数闸门信号。
当TSTEN为高电平时,允许计数;
当TSTEN由高电平变为低电平(下降沿到来)时,应产生一个锁存信号,将计数值保存起来;
锁存数据后,还要在下次TSTEN上升沿到哦来之前产生零信号CLEAR,将计数器清零,为下次计数作准备,如图3.3所示为测频控制信号仿真图。
图3.3测频控制信号仿真图
3.3系统时钟分频的功能模块及仿真
(1)系统时钟分频的分频功能模块如图3.4所以。
图3.4系统时钟分频的功能模块图
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdiv1hzIS
PORT(CLK:
CLOCK:
ENDdiv1hz;
ARCHITECTUREBEHAVOFdiv1hzIS
SIGNALCOUNT:
INTEGERRANGE0TO500000;
SIGNALCLK_DATA:
BEGINPROCESS(CLK)
IFCLK'
EVENTANDCLK='
THEN
IFCOUNT=500THEN
COUNT<
=0;
CLK_DATA<
=NOTCLK_DATA;
ELSECOUNT<
=COUNT+1;
ENDIF;
CLOCK<
=CLK_DATA;
ENDBEHAV;
该模块由系统时钟分频模块[12]为TESTCTL的计数能使信号TSTEN产生一个1S脉宽的周期信号,并对频率计中的32位十进制计数器CNT10的ENA使能端进行同步控制。
TSTEN高电平时允许计数;
当低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,从仿真图3.5中可以看出,一个锁存信号LOAD的上跳沿将计数器在前一秒的计数值锁存进锁REG32B中,并由外部的十进制7段数码管显示计数值。
设置锁存器的好处是数据显示稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号后,必须有一个清零信号CLR_CNT对计数器进行清零,为下一秒的计数操作做准备。
图3.5系统时钟分频的分频功能仿真图
3.432位锁存器的功能模块及仿真
3.4.1锁存器[13]
锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。
锁存,就是把信号暂存以维持某种电平状态。
锁存器的最主要作用是缓存,其次完成高速的控制其与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个I/O口既能输出也能输入的问题。
3.4.2锁存器的功能模块及仿真
(1)32位锁存器的功能模块如图3.6所示。
图3.6锁存器的功能模块图
ENTITYREG32BIS
PORT(LOAD:
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDENTITYREG32B;
ARCHITECTUREARTOFREG32BIS
PROCESS(LOAD,DIN)IS
IFLOAD'
EVENTANDLOAD='
THENDOUT<
=DIN;
--锁存输入数据
仿真图3.7的LOAD信号上升沿到来时将对输入到内部的CNT10计数信号进行锁存,并将结果输出给SELTIME。
当输入信号上升到时就会产生锁存,否则,不进行锁存,该仿真在上升沿的时候,将其锁存起来,直到下个上升沿才会改变锁存的数据,如仿真在“1”的时候上升,则对“1”进行锁存。
图3.7锁存器的功能仿真
3.5数码管扫描的功能模块及仿真
(1)数码管扫描[8]的功能模块如图4.8所示。
图3.8数码管扫描的功能模块
USEIEEE.
STD_LOGIC_1164.ALL;
STD_LOGIC_UNSIGNED.ALL;
ENTITYSELTIMEIS
PORT(
CLK:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
DAOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
SEL:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDSELTIME;
ARCHITECTUREbehavOFSELTIMEIS
SIGNALSEC:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
PROCESS(CLK)
IF(CLK'
)THEN
IF(SEC="
111"
)THENSEC<
="
000"
ELSESEC<
=SEC+1;
PROCESS(SEC,DIN(31DOWNTO0))
CASESECIS
WHEN"
=>
DAOUT<
=DIN(3DOWNTO0);
001"
=DIN(7DOWNTO4);
010"
=DIN(11DOWNTO8);
011"
=DIN(15DOWNTO12);
100"
=DIN(19DOWNTO16);
101"
=DIN(23DOWNTO20);
110"
=DIN(27DOWNTO24);
=DIN(31DOWNTO28);
WHENOTHERS=>
NULL;
ENDCASE;
SEL<
=SEC;
ENDbehav;
锁存信号输出DIN[31..0],然后由SELTIME进行扫描输出,从仿真图3.9可以得出,当SEL为”000”时选通第一个CNT10,输出到LED7进行译码输出。
该仿真图中的SEL为“000”选通第一个CNT7,当所选SEL为“001”时所选通第二个CNT6,依次类推。
当所选SEL为“111”时所选第八个CNT0。
当每选定一个通道所对应的输入一个4位的二进制数所对应得数码管,图4.9为数码管扫描的仿真图。
图3.9数码扫描管仿真图
3.6数码管译码显示的功能模块及仿真
(1)数码管译码显示的功能模块如图3.10所示。
图3.10数码管译码显示的功能模块
(2)源程序如下:
ENTITYLED7IS
PORT(
INSTD_LOGIC_VECTOR(3DOWNTO0);
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDLED7;
ARCHITECTUREbehavOFLED7IS
--SIGNALLED7:
STD_LOGIC_VECTOR(6DOWNTO0);
PROCESS(DIN)
CASEDINIS
"
0000"
DOUT<
0111111"
0001"
0000110"
WHEN"
0010"
1011011"
0011"
1001111"
WHEN
0100"
1100110"
0101"
1101101"
0110"
1111101"
0111"
0000111"
1000"
1111111"
1001"
1101111"
1010"
1110111"
1011"
1111100"
1100"
0111001"
1101"
1011110"
1110"
1111001"
1111"
1110001"
ENDARCHITECTUREbehav;
数码译码[14]主要是用来完成各种码制之间的转换。
例如可用来完成BCD—十进制数、十进制数—BCD之间数制的转换。
从图3.11仿真图可知,当LED的输入为“0X7E”数码管就会显示为“0”,当LED的输入为“0X06”数码管就会显示为“1”。
图3.11为数码管译码显示仿真图。
图3.11数码管译码显示仿真图
3.7十进制计数器的功能模块及仿真
3.7.1计数器
计数是一种最简单基本的运算,计数器[15]就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能,计数器是由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T触发器、D触发器及JK触发器等。
计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。
计数器可以用来显示产品的工作状态,一般来说主要是用来表示产品已经完成了多少份的折页配页工作。
它主要的指标在于计数器的位数,常见的有3位和4位的。
很显然,3位数的计数器最大可以显示到999,4位数的最大可以显示到9999。
3.7.2十进制计数器的功能模块及仿真
(1)十进制计数器的功能模块如图3.12所示。
图3.12十进制计数器的功能模块
LIBRARYIEEE;
ENTITYCNT10IS
PORT(CLK:
--计数时钟信号
CLR:
--清零信号
ENA:
--计数使能信号
CQ:
OUTINTEGERRANGE0TO15;
--4位计数结果输出
CARRY_OUT:
--计数进位
ENDENTITYCNT10;
ARCHITECTUREARTOFCNT10IS
SIGNALCQI:
INTEGERRANGE0TO15;
PROCESS(CLK,CLR,ENA)IS
IFCLR='
THENCQI<
=0;
--计数器异步清零