Я хочу измерить количество переходов подъема и переходов осей сигнала. Я использую сигнал как часы и реализую 2 счетчика. Один счетчик увеличивается на каждом фронте, а другой увеличивается на каждом падающем фронте. Я добавляю результат этих двух счетчиков, чтобы получить окончательное значение счета.Как написать синтезируемый RTL, который может подсчитывать повышение и падение сигнала
Есть ли лучший способ реализовать эту логику? Какой самый надежный метод?
module clock_edge_counter (
clock_edge_count, // Output of the counter ,
clk , // clock Input
stop ,
reset
);
parameter CNTR_WIDTH = 16;
input clk ;
input stop ;
input reset ;
output [CNTR_WIDTH:0] clock_edge_count;
wire [CNTR_WIDTH:0] clock_edge_count;
reg [CNTR_WIDTH-1:0] clock_negedge_edge_count;
reg [CNTR_WIDTH-1:0] clock_posedge_edge_count;
always @(posedge clk or posedge reset)
if (reset) begin
clock_posedge_edge_count <= 0;
end
else if (!stop) begin
clock_posedge_edge_count <= clock_posedge_edge_count + 1;
end
always @(negedge clk or posedge reset)
if (reset) begin
clock_negedge_edge_count <= 0;
end
else if (!stop) begin
clock_negedge_edge_count <= clock_negedge_edge_count + 1;
end
assign clock_edge_count = clock_negedge_edge_count + clock_posedge_edge_count;
endmodule
Спасибо за объяснение Рахул. –
приветствуется :) –