verilog设计延时电路

我想用verilog实现如图所示的延时!
在5 MHz时钟CLK控制下对同步信号SYNC进行N延时(SYNC脉冲宽度为2 μs,脉冲重复频率为1 kHz;0μs≤N≤998 μs)。要求每次在同步脉冲上升沿到来时开始延时,并在延时结束后产生宽度可调的选通信号。

不晓得哪位能够提供下思路啊,下面是我自己写的一个程序,
module delay ( //input
clk,
sync,
//output
delay );
input clk;
input sync;
output delay;
reg delay_r;
reg [4:0] cnt1;
reg [4:0] cnt2;
reg [4:0] cnt3;
wire dlyen;
reg dly_en;
reg dly_en1;
parameter n=20;
assign dlyen=sync ||dly_en;
//assign delay=(dlyen==0)? 0:1;
always @( posedge clk ) begin
delay_r<=0;
if(dlyen==0)
delay_r<=0;
if (cnt3<n+10) begin
dly_en<=1;
cnt3<=cnt3+1;
end
else begin
dly_en<=0;
cnt3<=0;
end
if(cnt1>=n)
dly_en1<=1;
else
cnt1<=cnt1+1;
if (dly_en1==1) begin
if(cnt2>=10) begin
dly_en1<=0;
cnt1<=0;
cnt2<=0;
end
else
cnt2<=cnt2+1;
end
end
assign delay=delay_r;
endmodule
我自己的程序没有实现延时功能,然后我的程序是参照 http://blog.cec.pandabuying.com/ting123/249045.aspx图3所写的,大家帮我看下有什么问题啊,谢谢了

思路:一个计数器(cnt)实现。计数器在sync信号下降沿时清0,其他时间自增。延迟的脉冲是cnt>=n*5 && cnt<(n+宽度)*5,输出寄存一级。
以上假定n和宽度的单位是us。
你的程序里的问题
1.没 reset
2.应该把不同的信号写在不同的always块。便于理解。相关的比如在同一条件下变化的信号可以放一起。一个always里面不要写一大堆并行的ifelse。
3.没有注释。
最后,去eetop问这类问题,可能更快得到回答哦。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