EDA简易数字频率计课设报告Word文件下载.docx
- 文档编号:21394212
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:12
- 大小:385.93KB
EDA简易数字频率计课设报告Word文件下载.docx
《EDA简易数字频率计课设报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《EDA简易数字频率计课设报告Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
clk为1HZ,待测信号sig为10HZ
1.5引脚图
2.设计思路
频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。
这就要求测频控制信号发生器testpl的计数使能信号tsten能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的使能端en进行同步控制。
当tsten为高电平"
1"
时,允许计数;
为低电平"
0"
时停止计数,并保持其计数结果。
在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前1秒种的计数值锁存进16位锁存器reg16b中。
锁存信号之后,必须有一个清零信号clr_cnt对计数器进行清零,为下1秒的计数操作做准备。
,然后由外部数码管控制器ledcom控制的7段译码器ymq译出,并稳定显示。
3.模块划分
3.1测频控制信号发生器testpl模块:
输入端clk收到1Hz信号后,其输出端testen控制各个cnt10的使能,clr_cnt控制各个cnt10的清零,load控制锁存器内数据的输出。
仿真图如下:
3.2十进制计数器cnt10模块:
有一时钟使能输入端en,用于锁定计数值。
当高电平"
时计数允许计数,低电平"
时禁止计数。
多位十进制计数器时,最低位的计数器的clk端输入被测信号,各计数器的进位输出端c10将信号输到下一位十进制计数器cnt10的输入端clk,最高位十进制计数器cnt10的进位输出端c10不处理。
3.316位锁存器reg16b模块:
将已有16位bcd码存在于此模块的输入口din[15..0],在信号load的上升沿后即被锁存到寄存器reg16b的内部,并由reg16b的输出端dout[15..0]输出,设置锁存器的好处是,数码管上显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
。
3.4数码管控制器ledcom模块:
两个输入端一个为datain[15..0],另一个为数码管显示选择的扫描频率输入端clk,输出端为数码管选择信号com[3..0]和对应显示的数码管的BCD码信号端dataout[3..0],数码管显示选择随扫描频率clk循环变化,实现稳定显示。
3.5译码器ymq模块:
输入端d_in[3..0]将接收BCD码信号,译码后输出端d_out[7..0]输出8为7段数码管信号,其中输出的第8位均为高电平"
可以使四个数码管的小数点不显示。
经译码器的处理输出后数码管显示相应的数值。
4.VHDL顶层文件:
libraryieee;
useieee.std_logic_1164.all;
entitylxis
port(clk:
instd_logic;
led:
outstd_logic_vector(7downto0);
ledc:
outstd_logic_vector(2downto0));
endlx;
architectureartoflxis
--十进制计数器
componentcnt10--待调用的有时钟使能的十进制计数器端口定义
port(clk,clr,en:
q:
outstd_logic_vector(3downto0);
c10:
outstd_logic);
endcomponent;
--16位锁存器
componentreg16b--待调用的32位锁存器端口定义
port(load:
din:
instd_logic_vector(15downto0);
dout:
outstd_logic_vector(15downto0));
--测频控制器
componenttestpl--待调用的测频控制信号发生器端口定义
instd_logic;
tsten:
outstd_logic;
clr_cnt:
load:
outstd_logic);
--数码管选择器
componentledcom--待调用的数码管选择器端口定义
port(clk:
datain:
dataout:
sel:
--译码器
componentymq--待调用的译码器端口定义
port(d_in:
instd_logic_vector(3downto0);
d_out:
outstd_logic_vector(7downto0));
signalclk1,clk2,clk3:
std_logic;
--clk1为1Hz信号,clk2为被测信号,clk3为数码管扫描信号
signaltsten,clr,load:
signalc1,c2,c3,c4:
signalqout,rout:
std_logic_vector(15downto0);
signaldatao:
std_logic_vector(3downto0);
begin
u0:
testplportmap(clk1,tsten,clr,load);
u1:
cnt10portmap(clk2,clr,tsten,qout(3downto0),c1);
u2:
cnt10portmap(c1,clr,tsten,qout(7downto4),c2);
u3:
cnt10portmap(c2,clr,tsten,qout(11downto8),c3);
u4:
cnt10portmap(c3,clr,tsten,qout(15downto12),c4);
u5:
reg16bportmap(load,qout(15downto0),rout);
u6:
ledcomportmap(clk3,rout,datao,ledc);
u8:
ymqportmap(datao,led);
endart;
5.心得体会
这次课程设计中,我不仅复习巩固了课堂所学的理论知识,提高了对所学知识的综合应用能力,并从根本上了解了VHDL语言的一些基本用法,应用了原来不会或者不熟练的句型,如if句,case句等,也学会了一些基本功能的实现方法,如分频,状态控制等等,从另外一个角度重新审视了上学期完全从硬件角度出发的电路设计,明白了软硬件之间的交互。
通过这个课题,对系统框图、逻辑流程图、状态转移图的设计有了一定的了解。
也懂得了系统的前期设计对于后续的编程和调试的重要性。
本课题采用了自下而上的设计方法,根据系统对硬件的要求,画出系统控制流程图;
然后根据控制流程图,分化模块,利用模块实现功能;
最后进行仿真和调试。
每个成功的背后都要面对无数次的失败,这次课设也不例外。
虽然遇到不少问题与困难,但通过老师以及同学的帮助,都一一得到顺利地解决。
我想这必定会为将来的实践积累宝贵的经验和教训。
总之,这次课设我们都受益匪浅。
整个过程氛围浓厚,本人也态度十分认真,积极向老师和同学求教并在此过程中收获良多,能够进一步了解和使用一门与硬件直接打交道的基本语言对我们将来的学习和工作都会十分有益。
6.五个模块的程序源代码
6.1测频控制信号发生器
libraryieee;
useieee.std_logic_unsigned.all;
entitytestplis
--1Hz信号
--计数器使能信号
--计数器清零信号
--锁存器输出控制信号
endtestpl;
architectureartoftestplis
signaldiv2clk:
std_logic;
process(clk)
begin
ifclk'
eventandclk='
1'
then
div2clk<
=notdiv2clk;
--div2clk为2Hz
endif;
endprocess;
process(clk,div2clk)
if(clk='
0'
anddiv2clk='
)then
clr_cnt<
='
;
--当div2clk与clk同时为零时计数器清零
elseclr_cnt<
--当div2clk处于的高电平时计数器计数
endif;
load<
--锁存器输出与计数器使能信号反相
tsten<
=div2clk;
有时钟使能的十进制计数器
entitycnt10is
--clk:
计数器时钟,clr:
清零信号,en:
计数使能信号
--q:
4位计数结果输出
--计数进位
endcnt10;
architectureartofcnt10is
signalcqi:
process(clk,clr)
ifclr='
thencqi<
="
0000"
--当输入的clr_cnt为低电平0时清零
elsifclk'
then
ifen='
then--当输入的tesen为高电平1时允许计数
if(cqi<
9)thencqi<
=cqi+1;
elsecqi<
--等于9则计数器清零
--当输入的tesen为低电平0时禁止计数,锁定计数值
endprocess;
--产生进位
process(cqi)
ifcqi="
1001"
thenc10<
--当加的9时产生进位输出
elsec10<
q<
=cqi;
16位锁存器
entityreg16bis
--输出锁存控制信号
endreg16b;
architectureartofreg16bis
process(load,din)
ifload'
eventandload='
then--load为高电平时teten为低电平,计数器禁止
dout<
=din;
--锁存输入的数据
6.4数码管控制器
entityledcomis
--数码管扫描频率
--锁存器输入的16位信号
--输出至译码器的4位信号
bufferstd_logic_vector(2downto0));
--输出数码管选择信号
endledcom;
architectureartofledcomis
begin--sel同扫描频率clk循环变化
ifrising_edge(clk)then
ifsel>
=7then
sel<
000"
elsesel<
=sel+1;
--数码管选择
process(sel,datain)
caseselis
when"
=>
dataout<
=datain(3downto0);
001"
=datain(7downto4);
010"
=datain(11downto8);
011"
=datain(15downto12);
whenothers=>
NULL;
endcase;
七段数码管的译码器
libraryIEEE;
useIEEE.std_logic_1164.all;
entityymqis
port(
d_in:
--数码管控制器输入四位信号
outstd_logic_vector(6downto0));
--输出8位信号
endymq;
--第8位d_out[7]为逗号
architectureartofymqis
process(d_in)
cased_inis--第8位为1高电平逗号不显示
=>
d_out<
1111110"
--0
0001"
0110000"
--1
0010"
1101101"
--2
0011"
1111001"
--3
0100"
0110010"
--4
0101"
1011011"
--5
0110"
1011111"
--6
0111"
1110000"
--7
1000"
1111111"
--8
1111011"
--9
7.参考文献
1、王小军主编.《VHDL简明教程》.清华大学出版社,1997
2、潘松、王国栋主编.《VHDL应用教程》电子科技大学出版社,2000
3、甘历主编.《VHDL应用于开发实践》科学出版社,2003
4、刘爱荣主编.《EDA技术与CPLD/FPGA开发应用简明教程》.清华大学出版社,2007
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 简易 数字频率计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)