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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> FIFO на VHDL
Jenya7
сообщение Aug 1 2018, 14:36
Сообщение #1


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

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



В Квартусе есть корка FIFO вполне такая ничего. Но там единица - байт. А как мне сделать FIFO пакетов по 13 байт?
Go to the top of the page
 
+Quote Post
andk
сообщение Aug 1 2018, 16:03
Сообщение #2


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

Группа: Свой
Сообщений: 199
Регистрация: 17-12-04
Из: Миасс
Пользователь №: 1 519



Эээ.. Что вы имели ввиду под словом "единица"?
В версии 18:
Разрядность данных - от 1 до 256.
Глубина - от 4 и до конца памяти (ну или триггеров).
Вообще, не плохо бы знать про какой камень идёт речь.
В приаттаченой картинке скриншот.
Если имеется ввиду разрядность 13*8=104 бита, возьмите ближайшее значение - 108.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 2 2018, 05:13
Сообщение #3


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

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



Цитата(andk @ Aug 1 2018, 22:03) *
Эээ.. Что вы имели ввиду под словом "единица"?
В версии 18:
Разрядность данных - от 1 до 256.
Глубина - от 4 и до конца памяти (ну или триггеров).
Вообще, не плохо бы знать про какой камень идёт речь.
В приаттаченой картинке скриншот.
Если имеется ввиду разрядность 13*8=104 бита, возьмите ближайшее значение - 108.


это ФИФО байт. а мне нужно ФИФО объектов, скажем так. каждый объект 13 байт. объект вошел объект вышел.

ааа...понял. вы предлагаете сделать ширину шины в 13 байт. не знаю. мне это не очень нравиться.

Сообщение отредактировал Jenya7 - Aug 2 2018, 05:19
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 2 2018, 05:20
Сообщение #4


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

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



Вместо того чтобы выбирать значения из списка можно это значение вписать руками. И будет Вам счастье 1111493779.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 2 2018, 05:22
Сообщение #5


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

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



Цитата(Flip-fl0p @ Aug 2 2018, 11:20) *
Вместо того чтобы выбирать значения из списка можно это значение вписать руками. И будет Вам счастье 1111493779.gif


а как передать 13 байт на шину? они у меня в РАМ лежат.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 2 2018, 05:30
Сообщение #6


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

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



Цитата(Jenya7 @ Aug 2 2018, 08:22) *
а как передать 13 байт на шину? они у меня в РАМ лежат.

А чем вариант FIFO не устраивает ?
Я не совсем понимаю Вашу задачу.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 2 2018, 05:34
Сообщение #7


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

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



Цитата(Flip-fl0p @ Aug 2 2018, 11:30) *
А чем вариант FIFO не устраивает ?
Я не совсем понимаю Вашу задачу.


но данные надо ведь на шину загрузить. на вход. создал я data[0..103] но 13 байт лежат в РАМ. Как их загрузить из РАМ в data[0..103]?
Go to the top of the page
 
+Quote Post
quato_a
сообщение Aug 2 2018, 05:40
Сообщение #8


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

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



Цитата(Jenya7 @ Aug 2 2018, 08:22) *
а как передать 13 байт на шину? они у меня в РАМ лежат.


Напишите свой контроллер поверх FIFO, который будет определять последовательное заполнение FIFO по 13 байт (пачкой) и выдавать их на выход непрерывной пачкой.

Цитата(Jenya7 @ Aug 2 2018, 08:34) *
но данные надо ведь на шину загрузить. на вход. создал я data[0..103] но 13 байт лежат в РАМ. Как их загрузить из РАМ в data[0..103]?


В RAM эти 13 байт лежат один словом (word) шириной 104 бита или 13-тью байтными словами?

Если одним словом, то не вижу проблем паралельной выгрузки этой пачки на шину.
Если 13-тью словами, то нужен перевод из последовательного формата в параллельный (serdes).


--------------------
Суббота начинается в понедельник
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 2 2018, 05:56
Сообщение #9


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

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



Цитата(quato_a @ Aug 2 2018, 11:40) *
Напишите свой контроллер поверх FIFO, который будет определять последовательное заполнение FIFO по 13 байт (пачкой) и выдавать их на выход непрерывной пачкой.



В RAM эти 13 байт лежат один словом (word) шириной 104 бита или 13-тью байтными словами?

Если одним словом, то не вижу проблем паралельной выгрузки этой пачки на шину.
Если 13-тью словами, то нужен перевод из последовательного формата в параллельный (serdes).


у меня РАМ 8х1024 - 1 килобайт. так как это сделать практически?
Go to the top of the page
 
+Quote Post
quato_a
сообщение Aug 2 2018, 06:02
Сообщение #10


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

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



Цитата(Jenya7 @ Aug 2 2018, 08:56) *
у меня РАМ 8х1024 - 1 килобайт. так как это сделать практически?


