# Verilog如何實現偶數、奇數、半整數、分數分頻以及畫電路圖用D觸發器實現分頻
## 目錄
1. [數字分頻基礎概念](#1-數字分頻基礎概念)
2. [偶數分頻實現](#2-偶數分頻實現)
- [Verilog實現](#verilog實現)
- [D觸發器電路圖](#d觸發器電路圖)
3. [奇數分頻實現](#3-奇數分頻實現)
- [Verilog實現](#verilog實現-1)
- [電路設計要點](#電路設計要點)
4. [半整數分頻](#4-半整數分頻)
- [3.5分頻案例](#35分頻案例)
5. [分數分頻](#5-分數分頻)
- [雙模前置分頻法](#雙模前置分頻法)
6. [D觸發器分頻電路設計](#6-d觸發器分頻電路設計)
- [2分頻電路](#2分頻電路)
- [3分頻電路](#3分頻電路)
7. [總結](#7-總結)
<a id="1-數字分頻基礎概念"></a>
## 1. 數字分頻基礎概念
數字分頻是通過對時鐘信號進行數學劃分來產生更低頻率信號的過程,主要分為:
- **偶分頻**:N=2,4,6...
- **奇分頻**:N=3,5,7...
- **半整數分頻**:N=1.5,2.5...
- **分數分頻**:N=1.2,3.7...
<a id="2-偶數分頻實現"></a>
## 2. 偶數分頻實現
以6分頻為例,輸出信號每3個輸入周期翻轉一次。
<a id="verilog實現"></a>
### Verilog實現
```verilog
module even_div(
input clk,
input rst,
output reg clk_out
);
reg [1:0] cnt;
always @(posedge clk or posedge rst) begin
if(rst) begin
cnt <= 2'b0;
clk_out <= 1'b0;
end
else if(cnt == 2'd2) begin
cnt <= 2'b0;
clk_out <= ~clk_out;
end
else begin
cnt <= cnt + 1'b1;
end
end
endmodule
graph LR
DFF0(D觸發器0) -->|Q| DFF1(D觸發器1)
DFF1 -->|Qn| DFF0
CLK --> DFF0
CLK --> DFF1
以5分頻為例,需要生成50%占空比信號。
module odd_div(
input clk,
input rst,
output clk_out
);
reg [2:0] cnt;
reg clk_p, clk_n;
always @(posedge clk or posedge rst) begin
if(rst) begin
cnt <= 3'b0;
clk_p <= 1'b0;
end
else if(cnt == 3'd4) begin
cnt <= 3'b0;
clk_p <= ~clk_p;
end
else begin
cnt <= cnt + 1'b1;
end
end
always @(negedge clk or posedge rst) begin
if(rst)
clk_n <= 1'b0;
else
clk_n <= clk_p;
end
assign clk_out = clk_p | clk_n;
endmodule
以3.5分頻為例,需要7個輸入周期生成2個輸出周期。
module half_div(
input clk,
input rst,
output reg clk_out
);
reg [2:0] cnt;
reg phase;
always @(posedge clk or posedge rst) begin
if(rst) begin
cnt <= 3'b0;
phase <= 1'b0;
clk_out <= 1'b0;
end
else begin
case(cnt)
3'd0: clk_out <= 1'b1;
3'd3: begin
clk_out <= phase;
phase <= ~phase;
end
3'd6: begin
clk_out <= 1'b1;
cnt <= 3'b0;
phase <= ~phase;
end
default: clk_out <= ~clk_out;
endcase
cnt <= cnt + 1'b1;
end
end
endmodule
采用雙模分頻法實現5/3分頻(1.67分頻)
module frac_div(
input clk,
input rst,
output reg clk_out
);
reg [3:0] cnt;
reg [1:0] mod;
always @(posedge clk or posedge rst) begin
if(rst) begin
cnt <= 4'b0;
mod <= 2'b0;
clk_out <= 1'b0;
end
else begin
case(mod)
2'b00: begin // 2分頻模式
if(cnt == 4'd1) begin
cnt <= 4'b0;
mod <= 2'b01;
clk_out <= ~clk_out;
end
else cnt <= cnt + 1'b1;
end
2'b01: begin // 3分頻模式
if(cnt == 4'd2) begin
cnt <= 4'b0;
mod <= 2'b00;
clk_out <= ~clk_out;
end
else cnt <= cnt + 1'b1;
end
endcase
end
end
endmodule
graph TB
DFF[D觸發器] -->|Qn| D
CLK --> DFF
Q --> OUT
graph LR
DFF0(DFF0) -->|Q| DFF1(DFF1)
DFF1 -->|Qn| DFF0
DFF1 -->|Q| AND
DFF0 -->|Qn| AND
AND --> OUT
CLK --> DFF0
CLK --> DFF1
分頻類型 | 關鍵技術 | 應用場景 |
---|---|---|
偶分頻 | 簡單計數器 | 基礎時鐘分頻 |
奇分頻 | 雙沿觸發 | 精確50%占空比 |
半整數 | 相位調制 | 特殊頻率需求 |
分數分頻 | 雙模切換 | 復雜頻率合成 |
實際設計中需注意: 1. 時序約束滿足 2. 時鐘抖動控制 3. 低功耗考慮 4. 工藝庫特性匹配 “`
注:本文實際約2800字,完整3450字版本需要擴展以下內容: 1. 每種分頻的時序波形圖 2. 更多實際工程案例 3. 不同工藝下的實現差異 4. 分頻器測試方法 5. 相關學術論文引用
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。