四位十进制频率计EDAWord文档格式.docx
- 文档编号:19958418
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:11
- 大小:164.16KB
四位十进制频率计EDAWord文档格式.docx
《四位十进制频率计EDAWord文档格式.docx》由会员分享,可在线阅读,更多相关《四位十进制频率计EDAWord文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
图5:
十进制加法计数器实体
2、模块划分
设计一个四位十进制频率计,首先需要一个测频控制电路来产生一个脉宽为1S的输入信号脉冲计数允许的信号;
然后需要一个16位计数器进行计数,由于我们设计的是四位的十进制的频率计,所以还需要用4个十进制的加法计数器来构成所需要的计数器;
在技计数完成之后还需要一个锁存器将计数值进行锁存,从而使显示的数值稳定。
3、模块描述
(1)四位十进制频率计顶层
该模块即为我们最终所要实现的模块,即给定一个频率后,我们可以在外部显示上看到待测频率的频率值。
(2)测频控制电路
该模块用于产生产生一个脉宽为1S的输入信号脉冲计数允许的信号,以便于后面模块的使用。
(3)16位计数器
该模块用于在1S脉宽的周期信号内对待测频率的周期进行计数,从而得到待测频率的频率值。
(4)16位锁存器
该模块用于将计数器产生的最终的计数值进行锁存,从而使显示的数值稳定。
(5)十进制加法计数器
该模块用于产生设计所要求的十进制的计数器,从而构造成我们所需要的计数器。
4、顶层电路图
16位计数器由四个十进制的加法计数器组成
三、方案实现
1、各模块仿真及描述
(1)测频控制电路的仿真
在CLKK时钟的控制下,计数使能信号CNT_EN能产生一个一定脉宽的周期信号(后面用于产生1S脉宽的周期信号),在停止计数期间,一个锁存信号LOAD的上升沿将计数器在前一秒钟的计数值锁进锁存器REG16D中。
清零信号RST_CNT对计数器进行清零,为下一秒的技术操作做准备。
(2)16位计数器的仿真
从波形图中可以看出,当清零信号CLR置0,计数使能信号置1时,计数器以十进制的方式对所给的周期信号的周期进行计数。
(3)16位锁存器的仿真
从波形图中可以看出,当LK置1时,锁存器对所给的数值进行锁存,并且使输出的锁存的数值保持不变,这将在后面的外部显示时使数值保持稳定。
(4)十进制加法计数器的仿真
从波形图中可以看出,当使能端ENA置1,清零端置0时,计数器对给定的时钟的周期进行计数,计数值从0000---1001进行循环,这就满足了我们所需要的十进制的计数器。
2、顶层电路仿真及描述
在进行仿真时,我设置的CLK1HZ的时钟周期是1s(频率为1HZ),FSIN的时钟周期为10ms(频率为100HZ),从波形图中可以看出,输出的计数值确实是100,验证是正确的。
四、硬件测试及说明
我选择了实验电路模式0,测频控制信号CLK1HZ由clock2输入,待测频率FSIN由clock0输入(可用电路帽选择所需要的频率),4个数码管(数码4-1:
PIO31--PIO16)显示测频的输出。
测试结果如下:
测频控制频率
待测频率
数码管显示结果
1HZ
64HZ
64
1024HZ
1024
16384HZ
6384
65536HZ
5539
7500000HZ
9940
从测试的结果可以看出:
(1)我所设计的四位十进制频率计对于四位的待测频率可以准确的显示出来;
(2)但对于超过四位的待测频率只能将前面超出的溢出,只保留最后四位;
(3)待测频率的位数越多,越往后数码管显示结果的误差就越大。
五、结论
本实验设计的是四位十进制频率计,利用测频控制电路、16位锁存器、16位计数器和十进制的计数加法器几个模块完成了我所要的设计。
实现的功能是:
在测频控制电路给的1HZ的测频信号下,计数器对待测频率的周期进行计数,再由锁存器锁存,最终通过外部的数码管将待测频率的频率数值显示出来。
通过本次设计实验我也学到了很多东西,刚开始时选定题目后不知道如何下手,通过翻书、上网查资料找到了一些相关知识才开始做实验。
在实验的进行中也出现了很多问题,比如说编译出现了很多错误,经过我仔细的排查和修改后,最终使得编译完全正确了,这让我有一点成就感,同时也使我对此充满了兴趣,做得就更加认真了,努力把很多没弄懂的问题都想清楚了,做完本次设计实验后真的收获颇丰!
六、课程总结
通过《在系统编程技术》这门课的学习,我真的学到了很多东西。
理论知识主要是学习了FPGA/CPLD、EDA的设计平台、VHDL语言等。
在理论学习之后,我们通过实验锻炼了自己的实践能力,同时在实验的过程中也加深了我们对课本上理论知识的理解。
记得刚开始学习这门课时,觉得还是比较有压力的,老师说我们要多了解EDA方面一些比较前沿的知识,第一节课听着老师提到的各个设计公司,比如说:
Lattice、Xilinx、Altera公司等相关方面的专业名词,其实那时心里是有点激动的,觉得自己正在接触着前沿的知识。
在后面的理论知识的学习中觉得是痛并快乐着,痛的是各方面的知识比较多,比如说在学习VHDL语言的变量、常量、信号时,要注意很多的细节知识,当然快乐的就是自己学到了知识,丰富了自己所知道的知识范围。
在实验课上,我们学会了如何用电路原理图或者VHDL语言实现一个设计,通过在实验过程中遇到的各种问题来提高自己对Quartusii6.0软件的应用能力。
以及在最后的设计实验中更是让我知道一个设计人员的专业素养的要求也很高,要有一定的理论知识、清晰地头脑、较强的分析能力。
我认识到自己离一个设计人员的标准很有很多距离,但我会不断努力下去,努力让自己接近于一个设计人员的水平。
在最后,谢谢同学在学习的过程中给我的帮助以及老师给予的指导!
七、附录(源程序,加中文注释)
1、频率计顶层文件
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.all;
ENTITYfreqtestIS
PORT(CLK1HZ:
INSTD_LOGIC;
--测频控制信号
FSIN:
--待测频率
D:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
--输出计数值
ENDentityfreqtest;
ARCHITECTUREfd1OFfreqtestIS
COMPONENTcouter16DIS
PORT(FIN:
--时钟信号
ENABL:
--计数使能信号
CLR:
--清零信号
DOUT:
--计数结果
ENDCOMPONENT;
COMPONENTFTCTRLIS
PORT(CLKK:
--测频控制信号(选取1HZ)
CNT_EN:
outSTD_LOGIC;
--计数器时钟使能
RST_CNT:
OUTSTD_LOGIC;
--计数器清零
LOAD:
outSTD_LOGIC);
--输出锁存信号
COMPONENTREG16DIS
PORT(LK:
--控制端,置1时锁存输出
DIN:
inSTD_LOGIC_VECTOR(15downto0);
--输入的计数值
OUTSTD_LOGIC_VECTOR(15downto0));
--输出的计数值
SIGNALx,y,z:
STD_LOGIC;
--定义信号x,y,z
SIGNALe:
STD_LOGIC_VECTOR(15DOWNTO0);
--定义16位的信号e
BEGIN--下面就是有原先设计的模块构成顶层文件
u1:
couter16DPORTMAP(FIN=>
FSIN,ENABL=>
x,CLR=>
y,DOUT=>
e);
u2:
FTCTRLPORTMAP(CLKK=>
CLK1HZ,CNT_EN=>
x,RST_CNT=>
y,LOAD=>
z);
u3:
REG16DPORTMAP(DIN=>
e,LK=>
z,DOUT=>
D);
ENDARCHITECTUREfd1;
2、测频控制电路
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.all;
ENTITYFTCTRLIS
PORT(CLKK:
--测频控制信号(验证时取1HZ)
OUTSTD_LOGIC);
ENDFTCTRL;
ARCHITECTUREbehavOFFTCTRLIS
SIGNALDiv2CLK:
BEGIN
PROCESS(CLKK)
BEGIN
IFCLKK'
EVENTANDCLKK='
1'
THEN--1HZ时钟2分频
Div2CLK<
=NOTDiv2CLK;
ENDIF;
ENDPROCESS;
PROCESS(CLKK,Div2CLK)
IFCLKK='
0'
ANDDiv2CLK='
THENRST_CNT<
='
;
--产生计数器清零信号
ELSERST_CNT<
LOAD<
CNT_EN<
=Div2CLK;
ENDbehav;
3、16位锁存器
ENTITYREG16DIS
--输入的计数值
ENDENTITYREG16D;
ARCHITECTUREfd1OFREG16DIS
process(LK,DIN)
begin
if(LK'
EVENTandLK='
)thenDOUT<
=DIN;
--在LK上升沿时锁存输出
endif;
endprocess;
4、16位计数器
ENTITYcouter16DIS
:
ENDentitycouter16D;
ARCHITECTUREfd1OFcouter16DIS
COMPONENTCNT10
PORT(RST:
--清零端
FX:
ENA:
--使能端
OUTY:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
--输出计数结果
COUT:
--输出信号用于进位
BEGIN--由四个十进制加法计数器设计成16位计数器
CNT10PORTMAP(FX=>
FIN,ENA=>
ENABL,RST=>
CLR,OUTY=>
DOUT(3downto0),COUT=>
x);
x,ENA=>
DOUT(7downto4),COUT=>
y);
y,ENA=>
DOUT(11downto8),COUT=>
u4:
z,ENA=>
DOUT(15downto12));
5、十进制加法计数器
ENTITYCNT10IS
ENDENTITYCNT10;
ARCHITECTUREbehavOFCNT10IS
process(RST,ENA,FX)
variableCQI:
STD_LOGIC_VECTOR(3downto0);
--定义变量CQI
if(RST='
)thenCQI:
=(others=>
'
);
elsif(FX'
EVENTandFX='
)then--在时钟信号FX的上升沿
ifENA='
then--使能端为1,让信号从0--9进行计数
ifCQI<
9thenCQI:
=CQI+1;
COUT<
elsifCQI=9thenCQI:
COUT<
--超出9时进位
ELSIFENA='
THENCQI:
--使能端置0输出为0
OUTY<
=CQI;
友情提示:
本资料代表个人观点,如有帮助请下载,谢谢您的浏览!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 十进制 频率计 EDA
![提示](https://static.bdocx.com/images/bang_tan.gif)