Выдайте из RAM 13 байт и запишите их в 13 байтных регистров, затем защелкните эти 13 регистров на шину шириной 104 бита с сигналом валидности.
Вообще, у производителя должны быть FIFO с настраиваемыми разными размерностями входных и выходных шин (вход - байтный, выход 13-ти байтный). По крайней мере, у Xilinx есть.


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


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

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



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

Цитата(Jenya7 @ Aug 2 2018, 08:56) *
у меня РАМ 8х1024 - 1 килобайт. так как это сделать практически?
Если практически сначала нужно полностью и подробно описать то что у Вас есть и то что Вы хотите (целевую задачу).
Тогда глядишь и самому станет все понятно (а не только нам) sm.gif

Удачи! Rob.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 2 2018, 06:15
Сообщение #12


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

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



А как вам такое решение?
Я создал двухмерный массив
Код
type packet_t is array (12 downto 0) of std_logic_vector(7 downto 0);
type packet_fifo_t is array (31 downto 0) of packet_t;

signal tx_mailbox_fifo : packet_fifo_t;

shared variable g_fifo_head_idx : integer range 0 to 255 := 0;
shared variable g_fifo_tail_idx : integer range 0 to 255 := 0;
В одном процесе я загружаю байты в очередную ячейку из РАМ
Код
when ST_RAM_TO_TX_BUF_3 =>
    if (idx2 < 13) then
     tx_mailbox_fifo(g_fifo_head_idx)(idx2) <= slave_data_out2;
         idx2 := idx2 + 1;
    else
    --get ready the next fifo slot
    g_fifo_head_idx := g_fifo_head_idx + 1;
    if (g_fifo_head_idx > 31) then
        g_fifo_head_idx := 0;
     end if;
        RamState_b <= ST_RAMB_IDLE;    
   end if;
В другом слежу за индексом
Код
TX_MAILBOX_FIFO_MANAGER: process (REG_CLK)
begin
    if (rising_edge(REG_CLK)) then
    
    --send previous message - g_fifo_head_idx incremeted by 1 in other process
        if (g_fifo_tail_idx < g_fifo_head_idx)    then      
        tx_buf_ready <= '1';        
        end if;
            
    if (update_tail_idx = '1') then
        tx_buf_ready <= '0';
        g_fifo_tail_idx := g_fifo_tail_idx + 1;
        if (g_fifo_tail_idx > 31) then
        g_fifo_tail_idx := 0;
        end if;
    end if;
    
    end if;
end process TX_MAILBOX_FIFO_MANAGER;
И есть процесс посылки
Код
when ST_TX_DATA =>  --send 13 byte of data
    if (tx_byte_idx < 13) then
        MSPI_WR_DATA <= X"00" & tx_mailbox_fifo(g_fifo_tail_idx)(tx_byte_idx);
              
    MSPI_WR_START_TRIG <= '1'; --send a byte
                          
    tx_byte_idx := tx_byte_idx + 1;    
                          
    NextState <= ST_TX_DATA;
    McpState <= ST_WAIT_DONE;
    else
    MSPI_CS <= '1';            --chip select high
      
        update_tail_idx <= '1';

    NextState <= ST_MCP_IDLE;
    McpState <= ST_REQ_TO_SEND0;
    end if;

Go to the top of the page
 
+Quote Post
andk
сообщение Aug 2 2018, 20:30
Сообщение #13


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

Группа: Свой
Сообщений: 199
Регистрация: 17-12-04
Из: Миасс
Пользователь №: 1 519



И всё таки, что вы хотите сделать?
Есть какая-то RAM.
Есть какое-то Fifo.
Зачем их нужно скрещивать?
Ну хорошо, почему нельзя сделать Ram с разной разрядностью входа и выхода?
Ну а сделать FIFO с разной разрядностью входа и выхода в чём проблема?



Go to the top of the page
 
+Quote Post
andrew_b
сообщение Aug 3 2018, 04:58
Сообщение #14


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

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(andk @ Aug 2 2018, 23:30) *
Ну а сделать FIFO с разной разрядностью входа и выхода в чём проблема?
Нельзя просто так взять и сделать асимметричное ФИФО. Для этого должны выполняться определённые соотношения между разрядностями входа и выхода. 13 байт сюда не очень хорошо вписывается.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Aug 3 2018, 06:28
Сообщение #15


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

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



Цитата(andk @ Aug 3 2018, 01:30) *
И всё таки, что вы хотите сделать?
Есть какая-то RAM.
Есть какое-то Fifo.
Зачем их нужно скрещивать?
Ну хорошо, почему нельзя сделать Ram с разной разрядностью входа и выхода?
Ну а сделать FIFO с разной разрядностью входа и выхода в чём проблема?




я пришел к тому же выводу - ФИФО наше все. сериально загонять байты по 13 штук и считывать тоже по 13.
единственно я не понимаю - я должен стробировать сигнал wrreq? иначе как ФИФО знает что нужно принять следующий байт?
и то же самое при чтении - нужно стробировать rdreq?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th April 2024 - 23:50
Рейтинг@Mail.ru


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