pavlovconst 2 20 декабря, 2015 Опубликовано 20 декабря, 2015 · Жалоба Здравствуйте! Разбираюсь с написанием UART-а на Kintex-7. Есть вопрос по архитектуре. Допустим, есть модуль трансмиттера module uart_tx (clk,rst,tx_data,tx_data_valid,tx_data_ack,txd); output txd; input clk, rst; input [7:0] tx_data; input tx_data_valid; output tx_data_ack; Он занимается выщелкиванием битов, с ним все понятно. Перед ним мне кажется правильным поставить очередь, которая занималась бы постепенной выдачей байтов, по одному. А на вход этой очереди хочется подавать сразу все сообщение. В идеале - переменной длины. Произошло некое событие - я сразу же в один такт помещаю в очередь, скажем, 18 байт, а дальше трансмиттер мееедленно их вычитывает. В FIFO генераторе можно сделать различную ширину входного и выходного портов, но только с отношением до 8:1. Не очень удобно. Подскажите, я вообще в правильную сторону думаю? Как обычно решается эта задача? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 20 декабря, 2015 Опубликовано 20 декабря, 2015 · Жалоба Подскажите, я вообще в правильную сторону думаю? Как обычно решается эта задача? Обычно задача решается так: FSM + FIFO + UART или так: RAM + Указатель адреса начала сообщения + DMA + FSM подробнее могу завтра по скайпу рассказать. Или вот у Ксайлинкса после установки ISE: c:\Xilinx\14.7\ISE_DS\ISE\ISEexamples\wave_gen_ver_v6.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pavlovconst 2 21 декабря, 2015 Опубликовано 21 декабря, 2015 · Жалоба iosifk, Спасибо. Если можно, давайте обсудим в рамках форума. Что делает FSM? Подсовывает байты подряд на вход FIFO? Тогда зачем нужна FIFO? если мы ее руками фактически уже сделали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 21 декабря, 2015 Опубликовано 21 декабря, 2015 · Жалоба Что делает FSM? Подсовывает байты подряд на вход FIFO? Тогда зачем нужна FIFO? если мы ее руками фактически уже сделали? Время формирования нового сообщения может быть существенно меньше времени передачи этого сообщения через последовательный порт. И в этом случае FIFO позволяет записывать на одной скорости, а считывать на другой. Кроме того, если FIFO может выдавать текущее количество данных, хранящихся в нем, то можно обойтись без счетчика и считывать/передавать байты до тех пор, пока не опустошится буфер памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pavlovconst 2 21 декабря, 2015 Опубликовано 21 декабря, 2015 · Жалоба Время формирования нового сообщения может быть существенно меньше времени передачи этого сообщения через последовательный порт. И в этом случае FIFO позволяет записывать на одной скорости, а считывать на другой. Я так и хочу. Где взять FIFO, в которую можно закинуть сразу все сообщение, и что делает FSM у FIFO на входе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 21 декабря, 2015 Опубликовано 21 декабря, 2015 · Жалоба Я так и хочу. Где взять FIFO, в которую можно закинуть сразу все сообщение, и что делает FSM у FIFO на входе? FIFO формировал мегавизардом (для альтеры, у ксилых вроде есть аналог кодегенератор). Глубину буфера, обычно выбирает разработчик (я делаю как минимум с двойным запасом, предполагая что будут сообщения "вот такого размера"). FSM находится не на входе, а управляет работой FIFO и UART по их сигналам (буфер не пустой, передан байт). Конечный автомат при работе на передачу ждет когда в буфер попадут данные (все или часть), затем начинает побайтно считывать из буфера и толкать в UART, после чего ожидает окончания передачи очередного символа (байта). И так молотит до тех пор, пока буфер не опустошится. На прием конечный автомат работает наоборот - ждет сигнала от UART, что принят байт, разрешает буферу писать один раз, затем вновь ждет нового приема. Если предполагается прием длинной посылки, то можно от КА сбрасывать таймер при приеме каждого байта. После приема последнего байта таймер начнет отрабатывать задержку и по ее истечению, запустит "декодировщик" принятого сообщения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 21 декабря, 2015 Опубликовано 21 декабря, 2015 · Жалоба FIFO формировал мегавизардом (для альтеры, у ксилых вроде есть аналог кодегенератор). Глубину буфера, обычно выбирает разработчик (я делаю как минимум с двойным запасом, предполагая что будут сообщения "вот такого размера"). FSM находится не на входе, а управляет работой FIFO и UART по их сигналам (буфер не пустой, передан байт). Конечный автомат при работе на передачу ждет когда в буфер попадут данные (все или часть), затем начинает побайтно считывать из буфера и толкать в UART, после чего ожидает окончания передачи очередного символа (байта). И так молотит до тех пор, пока буфер не опустошится. На прием конечный автомат работает наоборот - ждет сигнала от UART, что принят байт, разрешает буферу писать один раз, затем вновь ждет нового приема. Если предполагается прием длинной посылки, то можно от КА сбрасывать таймер при приеме каждого байта. После приема последнего байта таймер начнет отрабатывать задержку и по ее истечению, запустит "декодировщик" принятого сообщения. Не вижу смысла в создании такого FSM'а. У любого стандартного модуля FIFO если входы-выходы, которые позволяют контролировать заполнение, производить запись и т.д. таким образом, чтобы связать входные данные и работу UART. В моём понимании FSM на входе - это автомат, который занимается формированием данных. З.Ы. У Хилых эта штука называется IP Coregen. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 21 декабря, 2015 Опубликовано 21 декабря, 2015 · Жалоба Или вот у Ксайлинкса после установки ISE: c:\Xilinx\14.7\ISE_DS\ISE\ISEexamples\wave_gen_ver_v6.zip Здесь http://electronix.ru/forum/index.php?act=a...&tid=120322 А буквами, извините но долго... Тем более для Вас надо объяснять много... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться