Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 16:47

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Процессорная система в ПЛИС (маленькие хитрости)
Автор Сообщение
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
Если есть HDL, рисунок видится лишним.
Сообщение Добавлено: Сб июн 30, 2012 10:07
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
Единственная графическая иллюстрация, какую я придумал - в первом посте. Реально работающую в таком же виде нарисовать не получится, потому что тот же квартус не позволяет таскать на графической схеме такие шинные конгломераты, как cpu_type, которые и надо вести от процессора к устройствам. Кроме того, чтобы схема была полна, от устройств придется выводить порты, как на ввод, так и на вывод, которые "от балды" не придумываются. Короче, надо такую систему сначала нарисовать и запустить, а потом показывать, иначе, получится именно то, что получилось (картинка в первом посте), где сокращено все до предела.
Сообщение Добавлено: Пт июн 29, 2012 20:13
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
очень не плохо было бы увидеть иллюстрации к описанному (графические), ну очень просится.
Сообщение Добавлено: Пт июн 29, 2012 20:06
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
Хищник писал(а):
Тогда уж надо это блок отдельно расписывать.


Так же, как с мультиплексором, части каскада можно в подключаемых устройствах записывать:

Код:

-- в этой библиотеке вся логика устройства, кроме выходного каскада
USE device_lib.vhd;

entity ...
Port(
    clk : in node;
    cpu : in cpu_bus_type;
    cascade_in : in word; -- DATA_IN

    in_ports : in device_port_in_type;
    out_ports : out device_port_out_type;
);

architecture ...
  signal device : device_type;
  signal ena : node;
begin

-- где-то внутри device_main_function
--   if (cpu.addr < base_address or
--         cpu.addr > base_address + base_gap + 1) and
--         cpu.pre_read = '1' then
--       ena_out := '1';
--   else
--       ena_out := '0';
--   end if;
--   if ena_out = '1' then
--       device.data := datas;
--   else
--       device.data := (others => '0');
--   end if;

   data_out <= device.data or cascade_in;

    process (clk) begin
       if clk'event and clk = '1' then
           device <= device_main_function(device,cpu,in_ports);
           out_ports <= device.out_ports;
       end if;
    end process;

end;


Отмечу только, что логика data_out вне синхронного процесса, чтобы объединение по OR могло быть оптимизировано автоматом САПР-а и не вносило быстро нарастающей задержки. Получается подобие "монтажного или" на общей шине.

p.s. код написан (а не скопирован из vhd-файла) для принципиального понимания, а не для использования.
Сообщение Добавлено: Пт июн 29, 2012 04:53
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
WingLion писал(а):
Если каскадировать по логике "или", то требование не вылезать на шину когда не нужно - имеет смысл.

Тогда уж надо это блок отдельно расписывать.
WingLion писал(а):
А каскадирование мультиплексированием имеет недостаток в явно большем времени задержки распространения сигнала по цепи устройств.

Если периферии немного, то это не становится узким местом. Пять-шесть устройств "начального уровня" вполне могут подключить к себе еще какое-нибудь ядро. По крайней мере, до 10 к ячеек частота после синтеза остается ровно такой же, если подцепить один-два новых модуля.
Сообщение Добавлено: Чт июн 28, 2012 22:52
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
Хищник писал(а):
просто устройство, которое находится ближе к процессору, выставит свои данные, а не каскадируемые.



Если каскадировать по логике "или", то требование не вылезать на шину когда не нужно - имеет смысл.
А каскадирование мультиплексированием имеет недостаток в явно большем времени задержки распространения сигнала по цепи устройств.
Сообщение Добавлено: Чт июн 28, 2012 21:38
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
WingLion писал(а):
это и нарисовано на картинке в первом посте
только DATA_IN вместо cascade_in

Аа, а я, видимо, не туда пошел глазами, а для уточнения взял пост, в котором написано, что устройства не должны вылезать на шину невовремя. Если используется каскадирование, то такого конфликта не будет, просто устройство, которое находится ближе к процессору, выставит свои данные, а не каскадируемые.
Сообщение Добавлено: Чт июн 28, 2012 21:15
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
Хищник писал(а):
Как вариант: все устройства имеют одинаковую входную шину со стороны процессора и сами декодируют адреса (что не запрещает "подсматривать" запись в другое устройство и даже писать в себя копию). Кроме того, каждый блок имеет вход cascade_in, к которому подключается следующий модуль в цепочке.


это и нарисовано на картинке в первом посте :wink:
только DATA_IN вместо cascade_in
Сообщение Добавлено: Чт июн 28, 2012 18:39
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
Как вариант: все устройства имеют одинаковую входную шину со стороны процессора и сами декодируют адреса (что не запрещает "подсматривать" запись в другое устройство и даже писать в себя копию). Кроме того, каждый блок имеет вход cascade_in, к которому подключается следующий модуль в цепочке.

Код:
with conv_integer(addr) select
dio <= ext(encOut, 32) when BaseAddr + 20,
       cascade_in when others;


