使用VHDL进行任意整数分频.doc
- 文档编号:159631
- 上传时间:2022-10-04
- 格式:DOC
- 页数:3
- 大小:43.50KB
使用VHDL进行任意整数分频.doc
《使用VHDL进行任意整数分频.doc》由会员分享,可在线阅读,更多相关《使用VHDL进行任意整数分频.doc(3页珍藏版)》请在冰豆网上搜索。
使用VHDL进行任意整数分频器设计
摘要
分频器是数字电路中最常用的电路之一,在FPGA的设计中也是使用效率非常高的基本设计。
基于FPGA实现的分频电路一般有两种方法:
一是使用FPGA芯片内部提供的锁相环电路,如ALTERA提供的PLL(PhaseLockedLoop),Xilinx提供的DLL(DelayLockedLoop);二是使用硬件描述语言,如VHDL、VerilogHDL等。
使用锁相环电路有许多优点,如可以实现倍频;相位偏移;占空比可调等。
但FPGA提供的锁相环个数极为有限,不能满足使用要求。
因此使用硬件描述语言实现分频电路经常使用在数字电路设计中,消耗不多的逻辑单元就可以实现对时钟的操作,具有成本低、可编程等优点。
本文使用实例描述了FPGA/CPLD上使用VHDL进行分频器设计,将奇数分频,和偶数分频结合起来,可以实现50%占空比任意正整数的分频,并在仿真中实现了将50MHZ的信号分频。
总体方案设计:
首先定义8个输入端来选择是n分频
然后分别写出偶数分频和奇数分频,最后再判断输入的8位是奇数还是偶数,选择相应的分频。
偶数分频:
一般来说有两种方案:
一是当计数器计数到N/2-1时,将输出电平进行一次翻转,同时给计数器一个复位信号,如此循环下去;二是当计数器输出为0到N/2-1时,时钟输出为0或1,计数器输出为N/2到N-1时,时钟输出为1或0N-1时,复位计数器,如此循环下去。
需要说明的是,第一种方案仅仅能实现占空比为50%的分频器,第二种方案可以有限度的调整占空比,也可以实现非50%占空比的奇数分频。
奇数分频:
实现占空比为50%的2N+1分配器,则需要对待分频时钟上升沿和下降沿分别进行N/(2N+1)分频,然后将两个分频所得的时钟信号相或,即可得到占空比为50%的2N+1分频器。
VHDL语言如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityfpis
generic(data_width:
integer:
=8);
port(input:
instd_logic_vector(data_width-1downto0);
clk_in:
instd_logic;
clk_out:
outstd_logic);
endentityfp;
architecturedivoffpis
signalclk_outQ:
std_logic;
signalcoutQ:
std_logic_vector(data_width-1downto0);
signalcout1,cout2:
std_logic_vector(data_width-1downto0);
signalclk1,clk2:
std_logic;
signala:
std_logic;
begin
-------------------------------------------------
process(clk_in)
begin
ifclk_in'eventandclk_in='1'then
ifcoutQ<(conv_integer(input)-1)then
coutQ<=coutQ+1;
elsecoutQ<=(others=>'0');
endif;
endif;
endprocess;
---------------------------------------------------
process(coutQ)
begin
ifcoutQ<(conv_integer(input))/2then
clk_outQ<='0';
elseclk_outQ<='1';
endif;
endprocess;
---------------------------------------------------
process(clk_in)------risingedge
begin
ifclk_in'eventandclk_in='1'then
ifcout1<(conv_integer(input)-1)then
cout1<=cout1+1;
elsecout1<=(others=>'0');
endif;
ifcout1<(conv_integer(input)-1)/2then
clk1<='1';
elseclk1<='0';
endif;
endif;
endprocess;
---------------------------
process(clk_in)------fallingedge
begin
ifclk_in'eventandclk_in='0'then
ifcout2<(conv_integer(input)-1)then
cout2<=cout2+1;
elsecout2<=(others=>'0');
endif;
ifcout2<(conv_integer(input)-1)/2then
clk2<='1';
elseclk2<='0';
endif;
endif;
endprocess;
---------------------------
process(clk_outQ,clk1,clk2)
begin
if((conv_integer(input)mod2)=0)then
clk_out<=clk_outQ;
else
clk_out<=clk1orclk2;
endif;
endprocess;
endarchitecturediv;
仿真结果:
待分频信号采用50MHZ(周期20ns)的方波。
偶数分频:
10分频为例
奇数分频:
5分频为例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 VHDL 进行 任意 整数 分频