Маяк 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 |
|
| Цепь | Назначение | Пин ПЛИС | Контакт J1 |
|
||||||
|:--|:--|:--:|:--:|
|
|:--|:--|:--:|:--:|
|
||||||
| clk_50m | тактовый генератор платы, 50 МГц | E2 | — |
|
| clk_50m | тактовый генератор платы, 50 МГц | E2 | — |
|
||||||
| UART_TX | на встроенный мост BL616, ПЛИС -> ПК | **C3** | 21 |
|
| UART_TX | на внешний мост, ПЛИС -> ПК | G5 | 22 |
|
||||||
| LED | индикация | E8 | 17 |
|
| LED | индикация | E8 | 17 |
|
||||||
| MIC_CLK | тактирование микрофона, 3.125 МГц | J11 | 33 |
|
| MIC_CLK | тактирование микрофона, 3.125 МГц | J11 | 33 |
|
||||||
| MIC_DAT | однобитный поток PDM | J10 | 35 |
|
| MIC_DAT | однобитный поток PDM | J10 | 35 |
|
||||||
| MIC_SEL | вывод SELECT микрофона | K7 | 34 |
|
| MIC_SEL | вывод SELECT микрофона | K7 | 34 |
|
||||||
|
|
||||||
C3 (IOB56B) — это то, что на Dock-плате подписано `FPGA_UART_TX` и заведено на
|
UART идёт на внешний мост, посаженный на гребёнку: встроенный BL616 ограничен
|
||||||
приёмник моста BL616, банк 4 с фиксированными 3.3 В. Обычный контакт гребёнки
|
по скорости. Его цепи, если понадобятся, — C3 (`FPGA_UART_TX`, контакт 21) и
|
||||||
для UART не годится: мост туда не смотрит. Под внешний мост, посаженный прямо
|
B3 (`FPGA_UART_RX`, контакт 19).
|
||||||
на гребёнку, вывод меняется на нужный контакт.
|
|
||||||
|
|
||||||
Микрофон сидит в банке 7, а VCCIO банков 6/7 на этой плате подаётся снаружи
|
Микрофон сидит в банке 7, а VCCIO банков 6/7 на этой плате подаётся снаружи
|
||||||
через контакты 29 и 31 гребёнки — без 3.3 В на них выводы микрофона не работают.
|
через контакты 29 и 31 гребёнки — без 3.3 В на них выводы микрофона не работают.
|
||||||
|
|||||||
+29
-4
@@ -22,9 +22,14 @@ entity Top is
|
|||||||
generic (
|
generic (
|
||||||
SYS_CLK_HZ : integer := 50_000_000;
|
SYS_CLK_HZ : integer := 50_000_000;
|
||||||
BAUD_RATE : integer := 921600;
|
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
|
LED_SRC : integer := 0
|
||||||
);
|
);
|
||||||
port (
|
port (
|
||||||
@@ -72,6 +77,10 @@ architecture Behavioral of Top is
|
|||||||
signal uart_busy : std_logic;
|
signal uart_busy : std_logic;
|
||||||
|
|
||||||
signal led_event : 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
|
begin
|
||||||
|
|
||||||
@@ -81,6 +90,22 @@ begin
|
|||||||
cic_valid when LED_SRC = 1 else
|
cic_valid when LED_SRC = 1 else
|
||||||
fir_valid;
|
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)
|
pdm_rx_inst : entity work.pdm_rx(rtl)
|
||||||
generic map(
|
generic map(
|
||||||
CLK_DIV => PDM_DIV,
|
CLK_DIV => PDM_DIV,
|
||||||
@@ -205,7 +230,7 @@ begin
|
|||||||
(
|
(
|
||||||
clk => clk,
|
clk => clk,
|
||||||
data_event => led_event,
|
data_event => led_event,
|
||||||
led => LED
|
led => led_chain
|
||||||
);
|
);
|
||||||
|
|
||||||
end architecture Behavioral;
|
end architecture Behavioral;
|
||||||
|
|||||||
Reference in New Issue
Block a user