|
Интерфейс между МК и ПЛИС, Использование интерфейса внешней памяти |
|
|
|
Aug 31 2013, 14:34
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 10-10-12
Из: Санкт-Петербург
Пользователь №: 73 890

|
Уважаемое сообщество! Есть следующий вопрос по взаимодействию ПЛИС и МК: Имеем ARM7 LPC2468 и ПЛИС Cyclone 2. ПЛИС подключена к контроллеру внешней памяти ARMа. Данный интерфейс предназначен для работы с асинхронной памятью. Относительно ПЛИС сигналы Write, Read с МК асинхронны. На МК и ПЛИС поступает частота с единого генератора - 12Мгц, но в МК она перемножается до 72МГц - частота ядра. Длительность сигналов контроллера внешней памяти зависит от этой частоты. Частота 72МГц на ПЛИС не идет. Вопрос - как обеспечить максимальное быстродействие между МК и ПЛИС?
Read и Write пропускаю через два последовательных триггера для исключения метастабильного состояния. Но как поступать дальше? Использовать их для тактирования внутренних цепей ПЛИС для записи или чтения состояния регистров и памяти вроде как нельзя. Нужен явный клок. Но его нет с МК.
Сейчас получилось сделать так: стробирую эти сигналы внутренней частотой 72МГц, сформированной на PLL ПЛИС. Получаю сигнал длительностью один период частоты 72МГц. Этот сигнал подаю как сигнал разрешения на внутренние цепи. А клок 72МГц как клок на эти же цепи. Все работает. Но если в МК ускорять работу по этому интерфейсу, то всё перестает работать. Видимо пока я синхронизирую Read, Write внутри ПЛИС, МК уже захлопывает данные, а ПЛИС их еще не успела выставить. Стробировать большей частотой не получается, начинает ругаться временной анализатор.
Как сделать правильно?
|
|
|
|
|
 |
Ответов
|
Sep 1 2013, 07:24
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(DENth @ Aug 31 2013, 18:34)  Read и Write пропускаю через два последовательных триггера для исключения метастабильного состояния. Но как поступать дальше? Использовать их для тактирования внутренних цепей ПЛИС для записи или чтения состояния регистров и памяти вроде как нельзя. Нужен явный клок. Но его нет с МК.
Как сделать правильно? Два триггера - это правильно. А дальше усть варианты. Если ПЛИС значительно быстрее, чем МК, то с точки зрения МК все будет укладываться в один цикл "записи". А вот если их скорости примерно одинаковы, то тогда при чтении надо будет переходить к "пакетному" режиму. Т.е. при первом чтении в ПЛИС запишется адрес и перетактируются данные из памяти в выходной регистр, а при втором - данные уйдут в МК. И далее, если сделаете пост-инкремент адреса, то можно будет делать чтение берстом (пакетом)... А более подробно - у меня на сайте "Краткий Курс", раздел CDC... Кстати и Вам, olegras тоже рекомендую...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Sep 1 2013, 08:27
|
Частый гость
 
Группа: Участник
Сообщений: 113
Регистрация: 12-03-07
Пользователь №: 26 075

|
Цитата(iosifk @ Sep 1 2013, 11:24)  Два триггера - это правильно. ... раздел CDC... Кстати и Вам, olegras тоже рекомендую... Читал, и постоянно пользуюсь. Насчет двух триггеров - я ведь не отрицаю и полностью подтверждаю. Я лишь говорю что если частоты двух доменов равны (а у DENth они равны) - то достаточно одного триггера. Но он должен быть! Во всяком случае, этот факт проверен много раз на практике на частотах до 100 МГц включительно.
|
|
|
|
|
Sep 1 2013, 09:09
|
Местный
  
Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788

|
Цитата(olegras @ Sep 1 2013, 11:27)  Я лишь говорю что если частоты двух доменов равны (а у DENth они равны) - то достаточно одного триггера. Но он должен быть! Да заявы пошли не шуточные. Ну так на всякий случай сообщаю что флопов должно быть как минимум два.
|
|
|
|
|
Sep 1 2013, 10:08
|
Частый гость
 
Группа: Участник
Сообщений: 113
Регистрация: 12-03-07
Пользователь №: 26 075

