在FPGA中,如何实现一个时钟信号的可控延时? (用高频50MHZ的时钟去延时一个22KHZ的信号)
展开全部
如果是FPGA的话,建议用PLL把时钟提高。然后用这个信号去采样22kHz的信号,用计数器记录信号电平改变的时间,记录相邻几次的值(总时间大于延迟时间就可以了),然后加上延时,从新计数输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没细考虑也没验证,仅可做一个基本出发点来参考。mclk=50M,lclk=22k输入,delay_word控制延时字,lclkout=22k延时时钟输出.
module clkdelay (mclk,lclk,delay_word,lclkout);
input mclk,lclk;
input [11:0] delay_word;
ouptut lclkout;
reg lclkout;
reg [11:0] p_c,n_c;
reg hf,lf;
always @(posedge mclk)
begin
if (hf) p_c=p_c+1;
if(p_c>=delay_word) begin lclkout=1; p_c=0; end
if (lf) n_c=n_c+1;
if(n_c>=delay_word) begin lclkout=0; n_c=0; end
end
always @(posedge lclk or negedge lclk)
begin
if (lclk) hf=1;
if(lclkout) hf=0;
if (!lclk) lf=1;
if(!lclkout) hf=0;
end
endmodule
module clkdelay (mclk,lclk,delay_word,lclkout);
input mclk,lclk;
input [11:0] delay_word;
ouptut lclkout;
reg lclkout;
reg [11:0] p_c,n_c;
reg hf,lf;
always @(posedge mclk)
begin
if (hf) p_c=p_c+1;
if(p_c>=delay_word) begin lclkout=1; p_c=0; end
if (lf) n_c=n_c+1;
if(n_c>=delay_word) begin lclkout=0; n_c=0; end
end
always @(posedge lclk or negedge lclk)
begin
if (lclk) hf=1;
if(lclkout) hf=0;
if (!lclk) lf=1;
if(!lclkout) hf=0;
end
endmodule
参考资料: i
来自:求助得到的回答
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询