微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 怎样得到一个窄脉冲

怎样得到一个窄脉冲

时间:10-02 整理:3721RD 点击:

我有一个32k的时钟和一个1M的时钟,二者没有任何相位关系,想在32k上升沿后得到一个窄脉冲,脉冲宽度小于半个1M周期,请问大侠们能实现吗?或者提供一个思路

用多个delay cell把32k延时一段时间,32k & (~32k_delay)就可以得到这个脉冲。
脉冲宽度由delay cell的延时决定,这个脉冲宽度不稳定,合不合适看应用场合了



   这确实是一个办法,但可以综合吗

综合没问题,这个模块直接例化库里的单元,设成dont touch就是了

到时再通知后端,别优化掉了


恩,谢谢不哭不哭的详细回复,,嘿嘿,,不哭不哭



   但是综合工具通常会忽略delay不是么



   我得到的这个脉冲必须紧随32k沿之后的



    设成dont touch ,综合工具就不会优化它了。



   谢谢哈,,我写个code试试


module delay_syn(
           clk32k,
           clk1M,
           rst_n,
   pulse1
);

input clk32k;
input clk1M;
input rst_n;
output pulse1;

wire clk32k_delay;
assign #100 clk32k_delay=clk32k;
assign pulse1=clk32k_delay ^ clk32k;
endmodule
这个如何设dont touch



   嘿嘿,,也是一个思路,,


这样写综合不出delay来的,直接写网,例化库里的cell

input clk32k;
input clk1M;
input rst_n;
output pulse1;

wire clk32k_delay;
//assign #100 clk32k_delay=clk32k;
//assign pulse1=clk32k_delay ^ clk32k;
dly_cell_name dly0(.A(clk32k), .Y(y0));
dly_cell_name dly1(.A(y0), .Y(y1));
dly_cell_name dly2(.A(y1), .Y(clk32k_delay));
inv_cell_name inv0(.A(clk32k_delay),.Y(clk32k_delay_b));
and_cell_name and0(.A(clk32k),.B(clk32k_delay_b),.Y(pulse1));

这样的话对于小的code还好,如果把它放在大的设计里,是不是代码在仿真的时候用我写的那一段,拿去综合的时候用你这一段?



   了解了,就是如果换工艺的话代码就需要改变了

这个是我以前做鉴相器用的,实验可行,脉冲非常窄,如果你想用1M的时钟估计不能处理!
module p(
   clk32k,
   pulse1
);
input clk32k;
output pulse1;
reg d;
assign pulse1 = d;
always @(posedge clk32k or posedge pulse1)
begin
        if (pulse1) begin
                d  <= 1'b0;
        end
        else begin
                d  <= 1'b1;
        end
end

endmodule

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

网站地图

Top