N位分频器的实现

N位分频器的实现

一、 目的

使用verilog实现n位的分频器,可以是偶数,也可以是奇数

二、 原理

FPGA中n位分频器的工作原理可以简要概括为:

  1. 分频器的作用是将输入时钟频率分频,输出低于输入时钟频率的时钟信号。
  2. n位分频器可以将输入时钟频率分频2^n倍。
  3. n位分频器主要由n个触发器级联组成。
  4. 第一个触发器时钟输入接入输入时钟,数据端接D=0。
  5. 后级触发器的时钟依次接前一级触发器的反相Q信号。
  6. 通过这种级联,将输入时钟周期分成2^n个阶段。

7.最后一个触发器Q输出即为分频之后的时钟信号。

  1. 更改计数器位数n,可以灵活改变分频比例。
  2. 分频器广泛应用于计数器、时序逻辑的时钟分频等场景。

所以n位分频器通过n个触发器的级联,利用反相Q输出产生2^n分频效果,是FPGA时钟管理中的重要组成部分。

三、 系统架构设计

工程模块划分及说明

四、 代码实现

1. 模块端口信号列表

复制代码
module divider #(parameter N = 9)(
    input wire clk,
    input wire rst_n,
    
    output wire out
);
reg[N:0] cnt1;//上升沿计数器
reg[N:0] cnt2;//下降沿计数器
wire add_cnt1;//上升沿开始条件
wire end_cnt1;//上升沿结束条件
wire add_cnt2;//下降沿开始条件
wire end_cnt2;//下降沿结束条件
always @(posedge clk or negedge rst_n) begin
    if(~rst_n) begin
       cnt1<='d0;
    end
    else if(add_cnt1)begin
        if(end_cnt1)begin
            cnt1 <='d0;
        end
        else begin
            cnt1 <= cnt1 + 1'b1;
        end
    end
    else begin
       cnt1<=cnt1;
    end
end

always @(negedge clk or negedge rst_n) begin
    if(~rst_n) begin
       cnt2<='d0;
    end
    else if(add_cnt2)begin
        if(end_cnt2)begin
            cnt2 <='d0;
        end
        else begin
            cnt2 <= cnt2 + 1'b1;
        end
    end
    else begin
       cnt2<=cnt2;
    end
end



assign add_cnt1 = 1'b1;
assign end_cnt1 = add_cnt1 && cnt1 == N;
assign add_cnt2 = 1'b1;
assign end_cnt2 = add_cnt2 && cnt2 == N;

assign out = (N%2==0)?((cnt2<=(N>>1))&&(cnt1<=(N>>1))?1'b0:1'b1):((cnt1<=(N>>1)?1'b0:1'b1);


endmodule

测试文件:

复制代码
module driver_n_tb();
reg clk;
reg rst_n;
wire out;
parameter SYS_CLK = 20;
parameter N = 8;
always #(SYS_CLK/2) clk = ~clk;

initial begin
    clk=1'b0;
    rst_n=1'b0;
    #(2*SYS_CLK+10);
    rst_n=1'b1;
    #(100*SYS_CLK);
    $stop;
end
divider #(.N(N)) inst_divider_n (
	.clk(clk), 
	.rst_n(rst_n), 
	.out(out));

endmodule

五. 时序及仿真结果

偶数:

奇数:

五、 仿真波形图

偶数:

奇数:

相关推荐
喵喵苗4 分钟前
FPGA Verilog 入门避坑:寄存器与锁存器的本质区别 & 为什么时序逻辑缺 else 不会生成锁存器
fpga开发
Thinker3611 小时前
笔记本外接创新5.1声卡实战:M.2转PCIe软排线方案 vs 雷电扩展卡方案对比
fpga开发·声卡·笔记本外接pcie·显卡坞
ALINX技术博客1 天前
AMD MoP 封装策略解读 | HBM 大热,为何 AMD Versal 系列反选 LPDDR5X?
fpga开发·fpga·amd·versal
zlinear数据采集卡1 天前
从万用表的6步调零到硅片级微秒自校准:硬核拆解LHAMP188的宽压轨到轨与零漂移实战
arm开发·stm32·单片机·嵌入式硬件·fpga开发
Rambo.xia1 天前
AXI-Stream反压与背靠背传输——TREADY反压丢帧、TDEST路由错误、反压死锁,流式数据一反压就出事
fpga开发
传感器与混合集成电路1 天前
128路模拟通道轮询切换技术解析:模拟开关配置机制与精度影响抑制策略
嵌入式硬件·fpga开发
国科安芯1 天前
ASC8T245S 8通道电平转换设计实战:从系统架构到QFN24 Layout再到量产测试
网络·单片机·物联网·安全·fpga开发·系统架构
传感器与混合集成电路2 天前
基于FPGA与ADC协同架构的高密度数据采集模块设计原理与应用场景分析
fpga开发·架构
Rambo.xia2 天前
10Gbps实时图像重采样:一个FPGA项目的完整交付复盘
fpga开发
zlinear数据采集卡2 天前
2mV纹波的代价:硬核拆解ZLinear模拟前端放大器与正负可调电源设计
arm开发·单片机·嵌入式硬件·fpga开发·架构·开源