Маяк 1 Гц на светодиод для проверки системной частоты
LED_SRC=3 гонит на светодиод делитель прямо от clk, мимо тракта. Период, отличный от секунды, означает, что clk не равен SYS_CLK_HZ -- тогда неверны и частота PDM, и скорость UART, и шкала мигания. README: UART обратно на G5, добавлены номера контактов гребёнки и заметка про VCCIO6/7, подаваемое снаружи.
This commit is contained in:
@@ -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 В на них выводы микрофона не работают.
|
||||
|
||||
+29
-4
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user