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

 
 
> FIFO на CoolRunner-II, Или как без него жить?
DMax
сообщение Dec 30 2008, 10:20
Сообщение #1


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

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



Сразу оговорюсь, в программируемой логике я зелен как огурец. Но встала задача, а мне интересно сделать её самому.

Имеется CPLD CoolRunner-II, в который данные закачиваются контроллером по SPI, который тактируется тоже контроллером. Задача принять по нему байт и далее произвести обработку. Проблема в том, что клок SPI не совпадает с клоком, на котором работает все остальное. Подсказывают взять асинхронный FIFO, но в Xilinx Core Generator не хочет его генерировать для CoolRunner'а.

Отсюда вопрос, как грамотно и с наименьшим геморроем перекинуть данные из регистра с одного клока на другой?

P.S.: Всех с наступающим smile.gif

Сообщение отредактировал DMax - Dec 30 2008, 10:20
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kuzmi4
сообщение Dec 30 2008, 15:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 DMax - на счёт так сказать оцифровывания - глобальная идея такова:
Код
process(<clock>)
begin
   if (<clock>'event and <clock> = '1') then
      if (<reset> = '1') then
         Q1 <= '0';
         Q2 <= '0';
         Q3 <= '0';
      else
         Q1 <= D_IN;
         Q2 <= Q1;
         Q3 <= Q2;
      end if;
   end if;
end process;

В результате у вас получается 3 тригера в цепочке - 1-й - входной(на него подавать данные), 3-й выходной(с него забирать данные).
А на счёт фифо - на кулранере фифо не организовывал - не скажу как это, но нормальное фифо на CPLD - по моему это малореально..

Вот тема - я тут как раз подымал вопрос асинхронного сигнала(немного не то, но идею объяснит я думаю). Как раз счас колупаю что то похожее - данные на вход подаются асинхронно глобальному клоку FPGA(клок рождается в FPGA он обсолютно идентичен тому на которой работает дизайн, но выходит наружу, там перепетии разные, потом заходт в другую FPGA(которая на другой плате), и она по нему уже выдаёт данные) - и что самое интересное дизайн собран так что оно даже правильно ловит 07.gif , вот только если что-то тронуть - всё валится (видимо имеет место очень большое везение что ли)

Кстати, а сколько кулранера уже занято ?
Go to the top of the page
 
+Quote Post
DMax
сообщение Dec 31 2008, 15:02
Сообщение #3


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

Группа: Свой
Сообщений: 161
Регистрация: 19-01-08
Из: Питер
Пользователь №: 34 234



Цитата(Kuzmi4 @ Dec 30 2008, 18:14) *
2 DMax - на счёт так сказать оцифровывания - глобальная идея такова:
Код
process(<clock>)
begin
   if (<clock>'event and <clock> = '1') then
      if (<reset> = '1') then
         Q1 <= '0';
         Q2 <= '0';
         Q3 <= '0';
      else
         Q1 <= D_IN;
         Q2 <= Q1;
         Q3 <= Q2;
      end if;
   end if;
end process;

В результате у вас получается 3 тригера в цепочке - 1-й - входной(на него подавать данные), 3-й выходной(с него забирать данные).


Хм... а в чем принцип, если не секрет? То есть, что будет, если Q1 <= D_IN и фронт клока произойдет где-то по середине фронта D_IN? В Q1 окажется какая-то хрень, а что дальше? Она перекачует на следующем такте в Q2, а потом в Q3. И не понятно, как делу помогает, то что регистра три, а не пять или 10.

Цитата(Kuzmi4 @ Dec 30 2008, 18:14) *
А на счёт фифо - на кулранере фифо не организовывал - не скажу как это, но нормальное фифо на CPLD - по моему это малореально..

А почему? Там нет блочного ОЗУ? А разве на распределенной ФИФО нельзя сделать?
Go to the top of the page
 
+Quote Post
LordVader
сообщение Jan 4 2009, 19:35
Сообщение #4


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

Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418



Цитата(DMax @ Dec 31 2008, 18:02) *
Хм... а в чем принцип, если не секрет? То есть, что будет, если Q1 <= D_IN и фронт клока произойдет где-то по середине фронта D_IN? В Q1 окажется какая-то хрень, а что дальше? Она перекачует на следующем такте в Q2, а потом в Q3. И не понятно, как делу помогает, то что регистра три, а не пять или 10.


Эта вот "какая-то хрень" за время между тактами стабилизируется на лог. 0 или лог. 1 и в Q2 запишется уже стабильное значение. А Q3 используется для определения фронта сигнала (Q2!=Q3).
Go to the top of the page
 
+Quote Post



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

 


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


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