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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> FIFO (CPLD+SRAM)
uragan90
сообщение Sep 5 2015, 13:37
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Доброго времени суток уважаемые!!!
Есть задача построить модуль FIFO на связке CPLD+SRAM. Это образно говоря решение будет использоваться как простое FIFO для передачи данных в микроконтроллер. Мозги кипят и требуется помощь знающих людей которые смогут помочь разобраться в проблеме.
Вопрос коммутационного плана на выложенной схеме дело в том что мк и плис работают на разных тактовых частотах и тут то и проблема.
Я думаю так сделать:
Данные со входа IN_DATA[15..0] поступают во внешнюю sram и там фиксируются сигналом (wd_sram) по адресу схемы которая тут не представлена в принципе это не важно. Начало работы начинается с того что мк подаёт запрос на то чтоб данные записались в регистр (inst5) сигналом (request) и если sram находится в режиме чтения то данные записываются в регистр при этом выставляется флаг регистр загружен -(confirmation) и сбрасывается регистр запроса на запись данных из sram. По приходу следующего запроса записи из sram в регистр (inst5) флаг (confirmation) сбрасывается в ноль и мк ожидает загрузки регистра (inst5) из него потом сдвиговым регистром будут выгружены данные в мк. Так я предположил выйти из проблемы пересечения клоковых доменов асинхронной фифо. Подскажите в правильном ли я направлении двигаюсь?
Прикрепленные файлы
Прикрепленный файл  FIFO.pdf ( 1.19 мегабайт ) Кол-во скачиваний: 59
 
Go to the top of the page
 
+Quote Post
uragan90
сообщение Sep 5 2015, 15:10
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



И вообще как такое реализовать можно?
Я делаю так: Завожу 2 счетчика адреса (один для чтения другой для записи). По приходу сигнала на запись в срам счетчик адреса записи инкременирую +1 и записываю данные в срам. По приходу сигнала на загрузку в регистр данных для чтения я инкременирую +1 счетчик чтения и если значение счетчика чтения равно значению счётчика записи то фифо полное и запись не возможна, если же значение счётчика чтения меньше значения счётчика записи на -1 то фифо пустое и чтение запрещено!
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 5 2015, 15:43
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(uragan90 @ Sep 5 2015, 18:10) *
И вообще как такое реализовать можно?
Я делаю так: Завожу 2 счетчика адреса (один для чтения другой для записи). По приходу сигнала на запись в срам счетчик адреса записи инкременирую +1 и записываю данные в срам. По приходу сигнала на загрузку в регистр данных для чтения я инкременирую +1 счетчик чтения и если значение счетчика чтения равно значению счётчика записи то фифо полное и запись не возможна, если же значение счётчика чтения меньше значения счётчика записи на -1 то фифо пустое и чтение запрещено!

Для двухклокового фифо нужна блочная память, т.е. FPGA, а не CPLD.
В CPLD мне кажется Вы не сделаете межклоковую развязку, т.к. в CPLD должно войти тогда 2 клока....

ниже пример фифо на регистрах, работающее на 1 клоке, хотя оно Вам вряд ли поможет

CODE

-- Module Name: my_fifo - Behavioral
-- Description: A 32 x 9 FIFO using inferred storage

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity my_fifo is
Port ( clk : in STD_LOGIC;
wr : in STD_LOGIC;
din : in STD_LOGIC_VECTOR(8 downto 0);
empty : out STD_LOGIC;
full : out STD_LOGIC;
rd : in STD_LOGIC;
dout : out STD_LOGIC_VECTOR(8 downto 0));
end my_fifo;

architecture Behavioral of my_fifo is
signal i_full : std_logic;
signal i_empty : std_logic;

type mem_array is array(31 downto 0) of std_logic_vector(8 downto 0);
signal memory : mem_array;
signal wr_ptr : unsigned(4 downto 0) := (others => '0');
signal rd_ptr : unsigned(4 downto 0) := (others => '0');

begin
full <= i_full;
empty <= i_empty;

flag_proc: process(wr_ptr, rd_ptr)
begin
if wr_ptr = rd_ptr then
i_empty <= '1';
else
i_empty <= '0';
end if;

