奇数分频的Verilog实现

来源:EETOP BLOG从功能上来说,时钟分频电路主要分为整数分频和小数分频,而整数分频又分为奇数分频和偶数分频。下面主要讲整数分频(这里讲的整数分频的占空比都是50%):1、偶数分频偶数分频是分频电路中最简单的。例如我们要进行2N(N为正整数)分频(clk_2N),对于50%的占空比来说,则表明clk_2N中有N个周期的高电平和N个周期的低电平(此处的周期是指原始时钟clk的周期)。所以在Verilog实现中主要考虑两点:1)   实现一个模N计数器2)   在模N计数器计满时,将输出时钟翻转根据上面的两点,写出Verilog代码always@(posedge clk or negedge rst_n)            // 实现模N计数器beginif(rst_n)count<=0;else if(count==N-1)count<=0;elsecount<=count+1;endalways@(posedge clk or negdege rst_n)           // 计数器计到(N-1)将输出时钟翻转beginif(!rst_n)clk_2N<=0;else if(count==N-1)clk_2N<=~clk_2N;elseclk_2N<=clk_2N;end2、奇数分频当我们需要奇数(2N+1)分频,且占空比为50%时,偶数分频所采用的方法已经不适用了,因为2N+1的一半是N+0.5,单独对一个时钟计数是得不到0.5个时钟周期的,因为一个计数器只能对时钟的上升沿或者下降沿采样(不能同时采样两个边沿),所以一个周期之内只能计一次,无法得到0.5。但是我们注意到在一个时钟周期内,上升沿和下降沿之间刚好隔0.5个时钟周期。既然一个时钟无法得到0.5的计数,而一个时钟周期的上升沿和下降沿之间刚好隔0.5个时钟周期,综合这两点,计数分频的实现思路就出来了:采用两个完全一样的时钟,然后用两个计数器分别对这两个时钟计数,其中一个计数器采用上升沿计数,另一个计数器采用下降沿计数(相当于是一个时钟,然后两个计数器分别采样上升沿和下降沿),然后利用偶数分频的办法,利用两个计数器,得到两个中间时钟变量,然后利用两个中间时钟变量进行逻辑操作,衍生出0.5个时钟周期。所以实现2N+1的奇数分频有以下两种思路:1)  得到中间时钟clk1、clk2(周期为2N+1,N个周期的高电平,N+1个周期的低电平),clk1、clk2的相位相差180度,也就是clk1、clk2是分别对原始时钟的上升沿和下降沿采样得到的,相隔半个时钟周期,最后将两个时钟取或,就能在各自的时钟上加上0.5个周期的高电平,实现占空比为50%的奇数分频。2)  上面的方法是将两个时钟取或,其实也可以取与,相当于在原来的高电平上减去0.5个周期的高电平,这就要求得到的clk1、clk2含有N+1个周期的高电平。根据上面的思路,写出思路1的Verilog实现代码,思路2实现类似,不做说明。always@(posedge clk or negedge rst_n)     // 对上升沿计数beginif(!rst_n)count1<=0;else if(count1==2N)count1<=0;elsecount1<=count1+1;endalways@(posedge clk or negedge rst_n)  // 中间时钟clk1beginif(!rst_n)clk1<=0;esle if(count1==N||count1==2N)clk1<=~clk1;elseclk1<=clk1;endassign clk_inv = ~clk;          // 将原始时钟翻转always@(posedge clk_inv or negedge rst_n)     // 对下降沿计数beginif(!rst_n)count2<=0;else if(count2==2N)count2<=0;elsecount2<=count2+1;endalways@(posedge clk_inv or negedge rst_n)  // 中间时钟clk2beginif(!rst_n)clk2<=0;else if(count2==N||count2==2N)clk2<=~clk2;elseclk2<=clk2;endassign clk_2N+1 = clk1|clk2;   // 2N+1分频时钟输出注:由于触发器基本都是上升沿采样的,所以当我们写(negedge clk)时,综合出来的电路其实是在触发器的时钟输入端加了一级反相器,所以在上面的代码中,笔者直接采用上升沿采样,更直观的表现出最后的电路。

