|
|
  |
Двунаправленный мультиплексор, Как реализовать |
|
|
|
Mar 26 2008, 19:47
|
Участник

Группа: Новичок
Сообщений: 67
Регистрация: 25-04-06
Из: Беларусь, Гомель
Пользователь №: 16 450

|
Необходимо реализовать двунаправленный мультиплексор... То есть мне нужно переключать шину данных внешнего ОЗУ для полного доступа к ней поочередно то с ПЛИС, то с DSP подключенного к портам ПЛИС. Не могу сообразить как это организовать.... Помогите новичку...
|
|
|
|
|
Mar 27 2008, 04:32
|
Участник

Группа: Новичок
Сообщений: 67
Регистрация: 25-04-06
Из: Беларусь, Гомель
Пользователь №: 16 450

|
Второй ПЛИС нет... уже плата так разведена... А в проекте две памяти и поочередно идет обращение... т.е. ПЛИС память заполняет в это время с другой памятью работает DSP (производит обработку набранных отчетов). В любой момент времени идет обращение или от ПЛИС к памяти или от DSP.
|
|
|
|
|
Mar 27 2008, 20:42
|
Участник

Группа: Новичок
Сообщений: 67
Регистрация: 25-04-06
Из: Беларусь, Гомель
Пользователь №: 16 450

|
То есть полностью брать всё управление с памятью на ПЛИС, а в ДСП выводить только по запросу данные. Я правильно понял? Если честно, думал об этом, но надеялся, что есть вариант полегче....
|
|
|
|
|
Mar 27 2008, 21:16
|

Силовик-затейник
   
Группа: Модераторы
Сообщений: 766
Регистрация: 18-02-07
Из: Столица солнечного Башкортостана
Пользователь №: 25 467

|
Цитата То есть полностью брать всё управление с памятью на ПЛИС, а в ДСП выводить только по запросу данные. Я правильно понял? Абсолютно правильно. Если ПЛИС позволяет можно кэш организовать
--------------------
"Вперёд на мины, ордена потом!" "инжинер/разработчик создает нечто, в отличии от многих других профессий. В этом есть сходность с художниками или музыкантами"(с)CodeWarrior1241
|
|
|
|
|
Apr 2 2008, 03:36
|
Участник

Группа: Новичок
Сообщений: 67
Регистрация: 25-04-06
Из: Беларусь, Гомель
Пользователь №: 16 450

|
А дайте, пожалуйста, ссылку на простой арбитр. А то с таким не сталкивался.. даже если честно не понимаю, что это такое...
|
|
|
|
|
Apr 3 2008, 11:41
|

Знающий
   
Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402

|
Если подходит такой вариант, то наиболее простым будет система взаимодействия через "запрос-подтверждение". 1. Мастер (ПЛИС или DSP) выставляет запрос на разрешение доступа к памяти 2. Если ОЗУ не занято, дается разрешение 3. На время действия запроса от одного мастера, разрешение второму мастеру не выдается, но ставится в ожидание. 4. После окончания сеанса с первым мастером, выдается разрешение второму. Поскольку у Вас 2 ОЗУ, то и запросы-разрешения должны быть для них разные. Бывает так, что один (оба) из мастеров не может (не могут) ждать. Тогда делаете по 2 буфера-посредника (облегчённое подобие кэш) на каждого мастера и записываете туда данные, которые надо скинуть в ОЗУ и/или предварительно "делаете заказ" на определённый блок ОЗУ, автомат буферов высставляет запрос и когда получает разрешение на доступ, сливает в ОЗУ записываемые данные из буфера записи и заполняет заказанными данными ОЗУ буфер чтения. В более развитом варианте мастер может работать с ОЗУ как через буфер (для небольших и/или быстрых пакетов данных), так и напрямую - через запрос доступа (для больших и/или медленных пакетов данных).
--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
|
|
|
|
|
Apr 3 2008, 19:12
|
Участник

Группа: Новичок
Сообщений: 67
Регистрация: 25-04-06
Из: Беларусь, Гомель
Пользователь №: 16 450

|
Я, наверно, немного не так выразился. Задача такая.. Одновременно не может быть доступа к одной памяти... То есть процесс распараллелен - пока ПЛИС заполняет одну память ДСП обрабатывает другую.. Затем меняются. И я сначало думал, что поставив мультиплексор все будет отлично работать... А вот и нет. С мультиплексором данные идут в одну сторону, то есть только на запись в ОЗУ (или Чтение). И вот я подумал, можно ли как-нибудь использовать ПЛИС, как проводник а не однонаправленный буфер.
Вот как было у меня
RAM0_DQ <= SDR_DQ WHEN GATE = '1' ELSE DSP_DQ; RAM1_DQ <= DSP_DQ WHEN GATE = '0' ELSE SDR_1_DQ;
А нужно тоже самое только двунаправленное...
Надеюсь, сейчас объяснил немного понятнее... Извиняйте, если совсем запутал....
|
|
|
|
|
Apr 3 2008, 22:22
|
Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 19-12-06
Из: Silicon Valley, California
Пользователь №: 23 683

|
Цитата(BuTeK @ Apr 3 2008, 12:12)  Я, наверно, немного не так выразился. Задача такая.. Одновременно не может быть доступа к одной памяти... То есть процесс распараллелен - пока ПЛИС заполняет одну память ДСП обрабатывает другую.. Затем меняются. И я сначало думал, что поставив мультиплексор все будет отлично работать... А вот и нет. С мультиплексором данные идут в одну сторону, то есть только на запись в ОЗУ (или Чтение). И вот я подумал, можно ли как-нибудь использовать ПЛИС, как проводник а не однонаправленный буфер.
Вот как было у меня
RAM0_DQ <= SDR_DQ WHEN GATE = '1' ELSE DSP_DQ; RAM1_DQ <= DSP_DQ WHEN GATE = '0' ELSE SDR_1_DQ;
А нужно тоже самое только двунаправленное...
Надеюсь, сейчас объяснил немного понятнее... Извиняйте, если совсем запутал.... Запросто. введите в эти уравнения еще и соответствующий сигнал записи/чтения в/из ОЗУ для управления направлением передачи через ПЛИС
|
|
|
|
|
Apr 4 2008, 06:40
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(BuTeK @ Apr 3 2008, 23:12)  И вот я подумал, можно ли как-нибудь использовать ПЛИС, как проводник а не однонаправленный буфер. А нужно тоже самое только двунаправленное... Проводник - он и есть однонаправленный буфер. Есть вход. Есть выход. Под двунаправленным понимается двунаправленная шина. Реализация такой шины возможна только при наличии контактов I/O и буфера для реализации ZZZZ состояния. Посмотрите структуру шинника 74245. Если управление избыточно, минимизируйте. На базе таких шинников много чего через Плис прогнать можно. И никого не волнует Ваш протокол обмена по этой (этим) двунаправленной шине (шинам) library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ap6 is port ( busa : inout std_logic_vector(7 downto 0); busb : inout std_logic_vector(7 downto 0); dir : in std_logic; oe_n : in std_logic ); end ap6; Architecture rtl of ap6 is begin busa <= busb when (dir = '0' and oe_n = '0') else (others => 'Z'); busb <= busa when (dir = '1' and oe_n = '0') else (others => 'Z'); end rtl;
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|