• FPGA三分频,五分频,奇数分频


    我们在做FPGA设计时,有时会用到时钟频率奇数分频的频率,例如笔者FPGA的晶振为50M,当我们需要10M的时钟时,一种方式可以使用DCM或PLL获取,系统会内部分频到10M,但其实VERILOG内部也完全能实现,所以我们还是来了解一下。

                  有这样一个欢乐的时钟了,我们要得到以下的分频效果:

       

                 

    奇数分频的难点就在于,三分频要求1.5倍的时钟时间翻转一次,这样整体的周期时间是原来的3倍,即三分频。五分频亦类似。而恰恰verilog不允许你在两个always模块里对同一reg赋值。

            那怎么得到三分频的时钟呢?请看下图

    如果生成这样一个占空比2/3,周期三倍于时钟的信号(2行)。同时产生一个超前或落后于它半个Clock周期时间的信号(3行),对两信号做与运算

    ,得到的结果就恰好是三分频的时钟(4行);而Verilog中恰好不允许你在两个always模块里对同一reg赋值,但允许你在Clock的Posedge和Negedge分别对两个不相关的信号赋值。

    [cpp] view plain copy
     
     print?
    1.               assign clkout=state1[1]&state2[1];  
    2. always@(posedge clk)  
    3. begin  
    4.     case(state1)  
    5.     begin  
    6.         2'b01:state<=2'b10;  
    7.         2'b10:state<=2'b11;  
    8.         2'b11:state<=2'b01;  
    9.     endcase  
    10. end  
    11. always@(negedge clk)  
    12. begin  
    13.     case(state2)  
    14.         2'b01:state<=2'b10;  
    15.         2'b10:state<=2'b11;  
    16.         2'b11:state<=2'b01;  
    17.     endcase  
    18. end  


    同样的,五分频

    [cpp] view plain copy
     
     print?
    1. assign clkout=state1[1]&state2[1];  
    2. always@(posedge clk)  
    3. begin  
    4.     case(state1)  
    5.     begin  
    6.         3'b010:state<=3'b011;  
    7.         3'b011:state<=3'b100;  
    8.         3'b100:state<=3'b101;  
    9.         3'b101:state<=3'b110;  
    10.         3'b110:state<=3'b111;  
    11.         3'b111:state<=3'b010;  
    12.     endcase  
    13. end  
    14. always@(negedge clk)  
    15. begin  
    16.     case(state2)  
    17.         3'b010:state<=3'b011;  
    18.         3'b011:state<=3'b100;  
    19.         3'b100:state<=3'b101;  
    20.         3'b101:state<=3'b110;  
    21.         3'b110:state<=3'b111;  
    22.         3'b111:state<=3'b010;  
    23.     endcase  
    24. end  

    什么原理呢?其实这样想挺好理解的:

    三分频,每1.5个时钟周期就要翻转一次,因此我们通过时钟上升沿构造低电平占1个时钟周期,高电平占2个时钟周期的信号,再通过时钟的下降沿产生相同的信号,这相当与把原信号右移了半个时钟周期,相与后高电平被削掉了半个周期,低电平添了半个周期,就产生了1.5个时钟周期翻转一次的效果。

    五分频类似。

    由此猜测11分频可以由上升沿构造低电平占5个时钟周期,高电平占6个时钟周期的信号产生,我们来验证一下

    验证是的啦

     转载自:http://blog.csdn.net/lt66ds/article/details/10035187

  • 相关阅读:
    Ubuntu终端Terminal常用快捷键
    继承(一)
    c语言中动态数组的建立
    指针的一些小的知识点
    什么是内存地址
    组合(composition)与继承(inheritance)
    重载new和delete
    不要轻易delete void*指针,这样会隐藏比较多的错误。
    内存管理运算符new delete与内存管理函数malloc free的区别——已经他们对对象创建的过程。
    自动类型转换之全局重载运算符与成员重载运算符
  • 原文地址:https://www.cnblogs.com/chengqi521/p/6844190.html
Copyright © 2020-2023  润新知