一,内容介绍
分频器是数字电路的常见IP,将高频时钟分为低频时钟信号以供外设使用。
下面我们用verilog实现一个偶数分频器
进一步结合奇数分频部分组合为整数分频器
再一步使用整数分频器组合升级为小数分频器
二,小数数字分频器原理
小数数字分频器本质上也是奇偶结合的数字分频器。比如1.5倍数字分频,不是说输出的时钟每一个cycle都是原时钟周期的1.5倍,而是一个一倍分频,在一个两倍分频。两个分频的时钟组合在一起是原时钟的三倍,因此从总的周期来看,是完成了1.5倍分频功能。
三,Verilog实现小数分频器
在这里我直接使用上一篇文章的整数分频器作为我们的子模块。
可以节约一些代码行。
module DEC_DIV (
input clk_i,
input rst_i,
input [7:0] div_num_i,
input division_mode_i, //1,decimal mode, 0 integer mode
output wire clk_out_o
);
wire [5:0] div_num_int;
wire [1:0] div_num_dec;
wire [7:0] div_num_0,div_num_1;
wire clk_int,clk_dec,clk_decimal,clk_begin;
reg [7:0] div_num,m,n,cnt_0;
reg [1:0] cnt_dec;
reg clk_sel,clkbg;
//--------------state machine signal-----------------//
parameter IDLE = 2'b00;
parameter S1 = 2'b01;
parameter S2 = 2'b10;
parameter S3 = 2'b11;
reg [1:0] div_state,nxt_state;
//----catch div num -----//
assign div_num_int = div_num_i[7:2];
assign div_num_dec = div_num_i[1:0]<