Если в системе появляется еще один периферийный модуль, его выход данных подключается к cascade_in предыдущего блока.
Сообщение Добавлено: Пн июн 25, 2012 12:14
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
В ПЛИС формально находится контроллер интерфейса с девайсом.
И это может быть как сложная схема так и просто набор портов.
А само устройство может быть как в ПЛИСе так и вне ее.
Сообщение Добавлено: Вс июн 24, 2012 11:16
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
А вот сам девайс не обязан быть в плисе, а может быть каким-то внешним устройством на плате или где-то еще?
Сообщение Добавлено: Вс июн 24, 2012 10:57
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
Именно так! И при проектировании надо только правильно прописать адреса устройств. Ну, и не допускать ошибок в логике устройств, чтобы их данные не появлялись на шине не вовремя.
Сообщение Добавлено: Вс июн 24, 2012 10:06
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
О, вот это здорово. Очень интересно. Получается, вместо того, чтобы делать одну большую и сложную шины "процессор <-> девайсы" делаем две простых. При этом, все девайсы "слушают" входную шину от процессора в поисках команд только для них, а данные отправляют по общей шине данных только когда им разрешено.
Сообщение Добавлено: Вс июн 24, 2012 09:22
  Заголовок сообщения:  Re: Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
На VHDL подобная процессорная система будет выглядеть примерно так:

Код:
architecture ....

    signal reset, int : std_logic;
    signal ext_di : word;
    signal cpu : cpu_type;
    signal dev1 : device1_type;
    signal dev2 : device2_type;
    signal dev3 : device3_type;

begin
    process (clk) begin
        if clk'event and clk = vcc then

             cpu <= MAIN_CPU(cpu,dev1.do,reset,int);
             dev1 <= MAIN_DEVICE1(dev1,cpu,dev2.do,reset,int);
             dev2 <= MAIN_DEVICE1(dev2,cpu,dev3.do,reset,int);
             dev3 <= MAIN_DEVICE1(dev3,cpu,ext_di,reset,int);

            end if;

        end if;
    end;

end;


Типы и функции, описывающие логику процессора и устройств подключаются в начале исходника vhdl библиотечными файлами.

Внешние сигналы, входы/выходы устройств, логика сброса и прерываний в vhdl-коде не показаны, так как они зависят от конкретного применения.
Сообщение Добавлено: Вс июн 24, 2012 08:23
  Заголовок сообщения:  Процессорная система в ПЛИС (маленькие хитрости)  Ответить с цитатой
Речь не о тех системах, что генерируются автоматически в ISE или Quartus, a о системах, которые строятся вручную.

При таком построении требуется серьезное планирование схемы, чтобы не наглючить и в то же время иметь достаточный простор для возможности расширения системы, добавления устройств, памяти и т.д. и т.п.

Поэтому записываю здесь правила, которые принял для себя, чтобы они быть может, кому-то помогли начать это дело или использовать то что наработано по этим правилам.



1. Общая шина

Общая шина представляет из себя два набора сигналов:
1.1. - сигналы, используемые всеми устройствами - Адреса, управление чтением/записью, выходные данные процессора, синхронизация, сигналы сброса и прерываний;
1.2. - входы - входные данные, передаваемые в процессор из устройств. В обычных процессорных системах шина данных двунаправлена, но в ПЛИС двунаправленность на шинах не реализуется как надо, поэтому в процессоре используется две шины данных - одна на вход, другая на выход.

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

И вот здесь имеется одна возможность, как это сделать наилучшим (как мне кажется) образом.
Правила следующие:
a. каждое устройство имеет свои адреса, не пересекающиеся с адресами других устройств.
b. пока процессор не выставил нужный адрес и запрос чтения, на выход шины данных устройство выдает только нули.
c. данные на выход шины данных устройство выдает только в момент, когда ему это разрешено, совпадает адрес и выставлен сигнал разрешения чтения.
d. данные со всех устройств объединены в одну шину по схеме "или".

При соблюдении этих правил мультиплексор получится автоматически и с возможностью расширения.

В случае разделения шин данных для памяти и устройств (или иного более широкого разделения) шины формируются подобным же образом, только с использованием соответствующих сигналов адресов и разрешений.

2. Реализация Общей Шины.

Реализация как на HDL, так и в схеме должна иметь возможность быстрого расширения схемы, поэтому надо сделать так, чтобы при добавлении нового устройства в процессорную систему было достаточно только ее подключить к нужным точкам системы и подключение должно быть однообразным для всех устройств.

Чтобы так сделаю, делаю следующее.

1. первая часть Общей Шины (выходные сигналы процессора) подается на все устройства прямо.
2. Вторая часть Общей Шины объедниняется одним шинным многовходовым элементом "ИЛИ".

на VHDL этот элемент записывается одним оператором

di <= dev1.do or dev2.do or dev3.do .... or devN.do;

И в него добавлять новые выходы не сложно

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

3. Чтобы схема выглядела единообразно в элементе устройства можно сделать как вход, так и выход для первой части шины. На выход подается копия входа (без каких либо обработок). Тогда все элементы процессорной системы будут соединены в простую цепь, в которой от устройства к устройству ведутся две шины, выход первого устройства подключен ко входу процессора, а на вход шины последнего подается выходная шина процессора.

На прикрепленном рисунке видно, что схема процессорной системы построенной по таким принципам оказывается достаточно прозрачной и в то же время легко расширяемой.

Для упрощения картинки сигналы, подключаемые к самим устройствам, не показаны. Так же не показаны входные сигналы процессора, поступающие извне.


Вложения:
CPU_SYSTEM.GIF
CPU_SYSTEM.GIF [ 5.96 Кб | Просмотров: 38632 ]
Сообщение Добавлено: Вс июн 24, 2012 07:54

Часовой пояс: UTC + 3 часа [ Летнее время ]


cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB