如何进行2个异步时钟频率大小的判断?贴上我写的代码,大家进来指点指点!
时间:10-02
整理:3721RD
点击:
代码如下:
module CLK_COMPARE (
clk_ref,
clk_detected,
reset,
detect_o
);
input reset;
input clk_ref;
input clk_detected;
output detect_o;
reg [7:0] clk_ref_count;
reg [10:0] clk_detected_count;
always @(posedge clk_ref or negedge reset)
begin
if(!reset)
clk_ref_count <= 8'b0;
else
clk_ref_count <= clk_ref_count + 1;
end
assign reset_wire = (clk_ref_count == 8'hff)?1'b0:1'b1;
assign reset_clk_detecter = reset_wire & reset;
always @(posedge clk_detected or negedge reset_clk_detecter)
begin
if(!reset_clk_detecter)
clk_detected_count <= 11'b0;
else
clk_detected_count <= clk_detected_count + 1;
end
assign detect_o = (clk_detected_count > clk_ref_count)?1'b1:1'b0;
endmodule
不知道这样搞行不行,综合出来会不会有问题,
module CLK_COMPARE (
clk_ref,
clk_detected,
reset,
detect_o
);
input reset;
input clk_ref;
input clk_detected;
output detect_o;
reg [7:0] clk_ref_count;
reg [10:0] clk_detected_count;
always @(posedge clk_ref or negedge reset)
begin
if(!reset)
clk_ref_count <= 8'b0;
else
clk_ref_count <= clk_ref_count + 1;
end
assign reset_wire = (clk_ref_count == 8'hff)?1'b0:1'b1;
assign reset_clk_detecter = reset_wire & reset;
always @(posedge clk_detected or negedge reset_clk_detecter)
begin
if(!reset_clk_detecter)
clk_detected_count <= 11'b0;
else
clk_detected_count <= clk_detected_count + 1;
end
assign detect_o = (clk_detected_count > clk_ref_count)?1'b1:1'b0;
endmodule
不知道这样搞行不行,综合出来会不会有问题,
是不是太简单了?怎么没有一个人发表意见
可以的,反正一个魁岸一个慢的嘛。
不过你的计数器的位数怎么都不一样啊?
主要是想少几个寄存器,不一定总是一个快一个慢,有时候是一个慢一个快
快慢时钟同时复位是不是有点..........
貌似可以的。
不可以,会出问题!不定的时钟域不能直接切换!
对两个时钟分别自分频,分频倍数一样,然后把两个分频后的信号都转换到refclk时钟域,通过计数就可以获得两个时钟的相差或者频差了。
