使用VHDL语言进行的100MHZ数字频率计的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《电气工程及其自动化EDA课程设计》
课程设计报告
\
题目:数字频率计的设计
院(系):机电与自动化学院
专业班级:电气工程及其自动化
学生姓名: XXX
学号: 2011XXXXXXX
指导教师: XXX 】
2014年1月6日至2014年1月10日
#
华中科技大学武昌分校
《电气工程及其自动化EDA课程设计》设计任务书
(
目录
摘要 (1)
一.课程设计要求及内容 (1)
主要技术指标 (1)
工作内容及要求 (1)
二数字频率计的基本原理 (1)
数字频率计的组成 (1)
:
数字频率器的原理 (2)
三具体电路模块设计 (2)
100MHz分频器 CLK_GEN的设计 (2)
带时钟使能的十进制计数器CNT10的设计 (3)
32位锁存器REG32B的设计 (5)
测频控制信号发生器TESTCTL的设计 (6)
动态输入编译译码器HC4511的设计 (7)
四数字频率计系统模块的设计 (9)
>
系统模块程序设计及仿真波形 (9)
数字频率计系统顶层设计 (10)
五心得体会 (13)
课程设计成绩评定表 (14)
(
摘要
数字频率计是一种用十进制数字显示被测信号频率的一种数字测量仪器,其功能是测量正弦信号,方波信号,尖脉冲信号以及其他各种单位时间内变化的物理量,因此已经成为电路设计的常用元器件之一,有它不可替代的地位。
在电子技术中,频率与许多电参量的设计测量方案,测量结果都有着十分紧密的关系,因此频率的测量就显得更为重要。
测量频率的方法有很多种,其中数字计数器测量频率具有精度高,使用方便,测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
其原理为通过测量一定闸门时间内信号的脉冲个数。
本文阐述了利用VHDL语言在CPLD器件的基础上设计一个简单的数字频率计的过程。
采用VHDL编程技术设计实现的数字频率计,除被测信号的整形部分,键输入部分和数码显示部分以外,其余全部在一片集成电子芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。
关键词:数字频率计,测量,VHDL语言,设计
一.课程设计要求及内容
主要技术指标
】
(1)可测量范围从1Hz到Hz;
(2)8位频率计输入端分别为:系统基准时钟100MHZ(CLK)、被测信号输入(Fx);及输出端为(DOUT),皆采用BCD码计数方式;
(3)将被测信号的频率直接送到8个LED显示。
工作内容及要求
(1)根据任务的要求进行方案构思,初选方案,绘制系统原理框图并与指导
教师讨论,方案定稿。
(2)根据选定的方案,在QuartusII软件中,编写各个模块VHDL源程序;
并上机调试通过,记录系统各个模块仿真结果;
(3)对各个模块进行综合仿真,调试,实现数字频率计的基本功能和硬件实
现;
(4)记录仿真结果中出现的问题及解决办法。
》
二数字频率计的基本原理
数字频率计的组成
本课程设计设计的数字频率计正常工作时,可测量0Hz-100MHz的频率。
设
(1)
计系统是有五部分组成:一个100MHz分1Hz的分频器CLK_GEN,一个测频控制信号发生器TESTCTL,带时钟使能的十进制计数器CNT10(设计中需要八个),一个32位锁存器REG32B,以及动态输入译码器HC4511电路设计(设计中需要八个)。
数字频率器的原理
数字频率计的基本原理是用一个频率稳定度高的频率源作为基准信号,对比测量出其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为一秒。
闸门时间可以根据取值大于或小于1秒都可以。
闸门时间越长,则每测一次频率的间隔就越长,闸门时间越短,测得的频率值刷新就越快,单侧的的频率精度就越受影响。
一般取1秒作为闸门时间。
其原理框图如下:。
设计的数字频率计工作过程如下:被测信号接入频率计的输入端FSIN,下载板上100M时钟通过频率计的分频器模块中CLK端口输入,经过分频器的分频,变成1Hz的工作频率提供给测频器。
当被测频率和工作频率进入测频器模块时,测频器TESTCTL工作进行测频,TESTCTL的计数使能信号CLR_CNT产生一个1秒脉宽的周期信号,并对频率集中的十进制计数器CNT10的ENT使能端进行同步控制。
当ENT高电平时允许计数,低电平时停止计数,并保持其所记得脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进
32位锁存器REG32B中,数字频率计的源程序综合以上模块并且通过对硬件的链接,实现8个数码管显示出计数值。
三具体电路模块设计
100MHz分频器 CLK_GEN的设计
100MHz工作时钟接入分频器,用一个计数器进行计数,计满二分之一100M 个,CLK信号取反一次,分频后频率变为1Hz,周期由1/0秒变大为1秒,满足数字频率计时序工作频率的要求。
分频器程序设计如下:
--------------------------------------------------------------------- 100MHz分频器:
---------------------------------------------------------------------:
library ieee;
use 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 ;
begin
if clk'event and clk='1' then
if cnter= then cnter:=0;
else cnter:=cnter+1;
end if;
~
if cnter< then clk2<='1';
else clk2<='0';end if;
end if;
end process;
newclk<=not clk2;
end architecture art;
分频器编译仿真波形如下:
(
带时钟使能的十进制计数器CNT10的设计
计数器模块是对输入脉冲信号的频率进行测量技术的部分,有八个带时钟使能的十进制计数器组成。
其中ENA为计数器选通控制信号,CLR为计数清零信号。
在计数清零信号清零后,当使能信号ENA有效时,开始对待测信号进行计数。
如果使能信号ENA的宽度为1时,那么计数结果就为待测信号的频率。
(3)
带时钟使能的十进制计数器程序设计如下:
---------------------------------------------------------------------带时钟使能的十进制计数器:
---------------------------------------------------------------------@
LIBRARY IEEE;
USE 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)
32位锁存器REG32B的设计
当锁存信号上升沿到来时,将计数器的计数值锁存。
设置锁存器的好处是显示的数据稳定,不会由于周期的清零信号而闪烁。
锁存器的位数应该和计数器一样,都是32位。
寄存器在计数结束后,利用触发器的上升沿把最新的频率测量值保存起来,这样在计数过程中不必一直看数码显示管,显示器将最终的频率读数定期进行更新,其输出将作为动态扫描电路的输入。
32位锁存器程序设计如下:
》
--------------------------------------------------------------------- 32位锁存器:
---------------------------------------------------------------------Library ieee;
use 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)
测频控制信号发生器TESTCTL的设计
频率测量的基本原理就是计算每秒钟内待测信号的脉冲个数。
这就要求TESTCTL的计数使能信号TATEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当TSTEN高电平时,允许计数,低电平时停止计数,并保持所记的数。
在停止计数期间,首先需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进32位锁存器REG32B中,并有外部的译码器译出并稳定显示。
锁存信号之后,必须有一清零信号CLR_CNT对计数器进行清零,为下一秒做好准备。
测频控制信号发生器程序设计如下:
(
---------------------------------------------------------------------
测频控制信号发生器:
---------------------------------------------------------------------Library ieee;
use 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)
~
动态输入编译译码器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端口。
动态输入编译译码器程序设计如下:
---------------------------------------------------------------------
动态输入编译译码器:
---------------------------------------------------------------------library ieee;
%
use 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)
四数字频率计系统模块的设计
系统模块程序设计及仿真波形
系统模块实现对各个模块的整合,实现整个系统的功能。
FSIN为输入被测频率信号,CLK为分频器输出的1Hz工作频率,DOUT为数字频率计输出的频率测试结果。
在整个模块的设计中,需要使用以上各个模块的功能和应用,通过系统模块程序的子程序调用,实现对整个系统的控制。
数字频率计系统模块源程序设计如下:
---------------------------------------------------------------------
数字频率计:
---------------------------------------------------------------------$
LIBRARY IEEE;
USE 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;
数字频率计系统模块编译仿真波形如下:
~
数字频率计系统顶层设计
数字频率及系统顶层设计需要一个在工作时钟下,将系统模块输出的32位DOUT信号转化为8个4位信号,并且送入显示译码器HC4511中进行显示。
其程序设计如下:
---------------------------------------------------------------------
信号转化模块:
---------------------------------------------------------------------LIBRARY IEEE;
(
USE
USE
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)
课程设计成绩评定表
(14)。