Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование Coregen fifo_generator_v4_3
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
D-Luxe
Использую коргеновское фифо версии 4.3 в котором запись и чтение выполняется по разным частотам.

Цитата
ENTITY fifo_generator_v4_3 IS
port (
din: IN std_logic_VECTOR(31 downto 0);
rd_clk: IN std_logic;
rd_en: IN std_logic;
rst: IN std_logic;
wr_clk: IN std_logic;
wr_en: IN std_logic;
dout: OUT std_logic_VECTOR(31 downto 0);
empty: OUT std_logic;
full: OUT std_logic;
valid: OUT std_logic;
rd_data_count: OUT std_logic_VECTOR(9 downto 0);
wr_ack: OUT std_logic;
wr_data_count: OUT std_logic_VECTOR(9 downto 0));
END fifo_generator_v4_3;


Не понимаю назначение выводов rd_data_count, wr_data_count. В документации сказано, что rd_data_count - количество двордов, доступных для чтения, а wr_data_count - количество записанных двордов.

Как это фифо подключить к Aldec'у?
Kirill_Good
в fifo core xilinx есть функция преобразовывать одну разрядность входную в другую разрядность выходную, 64 to 8 bit к примеру, может поэтому два вывода с числом слов. одно ведет подсчет для 64 другое для 8, там вряд ли сказано что dword , зачем так делать.
Mad_max
Цитата(D-Luxe @ Feb 25 2011, 21:01) *
Как это фифо подключить к Aldec'у?

CoreGen сделал Вам wrapper для fifo его и подтягивайте к aldec.
Для моделирования wrapper ссылается на файл из XilinxCoreGenLib,
найдите этот файл и подключите к проекту. А в файле wrapper уберите
в use ссылку на папку XilinxCoreGenLib, пусть сразу ищет файл в проекте.

rd_data_count и wr_data_count - количество считанных и записанных данных в fifo.
D-Luxe
Цитата(Mad_max @ Feb 26 2011, 14:10) *
CoreGen сделал Вам wrapper для fifo его и подтягивайте к aldec.
Для моделирования wrapper ссылается на файл из XilinxCoreGenLib,
найдите этот файл и подключите к проекту. А в файле wrapper уберите
в use ссылку на папку XilinxCoreGenLib, пусть сразу ищет файл в проекте.

rd_data_count и wr_data_count - количество считанных и записанных данных в fifo.

Что значит количество считанных??) Ты можешь бесконечно читать из него, пока в него данные пишутся, по такой логике счетчик будет сбрасываться в ноль и заново начинать счет.
Mad_max
Цитата(D-Luxe @ Feb 26 2011, 14:34) *
Что значит количество считанных??)

Вот fifo у Вас заполнилось, флаг full в единице, считали Вы данные по первому адресу, значение rd_data_count стало равно 1,
считали данные по второму адресу, значение стало 2 и так далее.
А вообще fifo тем и удобно, что есть два флага full и empty, которых достаточно для организации простой логики записи и чтения пакета данных.
D-Luxe
Цитата(Mad_max @ Feb 26 2011, 14:58) *
Вот fifo у Вас заполнилось, флаг full в единице, считали Вы данные по первому адресу, значение rd_data_count стало равно 1,
считали данные по второму адресу, значение стало 2 и так далее.
А вообще fifo тем и удобно, что есть два флага full и empty, которых достаточно для организации простой логики записи и чтения пакета данных.

Т.е. rd_data_count + wr_data_count = емкость fifo ?
dvladim
Цитата(D-Luxe @ Feb 26 2011, 15:15) *
Т.е. rd_data_count + wr_data_count = емкость fifo ?

Промоделируйте, да посмотрите. Но скорее всего счетчик количества слов в ФИФО: синхронизированный к клоку записи и чтения.
RobFPGA
Приветствую!

rd_data_count - число слов которые ДОСТУПНЫ для чтения из фифо в данный момент (Rd clk)

wr_data_count -число слов которые ЗАПИСАНЫ в фифо в данный момент (Wr clk)

Используются для того чтобы знать сколько можно еще записать (FIFOLEN-wr_data_count) или еще прочитать (rd_data_count ) так как при записи статус со стороны Rd обновляется с задержкой так же как и при чтении статус со стороны Wr.

Успехов! Rob.


D-Luxe
Цитата(RobFPGA @ Feb 26 2011, 20:11) *
Приветствую!

rd_data_count - число слов которые ДОСТУПНЫ для чтения из фифо в данный момент (Rd clk)

