把输入的脉冲变宽
计数器。
谢了哦,我只是用延时,然后或以下,只是想知道还有什么跟好的方法,但是如果上升沿检测不到那就是问题了,因为我的高电平非常窄的!
感觉和100M的一个周期一样窄,但是我觉得用100M来检测它的上升沿还是不保险,所以我就干脆用延时了,感觉自己写的代码太小儿科了!
可以用PLL改占空比
看看这个方案可行吗?
因为时钟可能采样不到输入信号的高电平,所以用脉冲上沿触发输出脉冲的上沿,然后用时钟计数,完成delay时间后,将输出脉冲复位到0。
要注意的是,输入脉冲上沿是否和clk是异步关系。
以下是参考的code
input clk, pulse_in, reset;
output pulse_out;
reg clear ;
reg pulse_in_rise_sync_q, pulse_in_rise_sync_qq;
always @(posedge pulse_in or posedge clear) begin
if (clear) pulse_in_rise <= 1'b0;
else pulse_in_rist <= 1'b1;
end
always @(posedge clk or posedge reset) begin
if (reset) begin
pulse_in_rise_q <= 1'b0;
pulse_in_rise_qq <= 1'b0;
end
else begin
pulse_in_rise_q <= pulse_in_rise;
pulse_in_rise_qq <= pulse_in_rise_q;
end
end
always @(posedge clk or negedge pulse_in_rise_qq) begin
if (~pulse_in_rise_qq)
cnt <= 0;
else
cnt <= cnt +1 ;
end
always @(posedge clk or posedge reset) begin
if (reset) clear <= 1'b0;
else clear <= cnt == expect_numer
end
窄脉冲同步到慢时钟域有一种办法
用窄脉冲控制触发器的异步复位端,只要窄脉冲出现,触发器就会一直处于复位状态,将这个信号作为输出即可。
当然,也不能让触发器一直复位,可以将前面的输出信号经过慢时钟打几拍后,再反馈到触发器的D端。
这样可以完成脉冲信号的检测和扩宽。
具体可参照一下其他文档,论坛上有的。
