Перейти к содержанию
    

я пришел к тому же выводу - ФИФО наше все. сериально загонять байты по 13 штук и считывать тоже по 13.

единственно я не понимаю - я должен стробировать сигнал wrreq? иначе как ФИФО знает что нужно принять следующий байт?

и то же самое при чтении - нужно стробировать rdreq?

Рассматривайте сигнал wrreq - как сигнал валидности данных. Т.е подали на шину данные, и одновременно с ними выставили сигнал wrreq на 1 такт, чтобы данные записались в FIFO.

Вообще FIFO не знает ничего, кроме того, сколько в него записано слов, и пустой он или полный. Вы им сами управляете записью и чтением FIFO. Не совсем понимю, что Вы имеете ввиду когда говорите про стробирование wrreq и rdreq.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рассматривайте сигнал wrreq - как сигнал валидности данных. Т.е подали на шину данные, и одновременно с ними выставили сигнал wrreq на 1 такт, чтобы данные записались в FIFO.

Вообще FIFO не знает ничего, кроме того, сколько в него записано слов, и пустой он или полный. Вы им сами управляете записью и чтением FIFO. Не совсем понимю, что Вы имеете ввиду когда говорите про стробирование wrreq и rdreq.

 

это я и имею в виду - выставить wrreq и потом опустить. и то же самое при чтении, я так понимаю перед каждым байтом выставить rdreq - он вытолкнет байт наружу и опустить rdreq.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это я и имею в виду - выставить 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините меня но Вы вообще читали 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 байт.

post-71075-1533445225_thumb.png

post-71075-1533445231_thumb.png

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо.

я посмотрел диаграмы записи и чтения. из них получается что разрешающие сигналы можно держать постоянно. но данные на каждом клоке нужно обновлять.

 

у меня тут вот какая дилема возникла. я получаю пакеты по 13 байт. а по какому условию мне считывать с ФИФО? не empty он уже на первом байте. а мне нужно посылать по 13 байт.

Сложно, практически невозможно ответить на вопрос, не зная всей задачи в целом !

Может вы хотите к соседу за солью сходить, который живет этажом выше. И вместо того, чтобы подняться на один этаж выше, строите катапульту, которая вас закинет в окно несчастному соседу ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

...

у меня тут вот какая дилема возникла. я получаю пакеты по 13 байт. а по какому условию мне считывать с ФИФО? не empty он уже на первом байте. а мне нужно посылать по 13 байт.

Как по какому? - Вы же сами это условие задаете - как только в FIFO будет >= 13 байт можно запускать считывание пакета в 13 байт! Причем читать можно бурстом - одним куском. И всего то нужно FIFO с выходом счетчика доступных для чтения слов.

 

Удачи! Rob.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сделал ФИФО

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего не понял, что Вы хотите сделать !

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

записать 26 байт в ФИФО

Было же изначально 13 байт... Почему стало 26 ? А почему не 52 байта ?

Почему именно в FIFO, а не сдвиговый регистр на блочной памяти ?

Да и вообще зачем записывать байты в память ? Может байты можно обрабатывать последовательно ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?

Очень странные вопросы Вы задаете ! Что тут показывать то ? Читаете https://www.intel.com/content/dam/altera-ww.../ug/ug_fifo.pdf и вперед. Очень похоже на разговор слепого с глухим. Тема была создана 1 августа, сегодня уже 6. И судя по вопросам, Вы так и не удосужились прочитать user guide на FIFO, хотя это Вы должны были сделать в первую очередь. Тогда возникает вопрос ради чего вообще была создана тема ?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?

 

У меня выражение лица сейчас, как на аватарке Flip-fl0p. :wacko:

FIFO один из самых распространенных функциональных узлов на ПЛИС.

 

https://drive.google.com/open?id=1wyWqPKKIC...VzMEuKcOAJDaHJ9

 

Пример записи в FIFO 7 байт пачкой и чтения из него побайтно. Можно делать и наоборот: записывать побайтно, а читать непрерывной пачкой. Можно вообще почти как угодно.

Потренируйтесь на простых блоках, посимулеруйте разные варианты записи и чтения FIFO и ясность появится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?
Раньше я каждый день пользовался FIFO вечерком - как приду с работы - окрываю сигнал записи и набираю горячие данные в FIFO до уровня Almost Full. Если не уследить и не запретить запись вовремя то можно и перелить выше Full уровня - и тогда беда - данные теряются (и могут утечь к соседу) :crying: . Бывало что разрешение чтения неплотно прилегало и данные медленно считывались в процессе использования FIFO. Поэтому когда уровень опускался ниже порога Almost Full приходилось периодически приоткрывать запись и добавлять горячих данных в FIFO. В конце цикла сигнал разрешения чтения открывался полностью и данные бурстом считывались в pipe переработки данных. :biggrin:

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

Раньше я каждый день пользовался FIFO вечерком - как приду с работы - окрываю сигнал записи и набираю горячие данные в FIFO до уровня Almost Full. Если не уследить и не запретить запись вовремя то можно и перелить выше Full уровня - и тогда беда - данные теряются (и могут утечь к соседу) :crying: . Бывало что разрешение чтения неплотно прилегало и данные медленно считывались в процессе использования FIFO. Поэтому когда уровень опускался ниже порога Almost Full приходилось периодически приоткрывать запись и добавлять горячих данных в FIFO. В конце цикла сигнал разрешения чтения открывался полностью и данные бурстом считывались в pipe переработки данных. :biggrin:

 

Удачи! Rob.

 

Спасибо за хороший рассказ. Посмеялся от души :)

 

кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?

Стесняюсь спросить, а вы точно под свои аккаунтом зашли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...