1、偶數分頻
- 方法
直接使用計數器實現,在計數一半時將時鐘翻轉即可;
- 4 分頻示例
1module clk_div_even
2#(
3 parameter DIV = 4
4)
5(
6 input clk,
7 input rstn,
8 output reg clko
9);
10
11reg [DIV/2-1:0] cnt;
12
13always @(posedge clk or negedge rstn)
14begin
15 if(!rstn) begin
16 cnt <= 0;
17 clko <= 0;
18 end else begin
19 if(cnt == (DIV/2 - 1)) begin
20 clko <= ~clko;
21 cnt <= 0;
22 end else begin
23 cnt <= cnt + 1;
24 end
25 end
26end
27
28endmodule
- 仿真波形:
2、奇數分頻
- 非 50% 占空比
使用計數器,當計數到一半時候進行翻轉時鐘,當計數到分頻值時候再次翻轉;
1module clk_div_odd1
2#(
3 parameter DIV = 5
4)
5(
6 input clk,
7 input rstn,
8 output reg clko
9);
10
11reg [DIV-1:0] cnt;
12
13always @(posedge clk or negedge rstn)
14begin
15 if(!rstn) begin
16 cnt <= 0;
17 end else begin
18 if(cnt == (DIV-1)) begin
19 cnt <= 0;
20 end
21 else begin
22 cnt <= cnt + 1;
23 end
24 end
25end
26
27always @(posedge clk or negedge rstn)
28begin
29 if(!rstn) begin
30 clko <= 1'b0;
31 end else begin
32 if(cnt == (DIV-1)/2) begin
33 clko <= ~clko;
34 end
35 else if(cnt == (DIV -1)) begin
36 clko <= ~clko;
37 end
38 else begin
39 clko <= clko;
40 end
41 end
42end
43
44endmodule
仿真波形:
- 50% 占空比
上升沿和下降沿分別做分頻,將結果進行或操作即可;
1module clk_div_odd2
2#(
3 parameter DIV = 5
4)
5(
6 input clk,
7 input rstn,
8 output clko
9);
10
11//posedge clk
12reg [DIV-1:0] pos_cnt;
13reg pos_clk;
14
15always @(posedge clk or negedge rstn)
16begin
17 if(!rstn) begin
18 pos_cnt <= 0;
19 end else begin
20 if(pos_cnt == (DIV-1)) begin
21 pos_cnt <= 0;
22 end else begin
23 pos_cnt <= pos_cnt + 1;
24 end
25 end
26end
27
28always @(posedge clk or negedge rstn)
29begin
30 if(!rstn) begin
31 pos_clk <= 0;
32 end else begin
33 if(pos_cnt == (DIV-1)/2) begin
34 pos_clk <= ~pos_clk;
35 end
36 else if(pos_cnt == (DIV-1)) begin
37 pos_clk <= ~pos_clk;
38 end
39 else begin
40 pos_clk <= pos_clk;
41 end
42 end
43end
44
45//negedge clk
46reg [DIV-1:0] neg_cnt;
47reg neg_clk;
48
49always @(negedge clk or negedge rstn)
50begin
51 if(!rstn) begin
52 neg_cnt <= 0;
53 end else begin
54 if(neg_cnt == (DIV-1)) begin
55 neg_cnt <= 0;
56 end else begin
57 neg_cnt <= neg_cnt + 1;
58 end
59 end
60end
61
62always @(negedge clk or negedge rstn)
63begin
64 if(!rstn) begin
65 neg_clk <= 0;
66 end else begin
67 if(neg_cnt == (DIV-1)/2) begin
68 neg_clk <= ~neg_clk;
69 end
70 else if(neg_cnt == (DIV-1)) begin
71 neg_clk <= ~neg_clk;
72 end
73 else begin
74 neg_clk <= neg_clk;
75 end
76 end
77end
78
79//clk output
80assign clko = pos_clk | neg_clk;
81
82endmodule
仿真波形:
3、小數分頻
以設計2.6分頻為例;
- 方法:
(1)將小數取分數形式,即 2.6 = 13/5;
(2)因為2.6在2~3之間,因此可以使用2分頻和3分頻組合實現;
(3)由如下方程進行設計:
1x + y = 5
22x + 3y = 13
求得 x = 2, y = 3
, 即使用2個2分頻和3個3分頻時鐘實現2.6分頻;
(4)設計總計數器,范圍為 013 計數,那么在 04范圍內進行2分頻的計數,在5~13范圍內進行3分頻的計數,然后根據計數生成需要的時鐘;
(5)
- Verilog實現:
1//clk divider: 2.5 , M/N = 13/5
2module clk_div_mn
3#(
4 parameter M = 13,
5 parameter N = 5
6)
7(
8 input clk,
9 input rstn,
10 output reg clko
11);
12
13parameter DIV_M = 2;
14parameter DIV_N = 3;
15
16reg [3:0] cnt;
17always @(posedge clk or negedge rstn)
18begin
19 if(!rstn) begin
20 cnt <= 0;
21 end else begin
22 if(cnt == (M-1)) begin
23 cnt <= 0;
24 end else begin
25 cnt <= cnt + 1;
26 end
27 end
28end
29
30reg [3:0] cnt2;
31reg [3:0] cnt3;
32
33parameter CHANGE = 4;
34
35always @(posedge clk or negedge rstn)
36begin
37 if(!rstn) begin
38 cnt2 <= 0;
39 cnt3 <= 0;
40 end else begin
41 if(cnt <= (CHANGE-1)) begin
42 cnt3 <= 0;
43 if(cnt2 == (DIV_M-1)) begin
44 cnt2 <= 0;
45 end else begin
46 cnt2 <= cnt2 + 1;
47 end
48 end
49 else if(cnt > (CHANGE -1)) begin
50 cnt2 <= 0;
51 if(cnt3 == (DIV_N -1)) begin
52 cnt3 <= 0;
53 end else begin
54 cnt3 <= cnt3 + 1;
55 end
56 end
57 end
58end
59
60always @(posedge clk or negedge rstn)
61begin
62 if(!rstn) begin
63 clko <= 0;
64 end else begin
65 if(cnt < CHANGE) begin
66 if(cnt2 == 0 || cnt2 == DIV_M/2) begin
67 clko <= ~clko;
68 end
69 else begin
70 clko <= clko;
71 end
72 end
73 else begin
74 if(cnt3 == 0 || cnt3 == (DIV_N-1)/2) begin
75 clko <= ~clko;
76 end
77 else begin
78 clko <= clko;
79 end
80 end
81 end
82end
83
84endmodule
- 仿真波形:
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
電路設計
+關注
關注
6667文章
2430瀏覽量
203418 -
仿真
+關注
關注
50文章
4048瀏覽量
133431 -
Verilog
+關注
關注
28文章
1345瀏覽量
109995 -
計數器
+關注
關注
32文章
2254瀏覽量
94371 -
分頻電路
+關注
關注
7文章
45瀏覽量
35926
發布評論請先 登錄
相關推薦
下載:《ADS應用詳解-射頻電路設計與仿真》
`編輯推薦 本書以ADS射頻電路設計與仿真中的應用方法為中心,注重提高讀者在射頻電路設計中正確使用ADS仿真功能的能力。 本書內容包括:射頻電路
發表于 10-17 18:05
基于LabVIEW的數字電路設計和仿真
基于LabVIEW的數字電路設計和仿真
數字電路設計和仿真是電子工程領域的基本技術。介紹了基于LabV IEW的數字電路設計和
發表于 03-30 16:09
?124次下載
Multisim電路設計與仿真
設計和后處理功能,還可以進行從原理圖到 PCB 布線工具包的無縫隙數 據傳輸。 對于電路設計者來說,能滿足電路電子設計與仿真,滿足從參數到產品的 設計要求,節約電路設計時間,降低實驗
發表于 05-13 15:07
?27次下載
乘法器電路設計方案匯總(五款模擬電路設計原理及仿真程序分享)
本文為大家介紹五款乘法器電路設計方案,包括五款模擬電路設計原理及仿真程序分享,以供參考。
發表于 01-17 18:03
?5.9w次閱讀
電子分頻器電路圖大全(六款電子分頻器電路設計原理圖詳解)
本文主要介紹了電子分頻器電路圖大全(六款電子分頻器電路設計原理圖詳解)。從工作原理看,分頻器就是一個由電容器和電感線圈構成的濾波網。高音通道
發表于 03-02 09:41
?13.3w次閱讀
射頻PCB電路設計與仿真案例
在進行射頻PCB電路設計的時候,我們一般靠“經驗”和“原則”指導設計,某些情況經驗的作用也是有限的。要設計好射頻板級電路,仿真是必不可少的。之所以某些經驗可以替代仿真,是因為產品的
評論