Files
templates/hdl/logic-analyzer

Logic-analyzer capture memory

rtl/la_capture_buffer.v is a portable Verilog-2001 true dual-port capture buffer. It deliberately contains no Altera/Intel primitive, board pin, UART, or trigger logic. Quartus infers Cyclone IV M9K memory from the registered read and synchronous write ports.

Parameters:

Parameter Meaning Default
SAMPLE_WIDTH Number of simultaneously captured digital inputs 16
ADDR_WIDTH Buffer depth as 2**ADDR_WIDTH 12 (4096 samples)

The write and read clocks may be different. The caller owns clock-domain crossing for addresses/status and must keep a read address stable until the registered rd_data is valid on the following rd_clk edge.

Example Quartus source assignment:

set_global_assignment -name VERILOG_FILE path/to/templates/hdl/logic-analyzer/rtl/la_capture_buffer.v

Буфер с аппаратным триггером

rtl/la_trigger_buffer.v принимает восемь синхронизированных входов. После arm первый отсчёт, удовлетворяющий маскам уровня и фронтов, попадает в адрес 0. Нулевые маски включают немедленную запись. divider задаёт шаг в тактах (минимум 1), last_address — последний адрес записи включительно. По умолчанию глубина равна 65 536 отсчётам.

Модуль использует rtl/la_capture_buffer.v. После заполнения BRAM он выдаёт отсчёты через data_valid и ready. Задержки читателя влияют только на выгрузку. stop отменяет ожидание, запись или выгрузку. Вход clk общий для обоих портов BRAM.

При EXTERNAL_TRIGGER=1 и use_external=1 вход pretrigger задаёт число отсчётов перед срабатыванием. Блок собирает их в кольце до разрешения trigger_tick. Подключите external_hit к rtl/la_advanced_trigger.v и подайте на этот блок тот же отсчёт и trigger_tick. Он выполняет до 16 стадий или сопоставляет биты Serial Trigger по фронтам Clock между флагами Start и Stop.

rtl/la_run_encoder.v запускается по тому же типу триггера и кодирует непрерывный поток. На каждый непрерывный уровень выдаёт два байта: значение и число отсчётов минус один. Допустимая длина серии 1–256 отсчётов. Готовность выхода влияет на выдачу. При переполнении очереди выставляется overflow, такт выборки сохраняется.

Блоки AXI-захвата

  • rtl/axi_logic_analyzer.sv принимает восемь входов и сохраняет окно в BRAM. Управляющий AXI4-Lite и входной синхронизатор работают в домене clk. CLOCK_HZ передаёт фактическую частоту в регистр метаданных. ADDR_WIDTH задаёт глубину BRAM.
  • rtl/axi_logic_analyzer_bd.v выводит интерфейсы в Vivado Block Design. Для другого домена управления подключите AXI Clock Converter.
  • rtl/zynq_la_stream.v пишет 8-битные отсчёты в кольцо DDR через 64-битный AXI4. Выделите 8 МиБ по параметру DDR_BASE и исключите диапазон из общего распределителя DDR. Читатель подтверждает целые блоки счётчиком CONSUMED. При отставании читателя блок выставляет ошибку.
  • include/zynq_la.h и include/zynq_la_stream.h описывают регистры и форматы Ethernet-сообщений ZLA1 и ZLS1.

Для буферного блока добавьте vfd_pwm.sv и la_capture_buffer.v. Папка tests содержит проверки BRAM, фронтов, переполнения и выдачи DDR через модель AXI. Привязку пинов, регистровые адреса AXI и допустимую частоту определяет проект платы.