|
FIFO (CPLD+SRAM) |
|
|
|
Sep 5 2015, 13:37
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Sep 5 2015, 15:43
|

я только учусь...
     
Группа: Модераторы
Сообщений: 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.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Sep 5 2015, 15:48
|
Местный
  
Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309

|
Цитата(Maverick @ Sep 5 2015, 19:43)  Для двухклокового фифо нужна блочная память, т.е. FPGA, а не CPLD. Мне не нужна двух клоковая фифо! Мне достаточно одного клока основного на стороне плис! Я лишь хочу с мк отправлять запрос на возможность запись во внутренний регистр плис данных и как только это станет возможным плис должна загрузить в свой регистр данные из срам и сообщить об этом факте мк.
|
|
|
|
Сообщений в этой теме
uragan90 FIFO (CPLD+SRAM) Sep 5 2015, 13:37   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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|