微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 把输入的脉冲变宽

把输入的脉冲变宽

时间:10-02 整理:3721RD 点击:
如何使我的输出是对输入脉冲的拓宽,而且频率不变,有没有不是通过延时的简便方法?就是:输入1M的方波(占空比不是一半,高电平占的少),现在让高电平变宽,但是频率不变,最好不要用延时设计的逻辑!有什么方法实现?

计数器。

    谢了哦,我只是用延时,然后或以下,只是想知道还有什么跟好的方法,但是如果上升沿检测不到那就是问题了,因为我的高电平非常窄的!

    感觉和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端。
这样可以完成脉冲信号的检测和扩宽。
具体可参照一下其他文档,论坛上有的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top