简易数字频率Word格式文档下载.docx
《简易数字频率Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《简易数字频率Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
![简易数字频率Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/21/4d2c5446-38a5-44bc-a58c-7c991a1e7538/4d2c5446-38a5-44bc-a58c-7c991a1e75381.gif)
100μs
=1%
4)?
1~10?
5)?
1MHz?
6)?
4、?
)?
需要实现一个4位十进制数字频率计,?
1?
1?
因为是4位十进制数字频率计,所以计数器CNT10需用4个,7段显示译码器也需用4个。
频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。
为此,测频控制信号发生器F_IN_CNT应设置一个控制信号时钟CLK,一个计数使能信号输出端EN、一个与EN输出信号反向的锁存输出信号LOCK和清零输出信号CLR。
若CLK的输入频率为1HZ,则输出信号端EN输出一个脉宽恰好为1秒的周期信号,可以作为闸门信号用。
由它对频率计的每一个计数器的使能端进行同步控制。
当EN高电平时允许计数,低电平时停止计数,?
LOCK?
4?
LOCK,?
7?
CLR?
1.?
EN?
2?
VHDL?
--CLK_SX_CTRL
LIBRARYIEEE?
USEIEEE.STD_LOGIC_1164.ALL?
USEIEEE.STD_LOGIC_UNSIGNED.ALL?
ENTITYCLK_SX_CTRLIS
PORT(CLK:
INSTD_LOGIC?
LOCK:
OUTSTD_LOGIC?
EN:
CLR:
OUTSTD_LOGIC>
END?
ARCHITECTUREARTOFCLK_SX_CTRLIS
SIGNALQ:
STD_LOGIC_VECTOR(3DOWNTO0>
BEGIN
PROCESS(CLK>
IF(CLK'
EVENTANDCLK='
1'
>
THEN
IFQ="
1111"
Q<
="
0000"
ELSE
Q<
=Q+'
ENDIF?
ENDIF?
EN<
=NOTQ(3>
LOCK<
=Q(3>
ANDNOT(Q(2>
ANDQ(1>
CLR<
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.?
CLR?
1s,?
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位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?
k0~k3?
CLK?
SG?
g?
f?
e?
d?
c?
b?
a?
BT?
CNT4?
P2?
P3?
7?
---SCAN.VHD
ENTITYSCANIS
LEDA:
INSTD_LOGIC_VECTOR(6DOWNTO0>
LEDB:
LEDC:
LEDD:
SG:
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?
10?
11?
5.?
12?
6.?
13?
7.?
14?
.?
15?
5、实验心得
通过这次设计,我受益匪浅。
掌握了C语言的编写程序,学会了使用PROTUTES和KEIL的仿真来实现,?
6、参考文献
),?
3.岩石?
电子技术基础数字部分<
第五版),高等教育出版社
4.张毅刚?
2?