FPGA中如何得到一个输入dpclk时钟输入的2分频同步dpclk时钟输入

FPGA学习笔记8:任意分频程序(verilog)
分频是FPGA入门学习者的第一课,因此掌握各种系数分频也是非常重要的技能,先就目前我所知道的分频技能总结如下:
第一、偶数倍分频
&&偶数倍分频应该是最容易实现的分频。实现方法有两种:
1)进行N倍偶数分频,可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟在计数到N/2-1时进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。
2)进行N倍偶数分频,可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N-1时,输出时钟在计数到N/2-1以及N-1时进行翻转,并在计数到N-1时给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。
以上两种方法都可以实现任意的偶数分频。
代码示例:实现8分频
clk_div(clk,rst_n,& divclk,num);
rst_n;//复位信号
output[10:0]//计数器
reg [10:0]
@(posedge clk or negedge rst_n)
(!rst_n)& num&=11'd0;
&if (num ==11'd3)
num&=11'd0;
num&=num+1'b1;
@(posedge clk or negedge rst_n)
(!rst_n) divclk&=1'b0;
if(num==11'd3) divclk&=~
clk_div(clk,rst_n,&divclk,num);
//输入时钟为100Mhz
rst_n;//复位信号
output[10:0]//计数器
@(posedge clk or negedge rst_n)
(!rst_n)& num&=11'd0;
&if (num ==11'd7)
num&=11'd0;
num&=num+1'b1;
@(posedge clk or negedge rst_n)
(!rst_n) divclk&=1'b0;
if((num==11'd3)||(num==11'd7)) divclk&=~
&endmodule
第二、奇数倍分频
1)对于实现占空比不是50%意外的N倍奇数分频,可以通过计数器来实现。如想实现占空比为1:2的3分频,由待分频的时钟触发计数器模三计数,然后在计数到1、2时进行翻转波形,即可实现分频。
2)对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。
代码示例:实现奇数分频
1)占空比为1:2的3分频
clk_div(clk,rst_n,&divclk,num);
//输入时钟为100Mhz
rst_n;//复位信号
output[10:0]//计数器&
@(posedge clk or negedge rst_n)
(!rst_n)& num&=11'd0;
&if (num ==11'd2)
num&=11'd0;
num&=num+1'b1;
@(posedge clk or negedge rst_n)
(!rst_n) divclk&=1'b0;
if((num==11'd1)||(num==11'd2)) divclk&=~
&endmodule
2)占空比为50%的3分频
clk_div(clk,rst_n,
&&&&&&&&&&&&&&
divclk1,divclk2,
&&&&&&&&&&&&&
//输入时钟为100Mhz
rst_n;//复位信号
//output[10:0]//计数器
[10:0]num1;
[10:0]num2;
@(posedge clk or negedge rst_n)
(!rst_n)& num1&=11'd0;
&if (num1 ==11'd4)
num1&=11'd0;
num1&=num1+1'b1;
@(negedge clk or negedge rst_n)
(!rst_n)& num2&=11'd0;
&if (num2 ==11'd4)
num2&=11'd0;
num2&=num2+1'b1;
@(posedge clk or negedge rst_n)
(!rst_n) divclk1&=1'b0;
if((num1==11'd2)||(num1==11'd4)) divclk1&=~divclk1;
@(negedge clk or negedge rst_n)
(!rst_n) divclk2&=1'b0;
if((num2==11'd2)||(num2==11'd4)) divclk2&=~divclk2;
divclk=divclk1|divclk2;
&endmodule
第三、任意小数分频实现
直接频率合成法(DDS)是重要的频率合成方法,在波形发生器中有极其重要的应用。该方法主要通过相位累加器循环计数,循环叠加一定的步长,从而得到固定频率的波形数据。
fc是系统时钟,f0是期望分频信号,k是分频系数,K是累加器控制字,N是累加器的位数。则通过下式计算出控制字K:
如为实现2.5分频,系统时钟为100M,期望分频时钟为40M,累加器为32位首先可计算得:
k=100/40=2.5 &
&K=(1/2.5)*2^32=.4
&&&&&&&&转化成十六进制为,其所得结果即为累加器控制字。
程序示例: &实现 2.5分频
module clk_div(clk,rst_n,clkdiv);
//时钟100M
input rst_n;
//input[31:0]
parameter STEP=32'h &;&
&//累加器控制字
reg[31:0]&
always @(posedge clk or negedge rst_n)
(!rst_n)result&=32'b0;
&else result&=result+STEP;
assign &clk_result=result[31];
assign clkdiv=clk_
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。在FPGA上实现时钟信号的多路同步输出该怎么做_百度知道
在FPGA上实现时钟信号的多路同步输出该怎么做
好像要用到FPGA内部的PLL,将时钟信号分成多路输送到其他板块,求高手解答该怎么做
输入时钟由一个50M的晶振提供
我有更好的答案
调用PLL的IP核可以多路输出!!!频率太低,要同步就是用代使能的全局时钟,50M做为输入,计算分频做为使能!!!
采纳率:12%
将FPGA的时钟输出到其他电路板?是为了同步数据采集吗?一般不推荐将FPGA时钟引出的,买个时钟驱动芯片分路输出更好。
就是进行同步数据采集,我们要做一个DVR视频采集卡
将50M晶振时钟经过BUFG缓冲后输出到PLL_BASE原语中,一个时钟就不用PLL_ADV IP核了,根据你自己的需要设置输出时钟的分频倍数,相移,具体看原语每句后面的注释就行了。推荐你去看看
抱歉,我们用的芯片是altera公司的cyclone II,能跟我讲一下在这个芯片中怎么处理吗,谢谢了
没用过altera的芯片。
为您推荐:
其他类似问题
您可能关注的内容
时钟信号的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。论文发表、论文指导
周一至周五
9:00&22:00
基于FPGA的变速率曼彻斯特编码设计
  【摘要】曼彻斯特码因其诸多特点在现实生活中有着非常广泛的应用,是许多大型系统不可缺少的部分。常见曼彻斯特编解码器设计都是在固定速率下传送接收信息的,因此其应用场合受到限制,本系统依据信号跟踪的算法实现编码模块发出的可变速率信号在解码模块同步头检测的同时提取出同步时钟信号进而实现曼彻斯特解码。可在更加复杂的情况下实现曼彻斯特编解码的功能。 中国论文网 /8/view-6383522.htm  【关键词】曼彻斯特编码;相位编码;FPGA;VHDL   曼彻斯特码(Manchester code),又称数字双向码、分相码或相位编码(PE),是一种常用的的二元码线路编码方式之一,被物理层使用来编码一个同步位流的时钟和数据。在通信技术中,用来表示所要发送比特流中的数据与定时信号所结合起来的代码。常用在以太网通信,列车总线控制,工业总线等领域。   目前常用的曼彻斯特编码方式主要有:采用专用的曼彻斯特编解码器,利用高速单片机实现,采用DSP信号处理器以及利用FPGA实现等。随着半导体技术的快速发展和生产工艺水平的不断提高,FPGA凭借其在性能和密度方面的提高和在修改和升级时,只是在计算机上修改和更新程序,简化了硬件设计,缩短了系统开发周期,提高了灵活性并降低了成本,获得广大硬件工程师的青睐。   该设计系统核心功能由FPGA实现,故硬件电路部分为一个FPGA最小硬件电路系统,包含有:数字信号输入源,FPGA集成芯片及配置模块电路,电源电路,按键电路,显示电路等。   本系统软件设计核心包含两部分:编码模块和解码模块。编码模块采用状态机的方法实现移位寄存器型编码即添加同步头,数据加载,奇偶校验,数据打包,并串转换,编码,由按键控制以可变速率发送等步骤;解码模块采用信号跟踪的算法对经曼彻斯特编码后发出的可变速率信号进行同步头检测,并提取出同步时钟信号,在恢复出的同步时钟信号下进行曼彻斯特解码经串并转换后输出数字信号并显示在数码管上。   本系统设计在quartusII 11.0编译环境中使用VHDL硬件描述语言对曼彻斯特编解码器模块进行电路设计、设计输入、编译、功能仿真、综合等一系列工作,实现对输入数字信号数据的编解码功能,并最终用modelsim软件进行仿真验证;本系统软件部分所有设计均在FPGA内实现。   图1 流程框图   在编码时序过程中:晶振产生的时钟信号clk_half经2分频得到clk时钟信号,在获得的clk作用下遵循状态机各个状态顺序执行,先添加6位同步头,继而进行数据加载,最后通过数据各位异或来添加偶校验位最终构成帧集合b_data。之后在clk_half作用下进行曼彻斯特解码。随后在clk作用下进行并串转换,把15位并行信号逐个移位串行输出,实现线路成帧编码。   流程框图如图1所示:曼彻斯特解码中由于编码后的数据流中含有同步时钟信息并且由于添加了同步头,故在解码过程中, 首先对串行输入的可变速率的曼彻斯特码数据即在clk_scan时钟的扫描作用下检测每一帧的同步头。如果检测到同步头,表明上一帧传输完毕下一帧传输开始。利用信号跟踪算法在检测每一帧同步头的同时在计数器进行计数比较得到信号速率计数值和时钟提取计数,并以此提取出解码同步时钟信号bd_tb_clk,在其作用下进行曼彻斯特解码过程。同时将同步时钟信号bd_tb_clk经分频得到bd_tb_clk_2时钟信号,并在bd_tb_clk_2时钟的作用下将串行移位寄存器中解码后的数据行输出恢复出8位有效数据,整个解码过程至此结束。   本次设计在Modelsim下进行仿真验证:编码模块部分仿真,输入进来的数字信号经添加同步头,数据加载,奇偶校验位等一系列步骤构成包集合数据10,此数据经并串转换后即进行曼彻斯特编码,最终由按键控制发送出去并显示在数码管上,经仿真验证,数据稳定后曼彻斯特编码的结果准确无误。   Modelsim仿真图如图2所示:   图2 编码仿真图   曼彻斯特解码模块仿真:   曼彻斯特编码后串行发出的数据在进行同步头检测的同时进行采集计数比较后获取信号速率计数值duty和同步时钟计数满度值divider,在同步时钟满度值和复位信号作用下获取同步时钟信号bd_tb_clk。Duty值为divider值的二倍,经验证正确,仿真图如图3所示:   图3 信号速率计数值duty和同步时钟计数满度值divider   在同步时钟信号下对接收端接收到的可变速率编码信号进行曼彻斯特解码所得到的数据经验证仿真,符合编解码原理,虽然有延迟但与原始输入信号一致均为“”。   利用FPGA实现变速率曼彻斯特编码,其中编码模块采用状态机的方法构成数据帧集合,并依据曼彻斯特编码原理进行编码。解码模块依据信号跟踪的算法在检测速率可变的编码数据同步头的同时进行同步时钟信号的提取,然后在同步时钟作用下进行曼彻斯特解码,恢复出原始数据信息,通过仿真实验证明利用FPGA实现曼彻斯特编解码具有实时性高,设计简单,成本低廉的特点,实现了对变速率信号的适应能力,可大大扩展其应用领域,达到预期的设计要求。   参考文献   [1]林艺文,方展伟.用FPGA实现曼彻斯特编解码[J].汕头大学学报(自然科学版),2004.   [2]Anton Ageev.Manchester Decoder and Clock Recovery Module for FPGA Prototype of Active RFID Tag.Berkeley Wireless Research Center,Electrical Engineering and Computer Science Department,2009.   [3]李辉.基于FPGA的数字系统设计[M].西安电子科技出版社,2008.   [4]王耿,姜智忠.用HDL语言实现循环兀余校验[J].微电子学与计算机,2002.   [5]黄智伟,王彦,陈琼.FPGA系统设计与实践[M].北京:电子工业出版社,2005.   [6]Hossein Borhanifar.DWDM Optical Supervisory Channel by Manchester Code on FPGA.World Academy of Science,Engineering and Technology 72,2010   [7]曹彪.FPGA实现1553B编解码设计[J].现代商贸工业,2010.   [8]陈新坤,周东.Manchester编码器的FPGA设计与实现[J].电子科技大学学报,2003.   [9]周益,高爽.Manchester解码器的锁相环实现[J].仪器仪表学报,2007.   [10]董健,董会宁.基于FPGA的曼彻斯特编解码器研究[J].无线通信技术,2010.   [11]杨存祥.基于FPGA的测井系统中1553B总线编解码器设计[J].计算机测量与控制,2010.   [12]程希.一种基于FPGA的曼彻斯特编译码电路设计[J].三峡大学学报(自然科学版),2008.   [13]石红梅.用FPGA实现1553B总线接口中的曼码编解码器[J].新器件新技术,2004.   [14]茅飞.基于FPGA的曼彻斯特码功能实现技术[J].机电产品开发与创新,2011.   [15]王铁男.基于FPGA的曼彻斯特码编解码器的实现[J].石油仪器,2011.   [16]汤晓曦.基于FPGA的曼彻斯特编解码器设计[J].电子设计工程,2011.   [17]刘远峰.基于FPGA的曼彻斯特编解码器设计与实现[J].现代计算机,2010.
转载请注明来源。原文地址:
【xzbu】郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。
xzbu发布此信息目的在于传播更多信息,与本网站立场无关。xzbu不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。

我要回帖

更多关于 单板输入时钟异常 的文章

 

随机推荐