if wr_ptr+1 = rd_ptr then
i_full <= '1';
else
i_full <= '0';
end if;
end process;

clk_proc: process(clk)
begin
if rising_edge(clk) then
if rd = '1' then
if wr = '1' then
if i_empty = '0' then
dout <= memory(to_integer(rd_ptr));
rd_ptr <= rd_ptr + 1;
end if;

memory(to_integer(wr_ptr)) <= din;
wr_ptr <= wr_ptr + 1;

elsif i_empty = '0' then
dout <= memory(to_integer(rd_ptr));
rd_ptr <= rd_ptr + 1;
end if;
elsif wr = '1' then
if i_full = '0' then
memory(to_integer(wr_ptr)) <= din;
wr_ptr <= wr_ptr + 1;
end if;
end if;
end if;
end process;
end Behavioral;


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
uragan90
сообщение Sep 5 2015, 15:48
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Цитата(Maverick @ Sep 5 2015, 19:43) *
Для двухклокового фифо нужна блочная память, т.е. FPGA, а не CPLD.

Мне не нужна двух клоковая фифо! Мне достаточно одного клока основного на стороне плис! Я лишь хочу с мк отправлять запрос на возможность запись во внутренний регистр плис данных и как только это станет возможным плис должна загрузить в свой регистр данные из срам и сообщить об этом факте мк.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 5 2015, 15:58
Сообщение #5


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(uragan90 @ Sep 5 2015, 18:48) *
Мне не нужна двух клоковая фифо! Мне достаточно одного клока основного на стороне плис! Я лишь хочу с мк отправлять запрос на возможность запись во внутренний регистр плис данных и как только это станет возможным плис должна загрузить в свой регистр данные из срам и сообщить об этом факте мк.

Тогда Вам в помощь одноклоковое фифо (памятью которого является сама SRAM) и логика приема, передачи данных.
Пример фифо на регистрах привел в предыдущем сообщении...

PS Не уверен в коректности Вашей идеи...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 5 2015, 16:02
Сообщение #6


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
Мне не нужна двух клоковая фифо! Мне достаточно одного клока основного на стороне плис! Я лишь хочу с мк отправлять запрос на запись в регистр плис данных и как только это станет возможным плис должна загрузить в свой регистр данные из срам и сообщить об этом факте мк.

тогда это не фифо, а озу с ручным управлением. назыавайте вещи своими именами.

один регистр - определяет к кому мультиплексорами подключена SRAM.
пишет этот регистр - всегда мк.

второй регистр - сигнал-запрос на вычитывание данных из SRAM в плис.
пишет этот регистр - мк. плис способна только сбрасывать его.

третий регистр - сигнал-подтверждение того что чтение со стороны плис окончено.
пишет в этот регистр - плис, мк способна только сбрасывать.


порядок такой.
мк при старте сбрасывает второй и третий регистры, подключает SRAМ к себе первым регистром, обнуляет SRAM.

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


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
uragan90
сообщение Sep 5 2015, 16:05
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Цитата(Maverick @ Sep 5 2015, 19:58) *
Тогда Вам в помощь одноклоковое фифо (памятью которого является сама SRAM) и логика приема, передачи данных.

PS Не уверен в корректности Вашей идеи...

Просто задача идеи состоит в том чтоб на высокой скорости загружать sram и потом по мере необходимости выгружать данные из sram. Но cpld уже есть EPM570 с подключенной к ней sram CY7C1041DV33. Почему б и не попробовать ведь ресурсов их хватает для задачи с головой. Просто криво возможно как то но возможно ведь?
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 5 2015, 16:10
Сообщение #8


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
Просто криво возможно как то но возможно ведь?

я полагаю, никто до сих пор не понял какого конечного результата вы хотите добиться =)


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
uragan90
сообщение Sep 5 2015, 16:11
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Цитата(krux @ Sep 5 2015, 20:02) *
тогда это не фифо, а озу с ручным управлением. назыавайте вещи своими именами.

