1、数字频率计设计2.1.2 CNT10模块 32.1.4 SELTIME模块 42.1.5 DELED模块 42.2 总电路设计 53 设计调试体会与总结 63.1 设计调试 63.1.1 管脚锁定 63.1.2 各模块仿真波形图 73.2 体会与总结 93.2.1 体会 93.2.2 总结 103.3 改进意见 114 实验箱调试现象 11参考文献.16SELTIME模块 18DELED模块 19 引言EDA技术即电子设计自动化技术,它是以可编程逻辑器件(PLD)为载体,以硬件描述语言(VHDL)为主要的描述方式,以EDA软件为主要的开发软件的电子设计过程。它主要采用“自顶向下”的设计方法,设
2、计流程主要包括:设计输入、综合、仿真、适配、下载。EDA课程设计(注:EDA即电子设计自动化,Electronics Design Automation)是电子技术基础的一部分,随着可编程器件技术的发展,EDA技术已广泛用于电子系统设计开发中,EDA技术已经成为电子信息类专业人员必须掌握的一门技术。EDA课程设计是继模拟电子技术基础、数字电子技术基础、电子技术基础课程后电气、电子灯专业综合性实验训练课程,重在培养学生对VHDL语言的理解、EDA软件的使用和简单电子电路设计的思想,提高学生动手能力。我们这次课程的内容是能够具有超量程报警功能,在超出目前量程档的测量范围时,发出灯光或音响信号的三位
3、数字频率计。数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。随着可编程ASIC的广泛应用,以EDA工具作为开发手段,基于VHDL语言,将使整个系统大大简化,提高整体的性能和可靠性本文介绍一种基于VHDL的采用自顶而下设计方法实现的数字频率计。该设计方法与传统的设计方法相比,具有外围电路简单,程序修改灵活和调试容易等特点。特别是在设计的初期阶段可以通过软件仿真来预知设计方案的可行性,便于及时的调整设方案,避免了传统方法中到项目开发的后期发现方案妥,从而造成人力、物力的浪费。1 设计任务及设计要求1.1 设计任务数字
4、频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字,显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号以及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精度高,显示直观,所以经常要用到数字频率计。数字计数式频率计能直接计数单位时间内被测信号的脉冲数,然后以数字形式显示频率值。这种方法测量精确度高、快速,适合不同频率、不同精确度测频的需要。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。1.2 设计要求设计一个
5、能测量方波信号频率的频率计,测量结果用十进制显示,测量的频率范围是1100KHz,分成两个频段,即 1999Hz,1KHz100KHz,用三位数码管显示测量频率,用 LED 显示表示单位,如亮绿灯表示 Hz,亮红灯表示 KHz。具有自动校验和测量两种功能,即能用标准时钟校验测量精度。具有超量程报警功能,在超出目前量程档的测量范围时,发出灯光和音响信号。2 设计总体思路脉冲信号的频率就是在单位时间内所产生的脉冲个数,其表达式 f=N/T,f 为被测信的频率,N 为计数器所累计的脉冲个数,T 为产生 N 个脉冲所需的时间,所以在 1 秒时间内计数器所记录的结果,就是被测信号的频率。 此设计问题可分
6、为测量/校验选择模块、计数器模块、送存选择器模块、锁存模块和扫描显示模块几部分。 测量/校验选择模块通过一个测频信号发生器控制计数。设置 1 秒定时信号(周期为 2 秒),在 1 秒定时时间内的所有被测信号送计数器输入端。计数器对CP1信号进行计数,在 1 秒定时结束后,将计数器结果送锁存器锁存,同时将计数器清零,为下一次采样测量做好准备。设置量程档控制开关 K,单位显示信号 Y,当 K=0 时,为 1999Hz 量程档,数码管显示的数值为被测信号频率值,Y 显示绿色,即单位为 Hz,当 K=1 时,为1KHz100KHz量程档,被测信号频率值为数码管显示的数值乘以 1000,Y 显示红色,即
7、单位 KHz。设置超出量程档测量范围示警信号 alert。计数器由四级十进制计数构成(带进位 C)。若被测信号频率小于1KHz(K=0),则计数器只进行三级十进制计数,最大显示值为999.Hz如果被测信号频率超过此范围,示警信号驱动灯光;若被测信号为1KHz100KHz (K=1),计数器进行四位十进制计数,取高三位显示,最大显示值为 99.9KHz,如果被测信过此范围报警。2.1 各单元电路设计2.1.1 TESTCTL模块图2-1 控制信号发生模块这个模块的主要功能是一个测频信号发生器 ,此模块中含有clk一个输入端和teten,clr_cnt和load三个输出端,频率测量的基本原理是计算
8、每秒钟内待测信号的脉冲个数。Testctl的计数使能信号tsten能产生一个1秒脉冲宽的周期信号,并对频率计的每一计数器cnt10的使能ena进行同步控制。当tsten高电平时,允许计数;为低电平时停止计数,并保持其计数结果。在停止计数期间,首先需要一个锁存器load的上跳沿将计数器前一秒的计数值锁存进锁存器REG32B中。由clr_cnt来控制计数器的清零端。2.1.2 CNT10模块图2-2 十进制计数模块这个模块的功能是一个异步的十进制计数器,它记录的数值是从09,此模块有三个输入端和两个输出端,它的三个输入端分别为clk,clr和ena,输出端为cq3.0和carry_out。其中cl
9、k时钟信号,在它上升沿开始计数,clr为复位清零信号,ena为计数器的使能端,当它为高电平的时候开始计数,低电平的时候停止计数。cq3.0为四位输出端,carry_out为进位输出端,当它为1时,下一位计数器开始计数。2.1.3 REG32B模块图2-3 锁存模块这个这个模块是一个锁存器模块,此模块包括三个输入端,load,rst和din23.0以及一个输出端dout23.0,其中rst为清零信号,当它为高电平的时候清零,当它为低电平的时候在load的上升沿时,din23.0将计数器记录的数据放入到锁存中进行锁存,处理后由dout23.0进行输出。2.1.4 SELTIME模块图2-4 数码管
10、选存模块 这个模块是一个数码管选存模块,此模块有三个输入端和三个输出端,clk为时钟信号,在clk为上升沿时候把锁存器的输出信号送入din23.0端口,其中输入端k具有控制数码管显示的功能当k为高电平的时候数码管显示高三位,当k为低电平的时候数码管显示低三位,daout3.0输出端连接DELED模块,SEL2.0连接试验箱上对数码管进行位选。 2.1.5 DELED模块图2-5 数码管位选模块数码管位选模块有一个输入端s3.0和八个输出端,其中s3.0为译码器的输入为4位二进制代码,由译码器把二进制表示的地址转换为单线选择信号。八个输出端控制数码管显示相应的数值。2.2 总电路设计图2-6 三
11、位数字频率计总体框图说明:频率测量是每秒内待测信号的脉冲个数,Testctl的计数使能信号tsten能产生一个1秒脉冲宽的周期信号,并对频率计的每一计数器cnt10的使能ena进行同步控制。当tsten高电平时,允许计数;为低电平时停止计数,并保持其计数结果。在停止计数期间,首先需要一个锁存器load的上跳沿将计数器前一秒的计数值锁存进锁存器REG32B中。由clr_cnt来控制计数器的清零端在每个时钟的上升沿,锁存器reg32b,将指令din23.0逻辑左移相应位后输出。在停止计数期间,首先需要一个锁存器load的上跳沿将计数器前一秒的计数值锁存进锁存器REG32B中,在rst为高电平时锁存
12、器无效,当rst为低电平时开始进行锁存。由指令din23.0逻辑左移相应位后由dout23.0输出到seltime。当k为低电平时控制数码管使其显示待测信号的低三位,当K为高电平时控制数码管使其显示待测信号高三位。把已经经过锁存器的输出信号送到s23.0端口。daout3.0输出端连接DELED模块,SEL2.0连接试验箱上对数码管进行位选。S3.0端输入二进制表示的地址,通过该模块转换为单线选择信号,来控制对应的数码管显示的数字。如输入的test信号的频率为512Hz,此时若设置量程档控制开关K=0时,选择的是1999Hz量程档,被测信号频率值为数码管显示512,即单位为Hz。当K=1,被测
13、信号为000,数码管显示如果输入的test信号的频率为4KHz,此时若设置量程档控制开关K=1时,选择的是1100KHz量程档,被测信号的频率值为数码管显示的数值1000,即单位为KHz;此时LED灯亮,此时若设置的量程档控制开关K=0时,数码管显示低三位,其相应的数码管显示为,被测信号的频率值超过其量程,就会显示灯亮表示警告。3 设计调试体会与总结3.1 设计调试3.1.1 管脚锁定如图3-1所示。图3-1 管脚锁定图3.1.2 各模块仿真波形图1.TESTCTL模块:图3-2 TESTCTL模块波形仿真仿真结果分析:当clk为上升沿的时候,clr_cnt为计数器的清零信号变为下降沿,而计数
14、的使能信号变为上升沿,开始计数。当clk为下降沿的时候clr_cnt为上升沿,对计数器清零,同时锁存器的控制信号load也为上升沿将前一次所测量的数值进行锁存。2.CNT10模块:图3-3 CNT10模块波形仿真仿真结果分析:clr为计数器的清零信号,当clr为高电平平计数器清零,当clr为低电平的时候计数器允许计数,clk为时钟信号,ena为计数器的使能信号,当clk为上上升沿时候开始加一计数,计数范围为09,ena高电平时候,停止计数,为低电平始计数。3.REG32B模块:图3-4 REG32B模块波形仿真仿真结果分析:rst为复位信号,当它为高电平的时候,dout的输出值为0,当rst为
15、低电平的时候,且load为上升沿的时候,数据通din进入锁存器进行锁存,dout相应的进行输出。4.SELTIME模块:图3-5 SETIME模块波形仿真仿真结果分析:当k为低电平时控制数码管使其显示待测信号的低三位,当K为高电平时控制数码管使其显示待测信号高三位。把已经经过锁存器的输出信号送到s23.0端口。daout3.0输出端连接DELED模块,SEL2.0连接试验箱上对数码管进行位选。5.DELED模块:图3-6 DELED模块波形仿真S为数码管的输入端口,通过s输入一个四位二进制数,其在数码管上得到相应的显示数值,当输入0101,对应在输出值为10110110,在数码管上显示数字5。
16、3.2 体会与总结3.2.1 体会这次课程设计中,我不仅复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力,并从根本上了解了VHDL语言的一些基本用法,应用了原来不会或者不熟练的句型,如if句,case句等,也学会了一些基本功能的实现方法,如分频,状态控制等等,从另外一个角度重新审视了上学期完全从硬件角度出发的电路设计,明白了软硬件之间的交互。通过这个课题,对系统框图、逻辑流程图、状态转移图的设计有了一定的了解。也懂得了系统的前期设计对于后续的编程和调试的重要性。本课题采用了自下而上的设计方法,根据系统对硬件的要求,画出系统控制流程图;然后根据控制流程图,分化模块,利用模块实现功能;
17、最后进行仿真和调试。每个成功的背后都要面对无数次的失败,这次课设也不例外。虽然遇到不少问题与困难,但通过老师以及同学的帮助,都一一得到顺利地解决。我想这必定会为将来的实践积累宝贵的经验和教训。总之,这次课我们受益匪浅。整个过程氛围浓厚,我积极向老师和同学求教并在此过程中中收获良多,能能够进一步了解和使用一门与硬件直接打交道的基本语言对我们将来的学习和工作都会十分有益。3.2.2 总结一周的数字频率计的课程设计终于做完了,在这一周的课设中我感觉我学到了蛮多东西。通过这次设计是我熟练地掌握了QUARTUS II软件的基本使用方法,对VHDL语言的编程方法和编程技巧有了更深层次的理解,对FPGA的了
18、解及应用有了更深层的认识,对频率计有很更深的认识并掌握了频率计的设计过程。在完成此次设计的过程中,遇到了很多困难,但最终都一一攻克。通过这次课程设计,自己的EDA设计能力有了很大的提高。EDA技术作为现代电子设计技术的核心,它依赖功能强大的计算机,在EDA工具软件平台上,对硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、逻辑简化、逻辑分割、逻辑综合、结构综合,以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。硬件描述语言VHDL是EDA技术的重要组成部分,基于VHDL的设计有一个重要的设计思想:自顶向下设计。自顶下下设计有许多优点:1)设计人员不受芯片结构的约束
19、,进行最适应市场需求的设计,避免再设计风险,缩短产品的上市周期;2)设计成果的再利用得以保证(IP);3)采用结构化开发手段,一旦系统基本功能结构确定,可以实行多人、多任务并行工作方式;4)选择实现系统的目标器件的类型、规模,硬件结构的自由度更大。在刚接触EDA课程的时候,面对一种全新的硬件描述语言和软件工具,一开始是什么都不了解,后来通过实验课慢慢掌握了QUARTUE II部分功能的使用。开始上机做实验时都是通过原理图输入进行设计和仿真,原理图设计主要调用相应模块通过连线将对应端口连在一起,原理图输入并不复杂,因此实验也不难。在熟悉了基本操作和原理后开始学习VHDL语言描述。VHDL主要包括
20、库文件、实体和结构体三部分。实体描述了电路器件的外部情况及各信号端口的基本性质;结构体负责描述电路器件的内部逻辑功能或电路结构。在VHDL的使用过程中理解了自顶向下的设计思想,熟悉了软件的使用。因为学校的课时安排有限,所以安排的实验个数也比较有限。不过这些也并不会影响对这门技术的学习,课后有多种选题供我们选择做课程设计。因为自己学的并不好,因此在选题时就选了个比较简单的课题数字频率计。这次设计也收获很多,平时做实验大家做的都是一样的,不懂的可以问别人,但课程设计每组的课题都不一样,所以只有自己查资料。过多的依赖被人,自己不会得到锻炼,能力也不会提升,还有比较重要的就是团队合作精神,以后很多工作
21、都不是一个人可以完成的,所以合作精神很重要。每次课程设计是一次难得的锻炼机会,让我们能够充分利用所学过的理论知识还有自己的想象的能力,另外还让我们学习查找资料的方法,以及自己处理分析电路和EDA语言,并且设计的能力。我相信是对我们的一个很好的提高。平时在学习理论知识的时候,我们应该更注重实践。虽然课程和设计都结束了,但要学的知识还很多,只有不断学习才能提升自己,跟上发展的步伐。碰到的问题越让人绝望,解决后的喜悦程度就越高。3.3 改进意见当量程低于1khz时候能够控制绿灯亮,当量程超过1khz的时候红灯亮,那样看上去更加的明显了。在超过量程的时候应该发出相应的警告声音。4 实验箱调试现象4.1
22、 待测信号小于1000HZ图4-1-1 待测信号128HZ低三位调试现象图图4-1-2 待测信号128HZ高三位调试现象图现象解释:当待测信号为128HZ时低三位为128,表示量程的灯不亮,控制开关拔向高电位,数码管显示高三位为000.报警信号的LED灯不亮4.2 待测信号频率超过1000HZ低于100KHZ图4-2-1 待测信号4096HZ高三位调试现象图图4-2-2 待测信号4096HZ低三位调试现象图现象解释:当待测信号为4096HZ时高三位为040,表示量程的灯亮,控制开关拔向高电位,数码管显示低三位为096.报警信号的LED灯不亮4.3 待测信号超出量程图4-3-1 待测频率1.5M
23、HZ高三位调试现象图图4-3-2 待测频率1.5MHZ低三位调试现象图现象分析:当超出量程会发生报警,低三位和高三位会出现错误4.4 复位清零信号图4-4 复位清零调试现象图现象分析:当clr为高电平,计数器清零,数码管上显示000 参考文献1 PLD与数字系统设计李辉.西安电子科技大学出版社,2005.2 集成电路设计VHDL教程赵俊超等著.北京:希望电子出,2002.3 VHDL程序设计曾繁泰,陈美金著.北京:清华大学出版社,2001.4 VHDL实用教程潘松,王国栋著.成都:电子科技大学出社,2001.5 数字电路逻辑设计王毓银著.北京:高等教育出版社,2001.6 焦素梅.EDA技术基
24、础M.北京:清华大学出版社,2005.7 焦素梅.EDA课程设计指导书M.河南工业大学出版社,2008.8 黄志伟.FPGA系统设计与实践M.电子工业出版社,2005.附录:VHDL描述TESTCTL模块library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity testctl is port( clk : in std_logic; tsten : out std_logic; clr_cnt : out std_logic; load : out std_logic); end tes
25、tctl;architecture behav of testctl is signal div2clk : std_logic; begin process(clk) begin if(clkevent and clk=1) then div2clk=not div2clk; end if; end process; process(clk,div2clk) begin if(clk=0 and div2clk=0) then clr_cnt=1; else clr_cnt=0; end if; end process; load=not div2clk; tsten=div2clk; en
26、d behav;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 9; carry_out : out std_logic); end cnt10;architecture behav of cnt10 is signal cqi : integer range 0 to 9; begin process(clr,clk,ena)
27、 begin if(clr=1) then cqi=0; elsif(clkevent and clk=1) then if(ena=1) then if(cqi=9) then cqi=0; carry_out=1; else cqi=cqi+1; carry_out=0; end if; end if; end if; end process; REG32B模块library ieee; use ieee.std_logic_1164.all; entity reg32b is port(load : in std_logic; rst : in std_logic; din : in s
28、td_logic_vector(23 downto 0); dout : out std_logic_vector(23 downto 0); end reg32b;architecture behav of reg32b is signal data : std_logic_vector(23 downto 0); begin process(rst,load,data) begin if rst=1 then data0); elsif(loadevent and load=1) then data=din; end if; dout=data; end process; end beha
29、v;SELTIME模块library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity seltime is port(clk : in std_logic; din : in std_logic_vector(23 downto 0); k: in std_logic; daout : out std_logic_vector(3 downto 0); sel : out std_logic_vector(2 downto 0); end seltime;architecture behav of seltime is signal sec : std_logic_vector(2 downto 0); begin process(clk) begin if(clkevent and clk=1) then if(sec=010) then sec=000; else secdaoutdaoutdaoutdaout=XXXX;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1