zoukankan      html  css  js  c++  java
  • 低于时钟频率的任意频率生成(相位累加器)

    相位累加器主要用在直接数字频率合成器(DDS)中,其中的几个主要的参数为输入频率fc,输出频率fo,计数器位宽N,频率控制字K(即计数器递增步长)。它们之间的关系为:fo=(fc * K) / 2N,假设输入频率fc为100MHz,计数器位宽N为32,要产生1kHz的信号,则K=(fo * 2N) / fc = 85.9 * fo = 42950。当计数值小于等于2N-1时,输出低电平,当计数值大于2N-1时,
    输出高电平,依次循环,就可以产生占空比为50%的1kHz信号了。

    据此可以设计如下程序:

    任意分频示例,输出1kHz,占空比50%

    `timescale 1ns/1ps
    /***************************************
    晶振频率 fc = 100MHz
    输出频率 fo = 1kHz(根据需要可以设为任意值)
    控制参数 K  = (fo*2^N)/fc = 42950
    参数 N = 2^32,(32为计数器的位宽)
    ****************************************/
    module div(
        input clk,
        input rst,
        output reg clk_out
        );
    
        reg [31:0] cnt;
    
    always @(posedge clk or posedge rst) 
        if(rst)
            cnt <= 0;
        else
            cnt <= cnt + 32'd42950;  //计数器步长K
    
    always @(posedge clk or posedge rst)
        if(rst)
            clk_out <= 1'b0;
        else if(cnt < 32'h7FFF_FFFF)
            clk_out <= 1'b0;
        else
            clk_out <= 1'b1;
    
    endmodule
    
  • 相关阅读:
    [C++]猜词游戏简版
    [C++]异常处理实例-基础版
    C++Primer Plus习题记录-Chapter12
    C++Primer Plus习题记录-Chapter11
    [C++]MI(多继承)实例-基础版
    Windows下编译libevent及使用
    jquery点击回到顶部
    简体繁体转换
    检测ip和地区
    点击复制到剪切板
  • 原文地址:https://www.cnblogs.com/christsong/p/5506127.html
Copyright © 2011-2022 走看看