verilog中计数器是如何实现分频器verilog 20倍的,举个例子说一说?

博客访问: 92510
博文数量: 25
博客积分: 1961
博客等级: 上尉
技术积分: 300
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如赛灵思(Xilinx)的DLL.来进行时钟的分频,倍频以及相移。但是对于时钟要求不高的基本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。因此很多招聘单位在招聘时往往要求应聘者写一个分频器(比如奇数分频)以考核应聘人员的设计水平和理解程度。下面讲讲对各种分频系数进行分频的方法:
第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。
第二,奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:
首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3或者2/3。
如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。这种方法可以实现任意的奇数分频。归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。
另外一种方法:对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到。得到占空比为50%的奇数倍分频。下面讲讲进行小数分频的设计方法
第三,小数分频:首先讲讲如何进行n+0.5分频,这种分频需要对输入时钟进行操作。基本的设计思想:对于进行n+0.5分频,首先进行模n的计数,在计数到n-1时,输出时钟赋为‘1’,回到计数0时,又赋为0,因此,可以知道,当计数值为n-1时,输出时钟才为1,因此,只要保持计数值n-1为半个输入时钟周期,即实现了n+0.5分频时钟,因此保持n-1为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n-1时对计数触发时钟进行翻转,那么时钟的下降沿变成了上升沿。即在计数值为n-1期间的时钟下降沿变成了上升沿,则计数值n-1只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变为0。因此,每产生一个n+0.5分频时钟的周期,触发时钟都是要翻转一次.
举例:用Verilog语言写的三分频电路
//上升沿触发的分频设计module three(clkin, clkout);//定义输入端口//定义输出端?
reg [1:0] step1,
always @(posedge clkin)begincase (step)2'b00: step<=2'b01;2'b01: step<=2'b10;2'b10: step<=2'b00;default :step<=2'b00;endcaseend
always @(negedge clkin)begincase (step1)2'b00: step1<=2'b01;2'b01: step1<=2'b10;2'b10: step1<=2'b00;default :step1<=2'b00;endcaseend
assign clkout=~(step[1]|step1[1]);endmodule
方法二:// 如果duty cycle =50%, 可以第一个周期第二个周期输出原先clock,第三个周期输出低这样可以实现三分频,输出是占空比1:1的三分频.module three(clk,throut) ;reg q1,q2,d,
always @(posedge clk)if(!d)q1=1'b1;elseq1=~q1 ;
always @(negedge clk)if(!d)q2=1'b1;elseq2=~q2 ;
always @(q1 or q2)d=q1&q2 ;
always @(posedge d)throut=~
用Verilog语言写五分频电路,占空比为50%:module div_5 ( clkin,rst,clkout );input clkin,reg [2:0] step1, step2;always @(posedge clkin )if(!rst)step1<=3'b000;elsebegincase (step1)3'b000: step1<=3'b001;3'b001: step1<=3'b011;3'b011: step1<=3'b100;3'b100: step1<=3'b010;3'b010: step1<=3'b000;default:step1<=3'b000;endcaseendalways @(negedge clkin )if(!rst)step2<=3'b000;elsebegincase (step2)3'b000: step2<=3'b001;3'b001: step2<=3'b011;3'b011: step2<=3'b100;3'b100: step2<=3'b010;3'b010: step2<=3'b000;default:step2<=3'b000;
endcaseendassign clkout=step1[0]|step2[0];
阅读(4676) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~
很好的, 收藏了
推荐一个博客,提供很多免费软件编程电子书下载:
http://free-ebooks.appspot.com
请登录后评论。在电子工程世界为您找到如下关于“分频”的新闻
分频资料下载
在复杂数字逻辑电路设计中,经常会用到多个不同的时钟信号。介绍一种通用的分频器,可实现2~256 之间的任意奇数、偶数、半整数分频。首先简要介绍了FPGA 器件的特点和应用范围。接着介绍了通用分频器的基本原理和分类,并以分频比为奇数7 和半整数6.5 的分频器设计为例,介绍了在QuartusII开发软件下,利用Verilog硬件描述语言来设计数字逻辑电路的过程和方法。在数字逻辑电路设计中,分频...
Hi-end高保真系统音箱分频器的精确设计计算法:顶级hi-end高保真音响系统,为音响系统的最高等级,与之搭配的音箱需要有很高的技术水平,成为hi&end系统的喉舌。本文改变以往比较理论化的设计方法,采用一种更合理、更科学、更实验化的设计计算方法,实为成功设计制造分频器的关键 关键词:电感;分频器;分频点 音响的分频器分为前级分频、功率分频两类。前级分频是前级电路中由电子元件产生...
本文使用实例描述了在FPGA/CPLD上使用VHDL进行分频器设计,包括偶数分频、非50%占空比和50%占空比的奇数分频、半整数(N+0.5)分频、小数分频、分数分频以及积分分频。所有实现均可通过Synplify Pro或FPGA生产厂商的综合器进行综合,形成可使用的电路,并在ModelSim上进行验证。
PLL工作原理[pic]
频率合成环路包含5个基本的功能电路:参考振荡;鉴相器;低通滤波器;压控振荡器;分频器。
参考振荡给频率合成环路提供基准信号,使手机的工作频率与系统保持一致鉴相器是一个相位—电压转换装置,它将信号相位的变化变为电压的变化。显然,这是一个比较器。
低通滤波器滤掉鉴相器输出的高频成分,以防止高频谐波对VCO电路的影响。在鉴相器中...
使用VHDL进行分频器设计使用 VHDL 进行分频器设计作者:ChongyangLee摘要使用 VHDL 进行分频器设计 作者:ChongyangLee本文使用实例描述了在 FPGA/CPLD 上使用 VHDL 进行分频器设 计,包括偶数分频、非 50%占空比和 50%占空比的奇数分频、半整数 (N+0.5)分频、小数分频、分数分频以及积分分频。所有实现均可...
VHDL分频器,利用分频比较错法,要实现K=324/28=8....的分频周期为28,18个8分频和10个9分频循环,所以设一个0到27的循环计数器,每当1、4、7、10、13、16、19、22、27时进行9分频,其他时为8分频;为使占空比尽量接近50%,需要在每一个8或9分频中设定一下输出几个时钟的0和1。...
分频器的硬件描述语言设计分频器的硬件描述语言设计在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号。我们知道,在硬件电路设计中时钟信号是最重要的信号之一。 下面我们介绍分频器的VHDL 描述,在源代码中完成对时钟信号 CLK 的 2 分频, 4 分频, 8 分频, 16分频。 这也是最简单的分频电路,只需要一个计数器即可。LIBRARY...
基于CPLDFPGA的半整数分频器的设计[pic]关于小数分频器 的小组要求:1:应用ALTERA器件实现2:语言尽量用vhdl语言3:实现8.7分频4:通过一个月的时间实现,应包括电路原理图,电路示意图,vhdl源程序,程序流成图,波形仿真图等.5:本人有各种芯片,负责防真和电路实现!计划:分以下几个步骤进行1:小数分频原理2:电路组成3:小数分频器的HDL...
& 给出了一种基于FPGA的分频电路的设计方法.根据FPGA器件的特点和应用范围,提出了基于Verilog的分频方法.该方法时于在FPGA硬件平台上设计常用的任意偶数分频、奇数分频、半整数分频和任意整数带小数分频提供了一种思路.在QuartusII软件上的仿真结果表明.本文给出的分频方法简单实用,效果良好....
。 &&& 十、电子二分频功放 &&&& 图10是电子二分频功率放大器。众所周知,高保真音箱是由低音和高音扬声器单元组成的(三分频音箱还有中音单元),必须使用分频器,使它们各放其声。传统的分频方法是在功放以后采用LC分频器,由于这种分频器处理的是功放输出的大电流信号,因此体积大、制作成本高、制作和调试困难;分频器插接在功放与扬声器...
分频相关帖子
+ ID1 + MC0 + TAIE;& &&&//SMCLK做时钟源,8分频,增加计数模式,开中断&&
&&TACCR0 = 9999;& && && && && && &&nbsp...
) /* BT1 is held if this bit is set *,如果这个位置1,则暂停/
利用 BTCTL|=BTHOLD; //可以使其暂停。
#define BTSSEL (0x80) /* fBT = fMCLK (main clock) 位定义*/
备注:BTSSEL ,与BTDIV 确定是否对信号源进行分频。分频后它的最长延时如果使用32768KHZ的话,可以达到2S
MSP430的3种时钟信号:MCLK系统主时钟;SMCLK系统子时钟;ACLK辅助时钟。
(1)MCLK系统主时钟。除了CPU运算使用此时钟以外,外围模块也可以使用。MCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。
(2)SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以选择任何一个振荡器所产生的时钟信号并进...
; &晶振的使用极其广泛,小到蓝牙耳机,大到这些品牌手机,例如苹果,华为等。现在一些时下流行的机型,使用的基准时钟VCO组件是26MHz,26MHzVCO电路产生的26MHz信号再进行2分频,来产生13MHz信号供其它电路使用。基准时钟VCO组件一般有4个端口:输出端、电源端、AFC控制端及接地端。另一种是由一个13MHz石英晶体、集成电路和外接元件构成晶振振荡电路,13MHz晶振在其上面一般...
/比较寄存器,每个有独立的捕获事件。
  (4)5个输出模块,支持脉宽调制的需要。
  定时器控制寄存器TACTL的各位可控制TImer_A的配置,并定义16位定时器的基本操作,可选择原始频率或分频后的输入时钟源及4种工作模式。另外还有清除功能和溢出中断控制位。5个捕获/比较寄存器CCRx的操作相同,它们通过各自的控制寄存器CCTLx进行配置。
  时间量采样及PWM控制的实现原理...
,结果行不通,做了无用功,于是静下心来想想,还是一步一步的来。
  我先用STM32的通用定时器用PWM模式产生四路相同占空比,不同频率的PWM波,配置如下:
  (RCC_APB1Periph_TIM2,ENABLE);//使能TIM2时钟
  (TIM2);//使用内部时钟
  设置TIM时钟频率除数的预分频值
  选择计数器模式
  设置下一个更新事件装入活动的自动重装载寄存器...
,该类不常见;另一类则是Programmable Timer(可编程定时器),顾名思义,该类Timer的定时时间是可以由用户的程序来控制的,控制的方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等。此类Timer应用非常灵活,实际的使用也千变万化,比如实现计数、定时、或者输出PWM等。由于时钟源可以自由选择,因此,此类Timer一般均与Event Counter(事件计数器...
在计数周期内执行若干次,此时可以通过定时电路实现这一功能,起到调节时间的目的,如定时开关,定时提醒等。典型的定时电路如下图所示。这是一个简易定时器,它主要由一片14位二进制串行计数/.分频集成电路IC1和供电电路等组成。IC1内部电路与外围元件R4,R5,RP1,C4组成RC振荡电路。当振荡信号在IC1内部经14级二分频后,在IC1的3脚输出经8192次(2的13次方)分频信号,也就是说,若振荡周期...
定时电容,由它决定两次发射遥控信息的时间间隔。编成的二进制码进一步对内部产生的38KHz方波进行调制。调制后的编码信号由IC1的1脚输出,经VT1放大后,由红外发光二级管VL1发出。C2,RP与内部集成电路构成76KHz振荡器,76KHz信号经内部分频后得到38KHz信号,由此可见,调节RP可以改变载波频率。当LC2190集成电路处于发射状态时,它同时驱动发光二级管VL2发光。R3为其限流电阻...
{CLK_PCKENR1_PCKEN11=1;//开启定时器3外设时钟 TIM3_CR1=0x80;TIM3_PSCR=0x00;//预分频器TIM3_SMCR=0x77;//外部计数模式1TIM3_ARRH = 0x00; //TIM3_ARRL = 50; // TIM3_IER = 0x01; // 允许更新中断TIM3_CR1 |= 0x01; // 计数器使能,开始计数}
void GPIO_Init...
你可能感兴趣的标签
热门资源推荐Verilog分频器设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Verilog分频器设计
&&verilog 实验必备
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩17页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢verilog&实现小数分频(小数分频器)
&&&&小数分频无法做到1:1
的占空比。例如用77 分频得到16M&时钟的生成原理如下:对于77
M的时钟,一个sts-12帧有9720拍。对于16M时钟,一个sts-12帧有32*8*8拍。即77M下每计数1215,16M下计数256.
=4.76 考虑到数字处理只能是整数,则需要在每m 个5拍扣一拍,每 n个4拍扣一拍。列方程为:
m + n =256
+ 4n =1215
得到 m= 191, n = 65, 即通过191个5分频和65个4分频实现16M的时钟。
小数分频是通过可变分频和多次平均的方法实现的。例如要实现4.7分频,需要在10次分频中做3&次4分频和7次5分频就可以做到,再如实现5.67分频,只要在100次分频中,做67次6分频,33次5分频即可。因为从N分频到N+1分频和从N+1分频到N分频的切换,会产生一个随时间增长的相位移。考虑到小数分频中需要多次进行两种频率分频,必须将两种分频均匀,这种“均匀”工作是通过计数器完成的,这里仅给出一位小数的情况,下面简要介绍这种混合的方法:
每进行一次分频,计数值为10减去分频系数的小数部分,各次计数值累加。若累加结果小于10,则进行 N +1
分频,若大于或等于10,则进行 N 分频。以8.7 分频为例进行设计时,需要进行3次 8分频,7次 9
分频。该例中计数值(10-7)=3,前三次累加结果都小于10,所以为9分频,第四次累加结果为12,则去掉十位数后累加结果变为2,同时进行8分频,下表给出了该分频器的分频过程。
&&&&&&&&&&
分频系数8.7
--------------------------------------
序号&&&&&&&&&&
累加结果&&&&&&
&1&&&&&&&&&&&&&
3&&&&&&&&&&&&&&&&&&9
&2&&&&&&&&&&&&&&6&&&&&&&&&&&&&&&&&&9
&3&&&&&&&&&&&&&&9&&&&&&&&&&&&&&&&&&9
&4&&&&&&&&&&&12-10
=2&&&&&&&&&&&&&&8
&5&&&&&&&&&&&&&&5&&&&&&&&&&&&&&&&&&9
&6&&&&&&&&&&&&&&8&&&&&&&&&&&&&&&&&&9
&7&&&&&&&&&&&11-10
=1&&&&&&&&&&&&&&8
&8&&&&&&&&&&&&&&4&&&&&&&&&&&&&&&&&&9
&9&&&&&&&&&&&&&&7&&&&&&&&&&&&&&&&&&9
&10&&&&&&&&&&&&&10&&&&&&&&&&&&&&&&&8
以下是代码模块:
//top module
module fd89bits( clkin,reset,a,clkout
&&& output reg
clkout1,clkout2;&&
&& fd8bits&
dut1(clkin,reset,clkout1);
&& fd9bits&
dut2(clkin,reset,clkout2);
clkin) begin
clkout &= clkout1;
clkout &= clkout2;
`timescale 1ns / 1ps
module fd8bits(
& clk_in,reset,clk_out& );
& input clk_
& output reg clk_
& reg[3:0]
clk_in) begin
if(!reset)
count &= 0;
& else begin
if(count& & 7)
count& &= count + 1;
count& &= 0;
clk_out& &= count[2];
module fd9bits(
clk_in,reset,clk_out& );
& input clk_
& output reg clk_
& reg[3:0]
clk_in) begin
if(!reset)
count &= 0;
& else begin
if(count& & 8)
count& &= count + 1;
count& &= 0;
clk_out& &= count[2];
// testbench
module testbench(
& reg clk_
& wire clk_
& fd89bits dut(clk_in,reset,a,clk_out);
& initial begin
&&& clk_in=
& reset = 0;
& reset = 1;
& forever begin
&always #10 clk_in = ~clk_
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。verilog 二分频程序_百度知道
verilog 二分频程序
为什么在程序中,clk_out=~clk_out就二分频了呢?不应该是clk_out=1/2clk_in吗?初学者
我有更好的答案
clkout是其2分频的结果,那么clkout就是每分钟变动500次;clk_out=~clk_out的意思是每隔一个clkin的周期对clkout取反,则clkout的周期变成了2倍的clkin周期,这就成功的2分频了;而clk_out=1&#47,时钟clkin每分钟(在0和1之间)变动1000次,比如说2分频指的是时钟变化频率减半
采纳率:33%
为您推荐:
其他类似问题
您可能关注的内容
分频的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 verilog分频器设计 的文章

 

随机推荐