南海网站智能推广,网页设计公司简介代码,网站生成手机页面,网建会N位分频器的实现
一、 目的
使用verilog实现n位的分频器#xff0c;可以是偶数#xff0c;也可以是奇数
二、 原理
FPGA中n位分频器的工作原理可以简要概括为:
分频器的作用是将输入时钟频率分频,输出低于输入时钟频率的时钟信号。n位分频器可以将输入时钟频率分频2^n倍…N位分频器的实现
一、 目的
使用verilog实现n位的分频器可以是偶数也可以是奇数
二、 原理
FPGA中n位分频器的工作原理可以简要概括为:
分频器的作用是将输入时钟频率分频,输出低于输入时钟频率的时钟信号。n位分频器可以将输入时钟频率分频2^n倍。n位分频器主要由n个触发器级联组成。第一个触发器时钟输入接入输入时钟,数据端接D0。后级触发器的时钟依次接前一级触发器的反相Q信号。通过这种级联,将输入时钟周期分成2^n个阶段。
7.最后一个触发器Q输出即为分频之后的时钟信号。
更改计数器位数n,可以灵活改变分频比例。分频器广泛应用于计数器、时序逻辑的时钟分频等场景。
所以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) beginif(~rst_n) begincnt1d0;endelse if(add_cnt1)beginif(end_cnt1)begincnt1 d0;endelse begincnt1 cnt1 1b1;endendelse begincnt1cnt1;end
endalways (negedge clk or negedge rst_n) beginif(~rst_n) begincnt2d0;endelse if(add_cnt2)beginif(end_cnt2)begincnt2 d0;endelse begincnt2 cnt2 1b1;endendelse begincnt2cnt2;end
endassign add_cnt1 1b1;
assign end_cnt1 add_cnt1 cnt1 N;
assign add_cnt2 1b1;
assign end_cnt2 add_cnt2 cnt2 N;assign out (N%20)?((cnt2(N1))(cnt1(N1))?1b0:1b1):((cnt1(N1)?1b0:1b1);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 beginclk1b0;rst_n1b0;#(2*SYS_CLK10);rst_n1b1;#(100*SYS_CLK);$stop;
end
divider #(.N(N)) inst_divider_n (.clk(clk), .rst_n(rst_n), .out(out));endmodule五 时序及仿真结果
偶数
奇数 五、 仿真波形图
偶数
奇数