闲着也是闲着,再做一个吧
2 用电路或者verilog 描述一个检测上升沿和检测下降沿的。
严格意义上来说不算是一个上升沿和下降沿的检测,
只是同步到clk时钟域之后的被检测时钟的上下边沿检测,不过在同步设计里足够了
module posedge_det(
clk, //clk must be faster than clk2det * 2
clk2det,
rst,
pose_det,
neg_det
);
//*******
// in/out
//*******
input clk,
input rst,
input clk_det,
output pose_det,
output neg_det,
//********
// internal signals
//********
wire clk2det_syn0;
wire clk2det_syn1;
wire clk2det_dly0;
//main
d1_dly1 clk_syn0(clk, rst, clk2det, clk2det_syn0);
d1_dly1 clk_syn1(clk2, rst, clk2det_syn0, clk2det_syn1); //syn clk2det to clk domain
d1_dly1 clk_dly0(clk, rst, clk2det_syn1, clk2det_dly0);
assign pose_det = ~clk2det_syn1 && clk2det_dly0;
assign neg_det = clk2det_syn1 && ~clk2det_dly0; // last for 1T of clk
//
endmodule
module d1_dly1 (
clk,
rst,
din,
dot
);
//***************************
// Inputs and Outputs
//***************************
input clk;
input rst;
input din;
output dot;
//
//
//**************************
// Internal Signals
//**************************
reg dot;
always @ (posedge clk or posedge rst) begin
if(rst) begin
dot <= #1 0;
end
else begin
dot <= #1 din;
end
end
//
endmodule |