From 4b1c98d57f482b2ffe42a6f5d0ff8b134cf9f7ef Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 13 Nov 2026 20:33:18 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B7=D0=B4=D0=BD=D0=B8=D0=B9=20=D1=82=D1=80=D0=B8=D0=B3?= =?UTF-8?q?=D0=B3=D0=B5=D1=80=20=D0=B8=D0=B7=20=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B0=D0=B4=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D0=B0=20=D0=B7=D0=B0=D1=85=D0=B2=D0=B0=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Продвигать кольцевой указатель на каждом отсчёте и заранее вычислять начало pretrigger. Сохранить точный адрес срабатывания без дополнительного такта задержки. --- hdl/logic-analyzer/rtl/la_trigger_buffer.v | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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;