(0)

相关推荐

  • 使用Verdi的小技巧(二)

    在学习和使用 Verilog 的过程中,难免会碰到需要深入理解仿真器调度的问题.今天这篇聊聊使用 Verdi 去分析 NBA Delay 的问题. NBA 就是 NonBlocking Assignm ...

  • FPGA的Veilog HDL语法、框架总结

    摘要:Verilog HDL硬件描述语言是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,具有灵活性高.易学易用等特点.Verilog HDL可以在较短的时间内学习和掌握,FPGA的Veilo ...

  • Verilog非阻塞赋值添加#1延迟设计讨论

    导言: 在进入文章前,先看一段代码如下,这段代码是上次发的IIC的IP核中的一段,具体内容大家可以参阅IIC(一)以及 IIC(二) . // generate clk enable signal   ...

  • ASIC设计流程介绍

    典型的ASIC设计流程可分为逻辑设计和物理设计两个部分. 逻辑设计开始于高层次设计规范和芯片架构.芯片架构描述高层次功能.功耗和时序(设计运行的速度)需求.紧接着对设计进行寄存器传输层的描述,通常称为 ...

  • 基于system verilog的图像处理验证平台 bmp文件解析

    版权所有:转载请注明 https://blog.csdn.net/jayash/article/details/79947314 基于FPGA的图像处理中,rtl代码的仿真验证一直是重中之重, 之前也 ...

  • 奇数和化对码定双胆验证贴(宇宙数字爱好者)

    宇宙数字爱好者 收藏2021-5-11 12:44 110期321-53-17-9(27)√ 111期271-79-15-3(49)√ 112期349-13-95-7(16)√ 113期012-13- ...

  • Verilog HDL常用的仿真知识

    在描述完电路之后,我们需要进行对代码进行验证,主要是进行功能验证.现在验证大多是基于UVM平台写的systemverilog,然而我并不会sv,不过我会使用verilog进行简单的验证,其实也就是所谓 ...

  • Verilog HDL语言和VHDL语言的对比

    独 家 XILINX赛灵思全系列优势供应 XCVU9P-2FLGB2104I   200PCS XCVU9P-2FLGA2104I   500PCS XCVU13P-2FLGB2104I  300PC ...

  • 单节17分频虐框 球队冲刺浓眉复出正当时

    连续三场出战超过39分钟后,安东尼-戴维斯的体能亮起了红灯.与火箭的比赛,沃格尔教练选择让戴维斯轮休.而与詹姆斯.施罗德一起复出,戴维斯肩上的压力骤然减轻,在印第安纳,戴维斯出战35分钟,得到28分1 ...

  • verilog的一些技巧,就靠他拿offer了!

    FPGA各位和数字IC设计岗位面试时常常会问下verilog的一些基本概念,做了下整理,面试时一定用得上! 1,reg与wire的区别: 相同点: 都能表示一种类型类型. 不同点: wire 连线型数 ...

  • 以太网IP核代码(verilog)

    基本介绍:  千兆位和10G数据包处理(8位和64位数据路径)的以太网相关组件的集合.包括用于处理以太网帧以及IP,UDP和ARP的模块,以及用于构建完整UDP/IP堆栈的组件.包括用于千兆位和10G ...

  • 基于Verilog HDL的二进制转BCD码实现

    在项目设计中,经常需要显示一些数值,比如温湿度,时间等等.在数字电路中数据都是用二进制的形式存储,要想显示就需要进行转换,对于一个两位的数值,对10取除可以得到其十位的数值,对10取余可以得到个位的数 ...

  • ​再论孙颖莎“奇数年”爆发和“日本福地”

    一 最远要追溯到八年前,2013年13岁的孙颖莎首次参加全国少年锦标赛打入了决赛,决赛中3-4负于了王曼昱,当时14岁.已"身高马大"的王曼昱已经进入了国家二队. 没有拿到冠军,孙 ...