武汉理工自动化能拓训练说明书.docx
- 文档编号:10205221
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:23
- 大小:207.48KB
武汉理工自动化能拓训练说明书.docx
《武汉理工自动化能拓训练说明书.docx》由会员分享,可在线阅读,更多相关《武汉理工自动化能拓训练说明书.docx(23页珍藏版)》请在冰豆网上搜索。
武汉理工自动化能拓训练说明书
学号:
0121111360630
能力拓展训练
题目
频率计设计
学院
自动化学院
专业
自动化专业
班级
姓名
指导教师
孙晓明
2014年7月4日
能力拓展训练任务书
学生姓名:
专业班级:
指导教师:
工作单位:
自动化学院
题目:
频率计设计
初始条件:
计算机、Max+plusII/QuartusII、EDA实验箱。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
设计一个能测量方波信号的频率计,测量结果用十进制数显示,测量范围是1~100KHZ,分成两个频段,即1~999HZ,1~100KHZ,用三位数码管显示测量频率,分别用两个发光二极管LED显示表示单位(亮绿灯表示HZ,亮红灯表示KHZ)。
提高部分:
具有超量度报警功能,在超出目前量程档的测量范围时,发出灯光和音响信号。
任务安排:
(1)设计任务及要求分析
(2)方案比较及认证说明
(3)系统原理阐述,写出设计方案结构图。
(4)软件设计课题需要说明:
软件思想,流程图,源程序及程序注释
(5)调试记录及结果分析
(6)总结
(7)参考资料5篇以上
(8)附录:
程序清单
时间安排:
6月27日-6月28日:
安排设计任务;收集资料;方案选择
6月29日-6月30日:
程序设计
7月1日:
实验室内调试程序并演示
7月2日-7月3日:
撰写报告
7月4日:
交能力拓展训练报告
主要参考资料:
[1]谭会生,张昌凡.EDA技术及应用.西安:
西安电子科技大学出版社.2004
[2]孙晓明.EDA实验指导书.武汉:
武汉理工大学教材中心,2007.1
指导教师签名:
孙晓明2014年7月4日
系主任(或责任教师)签名:
年月日
摘要
数字频率计是一种基本的测量仪器。
它被广泛应用与航天、电子、测控等领域。
它是用数字显示被测信号的频率,被测信号可以是正弦波,方波或其它周期性变化的信号。
如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率以及产品的计件等等。
本次能力拓展训练是以复杂可编程逻辑器件(CPLD)为载体,以硬件描述语言(VHDL)为主要的描述方式,以EDA软件为主要开发软件的设计了测量频率范围是1-100KHz的数字频率计并通过数码管显示其频率。
VHDL是一种硬件描述语言,它可以对电子电路和系统的行为进行描述,结合相关的软件工具,可以得到所期望的实际电路与系统。
使用VHDL语言描述的电路,可以进行综合和仿真。
CPLD它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计。
利用QuartusII集成开发环境进行编辑、综合、波形仿真,并下载到CPLD器件中,经实际电路测试,仿真和实验结果表明,该频率计有较高的实用性和可靠性。
关键词:
频率计CPLDVHDL数码管
目录
1设计任务及要求分析1
1.1设计任务1
1.2设计要求1
2方案设计2
2.1设计思路2
2.2方案比较2
2.2.1CPLD方案2
2.2.2单片机方案3
2.3方案选择3
3频率计硬件设计电路3
3.1顶层电路原理图设计3
3.2模块设计5
3.2.1控制计数器及控制锁存模块5
3.2.2锁存器模块6
3.2.3数码管段选模块6
3.2.4译码器模块7
3.2.5十进制异步计数器模块7
4频率计软件设计8
4.1控制计数器及控制锁存模块的VHDL8
4.2锁存器模块的VHDL9
4.3数码管段选模块的VHDL10
4.4译码器模块的VHDL11
4.5十进制异步计数器模块VHDL12
5各模块波形仿真13
5.1控制计数器及控制锁存模块13
5.2锁存器模块14
5.3数码管段选模块14
5.4译码器模块15
5.5十进制异步计数器模块15
6心得体会16
参考文献:
17
附录:
总电路原理图18
1设计任务及要求分析
1.1设计任务
设计一个能测量方波信号的频率计,测量结果用十进制数显示,测量范围是1~100KHZ,分成两个频段,即1~999HZ,1~100KHZ,用三位数码管显示测量频率,分别用两个发光二极管LED显示表示单位(亮绿灯表示HZ,亮红灯表示KHZ)。
并且具有超量度报警功能,在超出目前量程档的测量范围时,发出灯光和音响信号。
1.2设计要求
(1)设计任务及要求分析
(2)方案比较及认证说明
(3)系统原理阐述,写出设计方案结构图。
(4)软件设计课题需要说明:
软件思想,流程图,源程序及程序注释
(5)调试记录及结果分析
(6)总结
(7)参考资料5篇以上
(8)附录:
程序清单
2方案设计
2.1设计思路
它主要由5个模块组成:
测频控制信号发生器电路、计数模块电路、锁存器、译码驱动电路、数码管显示电路。
当系统正常工作时,脉冲发生器提供标准1Hz的方波输入信号,经过测频控制信号发生器进行信号的变换,产生计数信号。
计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码显示管上可以显示的十进制结果。
在数码显示管上可以看到计数结果。
设置数码管显示控制开关,用三位数码管显示六位测量频率,拨位开关置“0”,显示低三位,置“1”,表示高三位。
用LED显示表示单位,亮绿灯表示Hz,亮红表示KHz。
2.2方案比较
2.2.1CPLD方案
本方案以可编程逻辑器件CPLD为核心,主要有待测信号、测频控制信号发生器电路、计数模块电路、锁存器、译码驱动电路、数码管显示电路等六大部分。
其原理框图如图2-1所示:
图2-1CPLD方案原理框图
2.2.2单片机方案
本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描法把测出的数据送到数码管显示电路显示。
其原理框图如图2-2所示:
图2-2单片机方案原理框图
2.3方案选择
CPLD方案是以CPLD(复杂可编程逻辑器件)为核心芯片,采用VHDL语言编程,采用“自顶向下”的设计方法,先设计好模块以后,再将各模块组合成总原理图,不仅可以进行波形仿真,还可以下载到芯片在开发板上进行调试;单片机方案原理图虽然比较简单,但编程相对复杂,并且从处理速度、执行效率、总线宽度、体积、功耗等方面考虑,CPLD的优势比较明显,因此选择CPLD方案。
3频率计硬件设计电路
3.1顶层电路原理图设计
顶层电路原理图如图3-1所示:
图3-1顶层电路原理图
顶层电路原理图说明:
频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。
Testpl的计数使能信号tsten能产生一个1秒脉冲宽的周期信号,并对频率计的每一计数器cnt10的使能ena进行同步控制。
当tsten高电平时,允许计数;为低电平时停止计数,并保持其计数结果。
在停止计数期间,首先需要一个锁存器load的上跳沿将计数器前一秒的计数值锁存进锁存器reg32b中。
由clr_cnt来控制计数器的清零端在每个时钟的上升沿,锁存器reg32b,将指令din[23..0]逻辑左移相应位后输出。
在停止计数期间,首先需要一个锁存器load的上跳沿将计数器前一秒的计数值锁存进锁存器reg32b中,在rst为高电平时锁存器无效,当rst为低电平时开始进行锁存。
由指令din[23..0]逻辑左移相应位后由dout[23..0]输出到seltime。
当k为低电平时控制数码管使其显示待测信号的低三位,当K为高电平时控制数码管使其显示待测信号高三位。
把已经经过锁存器的输出信号送到s[23..0]端口。
daout[3..0]输出端连接deled模块,sel[2..0]连接试验箱上对数码管进行位选。
s[3..0]端输入二进制表示的地址,通过该模块转换为单线选择信号,来控制对应的数码管显示的数字。
如输入的test信号的频率为800Hz,此时若设置量程档控制开关K=0时,选择的是1~999Hz量程档,被测信号频率值为数码管显示的数值,即单位为Hz。
如果输入的test信号的频率为4KHz,此时若设置量程档控制开关K=1时,选择的是1~100KHz量程档,被测信号的频率值为数码管显示的数值×1000,即单位为KHz;此时若设置的量程档控制开关K=0时,选择的是1~999Hz量程档,被测信号的频率值超过其量程,警报器工作,发出警报,显示报错。
3.2模块设计
3.2.1控制计数器及控制锁存模块
testpl模块即控制计数器几控制锁存模块如图3-2所示:
图3-2控制计数器及控制锁存模块
频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。
Testpl的计数使能信号tsten能产生一个1秒脉冲宽的周期信号,并对频率计的每一计数器cnt10的使能ena进行同步控制。
当tsten为高电平时,允许计数;为低电平时停止计数,并保持其计数结果。
在停止计数期间,首先需要一个锁存器load的上跳沿将计数器前一秒的计数值锁存进锁存器reg32b中。
由clr_cnt来控制计数器的清零端。
3.2.2锁存器模块
reg32b模块即锁存器模块如图3-3所示:
图3-3锁存器模块
在每个时钟的上升沿,锁存器reg32b,将指令din[23..0]逻辑左移相应位后输出。
在停止计数期间,首先需要一个锁存器load的上跳沿将计数器前一秒的计数值锁存进锁存器reg32b中,在rst为高电平时锁存器无效,当rst为低电平时开始进行锁存。
由指令din[23..0]逻辑左移相应位后由dout[23..0]输出到seltime。
3.2.3数码管段选模块
seltime模块即数码管段选模块如图3-4所示:
图3-4数码管段选模块
当k为低电平时控制数码管使其显示待测信号的低三位,当k为高电平时控制数码管使其显示待测信号高三位。
把已经经过锁存器的输出信号送到s[23..0]端口。
daout[3..0]输出端连接deled模块,sel[2..0]连接试验箱上对数码管进行位选。
3.2.4译码器模块
deled模块即译码器模块如图3-5所示:
图3-5译码器模块
译码器的输入为4位二进制代码,由译码器把二进制表示的地址转换为单线选择信号。
该实验中s[3..0]端输入二进制表示的地址,通过该模块转换为单线选择信号,来控制对应的数码管显示的数字。
如当输入为“0000”则对应的输出为“01111111”对应数码管的值为“8”。
3.2.5十进制异步计数器模块
cnt10模块是一个带时钟使能的异步二进制加法器,计数范围0-9,每当时钟信号或复位信号有跳变时激活进程。
如果此时复位信号clk有效,计数器被复位,输出计数为0;如果复位信号无效,而时钟信号clk出现上升沿,并且计数器的使能控制信号en有效,则计数器自动加1,实现计数功能。
该实验有几个计数器相连carry_out与下一个计数器的clk相连当计数器计满一个周期则会触发下一个计数器的开始计数。
cnt10模块即十进制异步计数器模块如图3-6所示:
图3-6十进制异步计数器模块
4频率计软件设计
4.1控制计数器及控制锁存模块的VHDL
生成testctl模块即控制计数器及控制锁存模块的VHDL语言描述如
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytestctlis
port(clk:
instd_logic;
tsten:
outstd_logic;
clr_cnt:
outstd_logic;
load:
outstd_logic);
endtestctl;
architecturebehavoftestctlis
signaldiv2clk:
std_logic;
begin
process(clk)
begin
if(clk'eventandclk='1')then
div2clk<=notdiv2clk;
endif;
endprocess;
process(clk,div2clk)
begin
if(clk='0'anddiv2clk='0')then
clr_cnt<='1';
else
clr_cnt<='0';
endif;
endprocess;
load<=notdiv2clk;
tsten<=div2clk;
endbehav;
4.2锁存器模块的VHDL
生成reg32b模块即锁存器模块的VHDL语言描述如下:
libraryieee;
useieee.std_logic_1164.all;
entityreg32bis
port(load:
instd_logic;
rst:
instd_logic;
din:
instd_logic_vector(23downto0);
dout:
outstd_logic_vector(23downto0));endreg32b;
architecturebehavofreg32bis
signaldata:
std_logic_vector(23downto0);
begin
process(rst,load,data)
begin
ifrst='1'then
data<=(others=>'0');
elsif(load'eventandload='1')then
data<=din;
endif;
dout<=data;
endprocess;
endbehav;
4.3数码管段选模块的VHDL
生成seltime模块即数码管段选模块的VHDL语言描述如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityseltimeis
port(clk:
instd_logic;
din:
instd_logic_vector(23downto0);
k:
instd_logic;
daout:
outstd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0));endseltime;
architecturebehavofseltimeis
signalsec:
std_logic_vector(2downto0);
begin
process(clk)
begin
if(clk'eventandclk='1')then
if(sec="010")then
sec<="000";
else
sec<=sec+1;
endif;
endif;
endprocess;
process(sec,din(23downto0))
begin
ifk='0'thencasesecis
when"000"=>daout<=din(3downto0);
when"001"=>daout<=din(7downto4);
when"010"=>daout<=din(11downto8);
whenothers=>daout<="XXXX";
endcase;
elsifk='1'thencasesecis
when"000"=>daout<=din(15downto12);
when"001"=>daout<=din(19downto16);
when"010"=>daout<=din(23downto20);
whenothers=>daout<="XXXX";
endcase;
endif;
endprocess;
sel<=sec;
endbehav;
4.4译码器模块的VHDL
生成deled模块即译码器模块的VHDL语言描述如下:
libraryieee;
useieee.std_logic_1164.all;
entitydeledis
port(s:
instd_logic_vector(3downto0);
a,b,c,d,e,f,g,h:
outstd_logic);
enddeled;
architecturebehavofdeledis
signaldata:
std_logic_vector(3downto0);
signaldout:
std_logic_vector(7downto0);begin
data<=s;
process(data)
begin
casedatais
when"0000"=>dout<="00111111";
when"0001"=>dout<="00000110";
when"0010"=>dout<="01011011";
when"0011"=>dout<="01001111";
when"0100"=>dout<="01100110";
when"0101"=>dout<="01101101";
when"0110"=>dout<="01111101";
when"0111"=>dout<="00000111";
when"1000"=>dout<="01111111";
when"1001"=>dout<="01101111";
when"1010"=>dout<="01110111";
when"1011"=>dout<="01111100";
when"1100"=>dout<="00111001";
when"1101"=>dout<="01011110";
when"1110"=>dout<="01111001";
when"1111"=>dout<="01110001";
whenothers=>dout<="00000000";
endcase;
endprocess;
h<=dout(7);
g<=dout(6);
f<=dout(5);
e<=dout(4);
d<=dout(3);
c<=dout
(2);
b<=dout
(1);
a<=dout(0);
endbehav;
4.5十进制异步计数器模块VHDL
生成cnt10模块即十进制异步计数器模块的VHDL语言描述如下所示:
libraryieee;
useieee.std_logic_1164.all;
entitycnt10is
port(clk:
instd_logic;
clr:
instd_logic;
ena:
instd_logic;
cq:
outintegerrange0to9;
carry_out:
outstd_logic);
endcnt10;
architecturebehavofcnt10is
signalcqi:
integerrange0to9;
begin
process(clr,clk,ena)
begin
if(clr='1')then
cqi<=0;
elsif(clk'eventandclk='1')then
if(ena='1')then
if(cqi=9)then
cqi<=0;
carry_out<='1';
else
cqi<=cqi+1;
carry_out<='0';
endif;
endif;
endif;
endprocess;
cq<=cqi
endbehav
5各模块波形仿真
5.1控制计数器及控制锁存模块
testctl模块的仿真波形如图5-1所示:
图5-1testctl模块的仿真波形
当clk一个上升沿到来时load电平就会改变知道下一个上升沿的到来进行下一次的改变,而tsten刚好与load的波形相反这就验证了模块功能当tsten为高电平时,允许计数;为低电平时停止计数,并保持结果在停止其间即tsten为低电平而load为高电平,通过load将数据锁存起来。
5.2锁存器模块
reg32b模块的仿真波形如图5-2所示:
图5-2reg32b模块的仿真波形
rst为高电平时寄存器进行清零操作,当rst为低电平时锁存器进行工作。
当rst为低电平且当load上升沿到来时对输入数据din[23..0]进行锁存。
仿真波形图证明了程序实现了模块的功能。
5.3数码管段选模块
seltime模块的仿真波形如图5-3所示:
图5-3seltime模块的仿真波形
当k为低电平时控制数码管使其显示待测信号的低三位,当K为高电平时控制数码管使其显示待测信号高三位。
把已经经过锁存器的输出信号送到s[23..0]端口。
daout[3..0]输出端连接deled模块,sel[2..0]连接试验箱上对数码管进行位选。
5.4译码器模块
deled模块的仿真波形如图5-4所示:
图5-4deled模块的仿真波形
该实验中s[3..0]端输入二进制表示的地址,通过该模块转换为单线选择信号,来控制对应的数码管显示的数字。
如当输入为“0000”则对应的输出为“01111111”对应数码管的值为“8”。
5.5十进制异步计数器模块
cnt10模块的仿真波形如图5-5所示:
图5-5cnt10的仿真波形
cnt10模块主要是实现计数功能,记住每秒内待测信号的脉冲个数。
由波形图可知当使能端为“0”时,即不实现计数功能但保持已经计的数;当使能端的值为“1”时,并且clr不为高电平在每一个时钟信号clk上升沿到来时都正常计数,计数范围为0-9,当clr为高电平时进行清零。
当计数到9时carry_out会产生一个脉冲信号,来触发下一个计数器。
波形仿真与所要实现的功能相符合。
6心得体会
在这次能力拓展训练中,我不仅复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力,并从根本上了解了VHDL语言的一些基本用法,应用了原来不会或者不熟练的句型,如if句,case句等,也学会了一些基本功能的实现方法,如分频,状态控制等等,从另外一个角度重新审视了上学期完全从硬件角度出发的电路设计,明白了软硬件之间的交互。
刚开始着手老师分配的课题任务时,感觉无从下手,因为老师要求用EDA技术相关软件实现。
虽然之前选修过EDA相关课程,在设计的过程中发现了对以前学的数字电路的知识掌握的不牢。
但是,通过自己查资料,和同学讨论以后首先确定了设计方案,之后用VHDL语言设计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工 自动化 训练 说明书