注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
teleagle的个人空间 https://home.eeworld.com.cn/space-uid-770033.html [收藏] [复制] [分享] [RSS]
日志

基于actel fpga的周期反馈式纯数字锁相环

已有 411 次阅读2018-10-8 22:09 |个人分类:原创




此内容由EEWORLD论坛网友teleagle原创,如需转载或用于商业用途需征得作者同意并注明出处


基于actel fpga的周期反馈式纯数字锁相环:
    简单的说就是建立一个状态机,对输入周期参数在产生时钟的每个周期的第一时间更新值,然后进入下一个状态计数,计数到和输入周期一致的时候又回到初始状态。代码综合仿真正确, 过程比较简单, 就不班门弄斧了. 不妥之处, 共同学习交流 ,一起改进,  代码如下:

//顶层模块:
module TE_DPLL_B(
        sys_clk,
        sys_rst,
        clk_in,
        clk_out
);


        //---全局参数---
        parameter DATA_W = 16;                        // 周期计数器及数据位宽,根据系统时钟与输入时钟的差值调整
        parameter PN_EDGE = 2'b01;                // 沿检测参数(01=上升沿,10=下降沿)
        parameter DPLL_M = 2;                        // M 参数
        parameter DPLL_N = 10;                        // N 参数


        //---输入输出接口---
        input sys_clk;                        // 系统时钟
        input sys_rst;                        // 系统重置
        input clk_in;                        // 输入时钟
        output clk_out;                        // 输出时钟


        //---内部信号---
        wire [DATA_W-1:0] n_ti;        // 输入时钟周期值


        //---------------------------------------------------------
        // 输入时钟周期测量模块,对输入时钟采样,测量输出时钟周期Ti
        //---------------------------------------------------------
        TE_DPLL_Figure TE_DPLL_Figure_0(
                .sys_clk(sys_clk),        // 系统时钟
                .sys_rst(sys_rst),        // 系统重置
                .clk_i(clk_in),                // 输入时钟
                .t_o(n_ti)                // 输入时钟周期值
        );
        defparam TE_DPLL_Figure_0.CNT_W = DATA_W;        // 周期计数器位宽
        defparam TE_DPLL_Figure_0.PN_EDGE = PN_EDGE;        // 沿检测参数(01=上升沿,10=下降沿)


        //---------------------------------------------------------
        // 例化反馈模块
        //---------------------------------------------------------
        TE_DPLL_Feed TE_DPLL_Feed_0(
                .sys_clk(sys_clk),        // 系统时钟
                .sys_rst(sys_rst),        // 系统重置
                .ti_i(n_ti),                // 输入时期周期值
                .clk_o(clk_out)                // 输出时钟
        );
        defparam TE_DPLL_Feed_0.DATA_W = DATA_W;        // 数据位宽
        defparam TE_DPLL_Feed_0.PN_EDGE = PN_EDGE;        // 沿检测参数(01=上升沿,10=下降沿)
        defparam TE_DPLL_Feed_0.DPLL_M = DPLL_M;        // M 参数
        defparam TE_DPLL_Feed_0.DPLL_N = DPLL_N;        // N 参数




endmodule

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章