怎样得到一个窄脉冲
我有一个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
