分频器设计
1.奇数N分频器
思路:一个模N计数器计数,一个比较器,下图为mod=9分频电路
比较器datab[]=(N+1)/2,比较器取A>=B(ageb)
2 偶数分频器
mod=10;
比较器datab[]=N/2,比较器取A>=B(ageb)
3 对于2*M的偶数分频还可以用一个计数器和二分频级联而成(M=5)
4. 偶数分频器的另一种实现形式由一个模N/2计数器和一个TFF组成
模2的分频器就是每1个clock就0变1、1变0,模4的分频器就是每2个clock就0变1、1变0;计数器部分我們使用lpm_counter,0变1、1变0我們就是用lpm_ff这个T-FF。
5 三分频的特殊电路模型,三分频电路除了可以用上面通用的奇数分频器外还可以用下面的模型
6 任意整数分频
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | module div2 #(parameter N=9) ( input wire clk, input wire rst_n, output wire o_clk ); localparam WIDTH = log2(N); reg [WIDTH-1:0] cnt_p; reg clk_p; reg clk_n; wire [N-1:0] M; assign o_clk = (N==1) ? clk : (N[0]) ? (clk_p | clk_n) :clk_p; assign M = (N[0])?((N+1)/2):(N/2); //比较器datab的大小 //上升沿计数 always @ ( posedge clk, negedge rst_n) begin if (!rst_n) cnt_p <= {WIDTH{1'b0}}; else if (cnt_p == N-1) cnt_p <= {WIDTH{1'b0}}; else cnt_p <= cnt_p + 1'b1; end always @ ( posedge clk, negedge rst_n) begin if (!rst_n) clk_p <= 1'b0; else if (cnt_p >= M) clk_p <= 1'b1; else clk_p <= 1'b0; end always @ ( negedge clk) clk_n <= clk_p; function integer log2( input integer n); integer i; begin log2 = 1; for (i=0;2**i<n;i=i+1) log2=i+1; end endfunction endmodule |
路漫漫其修远兮,吾将上下而求索
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步