wr_data_count -число слов которые ЗАПИСАНЫ в фифо в данный момент (Wr clk)

Используются для того чтобы знать сколько можно еще записать (FIFOLEN-wr_data_count) или еще прочитать (rd_data_count ) так как при записи статус со стороны Rd обновляется с задержкой так же как и при чтении статус со стороны Wr.

Успехов! Rob.

wr_data_count - rd_data_count = задержке или
rd_data_count - wr_data_count = задержке ?
RobFPGA
Цитата(D-Luxe @ Feb 26 2011, 19:18) *
wr_data_count - rd_data_count = задержке или
rd_data_count - wr_data_count = задержке ?


А зачем Вам это? Так делать нехорошо! Такой результат нельзя даже в удавах мерить sm.gif

Величина задержки вещь непостоянная, относительно среднего уровня зависящего от реализации автомата в fifo, и меняется от соотношения частот Rd/Wr и временных соотношений фронтов Rd Clk/Wr Clk.

Рассматривайте каждую сторону fifo как черный ящик -
сторона Wr ни чего не знает о Rd (пишем данный на деревню к дедушке). Ей известно только что нельзя/можно записать и сколько если можно.

Тоже и со стороны Rd (черт его знает откуда посылка пришла) - есть/нет что читать и сколько, если есть что.

Ну а fifo в этом случае работает как почтальон Печкин sm.gif

Успехов! Rob.
D-Luxe
Цитата(RobFPGA @ Feb 26 2011, 21:02) *
А зачем Вам это? Так делать нехорошо! Такой результат нельзя даже в удавах мерить sm.gif

Величина задержки вещь непостоянная, относительно среднего уровня зависящего от реализации автомата в fifo, и меняется от соотношения частот Rd/Wr и временных соотношений фронтов Rd Clk/Wr Clk.

Рассматривайте каждую сторону fifo как черный ящик -
сторона Wr ни чего не знает о Rd (пишем данный на деревню к дедушке). Ей известно только что нельзя/можно записать и сколько если можно.

Тоже и со стороны Rd (черт его знает откуда посылка пришла) - есть/нет что читать и сколько, если есть что.

Ну а fifo в этом случае работает как почтальон Печкин sm.gif

Успехов! Rob.

Спасибо, догнал!

Тогда вопрос такой.

Допустим я пишу в ФИФО езернет пакеты по частоте 125 МГц, а читаю по 100 МГц. Возможна ли такая ситуация, что на чтении существует задержка между байтами? (по простому говоря идет 10 байт пакета потом задержка в несколько тактов и дальше идет 11 байт пакета)

И возможна ли такая ситуация если пакеты пишутся на 100 МГц, а читаются на 125 МГц?
RobFPGA
Приветствую!

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

Размер fifo определяется в первом приближении наибольшей мгновенной разницей скоростей.

Например пишем пакеты на 125 читаем на 100
Судя по скорости это 1Gbit Ethernet. За время записи в fifo пакета в 1500 байт на 125 MHz успеем вычитать из него на 100 MHz всего 1200 байт
и еще 300 оставшихся можем вычитать за 3 mks во время стандартной паузы между пакетами которая не меньше чем 9.6 mks. То есть для этого случая можно fifo делать в 512 байт. Но это если мы не хотим обрабатывать jumbo пакеты которые могут быть аж 9600 байт. При этом естественно начинать читать нужно как только появится первые данные на чтение в fifo.
В приведенном случае сигнал наличия данных не пропадет пока вы не вычитаете последний байт.

Если же наоборот - пишем на 100MHz в fifo, а на приемной стороне ждем когда наберется нужное количество в fifo то запускаем чтение на 125 MHz и заданное количество байт - отправляем пакет. Тут fifo должно быть как минимум на размер пакета.

Но это частные примеры. В общем случае надо рассматривать конкретную логику работы устройства.

Успехов! Rob.





Boris_TS
Цитата(RobFPGA @ Feb 27 2011, 00:01) *
...время стандартной паузы между пакетами которая не меньше чем 9.6 mks...

Вроде же минимальная стандартная (по IEEE 802.3) пауза между пакетами 12 тактов по 8нс (125МГц) каждый. Или я что-то не правильно понял ?
RobFPGA
Приветствую!

Да вот что значит кампари на ночь sad.gif Простите меня окаянного!

Минимальная пауза - 96 бит. 9.6 mks это для 10 Mbit/s для 1G будет 96 ns
и фифошку придется брать размером поболее sm.gif

wacko.gif

Удачи! Rob.



Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.