fpga系列 HDL : FPGA实现奇数倍分频

偶分频

//240个时钟周期翻转一次输出,这实际上是一个 480倍分频器
reg [7:0] counter= 0;
reg divided_clk = 1'b0;
always @(posedge clk) begin
  if (counter == 239) begin // 240
		counter <= 0;
		divided_clk <= ~divided_clk; 
  end else begin
		counter <= counter + 1'b1;
  end
end

奇分频

  • 对于任何奇数N分频,以将N(例如N为5)分解成两个部分:一部分用于决定高电平持续时间(2),另一部分用于决定低电平持续时间(3)。

5分频

假设要实现的是5分频。每五个输入时钟周期,输出信号就会有一个完整的周期,其中包含两个输入时钟周期的高电平和三个输入时钟周期的低电平,形成近似50%的占空比。

  • 输出逻辑
    • 当计数器值小于2(即0或1),输出高电平;
    • 当计数器值大于等于2(即2, 3, 或4),输出低电平。
  • 即:
    • 高电平持续时间为2个输入时钟周期
    • 低电平持续时间为3个输入时钟周期
  • 所以,占空比为:
    占空比 = 2 2 + 3 = 40 % \text{占空比} = \frac{2}{2+3} = 40\% 占空比=2+32=40%

Verilog代码示例

在这里插入图片描述

module TEST (clk, rst, clk_out);
    input clk, rst;
    output reg clk_out;

    localparam HIGH_TIME = 2; 
    reg [3:0] count;

    always @(posedge clk or posedge rst) begin
        if(rst)
            count <= 0;
        else if(count == 4)
            count <= 0;
        else
            count <= count + 1;
    end

    always @(posedge clk or posedge rst) begin
        if(rst)
            clk_out <= 0;
        else if(count < 2)// 高电平时长
            clk_out <= 1;
        else
            clk_out <= 0;
    end
endmodule

奇分频 占空比50%

  • 两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。
module nocdc (
    input      clk,
    input      rst,
    output     divided_clk
);

reg [2:0] counter = 0;
reg       clk1, clk2;

always @(posedge clk or posedge rst) begin
    if (rst) begin
        counter <= 0;
        clk1 <= 0;
        clk2 <= 0;
    end else begin
        counter <= counter + 1;

        // 第一个信号:前3个周期高
        if (counter < 3)
            clk1 <= 1'b1;
        else
            clk1 <= 1'b0;

        // 第二个信号:后2个周期高,延迟2个周期启动
        if (counter >= 2 && counter < 5)
            clk2 <= 1'b1;
        else
            clk2 <= 1'b0;
    end
end

assign divided_clk = clk1 | clk2;

endmodule
  • 其他:双沿触发 + 计数器控制上升/下降沿
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值