16 分频 32 分频是啥意思_Verilog 数字分频器的设计及验证

本文介绍了数字分频器的基本概念及其在电子设备中的应用,并详细探讨了使用Verilog设计的2的整数次幂、偶数、占空比1:15和奇数分频电路。通过RTL代码、Testbench以及波形分析展示了分频器的工作原理。
摘要由CSDN通过智能技术生成

1、分频器的概念及应用

分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。

早期的分频器多为正弦分频器,随着数字集成电路的发展,数字分频器逐渐取代了正弦分频器。

2、数字分频器类型

数字分频器类型主要包括了2的整数次幂的分频器、偶数分频、占空比为1:15的分频电路和奇数分频电路等。

3、分频器的rtl和testbench

在硬件电路设计中时钟信号是最重要的信号之一,经常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号,这里以50Mhz为主振源,分别进行2的整数次幂的分频器、偶数分频、占空比为1:15的分频电路和奇数分频电路。

3.1 2的整数次幂的分频器

2的整数次幂的分频器是指对时钟信号clk进行2分频、4分频、8分频和16分频等,这是最简单的分频电路,只需要一个计数器就可以,这里采用4位计数器。

3.1.1 rtl代码

//div2_4_8_16

module div2_4_8_16(

input           rst_n,

input           clk,

output          div2,

output          div4,

output          div8,

output          div16

);

reg [3:0] cnt;

 always@(posedge clk or negedge rst_n)

begin

       if(!rst_n)

              cnt<=4'd0;

       else

              cnt<=cnt+1'b1;

end

 assign div2    =cnt[0];

assign div4    =cnt[1];

assign div8    =cnt[2];

assign div16   =cnt[3];

 endmodule

3.1.2 testbench

//tb_div

`timescale 1ns/1ns

module tb_div();

reg clk;

reg rst_n;

wire div2;

wire div4;

wire div8;

wire div16;

 //parameter define

parameter PERIOD=20;

 //clock define

always #(PERIOD/2) clk=~clk;

 //初始化

initial

begin

       clk=1'b1;

       rst_n=1'b0;

       #(20*PERIOD)

       rst_n=1'b1;

       #(1000*PERIOD)

       $finish;

end

 //例化

div2_4_8_16 u0(

.clk(clk),

.rst_n(rst_n),

.div2(div2),

.div4(div4),

.div8(div8),

.div16(div16)

);

endmodule

3.1.3 波形分析

919a8d22a5f5e1ec7685272105016aa1.png

图3.1 2的整数次幂的分频器波形图

3.2 偶数分频电路

这里以50Mhz为主振源,采用6分频。

3.2.1 rtl代码

//div6

module div6(

input           rst_n,

input           clk,

output  reg    div6

);

 reg [1:0] cnt;

 always@(posedge clk or negedge rst_n)

begin

       if(!rst_n)

              cnt<=2'd0;

       elseif(cnt==2'd2)

              cnt<=2'd0;

       else

               cnt<=cnt+1'b1;

end

 always@(posedge clk or negedge rst_n)

begin

       if(!rst_n)

              div6<=1'b0;

       elseif(cnt==2'd2)

              div6<=~div6;

       else

              div6<=div6;

end

endmodule

3.2.2 testbench

//tb_div

`timescale 1ns/1ns

module tb_div6();

reg clk;

reg rst_n;

wire div6;

 //parameter define

parameter PERIOD=20;

 //clock define

always #(PERIOD/2) clk=~clk;

 //初始化

initial

begin

       clk=1'b1;

       rst_n=1'b0;

       #(20*PERIOD)

       rst_n=1'b1;

       #(1000*PERIOD)

       $finish;

end

 //例化

div6 u1(

.clk(clk),

.rst_n(rst_n),

.div6(div6)

);

endmodule

3.2.3 波形分析

2ed935fde316bbecf9df4961881faed0.png

图3.2 6分频波形图

3.3 占空比为1:15的分频电路

这里以50Mhz为主振源,占空比为1:15。

3.3.1 rtl代码

//div6

module div6(

input           rst_n,

input           clk,

output reg      div115

);

 reg [3:0] cnt;

 always@(posedge clk or negedge rst_n)

begin

       if(!rst_n)

              cnt<=4'd0;

       elseif(cnt==4'd15)

              cnt<=4'd0;

       else

                cnt<=cnt+1'b1;

end

always@(posedge clk or negedge rst_n)

begin

       if(!rst_n)

              div115<=1'b0;

       elseif(cnt==4'd14)

              div115<=1'b1;

       elseif(cnt==4'd15)

              div115<=1'b0;

       else

              div115<=div115;

end

endmodule

3.3.2 testbench

//tb_div

`timescale 1ns/1ns

module tb_div1_15();

reg clk;

reg rst_n;

wire div115;

 //parameter define

parameter PERIOD=20;

 //clock define

always #(PERIOD/2) clk=~clk;

//初始化

initial

begin

       clk=1'b1;

       rst_n=1'b0;

       #(20*PERIOD)

       rst_n=1'b1;

       #(1000*PERIOD)

       $finish;

end

 //例化

div6 u1(

.clk(clk),

.rst_n(rst_n),

.div115(div115)

);

 Endmodule

3.3.3 波形分析

adac244a59a21c541bf674f522ece5c1.png

图3.3 占空比为1:15的分频器电路波形图

3.4 奇数分频电路
这里以50Mhz为主振源,采用5分频。
3.4.1 rtl代码

//div6

module div5(

input           rst_n,

input           clk,

output          div5

);

reg [2:0] cnt1;

reg [2:0] cnt2;

reg div1;

reg div2;

always@(posedge clk or negedge rst_n)

begin

       if(!rst_n)

              cnt1<=3'd0;

       elseif(cnt1==3'd4)

              cnt1<=3'd0;

       else

                cnt1<=cnt1+1'b1;

end

 always@(posedge clk or negedge rst_n)

begin

       if(!rst_n)

              div1<=1'b0;

       elseif(cnt1==3'd0 || cnt1==3'd1)

              div1<=1'b1;

       else

                div1<=1'b0;

end

always@(negedge clk or negedge rst_n)

begin

       if(!rst_n)

              cnt2<=3'd0;

       elseif(cnt2==3'd4)

              cnt2<=3'd0;

       else

                cnt2<=cnt2+1'b1;

end

always@(negedge clk or negedge rst_n)

begin

       if(!rst_n)

              div2<=1'b0;

       elseif(cnt2==3'd0 || cnt2==3'd1)

              div2<=1'b1;

       else

              div2<=1'b0;

end

assign div5=div1 | div2;

endmodule

3.4.2 testbench

//tb_div

`timescale 1ns/1ns

module tb_div5();

reg clk;

reg rst_n;

wire div5;

//parameter define

parameter PERIOD=20;

 //clock define

always #(PERIOD/2) clk=~clk;

 //初始化

initial

begin

       clk=1'b1;

       rst_n=1'b0;

       #(20*PERIOD)

       rst_n=1'b1;

       #(1000*PERIOD)

       $finish;

end

 //例化

div5 u1(

.clk(clk),

.rst_n(rst_n),

.div5(div5)

);

endmodule

3.4.3 波形分析

b73fd6ce578306c1175bab455169bf46.png

图3.4 5分频波形图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值