Verilog判断信号上升沿、下降沿
判断信号上升沿、下降沿往往作为整体程序比较关键的一环;
在实践应用中不能仅仅依靠几个对被判断信号的跟随进行判断,在实践电路中如果被判断信号是根据系统时钟上升沿变化的被检测信号跳变与时钟可能会因为竞争或其他因素影响导致会滞后时钟上升沿几纳秒;
如果对判断电平有及时性或固定延时或其他苛刻条件的话,仅仅依靠时钟上升沿来判断可能会导致至少一个时钟的误差。
根据上面描述的这些情况,这段程序充分利用了系统时钟的上升沿和下降沿,判断被检测电平变化的反应精准控制在信号到来后的半个时钟。
module jud
(judh,
judl,
tp,
clk);
output judh; //上升沿判断
output judl; //下降沿判断
input tp; //被检测电平
input clk; //系统时钟
reg judh;
reg judl;
reg delayh; //用系统时钟的上升沿跟随被检测电平
always@(posedge clk)
begin
delayh<=tp;
end
always@(negedge clk) //下降沿判断被检测电平的上升下降电平跳变
if(tp==1&&delayh==0)
begin
judh<=1;
end
else
if(tp==0&&delayh==1)
begin
judl<=1;
end
else
begin
judh<=0;
judl<=0;
end
endmodule