资源描述
河南科技大学课 程 设 计 说 明 书 课程名称 现代电子系统课程设计题 目 简易数字频率计设计 学 院 电子信息工程学院班 级 电信科083班 学生姓名 陈真淮 指导教师 齐晶晶、张雷鸣 日 期 2011年12月16日 课程设计任务书(指导教师填写)课程设计名称 现代电子系统课程设计学生姓名 陈真淮专业班级电信科083设计题目 简易数字频率计设计 一、 课程设计目的掌握高速AD的使用方法;掌握频率计的工作原理;掌握GW48_SOPC实验箱的使用方法;了解基于FPGA的电子系统的设计方法。二、 设计内容、技术条件和要求设计一个具有如下功能的简易频率计。(1)基本要求: a被测信号的频率范围为120kHz,用4位数码管显示数据。b测量结果直接用十进制数值显示。c被测信号可以是正弦波、三角波、方波,幅值13V不等。d具有超量程警告(可以用LED灯显示,也可以用蜂鸣器报警)。e当测量脉冲信号时,能显示其占空比(精度误差不大于1%)。(2)发挥部分a修改设计,实现自动切换量程。b构思方案,使整形时,以实现扩宽被测信号的幅值范围。三、 时间进度安排布置课题和讲解:1天 查阅资料、设计:4天实验:3天 撰写报告:2天四、 主要参考文献何小艇 电子系统设计 浙江大学出版社 2008.1潘松 黄继业 EDA技术实用教程 科学出版社 2006.10指导教师签字: 2011年 11月 28日摘 要数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它不仅可以测量正弦波、方波和尖脉冲信号的频率,还能对占空比、周期、幅值、脉冲宽度等多种物理量进行测量。本设计用VHDL语言在FPGA器件上实现数字频率计测频系统,能够用十进制数码显示频率范围为0-20KHZ被测信号的频率;能够测量正弦波、方波和三角波等信号的频率,并实现自动量程切换;能够测量的信号的占空比。结合GW48实验教学系统特定硬件资源,通过五个功能模块的实现整个系统的设计,分别是:模数转换模块:将信号发生器输入的模拟信号通过AD0809转化成数字信号。信号整形模块:将正弦波、三角波信号转换为方波信号。频率测量及报警模块:利用直接测频法和测周期法完成被测信号的频率测量。当被测信号的频率超过量程时能实现报警功能。占空比测量模块:本设计通过测信号的脉冲宽度间接实现占空比的测量。显示模块:为了提高人机交互的方便性及设备的利用率,设置显示控制电路用来控制频率值和占空比值的交换显示。采用VDHL编程设计实现的数字频率计,除被测信号的模数转换部分、键输入部分和数码显示部分以外,其余全部在一片FPGA芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。在不更改硬件电路的基础上,对系统进行各种改进还可以进一步提高系统的性能。因此,该数字频率计具有具有高速、精确、可靠、功耗低、抗干扰性强和现场可编程等优点。关键词:频率计、FPGA、频率测量、占空比、直接测频法目 录一 任务解析51.1 设计目标51.2 性能指标51.3 系统原理框图5二 系统方案论证52.1 方案比较52.2 方案论证8三 系统结构83.1 系统组成83.2 系统运行原理9四 模数转换模块94.1 AD0809工作原理94.2 转换控制模块104.3 仿真验证11五 信号整形模块115.1 整形电路原理125.2 仿真验证12六 占空比测量模块126.1 占空比测量原理126.2 仿真验证13七 频率测量及报警模块147.1 频率测量原理147.2 测频模块设计157.3 仿真验证12八 显示模块168.1 锁存于显示电路168.2显示控制电路178.3 仿真验证17九 结果与总结189.1 系统仿真189.2 硬件验证189.3 设计总结19十 心得体会20附录A 系统原理框图21附录B 管脚连接图22附录C VHDL源程序23一 任务解析1.1 设计目标本次课程设计的任务是设计一个简易数字频率计。用它可以测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值。简易数字频率计可实现用十进制数字显示被测信号频率,具有超量程警告的功能,并能显示其占空比。经过修改设计后,实现自动切换量程和跳变阈值自动进行调节。同时通过本次课程设计掌握高速AD的使用方法,掌握频率计的工作原理,掌握GW48_SOPC实验箱的使用方法,了解基于FPGA的电子系统的设计方法。1.2 性能指标频率计主要用于测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值。其扩展功能可以实现自动切换量程,使整形时,以实现扩宽被测信号的幅值范围。此次数字频率计要达到的基本要求有:被测信号的频率范围为120kHz;测量结果直接用十进制数值表示,并用4位数码管显示数据;被测信号可以是正弦波、三角波、方波,幅值13V不等;具有超量程警告,可以用LED灯显示,也可以用蜂鸣器报警来实现;当测量脉冲信号时,能显示其占空比,精度误差不大于1%。发挥部分的要求有:根据测量频率高低的不同,实现自动切换量程;对信号进行整形时,跳变阈值能自动进行调节,以实现扩宽被测信号的幅值范围。根据自己情况,可做其它的适当发挥扩展。1.3 系统原理框图 数字频率计的系统原理框图如图1所示。图中被测信号为外部信号,与基准信号一同,送入测量电路进行处理、测量,控制电路用于选择测试的项目-频率或占空比,测量电路的输出信号送到显示电路进行显示。图1-1系统原理框图二 系统方案论证2.1 方案比较在具体是现实时,又可以采用单片机或者FPGA来实现,具体有如下几种方案:方案一:系统测频部分采用FPGA来实现,即利用FPGA产生时钟并完成测量,用机械式功能转换开关换档,完成测频率功能。由于FPGA的工作频率比单片机的高很多,因此可以考虑直接利用FPGA产生信号的高频参考频率,这样就可以在一定程度上利用前面讲的的测周期法,同时能够在误差范围内满足误差要求。此方案对输入信号作分频整形处理后,再与1秒脉宽带信号共同输入与非门,其输出作为计数脉冲,由计数器计数,然后锁存、译码输出到数码管显示。其原理框图如图2-4所示。图2-1 基于FPGA方案的原理框图方案二:采用MCS-51系列单片机,将欲测量的输入信号(1Hz10MHz)进行限幅、放大、整形和分频处理,利用单片机进行频率、周期的测量和计算处理,运算结果并行输出到数码显示。显然此种方案由于采用单片机技术,利用定时器计时一段时间,在通过计数器在这段时间内计数,实现用计数法测量频率。单片机AT89C51内部具有2个16位定时计数器,定时计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1(使用12 MHz时钟时,每1s加1),这样以机器周期为基准可以用来测量时间间隔。在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的124(使用12 MHz时钟时,最大计数速率为500 kHz)。定时计数器的工作由运行控制位TR控制,当TR置1,定时计数器开始计数;当TR清0,停止计数。在高频时,我们可以利用单片机产生一个低频信号,例如周期为一秒,用来进行测量高频信号。而在低频时,我们可以采用单片机发生一个10K的信号,采用在频率计原理中所说的第二种方法。其原理框图如图2-3所示。图2-2 基于单片机方案框图方案三:采用FPGA和单片机组合电路设计。利用FPGA进行测频计数,单片机实施控制实现多功能频率计的设计。外围信号输入电路经放大整形调理,该频率计利用FPGA来实现频率、占空比的测量和计数,利用单片机完成整个测量电路的测试控制、数据处理和显示输出。为了进一步提高测量频率的精度和实时性,采用等精度测量频率,用FPGA容易实现等精度频率的测量。其原理框图如图2-5所示。放大整形基准频率频率计数器时间计数器同步预置阀门阀门单片机显示FPGA阀门图2-3 FPGA+单片机组合的原理框图方案四:采用分离元件设计。本方案利用大量数字芯片,通过各种逻辑关系构成,但由于芯片无编程性,如果完成本次大赛的所有要求难度较大,只能完成部分功能,同时电路复杂。在实际应用中存在很多问题。图2-4 采用分离元件设计的原理框图2.2 方案论证方案一:采用基于FPGA的方案,特点是FPGA电路应用技术成熟,能可靠的完成频率计的基本功能,结构简单,量程可以自动切换。该方案采用FPGA作为信号处理及系统控制核心,完成包括计数、门控、显示等一系列工作。利用了FPGA的可编程和大规模集成的特点,使电路大为简化,能可靠的完成频率计的基本功能。 方案二:系统采用MCS一51系列单片机89C51作为控制核心,性能好,价格便宜。由于单片机通过中断可以较准确地产生信号需要的信号频率,同时,单片机的控制能力比较强。此外使用了单片机,使整个系统具有极为灵活的可编程性,能方便地对系统进行功能扩展与改进。但是单片机运算能力有限,让单片机同时完成运算、控制及显示功能,会使单片机超负荷运行。而且单片机的接口资源有限,同时接AD0809和4个显示器等外部器件,很容易造成接口资源紧张。方案三:采用FPGA和单片机组合电路设计。该方案利用FPGA和单片机协调来进行开发,只要利用较少的器件就可以实现系统的功能,并使可以使频率计系统高效运行。但是,该方案不能充分发挥FPGA和单片机各自的优势,并且测量精度不够高,导致系统性能价格比降低、系统功能扩展受到限制。因此,该方案不是最好的选择。 方案四:采用分离元件设计。本方案利用大量数字芯片,通过各种逻辑关系构成。但由于芯片无编程性,要完成任务书的所有要求难度较大,只能完成部分功能,同时电路复杂。但由于系统功能要求较高,所以电路过于复杂,而且多量程换档开关使用不便。在实际应用中也存在很多问题。故该方案不是一个好的选择。因此,我们最终选择第一种方案,具体理由有如下几点:由于FPGA本身是将大量的逻辑功能继承与一个器件内,集成度要远远高于单片机,能够利用的资源也相对充裕,可以较好地完成要求。对于FPGA的设计,可以直接采用VHDL硬件语言直接进行的,在不同的场合,我们只要对语言进行适当的改动,就可实现具体情况具体应用。因此利用FPGA来进行开放设计,其可移植性更强。三 系统结构3.1 系统组成本系统除了利用特定硬件资源外,还需通过软件实现五个模块的设计,分别是:模数转换模块,信号整形模块,频率测量及报警模块,占空比测量模块和显示模块。模数转换模块:将信号发生器传过来的模拟信号转化成数字信号。该模块主要有AD0809和FPGA控制模块两部分组成。AD0809模数转换,是为把模拟信号转换为信息基本相同的数字信号而设计的芯片。FPGA控制模块主要控制AD0809芯片的数模转换过程。信号整形模块:该模块将AD0809传输来数值与规定的参比值相比较,以产生一个差值信号,从而实现将的8位并行数字信号转换为串行的单脉冲信号。频率测量及报警模块:该模块是整个系统的核心。利用直接测频法和测周期法完成被测信号的频率测量。并且当被测信号的频率超过量程时实现报警功能。占空比测量模块:该模块主要用来测量被测信号的占空比。测占空比实质就是测信号的脉冲宽度,测出一个周期占用的时间和其中高电平占用的时间,二者相比即可得占空比的数值。显示模块:该模块主要实现频率和占空比的显示和控制。在一个测量周期过程中,被测周期信号在输入电路中经过放大、整形、微分操作之后形成特定周期的窄脉冲,送到主门的一个输入端。主门的另外一个输入端为时基电路产生电路产生的闸门脉冲。在一串理想的脉冲序列中(如方波),正脉冲的持续时间与脉冲总周期的比值。3.2 系统运行原理由于本课程设计是基于特定的硬件平台,在GW48-SOPC实验开发系统上进行实现对被测信号通过AD进行转换,把转换的结果和给定的阈值进行比较,产生相应的脉冲信号。得到脉冲信号之后,先进行频率测量,给定1S的基准信号,在1S信号内对脉冲信号进行计数,计数的方式采用BCD码,然后把计数结果直接送数码管显示,对应的就是十进制的数值。为了实现占空比精度的要求,在适当的范围内竟可能提高基准信号的频率。通过一个LED灯来表示相应的单位。然后对脉冲信号进行占空比测量,给定一个高频的基准信号,在脉冲信号的高电平期间对脉冲信号进行计数,把计数结果进行相应的运算,运算结果直接送数码管显示,对应的也是十进制显示。对于报警信号,我设计的方案是接数码管显示,频率超过3khz时就会发出警告,数码管指示灯全部变为。四 模数转换模块4.1 AD0809工作原理AD0809的工作过程是:输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,ALE,START,OE,ADDA都是ADC0809的控制信号,ADDA为模拟通道选择,低电平选择通道0,ALE为通道地址锁存信号,START为启动AD转换的信号,OE为ADC0809转换结果输出的使能信号。其结构原理图如下:图4-1 AD0809结构原理图其具体与ADC0809的连接电路图如下:图4-2 ADC0809的连接电路图4.2 转换控制模块转换控制模块主要控制AD0809芯片的数模转换过程。本模块用VHDL语言设计。设计过程中定义了一个状态机。各状态子类型表示的意义分别是:S0状态AD0809初始化;S1状态启动采样;S2状态时EOC=1表明转换结束,EOC=1转换未结束,继续等待;S3状态开启OE;S4状态输出转换好的数据。状态转换的条件详见下图图4-3 AD0809转换状态机图其控制模块结构见图4-4。其中的表示的含义如下。D:来自0809转换好的8位数据;CLK:状态机工作时钟;EOC:转换状态指示,低电平表示正在转换;ALE: 8个模拟信号通道地址锁存信号;START:转换开始信号;OE:数据输出3态控制信号;ADDA :信号通道最低位控制信号;LOCK0:观察数据锁存时钟;Q : 8位数据输出。通过VHDL语言编写控制模块实现对ADC0809的控制,具体的程序见附录。图4-4 AD控制模块结构图4.3 仿真验证在Quartus中对转换控制模块完成功能仿真后,编辑波形仿真文件,运行的得到的仿真图如下:图4-5 AD仿真波形图从图4-5中可以看出,每五个 CLK的周期完成一次信号转换。在第二个CLK 周期即S1状态ALE,START信号同时变为高电,从而平启动采样。在第三个CLK 周期即S2状态时,因为此时EOC=1,指示状态转换结束。在第四个CLK 周期即S3状态LOCK0信号变为高电平,输出被数据锁存;与此同时OE信号变为高电平, 3态控制门打开,数据从8位数据端口Q输出。在整个转换过程中,ADDA 信号一直保持高电平,控制最低位通道信号输入。五 信号整形模块5.1 整形电路原理由于输入的信号可以是正弦波,三角波。而后面的闸门或计数电路要求被测信号为矩形波,所以需要设计一个整形电路则在测量的时候,首先通过整形电路将正弦波或者三角波转化成矩形波。在整形之前由于不清楚被测信号的强弱的情况。所以在通过整形之前通过放大衰减处理。当输入信号电压幅度较大时,通过输入衰减电路将电压幅度降低。当输入信号电压幅度较小时,前级输入衰减为零时若不能驱动后面的整形电路,则调节输入放大的增益,时被测信号得以放大。本模块中用到的整形放大电路,其实质是一个数字比较器。数字比较器用于数字信号的比较。例如数据A和B比较,如果AB,则输出A大于B的结果信号FAB=1,FA=B=0,FAB=0,FA=B=1,FAB=0。如果AB=0,FA=B=0,FA01000000THEN CLKIN=1;ELSE CLKIN0000 OR Q40000)THEN QW=Q4;BW=Q3;SW=Q2;GW=Q1;HZ=0;KHZ=1;ELSE QW=Q3;BW=Q2;GW=Q1;SW=Q0;HZ=1;KHZ=0;END IF;其中Q3,Q4分别是被测频率的万位和十万位。当被测频率小于1000HZ时以HZ单位显示,与HZ相连的LED灯亮;当被测频率大于1000HZ时以KHZ单位显示,与KHZ相连的LED灯亮。GW30,SW30,BW30,QW30分别为频率计数位的个位,十位,百位,千位。显示单位转换电路和小数点显示电路设计在测量频率的时候,由于分两个显示单位,那么在不同的单位的时候,小数点也要跟着显示。比如测量频率的单位需要显示Hz的时候,那么在显示的时候四个数码管的小数点不需要显示,此时绿灯亮,表示单位是Hz.。测量频率的单位需要显示KHz的时候,那么显示的时候,四个数码管第二个位的数码管的小数点要显示,也就是当显示的数值以KHz显示时,后面有两位小数以保证测量值度,并且此时红灯亮,表示单位是KHz.为实现超量程报警功能,特设置一位输出信号BEEF,并外接蜂鸣器。当被测信号的频率大于20kHz,BEEF信号被置为高电平,蜂鸣器会发出连续的报警声,以此提醒被测信号频率超出量程。其VHDL的程序代码如下:IF (S5=1111)THEN BEEF=1;ELSE BEEF=0;END IF; 综合上述设计思路, Clk3M为闸门信号,CLKIN是经过比较器后的输入信号,在1S的闸门信号下对CLKIN信号进行计数。计数器要求低位的计数值溢出信号做为高位的输入信号,从而显示频率的计量。由此得频率测量模块的原理框图如图7-3。图7-3 频率测量模块原理框图7.3仿真验证在Quartus中对频率测量模块完成功能仿真后,编辑波形仿真文件,运行的得到的仿真图如下:图7-4 频率测量模块波形仿真图如上图所示,在波形仿真中设置Clk3M=3MHZ,CLKIN=3000HZ。通过对波形的分析可以发现,得到的结果正为被测信号的频率为3000HZ,即GW30=0,SW30=0,BW30=0,QW30=1。此时HZ信号为低电平,KHZ信号为高电平。八 显示模块8.1 锁存与显示电路锁存电路主要用于实现记忆显示。在测量过程中不刷新新的数据,直到测量过程结束后,锁存显示测量结果,并且保存到下一次测量结束。其功能是对四位BCD码进行锁存并且转换成为对应的4组七段数码管,用于驱动数码管。该模块可使系统显示电路的工作稳定而可靠,避免计数电路模块清零时引起显示闪烁的现象。锁存电路模块是由多个锁存器组成。每个锁存器都是用来锁存与其单独相连的计数器的输出数据。由于每个锁存器锁存的都是4 位2 进代码表示的十进制数,其功能完全相同,因此只需要设计制作一个锁存器就可连接组合成一个锁存电路模块。为实现系统功能,锁存器需设置四个数据输入端:即Q1、Q2、Q3 和Q4 ,并由它们输入计数器的计数值。需设置一个使锁存器工作的使能端EN。还需设置四个锁存数据的输出端:即GW,SW,BW,QW。电路图见频率测量模块。8.2显示控制电路为了提高人机交互的方便性及设备的利用率,设置一个显示控制电路,以控制频率值和占空比值的显示。实验室的GW48_SOPC实验箱上有8个显示数码管,而且模数转换模块中的AD0809已经占用了三个数码管的端口。如果四位频率值和两位的占空比值的同时用数码管显示则端口资源明显不够用。因此设计一个外部控制信号SEL,控制频率值和占空比值的交换显示。其VHDL的程序代码如下:IF SEL=0 THEN B0=A0;B1=A1;B2=A2;B3=A3;ELSE B0=0000;B1=0000;B2=A5;B3=A4;END IF; 综上可得显示控制模块的原理框图见图8-1:图8-1 显示模块原理框图8.2 仿真验证在Quartus中对显示模块完成功能仿真后,编辑波形仿真文件,运行的得到的仿真图如下:图8-2 显示模块波形仿真图如上图所示,在波形仿真中设置A0=1,A1=2,A2=3,A3=4,A4=0,A5=5。当信号SEL为低电平时B0=1,B1=2,B2=3,B3=4;当信号SEL为高电平电平时B0=0,B1=0,B2=0,B3=5。仿真结果与试验预期的结果完全一致。九 结果与总结9.1 系统仿真在Quartus中编写用例化语句编写顶层文件,对整个系统进行功能仿真,运行通过。得到了整个系统的原理框图,详见附录A。然后编辑波形仿真文件,运行的得到的仿真图如下:图9-1 系统波形仿真图正常情况下,可以观测到与输入频率一致、如观测不到输出波形,或观测到的波形形状与幅值不对,则应检测这一部分电路,消除故障。如该部分电路正常,或消除故障后频率计仍不能正常工作时,也需要进一步检查程序。以上程序经综合仿真后,结果基本符合设计要求。如频率关系不一致或波形不正常,则应对计数器和反馈门的各引脚电平与波形进行检测。正常情况各电平值或波形应与电路中给出的状态一致。通过检测与分析找出原因,消除故障。9.2 硬件验证硬件验证采用的是GW48实验教学系统,采用电路模式5。使用实验板上的AD0809完成模拟信号的转换,数码管和LED完成数据输出。为使0809工作势能,将实验板左下角的拨码开关的4、6、7向下拨,其余向上。主要信号的管脚连接如下:输入信号CLK连接PIN_28,CLK3M连接 PIN_29, SEL连接PIN_233,D70连接 PIN_14PIN_20;输出信号ALE连接 PIN_138,BEEF连接 PIN_174,START连接 PIN_139,OE连接PIN_140,EOC连接 PIN_1,HZ连接 PIN_3,KHZ连接 PIN_4,SMG170, SMG270, SMG370 SMG470分别连接四个数码管。详细的管脚连接图见附录B。完成管脚定义后选择器件,编译后生成*.sof、*.pof等文件。选择sof文件进行下载。通过对每一模块的仿真和下载,可以实现各个模块的逻辑功能,验证了各个模块的正确性。 编程下载完成后,拨动按键,可看见数码管上的显示频率和占空比的数值。硬件验证图见图9-2图9-2 硬件验证图9.3 设计总结起初设计的电路经常有漏洞,对电路进行仿真时也仿真不出来,后来经过仔细研究和探讨不断的对电路进行改进,最终得到满意的结果,电路完成的相对比较顺利。正常情况各电平值应与电路中给出的状态一致。但是由于显示的是高频的信号,在输入时往往会有一些不正确,有一些功能没有显示出来,占空比不稳定等,我在程序中找到了一些错误。通过检测与分析找出原因,消除故障,减小了误差。在测量占空比时,如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看到稳定的输出。所以在电路中加入锁存器对计数器输出信号进行锁存,则不再跳变,便可从数码管读出清晰的计数结果。在测量频率时,为了克服测量低频信号时的不足,可以使用另一种算法。将被测信号送入被测信号闸门产生电路,该电路输出一个脉冲信号,脉宽与被测信号的周期相等。再用闸门产生电路输出的闸门信号控制闸门电路的导通与开断。设置一个频率精度较高的周期信号(如10KHz)作为时基信号,当闸门导通时,时基信号通过闸门到达计数电路计数。在硬件验证过程中要使用到模拟信号发生器,由于以前未使用过,所以在硬件验证过程中总是出现问题,如波形不会设置、找不到占空比的设置位置等,经过反复摸索试验,最后得到了比较满意的结果。十 心得体会经过大学三年多的学习,对数电,模电,EDA,VHDL等各课程都有了初步的认识和学习,也做许多相应的实验和课程设计,但却一直没有建立起来对本专业的系统的认识,所学的知识也不能系统的综合起来。这学期通过对现代电子系统设计课程的学习,终于将我们专业的知识系统的串起来了,也明白了如何高效地去设计一个电子系统。所以起初拿到本课的课程设计的时候确实有点儿兴奋,心想着尽量要独立快速而又高质量的完成这个设计。可是,当天就发现我对这个用VHDL语言写的频率计系统一点头绪都没有,随后就是一个劲的去图书馆查阅相关资料,到网上收集关于频率计的资料,可是查到的东西好像并没有帮到我什么忙,使我更感到无从下手。直到第一次进实验室做实验时,终于找到了一个比较类似的VHDL程序设计的简易数字频率计。通过仔细阅读这个程序,我对这次的设计有了些感觉。刚开始看到那设计的时候,一下子就被很多行的VHDL代码给吓着了,当时真想放弃,最后还是硬着头皮看了下去。开始真是很多看不懂,但查过书后大部分都能搞清楚。对我来说是新东西的还有寄存器的设计等,最后通过查找书本大概的把这个系统看懂了。毕竟是第一次写这么大的关于硬件描述的程序,所以虽然看稍微懂了类似的程序,可是到自己做的时候还是觉得不能上手,一直是要翻书看和借鉴里的内容。眼看就第一个设计周快要结束了,我才完成一半。还是自己是平时上课的知识积累不够,掌握得不熟练,到编写程序时,表达起来就很吃力。很快到了对整个系统作调试的时候了,编译、下载、连线、运行,一步一步的很小心。最后,还是模仿着那系统完成了这次课程设计。设计是我们将来必需的技能,这次设计恰恰给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都对我所学的知识进行了检验。在实习的过程中发现了以前学的数字电路的知识掌握的不牢。同时在设计的过程中,遇到了一些以前没有见到过或没弄明白的元件,但是通过查找资料来学习这些元件的功能和使用。我在此次实习中,将理论结合实际,提高和培养创新能力,为后续课程的学习,毕业设计,毕业后的工作打下基础。通过这次课程设计我又重新学到了很多电路电子知识,以及相关软件的知识,如 Office,Quartus,Visio等。从中学到了知识也得到了实际的锻炼,最重要的是我对电子产品的开发产生了浓厚的兴趣。也让我立志以后要在电子行业有些作为。另外,还要感谢齐老师和张老师的悉心指导,通过他们的进一步讲解才会更深入的懂得此次任务的思路和很多需要修改的地方。参考文献1 何小艇.电子系统设计M.浙江:浙江大学出版社,20082 潘松、黄继业.EDA技术实用教程M.北京:科学出版社,20053 阎石.数字电子技术基础M.北京:清华大学出版社,20064 侯伯亨.VHDL硬件描述语言与数字逻辑电路设计M.西安:西安电子科技大学出版社,20095 齐晶晶.现代电子系统设计试验指导书.电工电子实验教学中心,20096 王凤英.基于FPGA的数字频率计设计与仿真J.科技资讯,20087 Altera Corporation. Cyclone Device HandbookJ.2003-4附录A 系统原理框图附录B 管脚连接图附录C VHDL源程序模数转换模块VHDL源程序:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY cint IS PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -来自0809转换好的8位数据 CLK : IN STD_LOGIC; -状态机工作时钟 EOC: IN STD_LOGIC; -转换状态指示,低电平表示正在转换 ALE: OUT STD_LOGIC; -8个模拟信号通道地址锁存信号 START: OUT STD_LOGIC; -转换开始信号 OE: OUT STD_LOGIC; -数据输出3态控制信号 ADDA : OUT STD_LOGIC; -信号通道最低位控制信号LOCK0: OUT STD_LOGIC; -观察数据锁存时钟 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -8位数据输出END cint;ARCHITECTURE behav OF cint ISTYPE states IS (st0, st1, st2, st3,st4) ; -定义各状态子类型 SIGNAL current_state, next_state: states :=st0 ; SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; - 转换后数据输出锁存时钟信号BEGINADDA = 1; -当ADDA=0,模拟信号进入通道IN0;当ADDA=1,则进入通道IN1Q = REGL; LOCK0 ALE=0;START=0;LOCK=0;OE=0; next_state ALE=1;START=1;LOCK=0;OE=0; next_state ALE=0;START=0;LOCK=0;OE=0; IF (EOC=1) THEN next_state = st3; -EOC=1表明转换结束 ELSE next_state ALE=0;START=0;LOCK=0;OE=1; next_state ALE=0;START=0;LOCK=1;OE=1; next_state next_state = st0; END CASE ; END PROCESS COM ;REG: PROCESS (CLK) BEGIN IF (CLKEVENT AND CLK=1) THEN current_state=next_state; END IF; END PROCESS REG ; - 由信号current_state将当前状态值带出此进程:REGLATCH1: PROCESS (LOCK) - 此进程中,在LOCK的上升沿,将转换好的数据锁入 BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL 10000000THEN -比较阈值选为128CLKIN=1;ELSE CLKIN=0;END IF;END PROCESS; END ONE;频率测量及报警模块VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt ISPORT(CLK3M:IN STD_LOGIC; CLKIN:IN STD_LOGIC; GW,SW,BW,QW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -其中GW,SW,BW,QW为记数码管的khz,hz的四位 BEEF:OUT STD_LOGIC:=0; HZ:OUT STD_LOGIC:=0; KHZ:OUT STD_LOGIC:=0);END ENTITY cnt ;ARCHITECTURE ONE OF cnt ISSIGNAL CLKOUT:STD_LOGIC;SIGNAL S0,S1,S2,S3,S4,S5:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL Q0,Q1,Q2,Q3,Q4,Q5:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL GATE:STD_LOGIC;SIGNAL CNT0:INTEGER RANGE 0 TO 3000000;SIGNAL CNT1:INTEGER RANGE 0 TO 3000000:=0;SIGNAL CNT2:INTEGER RANGE 0 TO 3000000:=0;SIGNAL CNQ1:INTEGER RANGE 0 TO 3000000:=0;SIGNAL CNQ2:INTEGER RANGE 0 TO 3000000:=0;BEGIN PROCESS(CLKIN)BEGINIF(RISING_EDGE(CLKIN)THEN -将输入的被测信号分频与闸门信号匹配 CLKOUT=NOT CLKOUT;END IF;END PROCESS;PROCESS(CLK3M) -将时基信号分频BEGINIF(RISING_EDGE(CLK3M)THEN IF(CNT0=3000000)THEN CNT0=0;GATE=NOT GATE;ELSE CNT0=CNT0+1;END IF;END IF;END PROCESS;PROCESS(CLKIN) -计数器BEGIN IF(RISING_EDGE(CLKIN)THEN IF GATE=1THENIF S0=1001THEN S0=0000;-S0个位IF S1=1001THEN S1=0000;-S1十位IF S2=1001THEN S2=0000;-S2百位IF S3=1001THEN S3=0000;-S3千位IF S4=1001THEN S4=0000;-S4万位 S5=1111;ELSE S4=S4+1;END IF;ELSE S3=S3+1;END IF;ELSE S2=S2+1;END IF;ELSE S1=S1+1;END IF;ELSE S0=S0+1;END IF;ELSIF S0/=0000 OR S1/=0000 OR S2/=0000 OR S3/=0000 OR S4/=0000 OR S5/=0000THEN Q0=S0;Q1=S1;Q2=S2;Q3=S3;Q4=S4;Q5=S5;S0=0000; S1=0000; S2=0000 ; S3=0000 ; S4=0000 ; s50000 OR Q40000)THEN QW=Q4;BW=Q3;SW=Q2;GW=Q1;HZ=0;KHZ=1;ELSE QW=Q3;BW=Q2;GW=Q1;SW=Q0;HZ=1;KHZ=0;END IF;IF (S5=1111)THEN -超量程警告BEEF=1;ELSE BEEF=0;END IF;END PROCESS;END ONE;占空比测量模块VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ratio ISPORT(CLK3M:IN STD_LOGIC; CLKIN:IN STD_LOGIC; OUT0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); OUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ratio;ARCHITECTURE ONE OF ratio ISSIGNAL ZKB:INTEGER RANGE 0 TO 99; -占空比SIGNAL CNT1:INTEGER RANGE 0 TO 3000000:=0;SIGNAL CNT2:INTEGER RANGE 0 TO 3000000:=0;SIGNAL CNQ1:INTEGER RANGE 0 TO 3000000:=0;SIGNAL
展开阅读全文