// (resp. low peak) is reached/detected, since you can't know it isn't a
// local minima (resp. maxima) until then.
// This also means the peaks are detected with an unpredictable delay.
-// This algorithm can't therefore be used directly for realtime peak detections,
+// This algorithm therefore can't be used directly for realtime peak detections,
// but it can be used as a simple envelope follower.
module min_max_tracker(input clk, input [7:0] adc_d, input [7:0] threshold,
output [7:0] min, output [7:0] max);
always @(posedge clk)
begin
case (state)
- 0:
+ 0: // initialize
begin
if (cur_max_val >= ({1'b0, adc_d} + threshold))
state <= 2;
else if (adc_d <= cur_min_val)
cur_min_val <= adc_d;
end
- 1:
+ 1: // high phase
begin
if (cur_max_val <= adc_d)
cur_max_val <= adc_d;
max_val <= cur_max_val;
end
end
- 2:
+ 2: // low phase
begin
if (adc_d <= cur_min_val)
cur_min_val <= adc_d;