jenya7 0 13 ноября, 2023 Опубликовано 13 ноября, 2023 · Жалоба Сегодня я просто посылаю определённое количество байт из одного модуля. UART_TX: process(CLK) variable tx_idx : integer range 0 to 255 := 0; variable del : integer range 0 to 255 := 0; begin if (rising_edge(CLK)) then case UartTxState is when ST_IDLE => tx_idx := 0; del := 0; if (TX_GO = '1') then tx_count <= tx_count + '1'; rx_count_ret <= rx_count; UartTxState <= ST_TX_DATA; end if; when ST_TX_DATA => del := 0; if (TX_RDY = '1') then case tx_idx is when 0 => tx_data_buf <= X"AA"; when 1 => tx_data_buf <= X"77"; when 2 => tx_data_buf <= tx_count(7 downto 0); when 3 => tx_data_buf <= tx_count(15 downto 8); --------------------------------------------- when 223 => tx_data_buf <= tx_chksum(7 downto 0); when 224 => tx_data_buf <= tx_chksum(15 downto 8); when others => UartTxState <= ST_IDLE; end case; UartTxState <= ST_TX_TRIG; when ST_TX_TRIG => if (TX_RDY = '1') then TX_TRIG <= '1'; UartTxState <= ST_NEXT_1; end if; when ST_NEXT_1 => if (TX_RDY = '0') then UartTxState <= ST_NEXT_2; end if; when ST_NEXT_2 => TX_TRIG <= '0'; tx_idx := tx_idx + 1; if (tx_idx > 224) then UartTxState <= ST_IDLE; else UartTxState <= ST_TX_DATA; end if; when others => UartTxState <= ST_IDLE; end case; end if; end process UART_TX; А как сделать универсальную посылку? Чтоб можно было посылать из любого модуля любое количество байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pavlovconst 5 13 ноября, 2023 Опубликовано 13 ноября, 2023 · Жалоба Первый вариант - перед UART_TX поставить FIFO для того чтобы временно хранить отправляемые данные. А для записи в FIFO написать арбитр, который будет собирать с N модулей данные. Поскольку N модулей могут захотеть писать в UART одновременно - можно предложить второй вариант - в каждом из N модулей по небольшому FIFO, а затем самописный модуль-арбитр, который последовательно или по приоритету забирает данные из FIFOшек и скармливает блоку UART_TX Основная идея - UART_TX нужно переделать, чтобы он получал данные побайтно, потоком Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 ноября, 2023 Опубликовано 13 ноября, 2023 · Жалоба On 11/13/2023 at 1:39 PM, pavlovconst said: Первый вариант - перед UART_TX поставить FIFO для того чтобы временно хранить отправляемые данные. А для записи в FIFO написать арбитр, который будет собирать с N модулей данные. Поскольку N модулей могут захотеть писать в UART одновременно - можно предложить второй вариант - в каждом из N модулей по небольшому FIFO, а затем самописный модуль-арбитр, который последовательно или по приоритету забирает данные из FIFOшек и скармливает блоку UART_TX Основная идея - UART_TX нужно переделать, чтобы он получал данные побайтно, потоком спасибо. FIFO пожалуй неплохое решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 13 ноября, 2023 Опубликовано 13 ноября, 2023 · Жалоба можно вместо фифо использовать блочную память для данных потом логикой вычитывать формируя таким образом пакет данных wave.do bram_tdp.vhd c.do package_formation.vhd package_formation_vhd_tst.vhd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 ноября, 2023 Опубликовано 13 ноября, 2023 · Жалоба On 11/13/2023 at 2:57 PM, Maverick_ said: можно вместо фифо использовать блочную память для данных потом логикой вычитывать формируя таким образом пакет данных wave.do 2.94 kB · 0 downloads bram_tdp.vhd 4.35 kB · 0 downloads c.do 505 B · 0 downloads package_formation.vhd 7.75 kB · 1 download package_formation_vhd_tst.vhd 4.66 kB · 0 downloads у меня уже total memory bits 64% занято. мне вобще то нужно было оставить 50% свободных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 13 ноября, 2023 Опубликовано 13 ноября, 2023 · Жалоба память может бы и из регистров или на LUT RAM не обязательно использовать всегда BLOCKRAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 13 ноября, 2023 Опубликовано 13 ноября, 2023 · Жалоба 3 minutes ago, Maverick_ said: память может бы и из регистров или на LUT RAM 51 minutes ago, jenya7 said: у меня уже total memory bits 64% занято. мне вобще то нужно было оставить 50% свободных. Прежде чем решать "как делать" определитесь "что вы хотите". Как вы предполагаете будет идти передача (побайтно или сразу бурст полным пакетом)? Каков максимальный размер пакета? Что должны делать другие модули когда передатчик занят (ждать, или накапливать данные в своем буферe)? и.т.д, и.т.п И после всего этого может стать понятно что можно вообще без памяти обойтись, а достаточно будет простого арбитра ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
girts 9 15 ноября, 2023 Опубликовано 15 ноября, 2023 · Жалоба On 11/13/2023 at 5:16 PM, RobFPGA said: Прежде чем решать "как делать" определитесь "что вы хотите". Как вы предполагаете будет идти передача (побайтно или сразу бурст полным пакетом)? Каков максимальный размер пакета? Что должны делать другие модули когда передатчик занят (ждать, или накапливать данные в своем буферe)? и.т.д, и.т.п И после всего этого может стать понятно что можно вообще без памяти обойтись, а достаточно будет простого арбитра ... По сути незачем изобретать велосипед, достаточно посмотреть на автомобильные протоколы конца прошлого века - как там арбитраж устроен, и как по одному проводу общаются 20 ... 30 разных по сути абсолютно независимых устройств. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться