基于CPLD/FPGA的多功能分频器的设计与实现
发布时间:2008/5/28 0:00:00 访问次数:487
引言
分频器在cpld/fpga设计中使用频率比较高,尽管目前大部分设计中采用芯片厂家集成的锁相环资源 ,但是对于要求奇数倍分频(如3、5等)、小数倍(如2.5、3.5等)分频、占空比50%的应用场合却往往不能满足要求。硬件工程师希望有一种灵活的设计方法,根据需要,在实验室就能设计分频器并马上投入使用,更改频率时无需改动原器件或电路板,只需重新编程,在数分钟内即可完成。为此本文基于cpld/fpga用原理图和vhdl语言混合设计实现了一多功能通用分频器。
分频原理
偶数倍(2n)分频
使用一模n计数器模块即可实现,即每当模n计数器上升沿从0开始计数至n时,输出时钟进行翻转,同时给计数器一复位信号使之从0开始重新计数,以此循环即可。
奇数倍(2n+1)分频
(1)占空比为x/(2n+1)或(2n+1-x)/(2n+1)分频,用模(2n+1)计数器模块可以实现。取0至2n之间一数值x(0<x<2n),当计数器时钟上升沿从0开始计数到x值时输出时钟翻转一次,在计数器继续计数达到2n+1时,输出时钟再次翻转并对计数器置一复位信号,使之从0开始重新计数,即可实现。
(2)占空比为50%的分频,设计思想如下:基于(1)中占空比为非50%的输出时钟在输入时钟的上升沿触发翻转;若在同一个输入时钟周期内,此计数器的两次输出时钟翻转分别在与(1)中对应的下降沿触发翻转,输出的时钟与(1)中输出的时钟进行逻辑或,即可得到占空比为50%的奇数倍分频时钟。当然其输出端再与偶数倍分频器串接则可以实现偶数倍分频。
n-0.5倍分频
采用模n计数器可以实现。具体如下:计数器从0开始上升沿计数,计数达到n-1上升沿时,输出时钟需翻转,由于分频值为n-0.5,所以在时钟翻转后经历0.5个周期时,计数器输出时钟必须进行再次翻转,即当clk为下降沿时计数器的输入端应为上升沿脉冲,使计数器计数达到n而复位为0重新开始计数同时输出时钟翻转。这个过程所要做的就是对clk进行适当的变换,使之送给计数器的触发时钟每经历n-0.5个周期就翻转一次。
对于任意的n+a/b倍分频(n、a、b∈z,a≦b)
分别设计一个分频值为n和分频值n+1的整数分频器,采用脉冲计数来控制单位时间内两个分频器出现的次数,从而获得所需要的小数分频值。可以采取如下方法来计算个子出现的频率:
设n出现的频率为a,则n×a+(n+1)×(b-a)=n×b+a 求解a=b-a; 所以n+1出现的频率为a.例如实现7+2/5分频,取a为3,即7×3+8×2就可以实现。但是由于这种小数分频输出的时钟脉冲抖动很大,现实中很少使用,本次设计未予以设计。
采用vhdl语言可以实现计数器的下降沿触发翻转,并且cpld/fpga具有可并行执行的特性,可以保证两种不同的触发翻转以及分频时钟输出保持同步,所以上述分频方法可以基于cpld/fpga予以实现。
多功能分频器的设计与实现
本设计使用第三方eda开发工具protel dxp。该开发工具支持层次原理图及vhdl语言混合设计并能进行编译、时序和功能仿真,支持xilinx、altera、lattice等公司的系列cpld/fpga器件,并且具有设计直观、层次性好等优点。在设计中采用两级原理图和底层vhdl语言三级结构来实现,使整个的设计以功能模块化,便于程序修改、功能升级和分频 系数的设定。对于分频值的设定采取了软件设定的方法,即只需在vhdl语言程序中按照自己的需求对相应的参数作修改、设定,而且设定值的取值灵活。
本次设计ck延时3ns后设值为111,即功能模块全部选中工作;偶数倍分频模块中模n计数器n设置为2,实现四分频;奇数倍分频模块中模2n+1计数器n设置为1实现三分频,占空比x设置为1即分频系数为1/3,模m计数器m值设置为2实现2m*(2n+1)=12分频;n-0.5倍分频模块中n设置为3,实现2.5分频。从方针波形中可以看出,实现了通用多功能分频器。若要得到其他值,只需修改相应功能模块的vhdl语言中的相关的参数,再进行编译、综合适配、下载即可。
器件适配及仿真波形
本 设计采用xilinx xc9536-5-pc44 cpld器件实现。
结束语
本文介绍了基于cpld/fpga的多功能分频器的设计方法,给出了原理图并用vhdl语言予以实现。结合isp技术,基于cpld/fpga的分频器可以变得像软件那样灵活且易于修改、升级,能够在同一个器件内实现多种分频功能,使之成为一种多功能硬件。在产品设计、制造过程中、甚至在交付用户使用之后,仍可根据要求对器件进行逻辑重构和功能修改。在数字系统设计中,为用户提供了一种低成本的解决方案,减少了工作量和成本。
(吴玉昌 胡荣强 王文娟 )
引言
分频器在cpld/fpga设计中使用频率比较高,尽管目前大部分设计中采用芯片厂家集成的锁相环资源 ,但是对于要求奇数倍分频(如3、5等)、小数倍(如2.5、3.5等)分频、占空比50%的应用场合却往往不能满足要求。硬件工程师希望有一种灵活的设计方法,根据需要,在实验室就能设计分频器并马上投入使用,更改频率时无需改动原器件或电路板,只需重新编程,在数分钟内即可完成。为此本文基于cpld/fpga用原理图和vhdl语言混合设计实现了一多功能通用分频器。
分频原理
偶数倍(2n)分频
使用一模n计数器模块即可实现,即每当模n计数器上升沿从0开始计数至n时,输出时钟进行翻转,同时给计数器一复位信号使之从0开始重新计数,以此循环即可。
奇数倍(2n+1)分频
(1)占空比为x/(2n+1)或(2n+1-x)/(2n+1)分频,用模(2n+1)计数器模块可以实现。取0至2n之间一数值x(0<x<2n),当计数器时钟上升沿从0开始计数到x值时输出时钟翻转一次,在计数器继续计数达到2n+1时,输出时钟再次翻转并对计数器置一复位信号,使之从0开始重新计数,即可实现。
(2)占空比为50%的分频,设计思想如下:基于(1)中占空比为非50%的输出时钟在输入时钟的上升沿触发翻转;若在同一个输入时钟周期内,此计数器的两次输出时钟翻转分别在与(1)中对应的下降沿触发翻转,输出的时钟与(1)中输出的时钟进行逻辑或,即可得到占空比为50%的奇数倍分频时钟。当然其输出端再与偶数倍分频器串接则可以实现偶数倍分频。
n-0.5倍分频
采用模n计数器可以实现。具体如下:计数器从0开始上升沿计数,计数达到n-1上升沿时,输出时钟需翻转,由于分频值为n-0.5,所以在时钟翻转后经历0.5个周期时,计数器输出时钟必须进行再次翻转,即当clk为下降沿时计数器的输入端应为上升沿脉冲,使计数器计数达到n而复位为0重新开始计数同时输出时钟翻转。这个过程所要做的就是对clk进行适当的变换,使之送给计数器的触发时钟每经历n-0.5个周期就翻转一次。
对于任意的n+a/b倍分频(n、a、b∈z,a≦b)
分别设计一个分频值为n和分频值n+1的整数分频器,采用脉冲计数来控制单位时间内两个分频器出现的次数,从而获得所需要的小数分频值。可以采取如下方法来计算个子出现的频率:
设n出现的频率为a,则n×a+(n+1)×(b-a)=n×b+a 求解a=b-a; 所以n+1出现的频率为a.例如实现7+2/5分频,取a为3,即7×3+8×2就可以实现。但是由于这种小数分频输出的时钟脉冲抖动很大,现实中很少使用,本次设计未予以设计。
采用vhdl语言可以实现计数器的下降沿触发翻转,并且cpld/fpga具有可并行执行的特性,可以保证两种不同的触发翻转以及分频时钟输出保持同步,所以上述分频方法可以基于cpld/fpga予以实现。
多功能分频器的设计与实现
本设计使用第三方eda开发工具protel dxp。该开发工具支持层次原理图及vhdl语言混合设计并能进行编译、时序和功能仿真,支持xilinx、altera、lattice等公司的系列cpld/fpga器件,并且具有设计直观、层次性好等优点。在设计中采用两级原理图和底层vhdl语言三级结构来实现,使整个的设计以功能模块化,便于程序修改、功能升级和分频 系数的设定。对于分频值的设定采取了软件设定的方法,即只需在vhdl语言程序中按照自己的需求对相应的参数作修改、设定,而且设定值的取值灵活。
本次设计ck延时3ns后设值为111,即功能模块全部选中工作;偶数倍分频模块中模n计数器n设置为2,实现四分频;奇数倍分频模块中模2n+1计数器n设置为1实现三分频,占空比x设置为1即分频系数为1/3,模m计数器m值设置为2实现2m*(2n+1)=12分频;n-0.5倍分频模块中n设置为3,实现2.5分频。从方针波形中可以看出,实现了通用多功能分频器。若要得到其他值,只需修改相应功能模块的vhdl语言中的相关的参数,再进行编译、综合适配、下载即可。
器件适配及仿真波形
本 设计采用xilinx xc9536-5-pc44 cpld器件实现。
结束语
本文介绍了基于cpld/fpga的多功能分频器的设计方法,给出了原理图并用vhdl语言予以实现。结合isp技术,基于cpld/fpga的分频器可以变得像软件那样灵活且易于修改、升级,能够在同一个器件内实现多种分频功能,使之成为一种多功能硬件。在产品设计、制造过程中、甚至在交付用户使用之后,仍可根据要求对器件进行逻辑重构和功能修改。在数字系统设计中,为用户提供了一种低成本的解决方案,减少了工作量和成本。
(吴玉昌 胡荣强 王文娟 )