当前位置:首页 > > 充电吧
[导读]分频分为偶分频和奇分频。分频器从某种程度上来讲是计数器有计划的输出。1.偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟


分频分为偶分频和奇分频。
分频器从某种程度上来讲是计数器有计划的输出。

1.偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。

2.奇数倍分频:

A、第一种比较简单的办法,通过计数器来实现。如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到0的时候输出的时钟翻转一次,当计数器计数到2(1也是可以的,只要在0-2之间输出时钟变化一次即可)的时候再翻转一次这样就可实现三分频,不过这种方法得到的时钟占空比不是那么的优美,是1/3或者是2/3。下面是对应的三分频verilog代码和相应的testbench代码。


//三分频,占空比不是50%。
module div_3 (q,clk,reset);
    output q;
    input reset;
    input clk;
    reg q;
    reg [1:0] count;   // 设了一个2位的计数器可以从0计数到2;
always @ (posedge clk or posedge reset)   // 同步复位,上升沿有效
    if (reset)                           // 复位
      begin
        q<=1'b0;
        count<=2'b00;
      end
    else if(count==0)                // 第一个CLK上升沿来的时候q翻转一次计数器加一;
      begin
        q<=~q;
        count<=count+1'b1;
      end
    else if(count==2)              //第3个CLK上升沿来的时候输出q翻转一次计数器归零;
      begin
        q=~q;
        count<=2'b00;               //把计数复位
      end
    else                                 //   第二个CLK上升沿来的时候q不动作,计数器加一。   
      begin
        count<=count+1'b1;
      end
endmodule
//测试代码(testbench)适合xilinx的vivado
module test;
    reg clk;
    reg reset;
    wire q;
    
    div_3 d3 (q,clk,reset);
always #20 clk=~clk;
    initial
      begin
        clk=1'b0;
        reset=1'b1;
        #24 reset =1'b0;
      end
endmodule




下面是仿真出来的结果,最后输出的时钟的周期是原来时钟周期的三倍,但是唯一不同的地方就是占空比不是50%。


B、如果对于自己的结果不是很满意,可以再搞一个占空比是50%的出来,先把原理讲一下:

1)首先,如果我们同时利用时钟的上升沿和下降沿来制作一个分频器,这个只是理论上的,一般不用这种方法。

     我们还是来整三分频的分频器。用一个3模的计数器,时钟的上上沿和下降沿都计数,那么当计数器从0计数到2的时候输出时钟就会翻转一次,计数器复位,然后等待计数3次之后再翻转一次,计数器复位。用代码表示是这个样子的。

always @( posedge clk or negedge clk)  //时钟的上升沿河下降沿都有效
  if(reset)
    begin
       k<=0;
       clk_3<=0;
    end
 else
 if(k==2)    //计数到3个边沿之后。输出时钟就会翻转一次。
    begin
       k<=0;
       clk_3<=~clk_3;
    end
 else
    k<=k+1;

2)接下来搞一种用“”或“”逻辑来实现奇数分频的技术。

      接着来玩儿三分频的计数器。

      

module fdiv( clk, reset_n, clkout );
input    clk;
input    reset_n;
output   clkout;

reg [1:0]  count;
reg        div1;
reg        div2;
wire       clkout;

always @(posedge clk)
begin
if ( reset_n )
       count <= 2'b00;
else
       case ( count )
         2'b00 : count <= 2'b01;
         2'b01 : count <= 2'b10;
         2'b10 : count <= 2'b00;
         default :
                   count <= 2'b00;
       endcase
end
always @( posedge reset_n or posedge clk ) //the first divder module.
begin
if (   reset_n )
       div1 <= 1'b1;   //this is the first problem that I wanna to solve, because I just wondering the "1" cannot make a high level.
 else if ( count == 2'b00 )
       div1 <= ~ div1;
end
always @( posedge reset_n or   negedge clk )  //the second divder module.
begin
if ( reset_n )
       div2 <= 1'b1;
else if ( count == 2'b10 )
       div2 <= ~ div2;
end

assign clkout = div1 ^ div2;
endmodule

这是验证代码


`timescale 1ns/1ns
//`include "fdiv.v"
module fsim();
    reg clk;          //input  对应的端口应当申明为 reg,
    reg reset_n;
    wire clkout;       //output 对应的端口申明为 wire,
   // wire[2:0] div1;  //怎么让结果里面显示出来中间的一些变量的变化
    
    fdiv fdiv( clk, reset_n, clkout );
    always #20 clk=~clk;
    
    initial
    begin
        clk=1'b0;
        reset_n=1'b1;
        #40 reset_n =1'b0;
    end
endmodule





本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