赞
踩
1、通过时钟相或实现奇数分频
原时钟clk通过上升沿和下降沿计数产生时钟clk1和clk2,clk1和clk2相或产生clk三分频的clk_div3时钟。
clk1:原时钟clk的上升沿产生。
clk2:原时钟clk的下降沿产生。
clk1和clk2的特征:
3分频——高电 : 低电平 = 1 : 2
2N+1分频——高电 : 低电平 = N : N+1
代码:
- `timescale 1ns/1ns
-
- module test(
- input clk_150 ,
- input rst_n ,
-
- output clk_div3
- );
-
- reg [3:0] cnt_1; //上升沿计数
- reg [3:0] cnt_2; //下降沿计数
-
- reg clk1;
- reg clk2;
-
- assign clk_div3 = clk1 | clk2;
-
- always@(posedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- cnt_1 <= 4'd0;
- else
- cnt_1 <= (cnt_1 == 4'd2) ? 4'd0 : cnt_1 + 4'd1;
- end
-
- always@(posedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- clk1 <= 1'b0;
- else
- clk1 <= (cnt_1 == 4'd1) ? 1'b1 : 1'b0;
- end
-
- always@(negedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- cnt_2 <= 4'd0;
- else
- cnt_2 <= (cnt_2 == 4'd2) ? 4'd0 : cnt_2 + 4'd1;
- end
-
- always@(negedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- clk2 <= 1'b0;
- else
- clk2 <= (cnt_2 == 4'd1) ? 1'b1 : 1'b0;
- end
-
- endmodule
仿真图:
2、通过时钟相与实现奇数分频
原时钟clk通过上升沿和下降沿计数产生时钟clk1和clk2,clk1和clk2相与产生clk三分频的clk_div3时钟。
clk1:原时钟clk的上升沿产生。
clk2:原时钟clk的下降沿产生。
clk1和clk2的特征:
3分频——高电 : 低电平 = 2 : 1
2N+1分频——高电 : 低电平 = N+1 : N
代码:
- `timescale 1ns/1ns
-
- module test(
- input clk_150 ,
- input rst_n ,
-
- output clk_div3
- );
-
- reg [3:0] cnt_1; //上升沿计数
- reg [3:0] cnt_2; //下降沿计数
-
- reg clk1;
- reg clk2;
-
- assign clk_div3 = clk1 & clk2;
-
- always@(posedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- cnt_1 <= 4'd0;
- else
- cnt_1 <= (cnt_1 == 4'd2) ? 4'd0 : cnt_1 + 4'd1;
- end
-
- always@(posedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- clk1 <= 1'b0;
- else
- clk1 <= (cnt_1 <= 4'd1) ? 1'b1 : 1'b0;
- end
-
- always@(negedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- cnt_2 <= 4'd0;
- else
- cnt_2 <= (cnt_2 == 4'd2) ? 4'd0 : cnt_2 + 4'd1;
- end
-
- always@(negedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- clk2 <= 1'b0;
- else
- clk2 <= (cnt_2 <= 4'd1) ? 1'b1 : 1'b0;
- end
-
- endmodule
仿真图:
3、通过时钟相异或实现奇数分频
原时钟clk通过上升沿和下降沿计数产生时钟clk1和clk2,clk1和clk2相异或产生clk三分频的clk_div3时钟。
clk1:原时钟clk的上升沿产生。
clk2:原时钟clk的下降沿产生。
clk1和clk2的特征:
3分频:clk1以原时钟clk的3个周期为单位翻转,clk2在clk1时钟的中间点发生翻转。
2N+1分频:clk1以原时钟clk的2N+1个周期为单位翻转,clk2在clk1时钟的中间点发生翻转。
代码:
- module test(
- input clk_150 ,
- input rst_n ,
-
- output clk_div3
- );
-
- reg [3:0] cnt_1; //上升沿计数
-
- reg clk1;
- reg clk2;
-
- assign clk_div3 = clk1 ^ clk2;
-
- always@(posedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- cnt_1 <= 4'd0;
- else
- cnt_1 <= (cnt_1 == 4'd2) ? 4'd0 : cnt_1 + 4'd1;
- end
-
- always@(posedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- clk1 <= 1'b0;
- else
- clk1 <= (cnt_1 == 4'd2) ? ~clk1 : clk1;
- end
-
- always@(negedge clk_150 or negedge rst_n)
- begin
- if (!rst_n)
- clk2 <= 1'b0;
- else
- clk2 <= (cnt_1 == 4'd1) ? ~clk2 : clk2;
- end
-
- endmodule
仿真图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。