2.1 設計輸?
1. 模塊名稱:FrequencyDivider
2. 輸?輸出:CLK、RSTn、CLK_15
2.2 引腳約束
1. 輸?端 ?定義
2. 輸出端 ?定義
2.3 設計要求
1. 輸出時鐘的周期是輸?時鐘的15倍(15分頻器)
2. 分別實現(xiàn)?7/15?占空?和 50% 占空?兩種分頻?式
3. 使?RTL View分析電路的區(qū)別
2.4 電路仿真1. 使?ModelSim仿真
7:15分頻
即分頻輸出CLK15的一個周期中,高低電平時間之比為 7:8,據(jù)此可以在控制輸出CLK15的高低電平
設計代碼:
module FrequencyDivider(CLK,RSTn,CLK_15);
input CLK,RSTn;
output CLK_15;
reg [3:0]counter_p,counter_n;
reg CLK_p,CLK_n;
assign CLK_15 = CLK_p | CLK_n;
always@(posedge CLK or negedge RSTn)
if(! RSTn) begin
counter_p <= 0;
CLK_p <= 0;
end
else if(counter_p < 14)
??????? begin
? counter_p <= counter_p + 1;
? if(counter_p < 7)
CLK_p <= 1;
? else
CLK_p <= 0;
? end
else
counter_p <= 0;
always@(negedge CLK or negedge RSTn)
if(! RSTn) begin
counter_n <= 0;
CLK_n <= 0;
end
else if(counter_n < 14)
??????? begin
? counter_n <= counter_n + 1;
? if(counter_n < 7)
CLK_n <= 1;
? else
CLK_n <= 0;
end
else
counter_n <= 0;
endmodule
(2)50%分頻?【是由兩個分別由上升沿pos和下降沿neg觸發(fā)的分頻信號合成(或 運算)】
設計代碼:
module FrequencyDivider(CLK,RSTn,CLK_15);
input CLK,RSTn;
output CLK_15;
reg [3:0]counter_p,counter_n;
reg CLK_p,CLK_n;
assign CLK_15 = CLK_p | CLK_n;
always@(posedge CLK or negedge RSTn)
? if(! RSTn) begin
? counter_p <= 0;
? CLK_p <= 0;
? end
? else if(counter_p < 14)
? ? ? ? begin
? ? counter_p <= counter_p + 1;
? ? if(counter_p < 7)
? ? CLK_p <= 1;
? ? else
? ? CLK_p <= 0;
? ? end
? else
? counter_p <= 0;
always@(negedge CLK or negedge RSTn)
? if(! RSTn) begin
? counter_n <= 0;
? CLK_n <= 0;
? end
? else if(counter_n < 14)
? ? ? ? begin
? ? counter_n <= counter_n + 1;
? ? if(counter_n < 7)
? ? CLK_n <= 1;
? ? else
? ? CLK_n <= 0;
? end
? else
? counter_n <= 0;
endmodule
由RTL view可以看出:
CLK_15由或運算得來,由CLK_n和CLK_p相加得來,而兩者的區(qū)別在于CLK的邊沿不同
一個為上升沿,一個為下降沿,因此其中一個D觸發(fā)器的時鐘clk取了一次反
3.創(chuàng)建VWF進行功能仿真:
文章來源:http://www.zghlxwxcb.cn/news/detail-779092.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-779092.html
到了這里,關于【FPGA & Verilog】奇數(shù)分頻器 (50%)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!