1、基于 FPGA的多种形式分频的设计与实现摘 要: 本文通过在 Quarturs开发平台下,一种能够实现等占空比、非等占空比整数分频及半整数分频的通用分频器的 FPGA设计与实现,介绍了利用VHDL硬件描述语言输入方式,设计数字电路的过程。关键词:FPGA;VHDL 硬件描述语言;数字电路设计;分频器 引言 分频器是数字系统设计中的基本电路,根据不同设计的需要,我们会遇到偶数分频、奇数分频、半整数分频等,有时要求等占空比,有时要求非等占空比。在同一个 设计中有时要求多种形式的分频。通常由计数器或计数器的级联构成各种形式的偶数分频及非等占空比的奇数分频,实现较为简单。但对半整数分频及等占空比的奇
2、数分频实现较为困难。本文利用 VHDL硬件描述语言,通过Quartus3.0 开发平台,使用 Altera公司的 FPGA,设计了一种能够满足上述各种 要求的较为通用的分频器。 一、电路设计 采 用 FPGA实现半整数分频器,可以采用以下方法:设计一个模 N的计数器,再设计一个脉冲扣除电路,每来两个脉冲扣除一个脉冲,即可实现分频系数为N- 0.5的分频器。脉冲扣除电路由异或门和一个 2分频器构成。本设计在半整数分频器原理的基础上,对异或门加一个使能控制信号,通过对异或门和计数器计数状 态值的控制,实现同一个电路完成多种形式分频,如图 1所示。 二、VHDL 语言的实现 现通过设计一个可以实现
3、8.5分频,等占空比的 17分频,2、4、8、16、32 分频,及占空比为 18 和 45 的 9分频等多种形式分频的分频器,介绍该通用分频器的 FPGA实现。 由图 1所示的电路原理图可知,分频器由带使能端的异或门、模 N计数器和一个 2分频器组成,本设计用 D触发器来完成 2分频的功能,实现方法是:将触发器的 Q 反输出端反馈回输入端 D,将计数器的一个计数输出端作为 D触发器的时钟输入端。各功能模块的 VHDL语言实现如下。 1模 N计数器的实现 一般设计中用到计数器时,我们可以调用 lpm库中的计数器模块,也可以采用VHDL语言自己设计一个模 N计数器。本设计采用 VHDL语言设计一个
4、最大模值 为 16的计数器。输入端口为:使能信号 en,复位信号 clr和时钟信号 clk;输出端口为:qa、qb、qc、qd。其 VHDL语言描述略。2带使能控制的异或门的实现 输入端为:xor_en:异或使能,a 和 b:异或输入;输出端为:c:异或输出。当 xor_en为高电平时,c 输出 a和 b的异或值。当 xor_en为低电平时,c 输出信号 b。其 VHDL语言略。 32 分频(触发器)的实现 输入端为:时钟信号 clk,输入信号 d;输出端为:q:输出信号 a,q1:输出信号 a反。其 VHDL语言略。 4分频器的实现 本设计采用层次化的设计方法,首先设计实现分频器电路中各组成
5、电路元件,然后通过元件例化的方法,调用各元件,实现整个分频器。其 VHDL语言略。 三、仿真结果及硬件电路的测试 本设计的目的是通用性和简易性,只要对上述程序稍加改动即可实现多种形式的分频。 1实现 8.5分频和等占空比的 17分频 只要将上述程序中,调用计数器模块时端口 qa、qb、qc 匹配为 open状态,同时置 xor_en为高电平即可。从编译报告看出总共占用 8个逻辑单元(logic elements),其仿真波形如图 24 所示。 图 2 图 3 图 4 由图中 qxiao和 clk的波形可以看出,每隔 8.5个时钟周期,qxiao 信号产生一个上升沿,从而实现分频系数是 8.5的
6、分频,同时在 qzheng端 得到等占空比的 17分频。设 clk为 170MHz,则 qxiao输出为 20MHz,qzheng 输出为10MHz。 2实现占空比为 18 和 45 的 9分频 只要上述程序的 xor_en置低电平即可在 qxiao输出占空比为 18 的 9分频信号;在 qzheng2输出占空比为 45 的 9分频信号。同样仅占 8个逻辑单元(logic elements)。仿真波形如下。 3实现等占空比的 2、4、8、16 和 32分频 只要将上述程序中的 xor_en置为低电平,同时将计数器模块的计数最大值设为16即可。仿真波形如下。 由此可见,只要稍微改变计数器的计数状态值,对异或门进行选通控制,即可实现上述多种形式的分频。本设计在 Altera公司的 EP1K50QC208-3构成的测试平台上测试通过,性能良好。 结束语 我们在设计模拟雷达脉冲信号和用 FPGA开发扩频芯片时就用到了上述多种形式得分频。本文旨在介绍一种进行 FPGA开发时,所需多种分频的实现方法,如果 设计中所需分频形式较多,可以直接利用本设计,通过对程序的稍微改动以满足自己设计的要求。如果设计中需要分频形式较少,可以利用本设计部分程序,以节省 资源。