使用VHDL语言进行的MHZ数字频率计的设计说明.doc
华中科技大学武昌分校电气工程及其自动化EDA课程设计设计任务书一、设计题目数字频率计的设计二、设计主要内容1设计目的:1稳固和加深对?EDA技术及应用?及?数字电子技术?根本知识的理解,提高学生综合运用本课程所学知识的能力; 2培养学生根据课题需要选学参考书籍、查阅手册、图表和文献资料的自学能力;通过独立思考,深入钻研有关问题,学会自己分析解决问题的方法; 3以学生的动手为主要内容,培养学生系统软、硬件设计、调试的根本思路、方法和技巧,并能熟练使用集成软件Quartus进展有关电路设计与分析; 4掌握FPGA器件的正确使用方法,提高学生动手能力,能在教师指导下,完成课程任务;5培养严肃认真的工作作风和科学态度。通过课程设计实践,帮助学生逐步建立正确的生产观念、工程观念和全局观点。2设计内容:1位频率计输入端分别为:系统基准时钟100MHZCLK、被测信号输入F*;及输出端为DOUT,皆采用BCD码计数方式;2可测量*围从1Hz到99999999Hz;3将被测信号的频率直接送到个LED显示; 也可选择其它题目,但分量不能低于上述题目。三、原始资料1频率测量方法的根本原理是计算每秒内待测信号的脉冲个数,这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一个计数器T10的ENA使能端进展同步控制。当TSTEN高电平时,允许计数,并保持其所计的数。在停顿计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定的显示。此方法测量精度高。数字频率计由多频信号源模块、测频控制模块、T计数模块、32位锁存器模块及频率显示模块组成,其框图为图1所示:信号源计数模块锁存器显示器控制信号100MHzCLK1Hz用于测量用于扫描显示被测信号fsinTESTENLOADCLR产生1MHz信号产生多种频率输出图1 数字频率计组成框图2在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过;3下载顶层文件到目标芯片;4将被测信号f*输入到系统,数码管将会显示被测信号频率。四、要求的设计成果1、根本要求:在QuartusII软件中新建原理图文件,编译,仿真,锁定管脚并下载到目标芯片。将被测信号f*输入到系统,数码管将会显示被测信号频率。 (1) 根据设计要求, 设计系统的原理框图,说明系统中各主要组成局部的功能; (2) 在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过; (3) 根据软件编好用于系统仿真的测试文件;(4) 编好用于硬件验证的管脚锁定文件;(5) 记录系统各个模块仿真结果; (6) 记录仿真结果中出现的问题及解决方法。2、备选要求:学生可根据课堂教学对?EDA技术及应用?所掌握知识点的实际情况,也可选择其它方案完成设计,从而形成难易程度不同的设计方法。注意:根本要求学生必须完成,学有余力的学生可以在根本要求完成的前提下,选择其它方案完成设计。一般来说,测频精度越高,考察评价就越高。五、进程安排表2 进度安排及学时分配表序号课程设计内容学时分配备注1集中学生学习课程设计的关键理论知识、分配设计任务、明确设计要求、查找资料等。1天2根据任务的要求进展方案构思,初选方案,绘制系统原理框图并与指导教师讨论,方案定稿。 1天完成各模块的VHDL程序设计、编译和时序仿真1天3编程、下载,结合硬件平台,进展调试。完成顶层文件图绘制,对编制好的封图交给教师检查,并按照教师要求修改。1天4撰写课程设计说明书1天5辩论及验收课程设计1 天合计5天六、主要参考资料1 侯伯享. VHDL硬件描述语言与数字逻辑电路设计. *:*电子科技大学出版,2010.2 潘松. EDA技术实用教程. *:电子科技大学,2010.3 李玉山. 电子系统集成设计技术. :电子工业,2010.6.4 李国丽.EDA与数字系统设计.:机械工业,2009.5 周彩宝.VHDL语言及其应用. *:华东计算机技术研究所:2009.6 谭会生.EDA技术中和应用实例与分析.*:*电子科技大学,2008.指导教师签名:20 年 月 日目录摘要(1)一课程设计要求及内容(1)1.1 主要技术指标(1)1.2 工作内容及要求(1)二 数字频率计的根本原理 (1)2.1 数字频率计的组成(1)2.2 数字频率器的原理(2)三 具体电路模块设计 (2)3.1 100MHz分频器 CLK_GEN的设计(2)3.2 带时钟使能的十进制计数器T10的设计(3)3.3 32位锁存器REG32B的设计 (5)3.4 测频控制信号发生器TESTCTL的设计(6)3.5 动态输入编译译码器HC4511的设计 (7)四 数字频率计系统模块的设计(9)4.1 系统模块程序设计及仿真波形(9)4.2 数字频率计系统顶层设计 (10)五 心得体会(13)课程设计成绩评定表 (14)摘要数字频率计是一种用十进制数字显示被测信号频率的一种数字测量仪器,其功能是测量正弦信号,方波信号,尖脉冲信号以及其他各种单位时间内变化的物理量,因此已经成为电路设计的常用元器件之一,有它不可替代的地位。在电子技术中,频率与许多电参量的设计测量方案,测量结果都有着十分严密的关系,因此频率的测量就显得更为重要。测量频率的方法有很多种,其中数字计数器测量频率具有精度高,使用方便,测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。其原理为通过测量一定闸门时间内信号的脉冲个数。本文阐述了利用VHDL语言在CPLD器件的根底上设计一个简单的数字频率计的过程。采用VHDL编程技术设计实现的数字频率计,除被测信号的整形局部,键输入局部和数码显示局部以外,其余全部在一片集成电子芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。关键词:数字频率计,测量,VHDL语言,设计一课程设计要求及内容1.1 主要技术指标1可测量*围从1Hz到99999999Hz;2位频率计输入端分别为:系统基准时钟100MHZCLK、被测信号输入F*;及输出端为DOUT,皆采用BCD码计数方式;3将被测信号的频率直接送到个LED显示。1.2 工作内容及要求1根据任务的要求进展方案构思,初选方案,绘制系统原理框图并与指导教师讨论,方案定稿。2根据选定的方案,在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过,记录系统各个模块仿真结果;3对各个模块进展综合仿真,调试,实现数字频率计的根本功能和硬件实现;4记录仿真结果中出现的问题及解决方法。二 数字频率计的根本原理2.1 数字频率计的组成本课程设计设计的数字频率计正常工作时,可测量0Hz-100MHz的频率。设 1计系统是有五局部组成:一个100MHz分1Hz的分频器CLK_GEN,一个测频控制信号发生器TESTCTL,带时钟使能的十进制计数器T10设计中需要八个,一个32位锁存器REG32B,以及动态输入译码器HC4511电路设计设计中需要八个。2.2 数字频率器的原理数字频率计的根本原理是用一个频率稳定度高的频率源作为基准信号,比照测量出其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为一秒。闸门时间可以根据取值大于或小于1秒都可以。闸门时间越长,则每测一次频率的间隔就越长,闸门时间越短,测得的频率值刷新就越快,单侧的的频率精度就越受影响。一般取1秒作为闸门时间。其原理框图如下:设计的数字频率计工作过程如下:被测信号接入频率计的输入端FSIN,下载板上100M时钟通过频率计的分频器模块中CLK端口输入,经过分频器的分频,变成1Hz的工作频率提供给测频器。当被测频率和工作频率进入测频器模块时,测频器TESTCTL工作进展测频,TESTCTL的计数使能信号CLR_T产生一个1秒脉宽的周期信号,并对频率集中的十进制计数器T10的ENT使能端进展同步控制。当ENT高电平时允许计数,低电平时停顿计数,并保持其所记得脉冲数。在停顿计数期间,首先需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进32位锁存器REG32B中,数字频率计的源程序综合以上模块并且通过对硬件的,实现8个数码管显示出计数值。三 具体电路模块设计3.1 100MHz分频器 CLK_GEN的设计100MHz工作时钟接入分频器,用一个计数器进展计数,计满二分之一100M个,CLK信号取反一次,分频后频率变为1Hz,周期由1/100000000秒变大为1秒,满足数字频率计时序工作频率的要求。 分频器程序设计如下:- 100MHz分频器:clk_gen.vhd-library ieee;use ieee.std_logic_1164.all;entity clk_gen is port(clk: in std_logic; newclk: out std_logic);end entity clk_gen;2 architecture art of clk_gen is signal clk2:std_logic; begin process(clk) is variable ter: integer range 0 to 99999999; begin if clk'event and clk='1' then if ter=99999999 then ter:=0; else ter:=ter+1; end if; if ter<50000000 then clk2<='1' else clk2<='0'end if; end if; end process; newclk<=not clk2;end architecture art; 分频器编译仿真波形如下:3.2 带时钟使能的十进制计数器T10的设计计数器模块是对输入脉冲信号的频率进展测量技术的局部,有八个带时钟使能的十进制计数器组成。其中ENA为计数器选通控制信号,CLR为计数清零信号。在计数清零信号清零后,当使能信号ENA有效时,开场对待测信号进展计数。如果使能信号ENA的宽度为1时,则计数结果就为待测信号的频率。3 带时钟使能的十进制计数器程序设计如下:- 带时钟使能的十进制计数器:T10.vhd-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY T10 IS PORT (CLK:IN STD_LOGIC; CLR,ENA: IN STD_LOGIC; CQ:OUTINTEGERRANGE 0 TO 15; CO:OUT STD_LOGIC);END ENTITY T10;ARCHITECTURE ART OF T10 IS SIGNAL CQI:INTEGERRANGE 0 TO 15; BEGIN PROCESS(CLK,CLR,ENA)IS 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; END IF; END IF; END PROCESS; PROCESS(CQI)IS BEGIN IF CQI=9 THEN CO<='1' ELSE CO<='0'END IF; END PROCESS; CQ<=CQI;END ARCHITECTURE;十进制计数器编译仿真波形如下: 43.3 32位锁存器REG32B的设计当锁存信号上升沿到来时,将计数器的计数值锁存。设置锁存器的好处是显示的数据稳定,不会由于周期的清零信号而闪烁。锁存器的位数应该和计数器一样,都是32位。存放器在计数完毕后,利用触发器的上升沿把最新的频率测量值保存起来,这样在计数过程中不必一直看数码显示管,显示器将最终的频率读数定期进展更新,其输出将作为动态扫描电路的输入。32位锁存器程序设计如下:- 32位锁存器:reg32b.vhd-Library ieee;use ieee.std_logic_1164.all; entity reg32b is port(lk: in std_logic; din: in std_logic_vector(31 downto 0); dout: out std_logic_vector(31 downto 0); end reg32b; architecture behav of reg32b is begin process(lk,din) begin if lk'event and lk='1' then dout<=din; end if; end process;end architecture behav; 32位锁存器编译仿真波形图如下:53.4 测频控制信号发生器TESTCTL的设计 频率测量的根本原理就是计算每秒钟内待测信号的脉冲个数。这就要求TESTCTL的计数使能信号TATEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器T10的ENA使能端进展同步控制。当TSTEN高电平时,允许计数,低电平时停顿计数,并保持所记的数。在停顿计数期间,首先需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进32位锁存器REG32B中,并有外部的译码器译出并稳定显示。锁存信号之后,必须有一清零信号CLR_T对计数器进展清零,为下一秒做好准备。 测频控制信号发生器程序设计如下:- 测频控制信号发生器:TESTCTL.vhd-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_t:out std_logic; load:out std_logic);end entity testctl;architecture art of testctl is signal div2clk:std_logic; begin process(clk) is begin if clk'event and clk='1' then div2clk<=not div2clk; end if; end process; process(clk,div2clk) is begin if clk='0' and div2clk='0' then clr_t<='1' else clr_t<='0' end if; end process; load<=not div2clk; tsten<=div2clk;end architecture art;测频控制信号发生器编译仿真波形图如下:63.5 动态输入编译译码器HC4511的设计 分别将存放器的输出端DATA0至3,DATA4至7,DATA8至11,DATA12至15,DATA16至19,DATA20至23,DATA24至27,DATA28至31对应接到各个译码器的输出端口datain,然后将各个译码器的输出端a,b,c,d,e,f,g端接到数码管的a,b,c,d,e,f,g端口。动态输入编译译码器程序设计如下:- 动态输入编译译码器:HC451.vhd-library ieee;use ieee.std_logic_1164.all;entity HC4511 is port(datain: in std_logic_vector(3 downto 0); a:buffer std_logic; b:buffer std_logic; c:buffer std_logic; d:buffer std_logic; e:buffer std_logic; f:buffer std_logic; g:buffer std_logic);end entity HC4511; architecture ART of HC4511 is 7 begin process(datain) is begin case datain is when "0001" => a<='0'b<='1'c<='1'd<='0'e<='0'f<='0'g<='0' when "0010" => a<='1'b<='1'c<='0'd<='1'e<='1'f<='0'g<='1' when "0011" => a<='1'b<='1'c<='1'd<='1'e<='0'f<='0'g<='1' when "0100" => a<='0'b<='1'c<='1'd<='0'e<='0'f<='1'g<='1' when "0101" => a<='1'b<='0'c<='1'd<='1'e<='0'f<='1'g<='1' when "0110" => a<='0'b<='0'c<='1'd<='1'e<='1'f<='1'g<='1' when "0111" => a<='1'b<='1'c<='1'd<='0'e<='0'f<='0'g<='0' when "1000" => a<='1'b<='1'c<='1'd<='1'e<='1'f<='1'g<='1' when "1001" => a<='1'b<='1'c<='1'd<='1'e<='0'f<='1'g<='1' when others => NULL; end case; end process; end architecture ART;动态输入编译译码器编译波形如下:8四 数字频率计系统模块的设计4.1 系统模块程序设计及仿真波形 系统模块实现对各个模块的整合,实现整个系统的功能。FSIN为输入被测频率信号,CLK为分频器输出的1Hz工作频率,DOUT为数字频率计输出的频率测试结果。在整个模块的设计中,需要使用以上各个模块的功能和应用,通过系统模块程序的子程序调用,实现对整个系统的控制。数字频率计系统模块源程序设计如下:- 数字频率计:FREQ.vhd-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY FREQ IS PORT(FSIN:IN STD_LOGIC; CLK:IN STD_LOGIC; DOUT:OUTSTD_LOGIC_VECTOR(31 DOWNTO 0); END ENTITY FREQ; ARCHITECTURE ART OF FREQ IS PONENT T10 IS PORT(CLK,CLR,ENA:IN STD_LOGIC; CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CO:OUT STD_LOGIC); END PONENT T10; PONENT REG32B IS port(lk: in std_logic; din: in std_logic_vector(31 downto 0); dout: out std_logic_vector(31 downto 0); END PONENT REG32B; PONENT TESTCTL IS port(clk:in std_logic;tsten:out std_logic; clr_t:out std_logic; load:out std_logic); END PONENT TESTCTL; SIGNAL SE,SC,SL:STD_LOGIC; SIGNAL S1,S2,S3,S4,S5,S6,S7,S8:STD_LOGIC; SIGNAL SD:STD_LOGIC_VECTOR(31 DOWNTO 0); BEGINU0:TESTCTLPORT MAP(CLK=>CLK,TSTEN=>SE,CLR_T=>SC,LOAD=>SL);U1:T10 PORT MAP(CLK=>FSIN,CLR=>SC,ENA=>SE,CQ=>SD(3 DOWNTO 0),CO=>S1);U2:T10 PORT MAP(CLK=>S1,CLR=>SC,ENA=>SE,CQ=>SD(7 DOWNTO 4),CO=>S2); 9U3:T10 PORT MAP(S2,SC,SE,SD(11 DOWNTO 8),S3);U4:T10 PORT MAP(S3,SC,SE,SD(15 DOWNTO 12),S4);U5:T10 PORT MAP(S4,SC,SE,SD(19 DOWNTO 16),S5);U6:T10 PORT MAP(S5,SC,SE,SD(23 DOWNTO 20),S6);U7:T10 PORT MAP(S6,SC,SE,SD(27 DOWNTO 24),S7); U8:T10 PORT MAP(S7,SC,SE,SD(31 DOWNTO 28),S8);U9:REG32B PORT MAP(lk=>SL,DIN=>SD(31 DOWNTO 0),dout=>DOUT);END ARCHITECTURE ART;数字频率计系统模块编译仿真波形如下:4.2 数字频率计系统顶层设计数字频率及系统顶层设计需要一个在工作时钟下,将系统模块输出的32位DOUT信号转化为8个4位信号,并且送入显示译码器HC4511中进展显示。其程序设计如下:-信号转化模块:SELTIME.vhd-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SELTIME IS PORT( CLK : IN STD_LOGIC;10 DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); DAOUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END SELTIME; ARCHITECTURE behav OF SELTIME ISSIGNAL SEC : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1') THEN IF(SEC="111") THEN SEC<="000" ELSE SEC<=SEC+1; END IF; END IF; END PROCESS; PROCESS(SEC,DIN(31 DOWNTO 0) BEGIN CASE SEC IS WHEN "000"=>DAOUT<=DIN(3 DOWNTO 0); WHEN "001"=>DAOUT<=DIN(7 DOWNTO 4); WHEN "010"=>DAOUT<=DIN(11 DOWNTO 8); WHEN "011"=>DAOUT<=DIN(15 DOWNTO 12); WHEN "100"=>DAOUT<=DIN(19 DOWNTO 16); WHEN "101"=>DAOUT<=DIN(23 DOWNTO 20); WHEN "110"=>DAOUT<=DIN(27 DOWNTO 24); WHEN "111"=>DAOUT<=DIN(31 DOWNTO 28); WHEN OTHERS=>NULL; END CASE;END PROCESS;11在Quartus II 中对以上模块进展顶层仿真,并且在软件中建立.BDF文件,在文件中对各个模块进展整合连接。得到以下连接图:12五 总结在此次课程设计中,我们做的是利用EDA技术设计数字频率器。在课程设计中我遇到了很多困难和问题,在此,我首先感谢帮助我完成此次课程设计的*教师以及各位同学,是他们在我遇到困难和问题时对我提供了重要指导和帮助。本次实习让我们体味到设计电路、连接电路、调测电路过程中的乐与悲,苦与甜。设计是我们将来必需的技能,这次实习恰恰给我们提供了一个应用自己所学知识的时机,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都对我所学的知识进展了检验。在实习的过程中发现了以前学的数字电路的知识掌握的不牢。同时在设计的过程中,遇到了一些以前没有见到过的元件,但是通过查找资料来学习这些元件的功能和使用。制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,不能急躁,因为是在电脑上调试,比较慢,又要求我们有一个比较正确的调试方法,像把频率调准等等。这又要我们要灵活处理,在不影响试验的前提下可以加快进度,合理的分配时间。在设计控制电路的时候,我们可以连接译码显示和计数电路,这样就加快了完成的进度。最重要的是要熟练地掌握课本上的知识,这样才能对试验中出现的问题进展分析解决。对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆! (13)课程设计成绩评定表成绩评定项 目比例得 分平时成绩百分制记分30%业务考核成绩百分制记分70%总评成绩百分制记分100%评定等级优 良 中 及格 不及格指导教师签名:20 年 月 日