资源描述
《电气工程及其自动化EDA课程设计》
课程设计报告
题 目: 数字频率计的设计
院 (系): 机电与自动化学院
专业班级: 电气工程及其自动化
学生姓名: XXX
学 号: 2011XXXXXXX
指导教师: XXX
2014年1月6日至2014年1月10日
华中科技大学武昌分校
《电气工程及其自动化EDA课程设计》设计任务书
一、设计题目
数字频率计的设计
二、设计主要内容
1.设计目的:
(1)巩固和加深对《EDA技术及应用》及《数字电子技术》基本知识的理解,提高学生综合运用本课程所学知识的能力;
(2)培养学生根据课题需要选学参考书籍、查阅手册、图表和文献资料的自学能力;通过独立思考,深入钻研有关问题,学会自己分析解决问题的方法;
(3)以学生的动手为主要内容,培养学生系统软、硬件设计、调试的基本思路、方法和技巧,并能熟练使用集成软件QuartusⅡ进行有关电路设计与分析;
(4)掌握FPGA器件的正确使用方法,提高学生动手能力,能在教师指导下,完成课程任务;
(5)培养严肃认真的工作作风和科学态度。通过课程设计实践,帮助学生逐步建立正确的生产观念、工程观念和全局观点。
2.设计内容:
(1)8位频率计输入端分别为:系统基准时钟100MHZ(CLK)、被测信号输入(Fx);及输出端为(DOUT),皆采用BCD码计数方式;
(2)可测量范围从1Hz到99999999Hz;
(3)将被测信号的频率直接送到8个LED显示;
也可选择其它题目,但分量不能低于上述题目。
三、原始资料
1.频率测量方法的基本原理是计算每秒内待测信号的脉冲个数,这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一个计数器CNT10的ENA使能端进行同步控制。当TSTEN高电平时,允许计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定的显示。此方法测量精度高。
数字频率计由多频信号源模块、测频控制模块、CNT计数模块、32位锁存器模块及频率显示模块组成,其框图为图1所示:
信
号
源
计数模块
锁
存
器
显
示
器
控制信号
100MHzCLK
1Hz
用于测量
用于扫描显示
被测信号fsin
TESTEN
LOAD
CLR
产生1MHz信号
产生多种频率输出
图1 数字频率计组成框图
2.在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过;
3.下载顶层文件到目标芯片;
4.将被测信号fx输入到系统,数码管将会显示被测信号频率。
四、要求的设计成果
1、基本要求:
在QuartusII软件中新建原理图文件,编译,仿真,锁定管脚并下载到目标芯片。将被测信号fx输入到系统,数码管将会显示被测信号频率。
(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 带时钟使能的十进制计数器CNT10的设计…………………(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)8位频率计输入端分别为:系统基准时钟100MHZ(CLK)、被测信号输入(Fx);及输出端为(DOUT),皆采用BCD码计数方式;
(3)将被测信号的频率直接送到8个LED显示。
1.2 工作内容及要求
(1)根据任务的要求进行方案构思,初选方案,绘制系统原理框图并与指导教师讨论,方案定稿。
(2)根据选定的方案,在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过,记录系统各个模块仿真结果;
(3)对各个模块进行综合仿真,调试,实现数字频率计的基本功能和硬件实现;
(4)记录仿真结果中出现的问题及解决办法。
二 数字频率计的基本原理
2.1 数字频率计的组成
本课程设计设计的数字频率计正常工作时,可测量0Hz-100MHz的频率。设
(1)
计系统是有五部分组成:一个100MHz分1Hz的分频器CLK_GEN,一个测频控制信号发生器TESTCTL,带时钟使能的十进制计数器CNT10(设计中需要八个),一个32位锁存器REG32B,以及动态输入译码器HC4511电路设计(设计中需要八个)。
2.2 数字频率器的原理
数字频率计的基本原理是用一个频率稳定度高的频率源作为基准信号,对比测量出其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为一秒。闸门时间可以根据取值大于或小于1秒都可以。闸门时间越长,则每测一次频率的间隔就越长,闸门时间越短,测得的频率值刷新就越快,单侧的的频率精度就越受影响。一般取1秒作为闸门时间。其原理框图如下:
设计的数字频率计工作过程如下:被测信号接入频率计的输入端FSIN,下载板上100M时钟通过频率计的分频器模块中CLK端口输入,经过分频器的分频,变成1Hz的工作频率提供给测频器。当被测频率和工作频率进入测频器模块时,测频器TESTCTL工作进行测频,TESTCTL的计数使能信号CLR_CNT产生一个1秒脉宽的周期信号,并对频率集中的十进制计数器CNT10的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 cnter: integer range 0 to 99999999;
begin
if clk'event and clk='1' then
if cnter=99999999 then cnter:=0;
else cnter:=cnter+1;
end if;
if cnter<50000000 then clk2<='1';
else clk2<='0';end if;
end if;
end process;
newclk<=not clk2;
end architecture art;
分频器编译仿真波形如下:
3.2 带时钟使能的十进制计数器CNT10的设计
计数器模块是对输入脉冲信号的频率进行测量技术的部分,有八个带时钟使能的十进制计数器组成。其中ENA为计数器选通控制信号,CLR为计数清零信号。
在计数清零信号清零后,当使能信号ENA有效时,开始对待测信号进行计数。如果使能信号ENA的宽度为1时,那么计数结果就为待测信号的频率。
(3)
带时钟使能的十进制计数器程序设计如下:
---------------------------------------------------------------------
带时钟使能的十进制计数器:CNT10.vhd
---------------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CNT10 IS
PORT (CLK:IN STD_LOGIC;
CLR,ENA: IN STD_LOGIC;
CQ:OUT INTEGER RANGE 0 TO 15;
CO:OUT STD_LOGIC);
END ENTITY CNT10;
ARCHITECTURE ART OF CNT10 IS
SIGNAL CQI:INTEGER RANGE 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;
十进制计数器编译仿真波形如下:
(4)
3.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位锁存器编译仿真波形图如下:
(5)
3.4 测频控制信号发生器TESTCTL的设计
频率测量的基本原理就是计算每秒钟内待测信号的脉冲个数。这就要求TESTCTL的计数使能信号TATEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。当TSTEN高电平时,允许计数,低电平时停止计数,并保持所记的数。在停止计数期间,首先需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进32位锁存器REG32B中,并有外部的译码器译出并稳定显示。锁存信号之后,必须有一清零信号CLR_CNT对计数器进行清零,为下一秒做好准备。
测频控制信号发生器程序设计如下:
---------------------------------------------------------------------
测频控制信号发生器: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_cnt: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_cnt<='1';
else clr_cnt<='0';
end if;
end process;
load<=not div2clk; tsten<=div2clk;
end architecture art;
测频控制信号发生器编译仿真波形图如下:
(6)
3.5 动态输入编译译码器HC4511的设计
分别将寄存器的输出端DATA(0至3),DATA(4至7),DATA(8至11),DATA(12至15),DATA(16至19),DATA(20至23),DATA(24至27),DATA(28至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:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END ENTITY FREQ;
ARCHITECTURE ART OF FREQ IS
COMPONENT CNT10 IS
PORT(CLK,CLR,ENA:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
CO:OUT STD_LOGIC);
END COMPONENT CNT10;
COMPONENT REG32B IS
port(lk: in std_logic;
din: in std_logic_vector(31 downto 0);
dout: out std_logic_vector(31 downto 0));
END COMPONENT REG32B;
COMPONENT TESTCTL IS
port( clk:in std_logic;
tsten:out std_logic;
clr_cnt:out std_logic;
load:out std_logic);
END COMPONENT 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);
BEGIN
U0:TESTCTL PORT MAP(CLK=>CLK,TSTEN=>SE,CLR_CNT=>SC,LOAD=>SL);
U1:CNT10 PORT MAP(CLK=>FSIN,CLR=>SC,ENA=>SE,CQ=>SD(3 DOWNTO 0),CO=>S1);
U2:CNT10 PORT MAP(CLK=>S1,CLR=>SC,ENA=>SE,CQ=>SD(7 DOWNTO 4),CO=>S2);
(9)
U3:CNT10 PORT MAP(S2,SC,SE,SD(11 DOWNTO 8),S3);
U4:CNT10 PORT MAP(S3,SC,SE,SD(15 DOWNTO 12),S4);
U5:CNT10 PORT MAP(S4,SC,SE,SD(19 DOWNTO 16),S5);
U6:CNT10 PORT MAP(S5,SC,SE,SD(23 DOWNTO 20),S6);
U7:CNT10 PORT MAP(S6,SC,SE,SD(27 DOWNTO 24),S7);
U8:CNT10 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 IS
SIGNAL 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技术设计数字频率器。在课程设计中我遇到了很多困难和问题,在此,我首先感谢帮助我完成此次课程设计的XX老师以及各位同学,是他们在我遇到困难和问题时对我提供了重要指导和帮助。本次实习让我们体味到设计电路、连接电路、调测电路过程中的乐与悲,苦与甜。
设计是我们将来必需的技能,这次实习恰恰给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都对我所学的知识进行了检验。在实习的过程中发现了以前学的数字电路的知识掌握的不牢。同时在设计的过程中,遇到了一些以前没有见到过的元件,但是通过查找资料来学习这些元件的功能和使用。制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,不能急躁,因为是在电脑上调试,比较慢,又要求我们有一个比较正确的调试方法,像把频率调准等等。这又要我们要灵活处理,在不影响试验的前提下可以加快进度,合理的分配时间。在设计控制电路的时候,我们可以连接译码显示和计数电路,这样就加快了完成的进度。最重要的是要熟练地掌握课本上的知识,这样才能对试验中出现的问题进行分析解决。
对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆!
(13)
课程设计成绩评定表
成
绩
评
定
项 目
比例
得 分
平时成绩(百分制记分)
30%
业务考核成绩(百分制记分)
70%
总评成绩(百分制记分)
100%
评定等级
优 良 中 及格 不及格
指导教师(签名):
20 年 月 日
(14)
展开阅读全文