欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    现代电子系统课程设计简易数字频率计设计.doc

    • 资源ID:4150018       资源大小:557KB        全文页数:27页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    现代电子系统课程设计简易数字频率计设计.doc

    课程设计任务书(指导教师填写)课程设计名称 现代电子系统课程设计 学生姓名 专业班级 设计题目 简易数字频率计设计 一、 课程设计目的掌握高速AD的使用方法;掌握频率计的工作原理;掌握GW48_SOPC实验箱的使用方法;了解基于FPGA的电子系统的设计方法。二、 设计内容、技术条件和要求设计一个具有如下功能的简易频率计。(1)基本要求: a被测信号的频率范围为120kHz,用4位数码管显示数据。b测量结果直接用十进制数值显示。c被测信号可以是正弦波、三角波、方波,幅值13V不等。d具有超量程警告(可以用LED灯显示,也可以用蜂鸣器报警)。e当测量脉冲信号时,能显示其占空比(精度误差不大于1%)。(2)发挥部分a修改设计,实现自动切换量程。b构思方案,使整形时,以实现扩宽被测信号的幅值范围。c其它。三、 时间进度安排布置课题和讲解:1天 查阅资料、设计:4天实验:3天 撰写报告:2天四、 主要参考文献何小艇 电子系统设计 浙江大学出版社 2008.1潘松 黄继业 EDA技术实用教程 科学出版社 2006.10齐晶晶 现代电子系统设计实验指导书 电工电子实验教学中心 2009.8指导教师签字: 2011年 11月28日摘 要由于社会发展和科技发展的需要,信息传输和处理的要求的提高,对频率的测量精度也提出了更高的要求,需要更高更准确度的时频基准和更精密的测量技术。而频率测量所能达到的精度,主要取决于作为标准频率源的精度以及所使用的测量设备和测量方法。目前,国内外使用的测频方法有很多,有直接测频法、内插法、游标法、时间电压变化法、多周期同步法、频率倍增法、频差倍增法以及相位比较法。 在本文中,我们用VHDL语言进行编程并利用FPGA芯片设计了一个简易数字频率计。主要分为如下几个部分: 一、 ADC0809控制模块: AD0809的工作过程是:输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,ALE,START,OE,ADDA都是ADC0809的控制信号,ADDA为模拟通道选择,低电平选择通道0,ALE为通道地址锁存信号,START为启动AD转换的信号,OE为ADC0809转换结果输出的使能信号。这部分主要用来控制ADC0809完成数模转换,将模拟信号转换成数字信号。 二、 比较器模块:这部分的功能是将前者输出的信号与它本身设置好的一个预值相比较,将数字信号转换成脉冲信号。此时比较器的作用相当于一个整形电路。三、频率计计数模块:这部分主要用来测量频率,测频方法有很多。本次设计采用的是直接测频法。具体的方案论证将在下面进行。四、频率计占空比计数模块:这部分主要用来测量占空比,测量方法也有很多,本次设计用的是等精度法测量。 五、显示模块:这部分主要用四个数码管来显示测量的频率和脉冲信号的占空比,并通过一个按键来实现频率显示和占空比显示的转换。关键词: 频率、精度、VHDL、FPGA、ADC0809目 录一、任务解析4二、系统方案论证.52.1 总体方案与比较论证.52.2 方案的选择62.3 系统结构6三、ADC0809控制模块.7四、比较器模块.10五、频率计数和占空比模块.135.1 频率计基本原理.135.2 方案论证.13六、显示模块.15七、实验结果及分析.17八、心得体会.17 参考文献.18附 录一.19附 录二.19 一、任务解析 设计目标及要求: 被测信号波形:正弦波、三角波和矩形波。测量频率范围分二档:Hz档 和kHz档a被测信号的频率范围为120kHz,用4位数码管显示数据。b测量结果直接用十进制数值显示。c被测信号可以是正弦波、三角波、方波,幅值13V不等。d具有超量程警告(可以用LED灯显示,也可以用蜂鸣器报警)。e当测量脉冲信号时,能显示其占空比(精度误差不大于1%)。(2)发挥部分a修改设计,实现自动切换量程。b构思方案,使整形时,以实现扩宽被测信号的幅值范围系统原理图如下二、 系统方案论证2.1总体方案与比较论证数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下有以下两种思路:1.利用一个较大的周期信号作为参考信号,计量在一个周期内出现的被测信号的数目,最终我们可以通过计数器求出信号的频率。2.利用一个频率较高来测量,具体来说就是计量被测信号在一个周期内的能够经历多少个参考频率。因此,同样也可以测量出具体信号的值。但是,我们可以看到以上的两种方法本身有一些缺陷。对于第一种方法,如果被测信号的频率和参考信号的频率接近的话,那么测量出的结果就一定会有比较大的误差。对于第二种方法,如果被测信号的频率和比较的的话,会造成计数值的比较大的误差,因此第二种方法不适合测量低频率的信号。因此,为了保证测量的精度,就必须采用分段进行测量,也就是在低频的时候采用第二种方法,在高频时采用第一种方法。在具体是现实时,又可以采用单片机或者FPGA来实现,具体有如下方案:方案一:我觉得,如果采用FPGA来实现,我们可以利用FPGA来实现在单片机系统中的计数部分。这样可以节省单片机的系统资源,考虑到在下面的相移网络设计中也需要利用单片机和FPGA,但单片机的系统资源相对有限,因此我们建议在这里单片机主要用于控制,而FPGA则可以用来进行计数之类的事情。方案二:分离元件设计方案:本方案利用大量数字芯片,通过各种逻辑关系构成,但由于芯片无编程性,如果完成本次大赛的所有要求难度较大,只能完成部分功能,同时电路复杂。在实际应用中存在很多问题。方案三:全部利用FPGA来实现,即利用FPGA产生时钟。由于FPGA的工作频率比单片机的高很多,因此可以考虑直接利用FPGA产生信号的高频参考频率,这样就可以在一定程度上利用前面综述的第二种方法,同时能够在误差范围内满足误差要求。但是,利用FPGA处理产生参考频率,有一个最大的问题:这样会导致在低频和高频是。方案四:我们可以以AT89C51单片机为核心,利用他内部的定时计数器完成待测信号周期频率的测量。大致原理如下所述:单片机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.2方案的选择我们最终选择第二种,具体理由有如下几点:由于FPGA本身是将大量的逻辑功能继承与一个器件内,集成度要远远高于单片机,能够利用的资源也相对充裕,因此可以较好地完成要求。由于对于FPGA的设计,可以直接采用VHDL硬件语言直接进行的,在不同的场合,我们只要对语言进行适当的改动,就可实现具体情况具体应用。因此,利用FPGA来进行开放,其可移植性更强。利用FPGA和单片机协调来进行开发,只要利用较少的器件就可以实现系统的功能。由于单片机通过中断可以较准确地产生信号需要的信号频率,同时,单片机的控制能力比较强。2.3.系统结构本次课程设计主要有五大模块组成:ADC0809控制器、比较器、频率计量模块、占空比计量模块和显示模块。设计原理如下:通过信号发生器将信号输入到ADC0809控制器,通过它的控制电路将模拟信号转换成数字信号,将其输出与通过比较器的预值相比较,此时比较器的作用相当于整形电路,把输出转换成一个个脉冲。然后将此脉冲信号分别送到频率计量模块和占空比计量模块,在频率计量模块中,比较器的输出作为计时信号,而在占空比计量模块中,比较器的输出作为阀门信号。最后将两者的输出送到显示模块。系统原理框图如下: 三、ADC0809控制模块主要特性1)8路输入通道,8位AD转换器,即分辨率为8位。 2)具有转换起停控制端。 3)转换时间为100s(时钟为640kHz时),130s(时钟为500kHz时) 4)单个5V电源供电 5)模拟输入电压范围05V,不需零点和满刻度校准。 6)工作温度范围为-4085摄氏度 7)低功耗,约15mW 外部特性(引脚功能)ADC0809芯片有28条引脚,采用双列直插式封装,如图1323所示。下面说明各引脚功能。 IN0IN7:8路模拟量输入端。 2-12-8:8位数字量输出端。 ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路 ALE:地址锁存允许信号,输入,高电平有效。 START: AD转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 EOC: AD转换结束信号,输出,当AD转换结束时,此端输出一个高电平(转换期间一直为低电平)。 OE:数据输出允许信号,输入,高电平有效。当AD转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。 REF(+)、REF(-):基准电压。 Vcc:电源,单一5V。 GND:地。其具体与ADC0809的连接电路图如下:AD0809的工作过程是:输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,ALE,START,OE,ADDA都是ADC0809的控制信号,ADDA为模拟通道选择,低电平选择通道0,ALE为通道地址锁存信号,START为启动AD转换的信号,OE为ADC0809转换结果输出的使能信号。生成的封装图为:波形仿真如下:D来自0809转换好的8位数据,CLK状态机工作时钟, EOC转换状态指示,低电平表示正在转换,ALE 8个模拟信号通道地址锁存信号, START转换开始信号,OE数据输出3态控制信号,ADDA 信号通道最低位控制信,,LOCK0 观察数据锁存时钟,Q 8位数据输出。输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开。由上图可知:模拟输入变成了数字输出。四、比较模块比较器主要用来将数字信号转换成脉冲信号,它的作用相当于一个整形电路。数字比较器用于数字信号的比较,例如,数据A和B比较,如果A>B,则输出A大于B的结果信号FA>B=1,FA=B=0,FA<B=0。如果A=B,则输出A等于B的结果信号FA>B=0,FA=B=1,FA<B=0。如果A<B,则输出A小于B的结果信号FA>B=0,FA=B=0,FA<B=1。我们这里用到的比较器是比较是把ADC0809转换的结果和给定的阈值进行比较,输出产生脉冲信号,结果是把正弦波和三角波转换成方波。原理框图如下图:被测信号高速A/D数字比较器脉冲信号阈值预值的计算:这部分要用到以前做的一次实验的知识,将信号发生器输出一个频率很小的方波(相当于给一个直流电压),通过数码管的显示将显示的字符写成BCD码形式,然后向右移一位(相当于除以二),这样得到的数就是我们要找的预值。部分程序如下:beginprocess(y5)beginif y5>="00100000"thenfin<='1'else fin<='0'end if;end process;end block BJ;上述程序中选取阀值为00100000,当大于阀值时,输出为高电平,低于阀值时输出为低电平。从而实现了把正弦波,三角波转换为方波。然后输入到频率和占空比的控制模块中。通过编程实现的比较模块见下图:经过Q7.0输出的结果,直接给d7.0做为输入,然后用输入和这个阈值作比较,如果大于则输出为高电平,小于或等于则输出为低电平。生成的封装图为:波形仿真图如下:高于门限的仿真结果低于门限的仿真结果五、频率计数和占空比模块5.1数字频率频率计的基本原理数字频率计的主要功能是测量周期信号的频率。频率是单位时间( 1S )内信号发生周期变化的次数。如果我们能在给定的 1S 时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。这就是数字频率计的基本原理。 5.2、方案论证对于频率的测量没有现成的硬件模块,因此对于频率的测量需要我们用VHDL语言进行实现。对于频率的测量主要考虑有两种实现方案。方案一: 直接测频法测频法就是在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:fx=Nx/Tw。测量的过程如图所示,在TW时间内通过计数器记录被测信号脉冲的个数,然后把记录结果锁存,经过运算后,送数码管显示,即为所测频率。,方案二: 测周期法测周期法需要有标准信号的频率fs,这个标准信号应该取一个频率适中的高频信号,在待测信号的一个周期Tx内,记录标准频率的周期数Ns,则被测信号的频率为:fx=fs/Ns。测量测周期法的过程如上图所示,在待测信号的一个周期Tx内,记录标准信号周期的个数,然后把记录结果锁存,经过运算后,送数码管显示,即为所测频率。,对于测频率:比较一二两种方案: 这两种测频率的原理基本一样,都是通过在给定的时间内记录脉冲的个数,经过一定的运算处理,得出结果显示出来。并且这两种方案的计数值都会产生误差,都与计数器中记录的数值Nx或Ns有关。但是考虑到用VHDL语言编写乘除的算法比较困难,并且经过乘除运算后所得结果的误差较大,因此选用方案一。 方案一得好处是闸门信号直接可以选择1S的时钟信号,在这1S时间内记录的被测信号脉冲的个数,正好就是被测信号的频率,不再需要进行运算处理。不但减少编程的难度,而且也减小了实验的误差。因为侧周期法的标准信号是一个高频信号,在不同的被测信号的脉冲下所造成的误差有很大的不同。而在1S闸门信号下,记录的脉冲个数,对于所有被测信号的产生的误差基本是一样。考虑到以上的各因素,我认为方案一是比较理想的选择。对于占空比:比较以上两种方案,我认为第二种是比较理想的选择。它不仅满足了精度的要求,而且对于高频测量更加适合。生成的封装图分别为: 占空比部分程序如下:beginif f3='1' then n1<=0;m1<=0;l1<=0;else if clk7'event and clk7='1' thenif g1='1' thenn1<=n1+1;end if;end if;if clk7'event and clk7='1' thenif f2='1' thenm1<=m1+1;end if;end if;end if;l1<=m1*100/n1;end process p5;p6:process(m1,n1)beginy3(3 downto 0)<=conv_std_logic_vector(l2 rem 10,4);y3(7 downto 4)<=conv_std_logic_vector(l2/10 rem 10,4);end process p6;end block ZKB;上面程序中m1为高电平时的所得到的频率,n1为一个周期的频率。把12和10求余,结果转换成四位二进制,得到的就为显示占空比的个位,把上述求余后再和10求余,结果转换成四位二进制,所得到的就是显示数码管的十位,二个就是显示占空比的二位数码管。 仿真波形图如下:Clk1为系统时钟信号,clk2是输入的时钟信号,fin是经过过比较器后的输入信号,在1S的信号下对fin信号进行计数。计数器,要求低位的计数值溢出信号做为高位的输入信号,从而显示频率的计量。在fin的高电平期间就对这个基准脉冲信号的个数进行计数同时也在fin二分频后的高电平期间对这个基准信号进行计数,把这两个得到的计数结果进行相除运算,相除后得到的结果进行个位和十位分离,然后再进行进制转换,送到数码管中显示。 六、 显示模块 这部分主要通过用四个数码管将测得的频率和占空比显示出来,并实现量程的自动转换功能,还能通过一个按键控制是显示频率还是占空比。P7.0为占空比模块的输出;data19.0为频率计量模块的输出;clk3 为系统时钟;e 为控制信号,当它为1时显示占空比,为0时显示测量频率;c 为量程转换信号,当它为1时,khz灯亮,表示高量程,当它为0时,hz灯亮,表示低量程;a 为hz;b 为khz;y15.0输出结果显示。 七、 实验结果及分析本次试验通过由一个信号发生器给出输入,当给定频率523hz时,显示523,同时hz灯亮;给定1240是显示124,同时khz灯亮。当给出4360时显示435同时khz灯亮。出现这一现象的原因主要是频率有点高。直接测频法主要用于测低频,精度要求不是特别高。当给定一个占空比57/100的脉冲信号时,显示56/100。精度有一定的误差,这种误差的主要来源有系统误差,测量误差。测量误差主要有:一、给的信号不成比例;二、信号频率过低。占空比模块用的等精度法主要用于测高频,在测低频时有一定的误差。可以通过规范操作来消除这部分带来的误差。八、心得体会通过本次课程设计,是我对自己的动手能力又有了新的提高。尽管在程序编写、下载和调试过程中,一度遇到过众多困难,在老师的细心指导和同学的一起努力下才得以解决。制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,不能急躁,因为是在电脑上调试,比较慢,又要求我们有一个比较正确的调试方法,像把频率调准等等。再有就是通过这次课程设计,让我了解了自己知识的匮乏,有待进一步的提高。感谢这几天齐老师以及同学们的热情帮助。参考文献(1) 何小艇 电子系统设计 浙江大学出版社 2008.1(2) 赵俊超等.集成电路设计VHDL教程.北京:北京希望电子出版社,2002(3) 王振红.VHDL数字电路设计与应用实践教程.北京:机械工业出版社,2003(4)EDA技术使用教程 科学出版社 潘松 编著(5)新型集成器件实用电路,杨帮文,电子工业出版社,2002年附录一:附录二:1、ADC0809控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADCINT 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 ADCINT;ARCHITECTURE behav OF ADCINT 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 <= LOCK ; COM: PROCESS(current_state,EOC) BEGIN -规定各状态转换方式 CASE current_state IS WHEN st0=>ALE<='0'START<='0'LOCK<='0'OE<='0' next_state <= st1; -0809初始化 WHEN st1=>ALE<='1'START<='1'LOCK<='0'OE<='0' next_state <= st2; -启动采样 WHEN st2=> ALE<='0'START<='0'LOCK<='0'OE<='0' IF (EOC='1') THEN next_state <= st3; -EOC=1表明转换结束 ELSE next_state <= st2; END IF ; -转换未结束,继续等待 WHEN st3=> ALE<='0'START<='0'LOCK<='0'OE<='1' next_state <= st4;-开启OE,输出转换好的数据 WHEN st4=> ALE<='0'START<='0'LOCK<='1'OE<='1' next_state <= st0; WHEN OTHERS => next_state <= st0; END CASE ; END PROCESS COM ; REG: PROCESS (CLK) BEGIN IF (CLK'EVENT AND CLK='1') THEN current_state<=next_state; END IF; END PROCESS REG ; - 由信号current_state将当前状态值带出此进程:REG LATCH1: PROCESS (LOCK) - 此进程中,在LOCK的上升沿,将转换好的数据锁入 BEGIN IF LOCK='1' AND LOCK'EVENT THEN REGL <= D ; END IF; END PROCESS LATCH1 ; END behav;2、比较模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity compre isport(y:out std_logic; q:in std_logic_vector(7 downto 0);end;architecture bhv of compre isbeginprocess(q)beginif q>="00101000" theny<='1'else y<='0'end if;end process;end;3、占空比模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity ratio isport(f,clk2:in std_logic; y:out std_logic_vector(7 downto 0);end;architecture bhv of ratio issignal k1:integer range 0 to 999999;signal m1:integer range 0 to 199999;signal m:integer range 0 to 99;signal y1:std_logic_vector(7 downto 0);signal a,c,ff,f3,f2:std_logic;beginp1:process(f)beginif f'event and f='1' thenff<=not ff;end if;end process p1;p2:process(f,ff)beginif f='0' and ff='0' then f3<='1'else f3<='0'end if;if f='1' and ff='1' then f2<='1'else f2<='0'end if;a<=not ff;c<=ff;end process p2;p3:process(a)beginif a'event and a='1' theny<=y1;end if;end process p3;p4:process(f3,c,clk2)beginif f3='1' then k1<=0;m1<=0;else if clk2'event and clk2='1' thenif c='1' thenk1<=k1+1;end if;end if;if clk2'event and clk2='1' thenif f2='1' thenm1<=m1+1;end if;end if;end if;end process p4;p5:process(m1,k1)beginm<=m1*100/k1;y1(3 downto 0)<=conv_std_logic_vector(m rem 10,4);y1(7 downto 4)<=conv_std_logic_vector(m/10 rem 10,4);end process p5;end;4、计数模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cntf isport(clk1,fin:in std_logic; c:out std_logic; data:out std_logic_vector(19 downto 0);end;architecture bhv of cntf issignal clk_1:std_logic;signal x,y,z:std_logic;signal oe:std_logic:='0'signal dout:std_logic_vector(19 downto 0);beginp1:process(clk1)beginif clk1'event and clk1='1' thenclk_1<=not clk_1;end if;end process p1;p2:process(clk1,clk_1)beginif clk1='0' and clk_1='0' theny<='1'else y<='0'end if;x<=not clk_1; z<=clk_1;end process p2;p3:process(x)beginif x'event and x='1' thendata<=dout;c<=oe;end if;end process p3;p4:process(fin,y,z)beginif y='1' then dout<=(others=>'0');oe<='0'elsif fin'event and fin='1' thenif z='1' and oe='0' thenif dout(3 downto 0)="1001" thenif dout(7 downto 4)="1001" thenif dout(11 downto 8)="1001" thenif dout(15 downto 12)="1001" thenif dout(19 downto 16)="1001" thenoe<='1'else dout(19 downto 16)<=dout(19 downto 16)+'1'oe<='0'end if;dout(15 downto 12)<="0000"else dout(15 downto 12)<=dout(15 downto 12)+'1'end if;dout(11 downto 8)<="0000"else dout(11 downto 8)<=dout(11 downto 8)+'1'end if;dout(7 downto 4)<="0000"else dout(7 downto 4)<=dout(7 downto 4)+'1'end if;dout(3 downto 0)<="0000"else dout(3 downto 0)<=dout(3 downto 0)+'1'end if;end if;end if;end process p4;end;5、显示模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity xianshi isport(p:in std_logic_vector(7 downto 0); data:in std_logic_vector(19 downto 0); clk3,e,c:in std_logic; a,b:out std_logic; y:out std_logic_vector(15 downto 0);end;architecture bhv of xianshi isbeginprocess(c,e)beginif c='1' then y<="0000000000000000"a<='0'b<='0'elsif clk3'event and clk3='1' then if e='1' theny(7 downto 0)<=p;y(15 downto 8)<="00000000"elsif data(15 downto 12)="0000" theny<=data(15 downto 0);a<='1'b<='0'else y<=data(19 downto 4);b<='1'a<='0'end if;end if;end proc

    注意事项

    本文(现代电子系统课程设计简易数字频率计设计.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开