简易数字频率计设计报告docWord格式文档下载.docx
- 文档编号:19833202
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:15
- 大小:162.29KB
简易数字频率计设计报告docWord格式文档下载.docx
《简易数字频率计设计报告docWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《简易数字频率计设计报告docWord格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
END;
ARCHITECTUREARTOFCLK_SX_CTRLIS
SIGNALQ:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
IF(CLK'
EVENTANDCLK='
1'
)THEN
IFQ="
1111"
THEN
Q<
="
0000"
;
ELSE
Q<
=Q+'
ENDIF;
ENDIF;
EN<
=NOTQ(3);
LOCK<
=Q(3)ANDNOT(Q
(2))ANDQ
(1);
CLR<
=Q(3)ANDQ
(2)ANDNOT(Q
(1));
ENDPROCESS;
ENDART;
测频时序控制电路:
为实现系统功能,控制电路模块需输出三个信号:
一是控制计数器允许对被测信号计数的信号EN;
二是将前一秒计数器的计数值存入锁存的锁存信号LOCK;
三是为下一个周期计数做准备的计数器清零信号CLR。
上述三个信号产生的顺序是:
先提供计数信号,这种信号使计数器在1s提供锁存信号,这种信号对计数值进行锁存;
最后是发出清零信号,这种信号可对计数器清零。
计数器清零结束后又可重新计数,计数进入第二个周期。
不难看出,控制电路模块实际上就是一个控制器,它需要一个周期为1s的信号作为产生并控制控制器输出的时基信号CLK0。
控制电路模块中控制器及端口如图3所示:
图3测频时序控制模块顶层图
--F_IN_CNT.VHD
ENTITYF_IN_CNTIS
INSTD_LOGIC;
QA,QB,QC,QD:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));
ENDF_IN_CNT;
ARCHITECTUREARTOFF_IN_CNTIS
COMPONENTCNT10
PORT(CLK,EN,CLR:
COUNT10:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
SIGNALS2:
STD_LOGIC;
SIGNALS3:
SIGNALS4:
S2<
=NOTQA(3);
S3<
=NOTQB(3);
S4<
=NOTQC(3);
U1:
CNT10PORTMAP(CLK,EN,CLR,QA);
U2:
CNT10PORTMAP(S2,EN,CLR,QB);
U3:
CNT10PORTMAP(S3,EN,CLR,QC);
U4:
CNT10PORTMAP(S4,EN,CLR,QD);
2.待测信号脉冲计数电路模块
待测信号脉冲信号脉冲计数电路是对待测脉冲信号的频率进行测量,它可由4个十进制加法计数器组成,其中EN为计数选通控制信号,CLR为计数器清零信号。
在计数器清零信号CLR清零后,当计数选通控制信号EN有效时,开始对待测信号进行计数。
如果计数选通控制信号EN的宽度为1s,那么计数结果就为待测信号的频率;
如果计数选通控制信号EN的宽度为100ms,那么待测信号的频率等于计数结果的10倍。
该模块将对输入信号进行十进制计数。
它虽然由多个十进制计数器组成,但采用CPLD后,设计时只要先制作一个单个的十进制计数器,然后再将多个结构相同的单个十进制计数器在CPLD内部进行连接就可组合成为一个完整的计数电路模块。
为实现系统功能,十进制计数器需要设置三个输入端:
即被测信号输入端CLK、计数器状态清零端CLR和计数器工作使能端EN。
需要设置四个输出端,即COUNT0、COUNT1、COUNT2和COUNT3,并由这四个输出端输出四位BCD码来表示十进制数。
需要说明,上述十进制计数器都是满10进1,且进位时计数器清零并重新计数。
计数电路模块中的单个计数器符号及端口功能如图4所示:
图4待测信号脉冲计数模块顶层图
--CNT10.VHD
ENTITYCNT10IS
COUNT10:
ENDCNT10;
ARCHITECTUREONEOFCNT10IS
PROCESS(CLK,CLR,EN)
IFCLR='
THEN
COUNT10<
ELSIF(CLK'
IF(EN='
IFCOUNT10="
1001"
=COUNT10+'
ENDONE;
3.锁存与译码显示控制电路模块
锁存与译码显示控制电路用于实现记忆显示,在测量过程中不刷新新的数据,直到测量过程结束后,锁存显示测量结果,并且保存到下一次测量结束。
其功能是对四位BCD码进行锁存并且转换成为对应的4组七段码,用于驱动数码管。
锁存电路模块
该模块可使系统显示电路的工作稳定而可靠,避免计数电路模块清零时引起显示闪烁的现象。
锁存电路模块是由多个锁存器组成。
每个锁存器都是用来锁存与其单独相连的计数器的输出数据。
由于每个锁存器锁存的都是4位2进代码表示的十进制数,其功能完全相同,因此只需要设计制作一个锁存器就可连接组合成一个锁存电路模块。
为实现系统功能,锁存器需设置四个数据输入端:
即QA、QB、QC和QD,并由它们输入计数器的计数值。
需设置一个使锁存器工作的使能端L0CK。
还需设置四个锁存数据的输出端:
即LEDA、LEDB、LEDC和LEDD。
锁存电路模块中单个锁存器的符号及端口功能如图5所示。
图54位锁存模块顶层图
--LOCK.VHD
ENTITYLOCKIS
PORT(LOCK:
QA,QB,QC,QD:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LEDA,LEDB,LEDC,LEDD:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ARCHITECTUREARTOFLOCKIS
SIGNALL0,L1,L2,L3:
STD_LOGIC_VECTOR(3DOWNTO0);
COMPONENTSEG7
PORT(BCD:
DOUT:
PROCESS(LOCK)
BEGIN
IF(LOCK'
EVENTANDLOCK='
L0<
=QA;
L1<
=QB;
L2<
=QC;
L3<
=QD;
U0:
SEG7PORTMAP(L0,LEDA);
SEG7PORTMAP(L1,LEDB);
SEG7PORTMAP(L2,LEDC);
SEG7PORTMAP(L3,LEDD);
译码电路模块:
该模块可对表示转换后的十进制数的4位2进制代码进行编码,此模块可直接连接数码管驱动器,从而驱动数码管显示出相应阿拉伯数字等字符。
与上述电路模块设计一样,它也只需要先设计一个单个的译码器,然后通过连接组合就可构成系统的译码电路模块,从而实现系统的译码功能。
为实现系统的功能,单个译码器需要设置4个数据输入端:
即BCD0、BCD1、BCD2和BCD3,并由这些端口输入锁存电路模块输出的4位2进制数据。
需要设置7个输出端:
即DOUT、DOUT1、DOUT2、DOUT3、DOUT4、DOUT5和DOUT6,它们分别连接7段数码管的7个显示输入端。
译码电路模块中单个译码器符号及端口功能如图6所示:
图67段译码显示模块顶层图
--SEG7
ENTITYSEG7IS
PORT(bcd:
INSTD_LOGIC_VECTOR(3DOWNTO0);
dout:
ENDSEG7;
ARCHITECTUREaOFSEG7IS
PROCESS(bcd)
CASEbcdIS
WHENx"
0"
=>
dout<
0111111"
1"
0000110"
2"
1001011"
3"
1000111"
4"
0110110"
5"
1101101"
6"
1111101"
7"
0000111"
8"
1111111"
9"
1101111"
WHENOTHERS=>
0000000"
ENDCASE;
ENDa;
4.扫描电路模块:
由于本次硬件下载中所使用的EDA试验箱只支持一位七段数码显示,所以在最后显示部分需要设计扫描电路,使得4位数字同时显示出来。
四个数码管分别由选通信号k0~k3来选择。
被选通的数码管显示数据。
其中CLK为扫描时钟;
SG为7段控制信号,由高位至低位分别接g、f、e、d、c、b、a七个段;
BT是位选控制信号。
程序中CNT4是一个计数器,作为扫描计数信号,由进程P2生成;
进程P3是7段译码查表输出程序。
其模块顶层原理图如图7所示:
图7扫描显示模块顶层原理图
---SCAN.VHD
ENTITYSCANIS
LEDA:
INSTD_LOGIC_VECTOR(6DOWNTO0);
LEDB:
LEDC:
LEDD:
SG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
BT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDSCAN;
ARCHITECTUREONEOFSCANIS
SIGNALCNT4:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALa:
INTEGERRANGE0TO3;
P1:
PROCESS(CNT4)
CASECNT4IS
WHEN"
00"
BT<
0001"
a<
=0;
01"
0010"
=1;
10"
0100"
=2;
11"
1000"
=3;
WHENOTHERS=>
null;
ENDPROCESSP1;
P2:
PROCESS(CLK)
IFCLK'
THENCNT4<
=CNT4+1;
ENDPROCESSP2;
P3:
PROCESS(a)
CASEaIS
WHEN0=>
SG<
=LEDD;
WHEN1=>
=LEDC;
WHEN2=>
=LEDB;
WHEN3=>
=LEDA;
NULL;
ENDPROCESSP3;
三.各模块设计仿真:
1.时基产生与测频时序控制电路仿真
图8时基产生与测频时序控制电路仿真
2.十进制加法计数器仿真
图9十进制加法计数器电路仿真
3.待测信号脉冲计数器仿真
图10待测信号脉冲计数器电路仿真
4.译码显示电路仿真
图11译码显示电路仿真
5.锁存与译码显示控制电路仿真
图12锁存与译码显示控制电路仿真
6.扫描电路仿真
图13扫描显示电路仿真
7.简易数字频率计整个系统仿真
图14简易数字频率计系统仿真
四.简易数字频率计顶层原理图
图15简易数字频率计顶层原理图
五.编程下载:
以上程序经综合仿真后,结果基本符合设计要求。
整个频率计设计完成后,其外引脚图如图16所示。
原来需要十几块芯片组成的频率计,现在只用一块芯片即可实现。
下载适配后,只在输入端接上标准时钟频率和待测频率,相应的输出端接上LED7段显示数码管,即可显示频率。
硬件电路简捷,体积小,所有电路都在一块芯片里,因此性能稳定。
图16数字频率计CPLD外管脚图
六.设计心得体会:
第一次真正的感觉到自己是学电信专业的,第一次真正体会到自己要搞完一个大型的程序还是不容易的事。
提前几天开始拿到本次程序设计题的时候确实有点儿兴奋,心想着尽量要独立快速而又高质量的完成这个设计。
可是,当天就发现我对这个基于CPLD的嵌入式系统一点头绪都没有,因为到现在快毕业了对嵌入式真正含义还不是很透彻。
随后就是一个劲的去图书馆查阅相关资料,看书上有没有关于数字频率计设计的内容。
可是书上的东西好像并没有帮到我什么忙,使我更感到无从下手。
就这样一直拖到了不能再拖的时候了,刚开始的豪言壮语也都没有了。
一阵慌乱后,终于定下心来了终于找到了一个比较类似的VHDL程序的简易数字频率计设计。
这也使得我今天的程序颇有类同的感觉。
刚开始看到那设计的时候一下子就被很多行的VHDL语言给吓着了,当时真想放弃,最后还是硬着头皮看了下去。
开始真是很多看不懂,很多传递符号都是以前没有看到过的。
好在前几天看过书,对硬件描述语言还有一点的印象,查过书后都能搞清楚。
对我来说是新东西的还有寄存器的设计等,最后通过查找书本大概的把这个系统看懂了。
看了几遍课题设计要求和书上给的源程序后对如何写这一方面的程序有了一定的了解,于是就尝试着自己开始作起了这个系统的总体框图。
毕竟是第一次写这么大的关于硬件描述的程序,所以虽然看稍微懂了类似的模块程序,可是到自己的时候还是觉得不能上手,一直是要翻书看和借鉴里的内容。
最后,还是模仿着那系统完成了我这次课程设计的第一步构图啊!
虽然不知道有多少内容是自己的,可我还是花了时间和精力去认真完成的。
做这部分的时候简直要命……眼看就第一个设计周快要结束了,才开始马马虎虎的忙碌。
主要是平时上课的知识积累不够,掌握得不熟练,到编写程序时,表达起来就很吃力。
甚至有时候都不知道自己在编什么,看不懂真的很痛苦!
没办法,只得结合下具体情况尝试了,结果可能不太好。
时间过得比较快,很快到了对整个系统作调试的时候了,编译、下载、连线、运行,一步一步的很小心。
最后测试成功,只不过在显示问题上没有做得很好,如果在显示部分加上扫描模块就比较成功了。
不过自己也还算收获很大,毕竟已经尽力了。
通过本次课程设计,感慨很多啊……平时训练太少、课外衍生也做得不够。
对于编程类的习题做得不多是导致此次设计不成功的根本原因。
在以后的学习工作中应该加强基础知识的牢固掌握,争取比现在做得更好!
另外,还要感谢陈老师的悉心指导,通过他的进一步讲解才会更深入的懂得此次任务的思路和很多需要修改的地方。
七.参考文献:
1.康华光主编电子技术基础(数字部分),高等教育出版社
2.阎石主编电子技术基础(数字部分),清华大学出版社
3.陈大钦主编电子技术基础实验,高等教育出版社
4.彭介华主编电子技术课程设计指导,高等教育出版社
5.张原编著可编程逻辑器件设计及应用,机械工业出版社
6.荀殿栋,徐志军编著数字电路设计实用手册,电子工业出版社
7.MAX+PLUSⅡ入门
8.刘洪喜,陆颖编著VHDL电路设计实用教程清华大学出版社
9.章彬宏周正林编著EDA应用技术北京理工大学出版社
10.陈云洽保延翔编著CPLD应用技术与数字系统设计电子工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字频率计 设计 报告 doc