分頻器的verilog設計

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   2014   re   c   

筆者最近由於實驗室老師的任務安排重新又看了一下分頻器的verilog實現,現總結如下,待以後查看之用(重點是查看計數器計到哪個值clk_out進行狀態翻轉)

1.偶數分頻占空比為50%

其實質還是一個N計數器模組來實現,首先要有複位訊號,這個複位訊號的作用就是使計數器和分頻輸出clk_out剛開始有一個複位值,其次就是計數翻轉了,注意這裡是計到哪個值翻轉,首先剛開始時reset複位時計數器賦初值為0,然後計數器計到N/2-1時進行clk-out狀態翻轉,即clk_out<=~clk_out,此時別忘了計數器接著加1操作(count<=count+1),緊接著在計數器計到N-1時clk_out再翻轉狀態,與此同時計數器進行清零操作。count<=0;

這部分的程式碼如下:

module tmm_c(clk,reset,m,clk_out);
input clk;
input reset;
input [7:0]m;

output clk_out;

reg [7:0]count;
reg clk_out;

[email protected](posedge clk)
begin
if(reset)
begin
count<=0;
clk_out<=0;
end

else
if(count==m-1)
begin
clk_out<=~clk_out;
count<=0;
end
else
if(count==m/2-1)
begin
clk_out<=~clk_out;
count<=count+1;
end
else
count<=count+1;
end

endmodule

與此相關的testbench代碼如下:

`timescale 1ns/1ns
module tmm_c_tb;
reg clk;
reg reset;
reg[7:0] m;
wire clk_out;

tmm_c u1(clk,reset,m,clk_out);

initial
begin
clk=0;
reset=1;
m=4;
#10 reset=0;
#1000 $stop;
end
always #5 clk=~clk;

endmodule

modelsim模擬波形圖:

 

2.奇數分頻占空比為50%

其實質也是一個計數器,思想和偶數分頻相似,不過奇數分頻前期需要兩個always模組,這兩個always模組的輸出分別為clk_out1、clk_out2,用到兩個count1、count2,其中clk_out1的輸出是待分頻時鐘的上升沿觸發進行的計數輸出的結果,這個也需要計數器模組和reset複位訊號,但此時計到何值clk_out1進行翻轉呢?複位完之後還是輸出和計數全部為零,然後當計數到count=(N-1)/2時clk_out1進行翻轉,計數到count=N-1時計數器清零,clk_out進行翻轉。clk_out2的計數器和輸出同count1和clk_out1.但不同的是它是在待分頻時鐘的下降沿進行觸發。最總的結果是clk_out=clk_out1|clk_out2(進行或運算)

以下是程式碼:

module tnn_c(clk,reset,n,clk_out);
input clk;
input reset;
input[7:0]n;
output clk_out;

reg [7:0]count1;
reg [7:0]count2;
//reg clk_out;
reg clk1;
reg clk2;

[email protected](posedge clk)
begin
if(reset)
begin
count1<=0;
clk1<=0;
end
else
if(count1==n-1)
begin
count1<=0;
clk1=~clk1;
end

else
if(count1==(n-1)/2)
begin
clk1=~clk1;
count1<=count1+1;
end
else
count1<=count1+1;

end

[email protected](negedge clk)
begin
if(reset)
begin
count2<=0;
clk2<=0;
end
else
if(count2==n-1)
begin
count2<=0;
clk2=~clk2;
end
else
if(count2==(n-1)/2)
begin
clk2=~clk2;
count2<=count2+1;
end
else
count2<=count2+1;

end

assign clk_out=clk1|clk2;

endmodule

相應的testbench:

`timescale 1ns/1ns
module tnn_c_tb;
reg clk;
reg reset;
reg[7:0] n;
wire clk_out;

tnn_c u(clk,reset,n,clk_out);

initial
begin
clk=0;
reset=1;
n=5;
#30 reset=0;
#1000 $stop;
end
always #5 clk=~clk;

endmodule

 modelsim模擬圖:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.