实验七 分频器电路设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七、分频器电路设计
一、实验目的
1、学习任意分频器的设计方法;
2、学习数控分频器的设计、分析和测试方法。
二、实验要求
1、基本要求
1、设计一个偶分频器
2、设计一个2n分频器
3、设计一个奇分频器
4、设计一个半整数分频器
5、设计一个数控分频器
2、扩展要求
1、设计一个任意N分频计数器。N为奇数或偶数
2、设计一个硬件电子琴电路
三、实验原理
1、偶数分频
对时钟进行偶数分频,使占空比为50%。只要使用一个计数器,在计数器的前一半时间使输出为高电平,在计数器的后一半时间使输出为低电平,即可得到偶分频时钟。
2、奇数分频
对时钟进行奇数分频,使占空比为50%。先对输入时钟的上升沿进行计数,让一个内部信号在前一半时间(分频系数除2取整)为高电平,后一半时间为低电平;再对输入时钟的下降沿进行计数,让另一个内部信号在前一半时间为高电平,后一半时间为低电平;然后将这内部两个信号相或后即得到奇数分频时钟。
3、2n分频器
用一个M(2M>=f0)位的二进制计数器对输入时钟进行计数。其第0位为输入时钟的二分频,第1位为输入时钟的四分频,第2位为输入时钟的8分频,依此类推,第n-1位为输入时钟的2n分频。
4、半整数分频器
分频系数为N=0.5的整数倍的分频器电路可由一个异或门、一个模N的计数器和一个2
分频构成。通用半整数分频器电路组成如图7-1所示。
图7-1 通用半整数分频器电路框图与原理图
5、数控分频器
数控分频器的功能就是在输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比。数控分频器一般是用计数值可并行预置的加法计数器完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
四、实验步骤
建立一个工程项目,路径如:D:\20050837\seventh ,项目名和顶层实体名为freq_div 。
1、设计一个分频系数可预置的偶分频器(如8分频器),并进行编译仿真。
2、设计一个2n 分频器(如输入频率为1024HZ ,输出频率为256HZ ,64Hz ,4Hz 等),并进行编译仿真。
3、设计一个分频系数可预置的占空比为50%的奇分频器(如5分频器),并进行编译仿真。
4、根据图7-1设计一个分频系数是N-0.5的半整数分频器,并进行编译仿真。
5、设计一个数控分频器,进行编译仿真,下载测试,并画出该程序的RTL 电路图。
图7-2 当给出不同输入值D 时,FOUT 输出不同频率(CLK 周期=50ns)
(1) 仿真:输入不同的CLK 频率和预置值D ,给出如图7-2 的时序波形。
(2) 下载测试:频率选65536Hz 或更高(确保分频后落在音频范围);输出FOUT 接扬声 器(SPKER)。编译下载后进行硬件测试:改变输入值,可听到不同音调的声音。
五、参考程序
1、偶分频器程序
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FDIV8 IS
GENERIC (N:INTEGER:=8);
PORT(CLR,CLKIN:IN STD_LOGIC;
CLKOUT:OUT STD_LOGIC);
END FDIV8;
ARCHITECTURE ONE OF FDIV8 IS
SIGNAL COUNT:INTEGER;
BEGIN
PROCESS(CLKIN,CLR)
BEGIN
IF CLR=‘1’ THEN COUNT<=0;
ELSIF(CLKIN'EVENT AND CLKIN=‘1’ )THEN
IF(COUNT=N-1) THEN COUNT<=0;
ELSE COUNT <=COUNT +1 ;
IF COUNT< INTEGER(N/2) THEN
CLKOUT<=‘0’;
ELSE
CLKOUT<=‘1’;
END IF;
END IF;
END IF;
END PROCESS;
END ONE
2、设计一分频器,输入频率为1024HZ,输出频率为512HZ,64HZ,4HZ,1HZ. LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FPQ IS
PORT(CLK,CLR:IN STD_LOGIC;
CLK1024,CLK64,CLK4,CLK1:OUT STD_LOGIC);
END FPQ;
ARCHITECTURE ART OF FPQ IS
SIGNAL COUNT:STD_LOGIC_VECTOR(9 DOWNTO 0);
BEGIN
PROCESS(CLK,CLR)
BEGIN
IF(CLR=‘1’)THEN COUNT<=( OTHERS=>’0’);
ELSIF(CLK'EVENT AND CLK=‘1’ )THEN
COUNT<=COUNT +‘1’;END IF;
END IF;
END PROCESS;
CLK1<=COUNT(9); CLK4<= COUNT(7);