один регистр - определяет к кому мультиплексорами подключена SRAM.
пишет этот регистр - всегда мк.

Запись в срам должна быть выше по приоритету чем чтение. Данных будет немного но быстро их пишем в срам, и если только мы не пишем в срам то есть возможность чтения
Go to the top of the page
 
+Quote Post
Maverick
сообщение Sep 5 2015, 16:13
Сообщение #10


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(uragan90 @ Sep 5 2015, 19:11) *
Запись в срам должна быть выше по приоритету чем чтение. Данных будет немного но быстро их пишем в срам, и если только мы не пишем в срам то есть возможность чтения

Пожалуйста попытайтесь еще раз объяснить, что нужно сделать и привести требования.
И напишите все режимы/требования работы, а то у Вас в процессе общения появляются новые требования/режимы.
Для наглядности можете привести какие-то "картинки" схемы в виде квадратиков/прямоугольничков со стрелочками


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 5 2015, 16:16
Сообщение #11


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
Запись в срам должна быть выше по приоритету чем чтение.

при записи одной ячейки озу одновременно и из мк и из плис - какой должен быть результат?


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
uragan90
сообщение Sep 5 2015, 16:26
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Цитата(Maverick @ Sep 5 2015, 20:13) *
Пожалуйста попытайтесь еще объяснить, что нужно сделать и требования.
И напишите все режимы/требования работы, а то у Вас в процессе общения появляются новые требования/режимы.
Для наглядности можете привести какие-то "картинки" схемы

Попытаюсь объяснить. Я с помощью плис захватываю данные с ацп на частоте клока плис 50mhz и пишу их во внешнюю sram. К плис подключен мк и по запросу плис должна загрузить в свой внутренний регистр данные которые читаем по принципу фифо, но только не важно какой там клок- просто послали с мк запрос на загрузку и как только это стало возможным в момент когда данные не записываются в срам, плис загружает данные в свой регистр. Сообщает об этом мк и мк с помощью сдвигового регистра как в интерфейсе SPI выгружает данные из плис к себе. Неужели не понятно объяснил?
Вот картинка вдохновившая меня на реализацию этого "псевдо-фифо"

Цитата(krux @ Sep 5 2015, 20:16) *
при записи одной ячейки озу одновременно и из мк и из плис - какой должен быть результат?

Запись должна проходить с плис в срам! А вот если нет записи в срам но мк требует данные, то плис выгрузит из срам данные в свой внутренний регистр и сообщит об этом мк. - Как думаете это возможно?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 5 2015, 16:31
Сообщение #13


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
Сообщает об этом мк и мк с помощью сдвигового регистра как в интерфейсе SPI выгружает данные из плис к себе.

сколько за раз выгружается байт из озу в мк?
что, если посередине передачи по SPI возникла необходимость записи со стороны плис?


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
uragan90
сообщение Sep 5 2015, 16:50
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Цитата(krux @ Sep 5 2015, 20:31) *
сколько за раз выгружается байт из озу в мк?
что, если посередине передачи по SPI возникла необходимость записи со стороны плис?

Тут всё просто мы отправили запрос с мк в плис и ждём ответа когда плис загрузит данные в регистр чтоб потом с помощью сдвигового регистра выгрузить байт из плис в мк. Скорость выгрузки соизмерима с ёмкостью этого псевдо-фифо. Что не понятно то я вот тоже не пойму проблемы что вас воснует в такого рода передачи.

Цитата(krux @ Sep 5 2015, 20:31) *
что, если посередине передачи по SPI возникла необходимость записи со стороны плис?

Этой проблемы не возникнет так как на время передачи из плис в мк запроса на чтение от мк не будет по понятным причинам и не что не потревожит плис загружать данные в срам.
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 5 2015, 16:52
Сообщение #15


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
я вот тоже не пойму проблемы что вас волнует в такого рода передачи.

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

практика показывает, что от 50% до 80% алгоритмов по объему - это обработка непредвиденных при нормальной работе ситуаций, и если вы ожидаете только тепличных условий по входным воздействиям - то это прямая дорога в адъ.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:44
Рейтинг@Mail.ru


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