找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 288|回复: 4
收起左侧

FPGA求助帖:使用PLL结合计数器实现分频

[复制链接]
ID:999139 发表于 2024-1-12 21:44 | 显示全部楼层 |阅读模式
我本来打算使用PLL和计数器实现一个128khz的时钟分频,具体的做法是先用PLL实现64mhz的倍频,然后通过计数器,每计数到499,输出一个使能信号clk_out,随即拉低,计数器计数到500清零,进行下一次循环,通过这样的方式实现128khz的分频。这是我编写的代码:
module S_CLK(
    CLK,
    Reset_n,
    clk_out
    );

    input CLK;
    input Reset_n;
    output reg clk_out;

    wire locked;

    wire clk_64M;
     PLL PLL(
        .clk_out1(clk_64M),   
        .resetn(Reset_n),
        .locked(locked),
        .clk_in1(CLK)
    );   

    reg [8:0]counter;
always @(posedge clk_64M or negedge Reset_n)
    if(!Reset_n)
        clk_out<=0;
    else if(counter==499)   
        clk_out<=1;
    else if(counter==500) begin
        counter<=0;
        clk_out<=0;
    end
    else
        counter<=counter+1'b1;

endmodule

这是测试文件代码:
`timescale 1ns / 1ns
module S_CLK_tb();
    reg CLK;
    reg Reset_n;
    wire clk_out;

    S_CLK S_CLK_inst0(
        .CLK(CLK),
        .Reset_n(Reset_n),
        .clk_out(clk_out)
    );

initial CLK=1;
always #10 CLK = ~CLK;

initial begin
    CLK=0;
    Reset_n=0;
    #100;
    Reset_n=1;
    #200000;
end

endmodule

这是跑出来的图:
因为是刚开始接触FPGA,所以检查不出来具体是哪里出了问题,还请各位能帮我看看,给我解答一下我的代码哪里出了问题,万分感谢!

仿真图

仿真图
回复

使用道具 举报

ID:57657 发表于 2024-1-13 18:24 | 显示全部楼层
FPGA的PLL是一个硬件IP核,不是所有的FPGA都有PLL,不同品牌型号的用法可能有不同。
回复

使用道具 举报

ID:883242 发表于 2024-1-13 19:29 | 显示全部楼层
npn 发表于 2024-1-13 18:24
FPGA的PLL是一个硬件IP核,不是所有的FPGA都有PLL,不同品牌型号的用法可能有不同。

他也没用PLL来编程啊?
回复

使用道具 举报

ID:1085441 发表于 2024-1-14 00:41 | 显示全部楼层
我也在学习FPGA,看了一下,counter在499时也应该+1
    reg [8:0]counter;
always @(posedge clk_64M or negedge Reset_n)
    if(!Reset_n)
        clk_out<=0;

        counter <= 9'h000;    // 清零

    else if(counter==499)  
    begin

        clk_out<=1;
        counter <= counter + 9'h001;   // 增加的+1


    else if(counter==500) begin
        counter<=0;
        clk_out<=0;
    end
    else
        counter<=counter+1'b1;
回复

使用道具 举报

ID:1085441 发表于 2024-1-14 00:48 | 显示全部楼层
如果将64M用500分频,不如计数到249使信号反转,实现500分频,这样信号占空比是50%(除非有要求是其它占空比)。
注意,不能计数到250,因为0~250等于计数值是251,多计数了1次。前面程序也是,不应该计数到500,到499就要停止了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表