|
Цитата(klop @ Sep 1 2013, 13:09)  Да заявы пошли не шуточные. Ну так на всякий случай сообщаю что флопов должно быть как минимум два. Зря Вы иронизируете. Давайте разберемся. Может мы говорим о разных вещах. Есть входные данные. Пусть будут write_in и data_in. Для простоты остальные сигналы не рассматриваем. Код на VHDL: CODE port( ... write_in: in std_logic; -- строб записи data_in: in std_logic_vector(15 downto 0) -- данные ); Есть сигналы CODE signal write_in_t: std_logic; signal write_in_t0: std_logic; signal data_in_t: std_logic_vector(15 downto 0); signal data_in_t0: std_logic_vector(15 downto 0); ... signal data_s: std_logic_vector(15 downto 0); Пример первый - без защелки CODE ... if rising_edge(clk) then if(write_in = '1') then data_s <= data_in + x"abcd"; end if; end if; Пример второй - с одной защелкой CODE ... if rising_edge(clk) then write_in_t <= write_in; data_in_t <= data_in; if(write_in_t = '1') then data_s <= data_in_t + x"abcd"; end if; end if; Пример третий - с двумя защелками CODE ... if rising_edge(clk) then write_in_t <= write_in; write_in_t0 <= write_in_t; data_in_t <= data_in; data_in_t0 <= data_in_t; if(write_in_t0 = '1') then data_s <= data_in_t0 + x"abcd"; end if; end if; Я говорю про второй пример. Использую на практике несколько лет. На частотах до 100 МГц включительно. Еще ни разу не сбоило. При одинаковых частотах входного и внутреннего доменов - стабильность (и корректность) от сдвига фаз не зависит. Попробуйте сами. DENth я похожую задачу делал для связки ЦСП от TI со Спартаном 3. Работало на частоте шины (между ними) 85 МГц. Представьте свою часть кода.
|
|
|
|
Сообщений в этой теме
DENth Интерфейс между МК и ПЛИС Aug 31 2013, 14:34 olegras Во-первых, лично я для исключения метастабильности... Sep 1 2013, 04:46 DENth Цитата(olegras @ Sep 1 2013, 08:46) Во-пе... Sep 1 2013, 09:01 DASM а что значит «ускорять»? И что именно перестает ра... Sep 1 2013, 06:46 olegras Цитата(DASM @ Sep 1 2013, 10:46) И что им... Sep 1 2013, 07:03 DENth Цитата(DASM @ Sep 1 2013, 10:46) а что зн... Sep 1 2013, 09:19  klop Цитата(DENth @ Sep 1 2013, 12:19) Стробы ... Sep 1 2013, 09:26   DENth Цитата(klop @ Sep 1 2013, 13:26) Конечно ... Sep 1 2013, 09:31  iosifk Цитата(DENth @ Sep 1 2013, 13:19) Считаем... Sep 1 2013, 11:48 Raven Относящиеся к делу фрагменты кода - в студию! ... Sep 1 2013, 07:02    klop Цитата(olegras @ Sep 1 2013, 13:08) Я гов... Sep 1 2013, 10:25     olegras Цитата(klop @ Sep 1 2013, 14:25) Вау. А н... Sep 1 2013, 10:48 DENth RE: Интерфейс между МК и ПЛИС Sep 1 2013, 17:21 iosifk Цитата(DENth @ Sep 1 2013, 21:21) ..... П... Sep 1 2013, 18:13  DENth Цитата(iosifk @ Sep 1 2013, 22:13) После ... Sep 1 2013, 19:22   iosifk Цитата(DENth @ Sep 1 2013, 23:22) Серьезн... Sep 2 2013, 06:47 vladz Цитата(DENth @ Sep 1 2013, 20:21) Пояснит... Sep 1 2013, 20:54  Victor® Цитата(vladz @ Sep 1 2013, 23:54) Пока чт... Sep 2 2013, 13:14 olegras Цитата(DENth @ Sep 1 2013, 21:21) ... сиг... Sep 2 2013, 06:11  DENth Цитата(olegras @ Sep 2 2013, 10:11) Это к... Sep 2 2013, 13:02   olegras Что-то я запутался. То есть у Вас когда то была од... Sep 2 2013, 13:21    DENth Цитата(olegras @ Sep 2 2013, 17:21) Что-т... Sep 2 2013, 14:38     olegras Для Вашего МК (по даташиту) я бы делал так (пока в... Sep 2 2013, 15:59      DENth Цитата(olegras @ Sep 2 2013, 19:59) Для В... Sep 2 2013, 18:08       olegras Цитата(DENth @ Sep 2 2013, 22:08) ... опе... Sep 3 2013, 06:14        DENth Цитата(olegras @ Sep 3 2013, 10:14) Набро... Sep 3 2013, 14:59         olegras С чтением всегда проблем больше. Приходится играть... Sep 4 2013, 05:26   psL Цитата(DENth @ Sep 2 2013, 17:02) Длитель... Sep 2 2013, 13:36 psL Цитата(DENth @ Sep 1 2013, 21:21) Обещаны... Sep 2 2013, 08:45 ViKo В LPC нельзя добавить тактов (ожидания) при записи... Sep 2 2013, 09:16 Corner Решал подобную задачку на связке 5576ХС+1986ВЕ91. ... Sep 2 2013, 15:22 DASM -- Sep 3 2013, 07:00 olegras Цитата(DASM @ Sep 3 2013, 11:00) А что та... Sep 3 2013, 07:54 kenning Цитата(Corner @ Sep 2 2013, 18:22) Решал ... Jul 8 2016, 14:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|