题解 | #边沿检测#
边沿检测
http://www.nowcoder.com/practice/fed4247d5ef64ac68c20283ebace11f4
`timescale 1ns/1ns
module edge_detect(
input clk,
input rst_n,
input a,
output wire rise,
output wire down
);
reg b,c;
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin b<=0;c<=0;end
else begin
b<=a;
c<=b;
end
end
assign rise = ((b && ~c)===1) ? 1:0;
assign down = ((~b && c)===1) ? 1:0;//因为a有一开始的未知态,所以用全等于
endmodule
// `timescale 1ns/1ns
// module edge_detect(
// input clk,
// input rst_n,
// input a,
// output reg rise,
// output reg down
// );
// reg a_before;
// always@(posedge clk or negedge rst_n) begin
// if(!rst_n) begin
// a_before<=0;
// rise<=0;
// down<=0;
// end
// else a_before<=a;
// rise <= ((a & ~a_before)===1)?1:0;
// down <= ((~a & a_before)===1)?1:0;//因为a有一开始的未知态,所以用全等于
// end
// endmodule