1、100s=1%4)?110?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高电平时允许计数,低电平时停止计数
2、,?LOCK?4?LOCK,?7?CLR?1.?EN? 2 ?VHDL?-CLK_SX_CTRLLIBRARY IEEE?USE IEEE.STD_LOGIC_1164.ALL?USE IEEE.STD_LOGIC_UNSIGNED.ALL?ENTITY CLK_SX_CTRL ISPORT(CLK: IN STD_LOGIC? LOCK: OUT STD_LOGIC? EN: CLR: OUT STD_LOGICEND?ARCHITECTURE ART OF CLK_SX_CTRL IS SIGNAL Q: STD_LOGIC_VECTOR(3 DOWNTO 0BEGINPROCESS(CL
3、KIF(CLKEVENT AND CLK=1THEN IF Q=1111 Q=0000ELSEQ=Q+END IF? END IF?ENLOCKAND NOT(Q(2AND Q(1CLRAND NOT(Q(1END PROCESS?END ART?为实现系统功能,控制电路模块需输出三个信号:一是控制计数器允许对被测信号计数的信号EN;二是将前一秒计数器的计数值存入锁存的锁存信号LOCK;三是为下一个周期计数做准备的计数器清零信号CLR。上述三个信号产生的顺序是:先提供计数信号,这种信号使计数器在1s提供锁存信号,这种信号对计数值进行锁存;最后是发出清零信号,这种信号可对计数器清零。计数器清零结
4、束后又可重新计数,计数进入第二个周期。不难看出,控制电路模块实际上就是一个控制器,它需要一个周期为1s 的信号作为产生并控制控制器输出的时基信号CLK0。控制电路模块中控制器及端口如图3所示:3 ?-F_IN_CNT.VHDENTITY F_IN_CNT ISIN STD_LOGIC?QA,QB,QC,QD:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0 END F_IN_CNT?ARCHITECTURE ART OF F_IN_CNT ISCOMPONENT CNT10PORT(CLK,EN,CLR: COUNT10:BUFFER STD_LOGIC_VECTOR(3
5、DOWNTO 0END COMPONENT?SIGNAL S2:STD_LOGIC?SIGNAL S3:SIGNAL S4:S2S3S4U1:CNT10 PORT MAP(CLK,EN,CLR,QAU2:CNT10 PORT MAP(S2,EN,CLR,QBU3:CNT10 PORT MAP(S3,EN,CLR,QCU4:CNT10 PORT MAP(S4,EN,CLR,QD2. ?,CLR?1s,?100ms,?10?该模块将对输入信号进行十进制计数。它虽然由多个十进制计数器组成,但采用CPLD 后,设计时只要先制作一个单个的十进制计数器,然后再将多个结构相同的单个十进制计数器在CPLD 内
6、部进行连接就可组合成为一个完整的计数电路模块。为实现系统功能,十进制计数器需要设置三个输入端:即被测信号输入端CLK、计数器状态清零端CLR 和计数器工作使能端EN。需要设置四个输出端,即COUNT0、COUNT1、COUNT2 和COUNT3 ,并由这四个输出端输出?BCD码来表示十进制数。需要说明,上述十进制计数器都是满10进1 ,且进位时计数器清零并重新计数。计数电路模块中的单个计数器符号及端口功能如图4所示:4 ?-CNT10.VHDENTITY CNT10 IS COUNT10 :END CNT10?ARCHITECTURE ONE OF CNT10 ISPROCESS(CLK,CL
7、R,ENIF CLR= THEN COUNT10LEDA,LEDB,LEDC,LEDD:OUT STD_LOGIC_VECTOR(6 DOWNTO 0ARCHITECTURE ART OF LOCK ISSIGNAL L0,L1,L2,L3:STD_LOGIC_VECTOR(3 DOWNTO 0COMPONENT SEG7PORT(BCD: DOUT:PROCESS(LOCK BEGIN IF(LOCKEVENT AND LOCK= L0=QA? L1=QB? L2=QC? L3SEG7 PORT MAP(L1,LEDBSEG7 PORT MAP(L2,LEDCSEG7 PORT MAP(L3
8、,LEDD译码电路模块:该模块可对表示转换后的十进制数的4 位2 进制代码进行编码,此模块可直接连接数码管驱动器,从而驱动数码管显示出相应阿拉伯数字等字符。与上述电路模块设计一样,它也只需要先设计一个单个的译码器,然后通过连接组合就可构成系统的译码电路模块,从而实现系统的译码功能。为实现系统的功能,单个译码器需要设置4个数据输入端:即BCD0、BCD1、BCD2 和BCD3 ,并由这些端口输入锁存电路模块输出的4 位2 进制数据。需要设置7个输出端:即DOUT、DOUT1、DOUT2、DOUT3、DOUT4、DOUT5 和DOUT6 ,它们分别连接7段数码管的7个显示输入端。译码电路模块中单个
9、译码器符号及端口功能如图6所示:6 7?-SEG7ENTITY SEG7 ISPORT(bcd:IN STD_LOGIC_VECTOR(3 DOWNTO 0 dout:END SEG7?ARCHITECTURE a OF SEG7 ISPROCESS(bcdCASE bcd IS WHEN x0= dout0000000END CASE?END a?4. ?EDA?k0k3?CLK?SG?g?f?e?d?c?b?a ?BT?CNT4?P2?P3?7 ?-SCAN.VHDENTITY SCAN IS LEDA:IN STD_LOGIC_VECTOR(6 DOWNTO 0LEDB:LEDC:LED
10、D: SG: BT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0END SCAN?ARCHITECTURE ONE OF SCAN IS SIGNAL CNT4 : STD_LOGIC_VECTOR(1 DOWNTO 0 SIGNAL a : INTEGER RANGE 0 TO 3?P1: PROCESS(CNT4CASE CNT4 IS WHEN 00BT0001anull?END PROCESS P1?P2: PROCESS(CLK IF CLK THEN CNT4CASE a IS WHEN 0=SG=LEDC? WHEN 2=LEDB? WHEN 3=LEDA?NULL?END PROCESS P3?1. ?8?2.?9 ?10 ?11 ?5. ?12 ?6. ?13 ?7. ?14 ?.?15 ?5、实验心得通过这次设计,我受益匪浅。掌握了C语言的编写程序,学会了使用PROTUTES和KEIL的仿真来实现,?6、参考文献),?3.岩石?电子技术基础数字部分第五版),高等教育出版社4. 张毅刚?2?
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1