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

 
 
> 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
 
Start new topic
Ответов
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   FIFO (CPLD+SRAM)   Sep 5 2015, 13:37
|- - uragan90   Цитата(Maverick @ Sep 5 2015, 19:43) Для ...   Sep 5 2015, 15:48
|- - Maverick   Цитата(uragan90 @ Sep 5 2015, 18:48) Мне ...   Sep 5 2015, 15:58
|- - uragan90   Цитата(Maverick @ Sep 5 2015, 19:58) Тогд...   Sep 5 2015, 16:05
- - krux   ЦитатаМне не нужна двух клоковая фифо! Мне дос...   Sep 5 2015, 16:02
|- - uragan90   Цитата(krux @ Sep 5 2015, 20:02) тогда эт...   Sep 5 2015, 16:11
|- - Maverick   Цитата(uragan90 @ Sep 5 2015, 19:11) Запи...   Sep 5 2015, 16:13
|- - uragan90   Цитата(Maverick @ Sep 5 2015, 20:13) Пожа...   Sep 5 2015, 16:26
- - krux   ЦитатаПросто криво возможно как то но возможно вед...   Sep 5 2015, 16:10
|- - Gorby   Цитата(krux @ Sep 5 2015, 20:10) я полага...   Sep 24 2015, 13:04
|- - uragan90   Цитата(Gorby @ Sep 24 2015, 17:04) Тут пр...   Sep 24 2015, 13:22
|- - Gorby   Цитата(uragan90 @ Sep 24 2015, 17:22) Так...   Sep 24 2015, 13:49
|- - uragan90   Цитата(Gorby @ Sep 24 2015, 17:49) Да, ко...   Sep 24 2015, 13:58
|- - EvgenyNik   Цитата(Gorby @ Sep 24 2015, 16:49) Если о...   Sep 24 2015, 14:04
|- - uragan90   Цитата(EvgenyNik @ Sep 24 2015, 18:04) Но...   Sep 24 2015, 14:09
|- - EvgenyNik   Цитата(uragan90 @ Sep 24 2015, 17:09) Чит...   Sep 24 2015, 15:10
- - krux   ЦитатаЗапись в срам должна быть выше по приоритету...   Sep 5 2015, 16:16
- - krux   ЦитатаСообщает об этом мк и мк с помощью сдвиговог...   Sep 5 2015, 16:31
|- - uragan90   Цитата(krux @ Sep 5 2015, 20:31) сколько ...   Sep 5 2015, 16:50
- - krux   Цитатая вот тоже не пойму проблемы что вас волнует...   Sep 5 2015, 16:52
|- - uragan90   Цитата(krux @ Sep 5 2015, 20:52) волнуют ...   Sep 5 2015, 17:06
- - krux   я прошу прощения за мазню в paint, но это было быс...   Sep 5 2015, 17:55
|- - uragan90   Цитата(krux @ Sep 5 2015, 21:55) я прошу ...   Sep 5 2015, 18:02
- - krux   ура! ко второй странице разродились на верхний...   Sep 5 2015, 18:09
|- - uragan90   Цитата(krux @ Sep 5 2015, 22:09) тактиров...   Sep 5 2015, 18:33
- - bugdesigner   А какие сигналы идут от ADC? Если данные поступают...   Sep 5 2015, 18:34
|- - uragan90   Клока, клока... Я ж говорю что по импульсу от мк в...   Sep 5 2015, 19:45
|- - x736C   Цитата(uragan90 @ Sep 5 2015, 22:45) Это ...   Sep 5 2015, 20:55
- - krux   для корректной работы плис нужно стабильное тактир...   Sep 5 2015, 18:46
- - bugdesigner   Трудность здесь в пересечении доменов клоков. Как ...   Sep 6 2015, 05:15
|- - x736C   Цитата(bugdesigner @ Sep 6 2015, 08:15) Т...   Sep 6 2015, 09:27
- - Golikov A.   ЦитатаЭто что так сложно привести к основному клок...   Sep 6 2015, 17:09
- - EvgenyNik   Просто переключающими регистрами задачу красиво ре...   Sep 7 2015, 05:21
- - Golikov A.   Цитатапринимая управляющие сигналы, будет прокручи...   Sep 7 2015, 05:36
|- - Maverick   Цитата(Golikov A. @ Sep 6 2015, 20:09) На...   Sep 7 2015, 06:02
||- - uragan90   Цитата(Maverick @ Sep 7 2015, 10:02) как ...   Sep 7 2015, 06:57
|- - EvgenyNik   Цитата(Golikov A. @ Sep 7 2015, 08:36) и ...   Sep 7 2015, 06:06
- - krux   при старте, если указатели чтения и записи равны (...   Sep 7 2015, 07:22
|- - uragan90   Цитата(krux @ Sep 7 2015, 11:22) при стар...   Sep 7 2015, 08:21
- - uragan90   Удалось реализовать такой модуль FIFO на внешней S...   Sep 24 2015, 12:44
- - Golikov A.   задача проста как 2 копейки, вы мудрите... первое...   Sep 24 2015, 19:32
|- - uragan90   Цитата(Golikov A. @ Sep 24 2015, 23:32) з...   Sep 25 2015, 07:45
|- - EvgenyNik   Цитата(uragan90 @ Sep 25 2015, 10:45) У м...   Sep 25 2015, 07:55
||- - Corner   Цитата(EvgenyNik @ Sep 25 2015, 11:55) Ды...   Sep 28 2015, 19:28
||- - RobFPGA   Приветствую! Цитата(Corner @ Sep 28 2015...   Sep 28 2015, 23:46
||- - uragan90   Цитата(RobFPGA @ Sep 29 2015, 03:46) Прив...   Sep 30 2015, 09:00
|- - Gorby   Цитата(uragan90 @ Sep 25 2015, 10:45) У м...   Sep 25 2015, 10:23
- - uragan90   Начертал схемку которая решает практически половин...   Sep 30 2015, 17:49


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 19:41
Рейтинг@Mail.ru


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