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

 
 
 
Reply to this topicStart new topic
> Двунаправленный мультиплексор, Как реализовать
BuTeK
сообщение Mar 26 2008, 19:47
Сообщение #1


Участник
*

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



Необходимо реализовать двунаправленный мультиплексор...
То есть мне нужно переключать шину данных внешнего ОЗУ для полного доступа к ней поочередно то с ПЛИС, то с DSP подключенного к портам ПЛИС.
Не могу сообразить как это организовать.... Помогите новичку...
Go to the top of the page
 
+Quote Post
yuri_d
сообщение Mar 26 2008, 20:28
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 28-01-05
Из: МО, Мытищи
Пользователь №: 2 274



Нужен не мультиплексор, а арбитр. Посмотрите как сделан доступ в системах с общей шиной (например PCI, ISA).

Если DSP можно остановить на время при доступе к внешней памяти (с помощью сигнала ready, bus request/bus hold) то проблема легко решается.

А может одновременный доступ и не нужен? Тоесть работает один, а другой спит. Тогда проблемы вообще нет.
Go to the top of the page
 
+Quote Post
Omen_13
сообщение Mar 26 2008, 20:31
Сообщение #3


Силовик-затейник
****

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



Организовать на 2-й ПЛИСке контроллер доступа к памяти с FIFO.
То есть ПЛИС и DSP подключены напрямую к контроллеру памяти который и занимается арбитражем и т.п.


--------------------
"Вперёд на мины, ордена потом!"
"инжинер/разработчик создает нечто, в отличии от многих других профессий. В этом есть сходность с художниками или музыкантами"(с)CodeWarrior1241
Go to the top of the page
 
+Quote Post
BuTeK
сообщение Mar 27 2008, 04:32
Сообщение #4


Участник
*

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



Второй ПЛИС нет... уже плата так разведена...
А в проекте две памяти и поочередно идет обращение... т.е. ПЛИС память заполняет в это время с другой памятью работает DSP (производит обработку набранных отчетов).
В любой момент времени идет обращение или от ПЛИС к памяти или от DSP.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Mar 27 2008, 09:23
Сообщение #5


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



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


Сделай модуль с двунаправленными выводами и ПЛИС будет полностью работать с внешней памятью, а когда DSP потребуются данные из памяти то ПЛИС будет считывать эти данные из памяти и передавать в DSP. В простоях DSP ПЛИС будет заполнять память новыми данными. Правда здесь должна быть полная согласованость по времени с DSP. Другими словами, как раньше писалось, на ПЛИС организовываешь арбитр. Или надо было ставить двупортовую память для таких целей.


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
BuTeK
сообщение Mar 27 2008, 20:42
Сообщение #6


Участник
*

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



То есть полностью брать всё управление с памятью на ПЛИС, а в ДСП выводить только по запросу данные.
Я правильно понял?
Если честно, думал об этом, но надеялся, что есть вариант полегче....
Go to the top of the page
 
+Quote Post
Omen_13
сообщение Mar 27 2008, 21:16
Сообщение #7


Силовик-затейник
****

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



Цитата
То есть полностью брать всё управление с памятью на ПЛИС, а в ДСП выводить только по запросу данные.
Я правильно понял?

Абсолютно правильно. Если ПЛИС позволяет можно кэш организовать


--------------------
"Вперёд на мины, ордена потом!"
"инжинер/разработчик создает нечто, в отличии от многих других профессий. В этом есть сходность с художниками или музыкантами"(с)CodeWarrior1241
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 27 2008, 21:32
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(BuTeK @ Mar 28 2008, 01:42) *
Если честно, думал об этом, но надеялся, что есть вариант полегче....
Если абстрагироваться от мультиплексора, то вы пытаетесь сделать шину проводников. Но тогда возникает вопрос, зачем эти проводники нужно реализовывать внутри ПЛИС? Не проще ли было их мимо нее бросить? Предложенная абстракция конечно же не отрицает необходимости наличия арбитра доступа к ОЗУ. Если только она не двухпортовая.
Go to the top of the page
 
+Quote Post
BuTeK
сообщение Apr 2 2008, 03:36
Сообщение #9


Участник
*

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



А дайте, пожалуйста, ссылку на простой арбитр. А то с таким не сталкивался.. даже если честно не понимаю, что это такое...
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Apr 3 2008, 11:41
Сообщение #10


Знающий
****

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



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


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
BuTeK
сообщение Apr 3 2008, 19:12
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 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;

А нужно тоже самое только двунаправленное...

Надеюсь, сейчас объяснил немного понятнее... Извиняйте, если совсем запутал....
Go to the top of the page
 
+Quote Post
cupertino
сообщение Apr 3 2008, 22:22
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 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;

А нужно тоже самое только двунаправленное...

Надеюсь, сейчас объяснил немного понятнее... Извиняйте, если совсем запутал....
Запросто. введите в эти уравнения еще и соответствующий сигнал записи/чтения в/из ОЗУ для управления направлением передачи через ПЛИС
Go to the top of the page
 
+Quote Post
sazh
сообщение Apr 4 2008, 06:40
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 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;
Go to the top of the page
 
+Quote Post

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

 


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


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