16 分频 32 分频是啥意思_Verilog 数字分频器的设计及验证
1、分頻器的概念及應用
分頻器是指使輸出信號頻率為輸入信號頻率整數(shù)分之一的電子電路。在許多電子設備中如電子鐘、頻率合成器等,需要各種不同頻率的信號協(xié)同工作,常用的方法是以穩(wěn)定度高的晶體振蕩器為主振源,通過變換得到所需要的各種頻率成分,分頻器是一種主要變換手段。
早期的分頻器多為正弦分頻器,隨著數(shù)字集成電路的發(fā)展,數(shù)字分頻器逐漸取代了正弦分頻器。
2、數(shù)字分頻器類型
數(shù)字分頻器類型主要包括了2的整數(shù)次冪的分頻器、偶數(shù)分頻、占空比為1:15的分頻電路和奇數(shù)分頻電路等。
3、分頻器的rtl和testbench
在硬件電路設計中時鐘信號是最重要的信號之一,經(jīng)常需要對較高頻率的時鐘進行分頻操作,得到較低頻率的時鐘信號,這里以50Mhz為主振源,分別進行2的整數(shù)次冪的分頻器、偶數(shù)分頻、占空比為1:15的分頻電路和奇數(shù)分頻電路。
3.1 2的整數(shù)次冪的分頻器
2的整數(shù)次冪的分頻器是指對時鐘信號clk進行2分頻、4分頻、8分頻和16分頻等,這是最簡單的分頻電路,只需要一個計數(shù)器就可以,這里采用4位計數(shù)器。
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 波形分析
圖3.1 2的整數(shù)次冪的分頻器波形圖
3.2 偶數(shù)分頻電路
這里以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 波形分析
圖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 波形分析
圖3.3?占空比為1:15的分頻器電路波形圖
3.4 奇數(shù)分頻電路
這里以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 波形分析
圖3.4 5分頻波形圖
總結
以上是生活随笔為你收集整理的16 分频 32 分频是啥意思_Verilog 数字分频器的设计及验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jni直接转byte_JNI再探之JNI
- 下一篇: ipad怎么和mac分屏_ipad学习方