FPGAer:二分頻、三分頻、五分頻


寫分頻就是寫計數器。

二分頻:指把頻率分成兩部分。比如50MHz的頻率,二分頻后就是25MHz。由公式T=1/f可知,時鍾變為原來的兩倍。

綜合代碼如下:

module shizhan(
input sys_clk,
input sys_rst_n,
output reg dri_clk
);
always @(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)
dri_clk<=1'b0;
else
dri_clk<=~dri_clk;
end
endmodule

tb代碼如下:

`timescale 1ns/1ns
module shizhan_tb;
reg sys_clk;
reg sys_rst_n;
wire dri_clk;
initial begin
sys_clk<=1'b0;
sys_rst_n<=1'b0;
#10 sys_rst_n<=1'b1;
end
always #10 sys_clk<=~sys_clk;
shizhan u_shizhan(
.sys_clk (sys_clk),
.sys_rst_n (sys_rst_n),
.dri_clk (dri_clk)
);
endmodule

實戰結果如下:


三分頻

綜合代碼如下:

module clk(
input sys_clk,
input sys_rst_n,
output dri_clk
);
reg [2:0]cnt;
reg dri_clk1;
reg dri_clk2;
always @(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)
cnt<=3'b0;
else if(cnt<2)
cnt<=cnt+1;
else
cnt<=3'b0;
end
always @(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)begin
dri_clk1<=1'b0;
end
else if(cnt==0)begin
dri_clk1<=~dri_clk1;
end
else if(cnt==1)begin
dri_clk1<=~dri_clk1;
end
else
dri_clk1<=dri_clk1;
end
always @(negedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)
dri_clk2<=1'b0;
else
dri_clk2<=dri_clk1;
end
assign dri_clk=dri_clk1|dri_clk2;
endmodule

tb仿真代碼如下:(ps:這個仿真程序跟二分頻一樣的,就是名字改成了clk_tb)

`timescale 1ns/1ns
module clk_tb;
reg sys_clk;
reg sys_rst_n;
wire dri_clk;
initial begin
sys_clk<=1'b0;
sys_rst_n<=1'b0;
#10 sys_rst_n<=1'b1;
end
always #10 sys_clk<=~sys_clk;
clk u_clk(
.sys_clk (sys_clk),
.sys_rst_n (sys_rst_n),
.dri_clk (dri_clk)
);
endmodule

實戰結果:

同理,五分頻實現如下:

綜合代碼如下:

module clk(
input sys_clk,
input sys_rst_n,
output dri_clk
);
reg [2:0]cnt;
reg dri_clk1;
reg dri_clk2;
always @(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)
cnt<=3'b0;
else if(cnt<4)
cnt<=cnt+1;
else
cnt<=3'b0;
end
always @(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)begin
dri_clk1<=1'b0;
end
else if(cnt==2)begin
dri_clk1<=~dri_clk1;
end
else if(cnt==4)begin
dri_clk1<=~dri_clk1;
end
else
dri_clk1<=dri_clk1;
end
always @(negedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)
dri_clk2<=1'b0;
else
dri_clk2<=dri_clk1;
end
assign dri_clk=dri_clk1|dri_clk2;
endmodule

仿真代碼同三分頻一樣。

實驗結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM