verilog中wave中的转换次数

时间:2014-09-17 16:06:29

标签: verilog

如何在一个时间段内找到方波中的过渡数?边缘检测可能会错过边缘,因此使用Verilog进行转换次数?

1 个答案:

答案 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,我强烈建议您阅读并试一试。它将减少代码中的锁存器和其他错误。