Flip-fl0p 4 3 августа, 2018 Опубликовано 3 августа, 2018 · Жалоба я пришел к тому же выводу - ФИФО наше все. сериально загонять байты по 13 штук и считывать тоже по 13. единственно я не понимаю - я должен стробировать сигнал wrreq? иначе как ФИФО знает что нужно принять следующий байт? и то же самое при чтении - нужно стробировать rdreq? Рассматривайте сигнал wrreq - как сигнал валидности данных. Т.е подали на шину данные, и одновременно с ними выставили сигнал wrreq на 1 такт, чтобы данные записались в FIFO. Вообще FIFO не знает ничего, кроме того, сколько в него записано слов, и пустой он или полный. Вы им сами управляете записью и чтением FIFO. Не совсем понимю, что Вы имеете ввиду когда говорите про стробирование wrreq и rdreq. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 3 августа, 2018 Опубликовано 3 августа, 2018 (изменено) · Жалоба Рассматривайте сигнал wrreq - как сигнал валидности данных. Т.е подали на шину данные, и одновременно с ними выставили сигнал wrreq на 1 такт, чтобы данные записались в FIFO. Вообще FIFO не знает ничего, кроме того, сколько в него записано слов, и пустой он или полный. Вы им сами управляете записью и чтением FIFO. Не совсем понимю, что Вы имеете ввиду когда говорите про стробирование wrreq и rdreq. это я и имею в виду - выставить wrreq и потом опустить. и то же самое при чтении, я так понимаю перед каждым байтом выставить rdreq - он вытолкнет байт наружу и опустить rdreq. Изменено 3 августа, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 4 августа, 2018 Опубликовано 4 августа, 2018 · Жалоба это я и имею в виду - выставить wrreq и потом опустить. и то же самое при чтении, я так понимаю перед каждым байтом выставить rdreq - он вытолкнет байт наружу и опустить rdreq. Извините меня но Вы вообще читали user guide на altera FIFO ? Все ваши вопросы решаются за 10 минут путем запуска симуляции FIFO в modelsim. Сигнал Wrreq удобно рассматривать как сигнал data_valid. Т.е какие данные сопровождает этот строб, такие данные и запишутся в память.. А вот сигнал rdreq чуть сложнее. Сначала выставляете сигнал rd_req и только на следующем такте появляются данные. НО !!! Есть у этого FIFO есть очень интересный режим: show ahead mode. Что за режим говорить не буду, ибо открывайте https://www.intel.com/content/dam/altera-ww.../ug/ug_fifo.pdf и курите мануал :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 5 августа, 2018 Опубликовано 5 августа, 2018 (изменено) · Жалоба Извините меня но Вы вообще читали user guide на altera FIFO ? Все ваши вопросы решаются за 10 минут путем запуска симуляции FIFO в modelsim. Сигнал Wrreq удобно рассматривать как сигнал data_valid. Т.е какие данные сопровождает этот строб, такие данные и запишутся в память.. А вот сигнал rdreq чуть сложнее. Сначала выставляете сигнал rd_req и только на следующем такте появляются данные. НО !!! Есть у этого FIFO есть очень интересный режим: show ahead mode. Что за режим говорить не буду, ибо открывайте https://www.intel.com/content/dam/altera-ww.../ug/ug_fifo.pdf и курите мануал :smile3046: спасибо. я посмотрел диаграмы записи и чтения. из них получается что разрешающие сигналы можно держать постоянно. но данные на каждом клоке нужно обновлять. у меня тут вот какая дилема возникла. я получаю пакеты по 13 байт. а по какому условию мне считывать с ФИФО? не empty он уже на первом байте. а мне нужно посылать по 13 байт. Изменено 5 августа, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 5 августа, 2018 Опубликовано 5 августа, 2018 · Жалоба спасибо. я посмотрел диаграмы записи и чтения. из них получается что разрешающие сигналы можно держать постоянно. но данные на каждом клоке нужно обновлять. у меня тут вот какая дилема возникла. я получаю пакеты по 13 байт. а по какому условию мне считывать с ФИФО? не empty он уже на первом байте. а мне нужно посылать по 13 байт. Сложно, практически невозможно ответить на вопрос, не зная всей задачи в целом ! Может вы хотите к соседу за солью сходить, который живет этажом выше. И вместо того, чтобы подняться на один этаж выше, строите катапульту, которая вас закинет в окно несчастному соседу ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 5 августа, 2018 Опубликовано 5 августа, 2018 · Жалоба Приветствую! ... у меня тут вот какая дилема возникла. я получаю пакеты по 13 байт. а по какому условию мне считывать с ФИФО? не empty он уже на первом байте. а мне нужно посылать по 13 байт. Как по какому? - Вы же сами это условие задаете - как только в FIFO будет >= 13 байт можно запускать считывание пакета в 13 байт! Причем читать можно бурстом - одним куском. И всего то нужно FIFO с выходом счетчика доступных для чтения слов. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 5 августа, 2018 Опубликовано 5 августа, 2018 (изменено) · Жалоба сделал ФИФО component fifo IS port ( clock : in std_logic; data : in std_logic_vector (7 DOWNTO 0); rdreq : in std_logic; sclr : in std_logic; wrreq : in std_logic; almost_empty : out std_logic; almost_full : out std_logic; empty : out std_logic; full : out std_logic; q : out std_logic_vector (7 DOWNTO 0); usedw : out std_logic_vector (8 DOWNTO 0) ); end component; U_FIFO : fifo port map ( clock => REG_CLK, data => fifo_data_in, rdreq => fifo_rdreq, sclr => '0', wrreq => fifo_wrreq, almost_empty => fifo_almost_empty, almost_full => fifo_almost_full, empty => fifo_empty, full => fifo_full, q => fifo_data_out, usedw => fifo_usedw ); Пишу FIFO_INTERFACE : process (REG_CLK) variable fifo_idx : integer range 0 to 255 := 0; begin if (rising_edge(REG_CLK)) then case FifoState is when ST_FIFO_IDLE => fifo_idx := 0; debug_val4 <= fifo_usedw(7 downto 0); if (fifo_write = '1') then if (fifo_almost_full = '0') then FifoState <= ST_FIFO_WRITE; end if; end if; when ST_FIFO_WRITE => --continious write to FIFO if (cs2 = '0') then --chip select low if (rx_rdy4 = '1') then --byte received fifo_wrreq <= '1'; fifo_data_in <= sspi_data_in; fifo_idx := fifo_idx + 1; debug_val1 <= debug_val1 + '1'; end if; if (fifo_idx > 13) then --overflow protection fifo_idx := 0; fifo_wrreq <= '0'; FifoState <= ST_FIFO_IDLE; end if; else fifo_idx := 0; fifo_wrreq <= '0'; FifoState <= ST_FIFO_IDLE; end if; end case; end if; end process FIFO_INTERFACE; Пишу два пакета по 13 байт - debug_val1 = 26 - логично. а debug_val4 = 0 - ноль записанных слов? почему? Изменено 5 августа, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 5 августа, 2018 Опубликовано 5 августа, 2018 · Жалоба Ничего не понял, что Вы хотите сделать ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 5 августа, 2018 Опубликовано 5 августа, 2018 · Жалоба Ничего не понял, что Вы хотите сделать ! записать 26 байт в ФИФО Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 5 августа, 2018 Опубликовано 5 августа, 2018 · Жалоба записать 26 байт в ФИФО Было же изначально 13 байт... Почему стало 26 ? А почему не 52 байта ? Почему именно в FIFO, а не сдвиговый регистр на блочной памяти ? Да и вообще зачем записывать байты в память ? Может байты можно обрабатывать последовательно ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО? Очень странные вопросы Вы задаете ! Что тут показывать то ? Читаете https://www.intel.com/content/dam/altera-ww.../ug/ug_fifo.pdf и вперед. Очень похоже на разговор слепого с глухим. Тема была создана 1 августа, сегодня уже 6. И судя по вопросам, Вы так и не удосужились прочитать user guide на FIFO, хотя это Вы должны были сделать в первую очередь. Тогда возникает вопрос ради чего вообще была создана тема ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quato_a 3 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО? У меня выражение лица сейчас, как на аватарке Flip-fl0p. :wacko: FIFO один из самых распространенных функциональных узлов на ПЛИС. https://drive.google.com/open?id=1wyWqPKKIC...VzMEuKcOAJDaHJ9 Пример записи в FIFO 7 байт пачкой и чтения из него побайтно. Можно делать и наоборот: записывать побайтно, а читать непрерывной пачкой. Можно вообще почти как угодно. Потренируйтесь на простых блоках, посимулеруйте разные варианты записи и чтения FIFO и ясность появится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Приветствую! кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?Раньше я каждый день пользовался FIFO вечерком - как приду с работы - окрываю сигнал записи и набираю горячие данные в FIFO до уровня Almost Full. Если не уследить и не запретить запись вовремя то можно и перелить выше Full уровня - и тогда беда - данные теряются (и могут утечь к соседу) :crying: . Бывало что разрешение чтения неплотно прилегало и данные медленно считывались в процессе использования FIFO. Поэтому когда уровень опускался ниже порога Almost Full приходилось периодически приоткрывать запись и добавлять горячих данных в FIFO. В конце цикла сигнал разрешения чтения открывался полностью и данные бурстом считывались в pipe переработки данных. :biggrin: Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tpeck 0 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба Приветствую! Раньше я каждый день пользовался FIFO вечерком - как приду с работы - окрываю сигнал записи и набираю горячие данные в FIFO до уровня Almost Full. Если не уследить и не запретить запись вовремя то можно и перелить выше Full уровня - и тогда беда - данные теряются (и могут утечь к соседу) :crying: . Бывало что разрешение чтения неплотно прилегало и данные медленно считывались в процессе использования FIFO. Поэтому когда уровень опускался ниже порога Almost Full приходилось периодически приоткрывать запись и добавлять горячих данных в FIFO. В конце цикла сигнал разрешения чтения открывался полностью и данные бурстом считывались в pipe переработки данных. :biggrin: Удачи! Rob. Спасибо за хороший рассказ. Посмеялся от души :) кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО? Стесняюсь спросить, а вы точно под свои аккаунтом зашли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться