如何在一个时间段内找到方波中的过渡数?边缘检测可能会错过边缘,因此使用Verilog进行转换次数?
答案 0 :(得分:0)
除非我误解,否则听起来你正在尝试检测数据速率比时钟快的信号。如果是这种情况那么就不可能。你基本上看到了一个美化的别名版本。
但是,如果您的时钟比您尝试检测边缘的信号快,那么这样的事情应该有效:
module Edge_Counter(
// Inputs
input Clock, // System Clock
input Reset, // System Reset
input Enable, // Enables the detection of edges
input Signal_In, // Monitored signal
// Outputs
output reg [7:0] Edge_Count // Number of edges in monitored signal while enabled
);
reg [1:0] Next_Edge_Detection, Edge_Detection;
reg [7:0] Next_Edge_Count;
always @( posedge Clock, posedge Reset ) begin
if ( Reset ) begin
Edge_Detection <= 2'd0;
Edge_Count <= 8'd0;
end else begin
Edge_Detection <= Next_Edge_Detection;
Edge_Count <= Next_Edge_Count;
end
end
always @ * begin
Next_Edge_Detection = { Edge_Detection[0], Signal_In };
Next_Edge_Count = Edge_Count;
if ( Enable ) begin
if ( Edge_Detection[0] != Edge_Detection[1] )
Next_Edge_Count = Edge_Count + 1'd1;
end
end
endmodule
另外,作为旁注,如果您刚开始使用Verilog并且您的工具支持使用System Verilog,我强烈建议您阅读并试一试。它将减少代码中的锁存器和其他错误。