diff --git a/hdl/logic-analyzer/rtl/la_trigger_buffer.v b/hdl/logic-analyzer/rtl/la_trigger_buffer.v index 647b28f..e3df7ca 100644 --- a/hdl/logic-analyzer/rtl/la_trigger_buffer.v +++ b/hdl/logic-analyzer/rtl/la_trigger_buffer.v @@ -96,11 +96,11 @@ module la_trigger_buffer #( previous_valid <= 1; if (history != 0) history <= history - 1'b1; - if (pre != 0 || triggered || fire) - write_address <= write_address + 1'b1; + write_address <= write_address + 1'b1; // Внутренний кольцевой индекс продвигается на каждом отсчёте, включая ожидание без pretrigger: неписавшиеся позиции не наблюдаемы, а fire фиксирует соответствующее начало чтения; это убирает поздний trigger из CE 16-битного указателя. + if (!triggered) // До срабатывания отслеживаем только потенциальное начало; после fire старое значение triggered=0 позволяет зафиксировать точный адрес на том же фронте без нового такта задержки. + read_address <= write_address - pre; // Индексы заданы в отсчётах по модулю 2^ADDR_WIDTH: prospective адрес игнорируется до готового окна, затем удерживается на первом pretrigger-отсчёте. if (fire) begin triggered <= 1; - read_address <= write_address - pre; if (post_left == 0) begin capturing <= 0; read_pending <= 3;