|
FIFO на VHDL |
|
|
|
Aug 3 2018, 10:47
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Цитата(Flip-fl0p @ Aug 3 2018, 11:39) Рассматривайте сигнал wrreq - как сигнал валидности данных. Т.е подали на шину данные, и одновременно с ними выставили сигнал wrreq на 1 такт, чтобы данные записались в FIFO. Вообще FIFO не знает ничего, кроме того, сколько в него записано слов, и пустой он или полный. Вы им сами управляете записью и чтением FIFO. Не совсем понимю, что Вы имеете ввиду когда говорите про стробирование wrreq и rdreq. это я и имею в виду - выставить wrreq и потом опустить. и то же самое при чтении, я так понимаю перед каждым байтом выставить rdreq - он вытолкнет байт наружу и опустить rdreq.
Сообщение отредактировал Jenya7 - Aug 3 2018, 10:48
|
|
|
|
|
Aug 4 2018, 08:14
|
В поисках себя...
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140
|
Цитата(Jenya7 @ Aug 3 2018, 13:47) это я и имею в виду - выставить 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 и курите мануал
|
|
|
|
|
Aug 5 2018, 04:45
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Цитата(Flip-fl0p @ Aug 4 2018, 14:14) Извините меня но Вы вообще читали 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 и курите мануал спасибо. я посмотрел диаграмы записи и чтения. из них получается что разрешающие сигналы можно держать постоянно. но данные на каждом клоке нужно обновлять. у меня тут вот какая дилема возникла. я получаю пакеты по 13 байт. а по какому условию мне считывать с ФИФО? не empty он уже на первом байте. а мне нужно посылать по 13 байт.
Сообщение отредактировал Jenya7 - Aug 5 2018, 06:45
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 5 2018, 12:07
|
Профессионал
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643
|
Приветствую! Цитата(Jenya7 @ Aug 5 2018, 07:45) ... у меня тут вот какая дилема возникла. я получаю пакеты по 13 байт. а по какому условию мне считывать с ФИФО? не empty он уже на первом байте. а мне нужно посылать по 13 байт. Как по какому? - Вы же сами это условие задаете - как только в FIFO будет >= 13 байт можно запускать считывание пакета в 13 байт! Причем читать можно бурстом - одним куском. И всего то нужно FIFO с выходом счетчика доступных для чтения слов. Удачи! Rob.
|
|
|
|
|
Aug 5 2018, 13:46
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
сделал ФИФО Код 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 - ноль записанных слов? почему?
Сообщение отредактировал Jenya7 - Aug 5 2018, 13:48
|
|
|
|
|
Aug 5 2018, 14:28
|
В поисках себя...
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140
|
Цитата(Jenya7 @ Aug 5 2018, 17:23) записать 26 байт в ФИФО Было же изначально 13 байт... Почему стало 26 ? А почему не 52 байта ? Почему именно в FIFO, а не сдвиговый регистр на блочной памяти ? Да и вообще зачем записывать байты в память ? Может байты можно обрабатывать последовательно ?
|
|
|
|
|
Aug 6 2018, 07:01
|
Частый гость
Группа: Свой
Сообщений: 95
Регистрация: 27-07-11
Из: Зеленоград
Пользователь №: 66 439
|
Цитата(Jenya7 @ Aug 6 2018, 08:57) кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО? У меня выражение лица сейчас, как на аватарке Flip-fl0p. FIFO один из самых распространенных функциональных узлов на ПЛИС. https://drive.google.com/open?id=1wyWqPKKIC...VzMEuKcOAJDaHJ9Пример записи в FIFO 7 байт пачкой и чтения из него побайтно. Можно делать и наоборот: записывать побайтно, а читать непрерывной пачкой. Можно вообще почти как угодно. Потренируйтесь на простых блоках, посимулеруйте разные варианты записи и чтения FIFO и ясность появится.
--------------------
Суббота начинается в понедельник
|
|
|
|
|
Aug 6 2018, 07:36
|
Профессионал
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643
|
Приветствую! Цитата(Jenya7 @ Aug 6 2018, 08:57) кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО? Раньше я каждый день пользовался FIFO вечерком - как приду с работы - окрываю сигнал записи и набираю горячие данные в FIFO до уровня Almost Full. Если не уследить и не запретить запись вовремя то можно и перелить выше Full уровня - и тогда беда - данные теряются (и могут утечь к соседу) . Бывало что разрешение чтения неплотно прилегало и данные медленно считывались в процессе использования FIFO. Поэтому когда уровень опускался ниже порога Almost Full приходилось периодически приоткрывать запись и добавлять горячих данных в FIFO. В конце цикла сигнал разрешения чтения открывался полностью и данные бурстом считывались в pipe переработки данных. Удачи! Rob.
|
|
|
|
|
Aug 7 2018, 07:42
|
Местный
Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243
|
Цитата(RobFPGA @ Aug 6 2018, 10:36) Приветствую! Раньше я каждый день пользовался FIFO вечерком - как приду с работы - окрываю сигнал записи и набираю горячие данные в FIFO до уровня Almost Full. Если не уследить и не запретить запись вовремя то можно и перелить выше Full уровня - и тогда беда - данные теряются (и могут утечь к соседу) . Бывало что разрешение чтения неплотно прилегало и данные медленно считывались в процессе использования FIFO. Поэтому когда уровень опускался ниже порога Almost Full приходилось периодически приоткрывать запись и добавлять горячих данных в FIFO. В конце цикла сигнал разрешения чтения открывался полностью и данные бурстом считывались в pipe переработки данных. Удачи! Rob. Спасибо за хороший рассказ. Посмеялся от души Цитата(Jenya7 @ Aug 6 2018, 08:57) кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО? Стесняюсь спросить, а вы точно под свои аккаунтом зашли?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|