From 58e6a11a3fb405979c548549183bf5e3048a9d7a Mon Sep 17 00:00:00 2001 From: nikit3s Date: Mon, 17 Aug 2026 18:13:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B0=D1=8F=D0=BA=201=20=D0=93=D1=86=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=B2=D0=B5=D1=82=D0=BE=D0=B4=D0=B8=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B8=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D1=87=D0=B0=D1=81=D1=82=D0=BE=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LED_SRC=3 гонит на светодиод делитель прямо от clk, мимо тракта. Период, отличный от секунды, означает, что clk не равен SYS_CLK_HZ -- тогда неверны и частота PDM, и скорость UART, и шкала мигания. README: UART обратно на G5, добавлены номера контактов гребёнки и заметка про VCCIO6/7, подаваемое снаружи. --- README.md | 9 ++++----- src/Top.vhd | 33 +++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b6e08a7..d0835b3 100644 --- a/README.md +++ b/README.md @@ -67,16 +67,15 @@ SYNC в CRC не входит: он нужен приёмнику для рес | Цепь | Назначение | Пин ПЛИС | Контакт J1 | |:--|:--|:--:|:--:| | clk_50m | тактовый генератор платы, 50 МГц | E2 | — | -| UART_TX | на встроенный мост BL616, ПЛИС -> ПК | **C3** | 21 | +| UART_TX | на внешний мост, ПЛИС -> ПК | G5 | 22 | | LED | индикация | E8 | 17 | | MIC_CLK | тактирование микрофона, 3.125 МГц | J11 | 33 | | MIC_DAT | однобитный поток PDM | J10 | 35 | | MIC_SEL | вывод SELECT микрофона | K7 | 34 | -C3 (IOB56B) — это то, что на Dock-плате подписано `FPGA_UART_TX` и заведено на -приёмник моста BL616, банк 4 с фиксированными 3.3 В. Обычный контакт гребёнки -для UART не годится: мост туда не смотрит. Под внешний мост, посаженный прямо -на гребёнку, вывод меняется на нужный контакт. +UART идёт на внешний мост, посаженный на гребёнку: встроенный BL616 ограничен +по скорости. Его цепи, если понадобятся, — C3 (`FPGA_UART_TX`, контакт 21) и +B3 (`FPGA_UART_RX`, контакт 19). Микрофон сидит в банке 7, а VCCIO банков 6/7 на этой плате подаётся снаружи через контакты 29 и 31 гребёнки — без 3.3 В на них выводы микрофона не работают. diff --git a/src/Top.vhd b/src/Top.vhd index e58134a..1f5d722 100644 --- a/src/Top.vhd +++ b/src/Top.vhd @@ -22,9 +22,14 @@ entity Top is generic ( SYS_CLK_HZ : integer := 50_000_000; BAUD_RATE : integer := 921600; - -- Что считает светодиод: 0 -- отсчёты ФНЧ (рабочий режим), 1 -- отсчёты - -- CIC, 2 -- биты PDM. Быстрое мерцание значит, что выбранный строб живой, - -- так обрыв тракта находится перебором без осциллографа внутри кристалла. + -- Что показывает светодиод: + -- 0 -- отсчёты ФНЧ, рабочий режим + -- 1 -- отсчёты CIC + -- 2 -- биты PDM + -- 3 -- маяк ровно 1 Гц прямо от clk, мимо всего тракта + -- Режимы 0..2 ищут обрыв тракта: быстрое мерцание значит, что выбранный + -- строб живой. Режим 3 меряет сам clk: период не 1 с означает, что + -- системная частота не SYS_CLK_HZ, и тогда врут все производные от неё. LED_SRC : integer := 0 ); port ( @@ -72,6 +77,10 @@ architecture Behavioral of Top is signal uart_busy : std_logic; signal led_event : std_logic; + signal led_chain : std_logic; + + signal beat_cnt : integer range 0 to SYS_CLK_HZ / 2 - 1 := 0; + signal beacon : std_logic := '0'; begin @@ -81,6 +90,22 @@ begin cic_valid when LED_SRC = 1 else fir_valid; + LED <= beacon when LED_SRC = 3 else led_chain; + + -- Маяк: полпериода = SYS_CLK_HZ/2 тактов, то есть ровно 1 Гц на выводе. + -- Ни от чего, кроме clk, не зависит. + beacon_proc : process (clk) + begin + if rising_edge(clk) then + if beat_cnt = SYS_CLK_HZ / 2 - 1 then + beat_cnt <= 0; + beacon <= not beacon; + else + beat_cnt <= beat_cnt + 1; + end if; + end if; + end process beacon_proc; + pdm_rx_inst : entity work.pdm_rx(rtl) generic map( CLK_DIV => PDM_DIV, @@ -205,7 +230,7 @@ begin ( clk => clk, data_event => led_event, - led => LED + led => led_chain ); end architecture Behavioral;