реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> FIFO на VHDL
Flip-fl0p
сообщение Aug 3 2018, 06:39
Сообщение #16


В поисках себя...
****

Группа: Свой
Сообщений: 698
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Jenya7 @ Aug 3 2018, 09:28) *
я пришел к тому же выводу - ФИФО наше все. сериально загонять байты по 13 штук и считывать тоже по 13.
единственно я не понимаю - я должен стробировать сигнал wrreq? иначе как ФИФО знает что нужно принять следующий байт?
и то же самое при чтении - нужно стробировать rdreq?

Рассматривайте сигнал wrreq - как сигнал валидности данных. Т.е подали на шину данные, и одновременно с ними выставили сигнал wrreq на 1 такт, чтобы данные записались в FIFO.
Вообще FIFO не знает ничего, кроме того, сколько в него записано слов, и пустой он или полный. Вы им сами управляете записью и чтением FIFO. Не совсем понимю, что Вы имеете ввиду когда говорите про стробирование wrreq и rdreq.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 3 2018, 10:47
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1 714
Регистрация: 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
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 4 2018, 08:14
Сообщение #18


В поисках себя...
****

Группа: Свой
Сообщений: 698
Регистрация: 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 и курите мануал smile3046.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 5 2018, 04:45
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 1 714
Регистрация: 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 и курите мануал smile3046.gif


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

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

Сообщение отредактировал Jenya7 - Aug 5 2018, 06:45
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 5 2018, 10:06
Сообщение #20


В поисках себя...
****

Группа: Свой
Сообщений: 698
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Jenya7 @ Aug 5 2018, 07:45) *
спасибо.
я посмотрел диаграмы записи и чтения. из них получается что разрешающие сигналы можно держать постоянно. но данные на каждом клоке нужно обновлять.

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

Сложно, практически невозможно ответить на вопрос, не зная всей задачи в целом !
Может вы хотите к соседу за солью сходить, который живет этажом выше. И вместо того, чтобы подняться на один этаж выше, строите катапульту, которая вас закинет в окно несчастному соседу wink.gif
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 5 2018, 12:07
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 182
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(Jenya7 @ Aug 5 2018, 07:45) *
...
у меня тут вот какая дилема возникла. я получаю пакеты по 13 байт. а по какому условию мне считывать с ФИФО? не empty он уже на первом байте. а мне нужно посылать по 13 байт.
Как по какому? - Вы же сами это условие задаете - как только в FIFO будет >= 13 байт можно запускать считывание пакета в 13 байт! Причем читать можно бурстом - одним куском. И всего то нужно FIFO с выходом счетчика доступных для чтения слов.

Удачи! Rob.


Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 5 2018, 13:46
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 1 714
Регистрация: 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
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 5 2018, 14:21
Сообщение #23


В поисках себя...
****

Группа: Свой
Сообщений: 698
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Ничего не понял, что Вы хотите сделать !
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 5 2018, 14:23
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1 714
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Flip-fl0p @ Aug 5 2018, 20:21) *
Ничего не понял, что Вы хотите сделать !


записать 26 байт в ФИФО
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 5 2018, 14:28
Сообщение #25


В поисках себя...
****

Группа: Свой
Сообщений: 698
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Jenya7 @ Aug 5 2018, 17:23) *
записать 26 байт в ФИФО

Было же изначально 13 байт... Почему стало 26 ? А почему не 52 байта ?
Почему именно в FIFO, а не сдвиговый регистр на блочной памяти ?
Да и вообще зачем записывать байты в память ? Может байты можно обрабатывать последовательно ?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 6 2018, 05:57
Сообщение #26


Профессионал
*****

Группа: Участник
Сообщений: 1 714
Регистрация: 29-03-12
Пользователь №: 71 075



кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 6 2018, 06:12
Сообщение #27


В поисках себя...
****

Группа: Свой
Сообщений: 698
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Jenya7 @ Aug 6 2018, 08:57) *
кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?

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

Go to the top of the page
 
+Quote Post
quato_a
сообщение Aug 6 2018, 07:01
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 93
Регистрация: 27-07-11
Из: Зеленоград
Пользователь №: 66 439



Цитата(Jenya7 @ Aug 6 2018, 08:57) *
кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?


У меня выражение лица сейчас, как на аватарке Flip-fl0p. wacko.gif
FIFO один из самых распространенных функциональных узлов на ПЛИС.

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

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


--------------------
Суббота начинается в понедельник
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Aug 6 2018, 07:36
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 182
Регистрация: 23-12-04
Пользователь №: 1 643



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

Удачи! Rob.
Go to the top of the page
 
+Quote Post
Tpeck
сообщение Aug 7 2018, 07:42
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 303
Регистрация: 14-03-06
Пользователь №: 15 243



Цитата(RobFPGA @ Aug 6 2018, 10:36) *
Приветствую!
Раньше я каждый день пользовался FIFO вечерком - как приду с работы - окрываю сигнал записи и набираю горячие данные в FIFO до уровня Almost Full. Если не уследить и не запретить запись вовремя то можно и перелить выше Full уровня - и тогда беда - данные теряются (и могут утечь к соседу) crying.gif . Бывало что разрешение чтения неплотно прилегало и данные медленно считывались в процессе использования FIFO. Поэтому когда уровень опускался ниже порога Almost Full приходилось периодически приоткрывать запись и добавлять горячих данных в FIFO. В конце цикла сигнал разрешения чтения открывался полностью и данные бурстом считывались в pipe переработки данных. biggrin.gif

Удачи! Rob.


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

Цитата(Jenya7 @ Aug 6 2018, 08:57) *
кхм...даже стесняюсь спросить...а кто то вообще работал с ФИФО? может показать как писать в ФИФО?

Стесняюсь спросить, а вы точно под свои аккаунтом зашли?
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2018 - 13:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01107 секунд с 7
ELECTRONIX ©2004-2016