Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив1 / doc92 / Веретенников.doc
Скачиваний:
25
Добавлен:
03.08.2013
Размер:
323.07 Кб
Скачать
    1. Управляющая информация для операций ввода-вывода

В управлении вводом-выводом используется следующая управляющая информация:

  • команды ввода-вывода;

  • адресное слово канала (АСК);

  • управляющие слова канала;

  • слово состояния канала;

  • байт состояния и байт уточнённого состояния ПУ.

Формат команды ввода-вывода приведён на рис. 4.2.1.

Рис. 4.2.4. Формат команды ввода-вывода

Такая КВВ позволяет задавать до 16 видов команд. В разработанном СПВВ используются 4 команды:

  • «Начать ввод-вывод» (0x0) – инициирует одну или несколько операций ввода-вывода с указанным в команде каналом и ПУ. О завершении отдельного её этапа, или цепочки операций, канал сообщает процессору путём прерываний.

  • «Остановить ввод-вывод» (0x1) – принудительно прекращает операцию ввода-вывода до её завершения.

  • «Проверить ввод-вывод» (0x2) – получение состояния ПУ.

  • «Проверить канал» (0x3) – канал в фиксированной ячейке ОП формирует ССК.

В системе может быть использовано несколько каналов ввода-вывода, при этом каждому может быть присвоен один из 16 адресов.

К каждому каналу может быть подключено несколько ПУ, между которыми распределяется 256 адресов.

Для выполнения команды «Начать ввод-вывод» необходим адрес первого УСК. Адрес первого УСК содержится в адресном слове канала, расположенном в фиксированной ячейке ОП. Этот адрес должен быть предварительно сформирован процессором до выдачи команды «Начать ввод-вывод». Формат АСК приведён на рис. 4.2.2.

Рис. 4.2.5. Формат адресного слова канала

Канальная программа представляет собой последовательность УСК, обеспечивающую выполнение определённой операции ввода-вывода. Формат УСК приведён на рис. 4.2.3.

Рис. 4.2.6. Формат управляющего слова канала

Всего используется 5 указателей:

  • ЦД – указатель цепочки данных;

  • ЦО – указатель цепочки операций;

  • УБ – указатель блокировки;

  • ПИ – указатель пропуска информации;

  • ПР – указатель прерывания.

Формат ССК приведён на рис. 4.2.4.

Рис. 4.2.7. Формат слова состояния канала

    1. Разработка блока чтения команд и управления

Функциональная схема блока CONTROLприведена в приложении 4.

Блок строится по принципу микропрограммного управления и состоит из следующих блоков и узлов:

  • Секвенсер микрокоманд Am29C331-2. Секвенсер осуществляет управление последовательностью выборки микрокоманд.

  • Регистр команд RGK. Этот регистр предназначен для приёма команд ввода-вывода. Данные вRGKзагружаются с шиныADпри наличии сигнала записи командыNEWCOM#, выставляемого процессором.

  • Регистр номера периферийного устройства РгНПУ предназначен для записи в него номера ПУ, указанного в текущей команде. Запись в РгНПУ разрешается битом микрокоманды.

  • Микросхема PLDATF22V10B-10 предназначена для управления процессом приёма новых команд ввода-вывода;

  • ППЗУ констант CONSTMEMпредназначено для хранения констант канала ввода-вывода, таких как адреса фиксированных ячеек ОП (адрес, по которому читается АСК, и адрес, по которому записывается ССК).

  • Регистр RGADпредназначен для выдачи на шинуADконстант изCONSTMEM(в частности, адресов фиксированных ячеек ОП).

  • Преобразователь начального адреса команды ПНАК предназначен для формирования начального адреса микроалгоритма, соответствующего определённой команде ввода-вывода.

  • Преобразователь начального адреса ПНА предназначен для формирования начального адреса микроалгоритма, соответствующего приказу в УСК.

  • Микропрограммная память МПП.

  • Регистр микрокоманд RGMKпредназначен для фиксации микрокоманды.

  • Блок регистров REG_BLKсодержит следующие узлы:

    • Регистр предварительной выборки УСК РгПУСК. Этот регистр предназначен для поддержания постоянного темпа обмена данными с ПУ. Новое УСК принимается в РгПУСК при уменьшении значения СчТД до 32.

    • Регистр кода операции и указателей РгКОУ предназначен для хранения приказа и указателей текущего УСК.

    • Счётчик текущих данных СчТД. Этот счётчик инициализируется значением из УСК. При выполнении обмена значение счётчика уменьшается, при достижении установленного порога (32) СчТД выдаёт сигнал о необходимости предварительной выборки УСК. Обмен заканчивается при достижении СчТД нулевого значения.

    • Регистр текущего адреса данных РгТАД. Предназначен для выдачи на шину ADтекущего адреса данных. Этот регистр инициализируется значением из УСК. При выполнении обмена значение этого регистра увеличивается.

    • Регистр адреса УСК РгАУСК предназначен для приёма, хранения и выдачи на шину ADадреса УСК.

    • Инкрементор адреса ADDLпредназначен для обеспечения последовательной адресации в памяти УСК и данных. Увеличивает значение входа на число байт в слове (4).

Для управления процессом приёма новых команд ввода-вывода используется микросхема PLDATF22V10B-10. Для этой микросхемы разработанаVHDL-модель, которая может быть скомпилирована в файл конфигурации дляATF22V10B-10. РазработаннаяVHDL-модель представлена на рис. 4.3.1.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

-- D-триггер с асинхронными предустановкой и сбросом

entity D_FLOP_UNI is

port (

D : in std_logic;

C : in std_logic;

S : in std_logic;

R : in std_logic;

Q : out std_logic;

NQ : out std_logic

);

end D_FLOP_UNI;

architecture behavioral of D_FLOP_UNI is

begin

process (C, S, R)

begin

if S='0' then -- asynchronous preset active Low

Q <= '1';

NQ <= '0';

elsif R='0' then -- asynchronous reset active Low

Q <= '0';

NQ <= '1';

elsif (C'event and C='1') then -- C rising edge

Q <= D;

NQ <= not D;

end if;

end process;

end behavioral;

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

-- блок управления процессом приёма новой команды

entity comctrl is

Port (

CLK : in std_logic; -- синхросигнал

IN0 : in std_logic; -- поступает NEWCOM#

IN1 : in std_logic; -- поступает ENALL#

IN2 : in std_logic; -- поступает INTA#

IN3 : in std_logic; -- поступает KVV[3]

IN4 : in std_logic; -- поступает KVV[2]

IN5 : in std_logic; -- поступает KVV[1]

IN6 : in std_logic; -- поступает KVV[0]

IN7 : in std_logic; -- поступает KVV[7]

IN8 : in std_logic; -- поступает KVV[6]

IN9 : in std_logic; -- поступает KVV[5]

IN10 : in std_logic; -- поступает KVV[4]

IO0 : in std_logic; -- поступает RESET#

IO1 : out std_logic; -- выход запроса прерывания по новой команде

IO2 : out std_logic -- выход ошибочной команды

);

end comctrl;

architecture behavioral of comctrl is

constant THISCHANNEL: std_logic_vector(3 downto 0) := x"0"; -- номер этого канала

signal RESET : std_logic; -- сброс

signal NEWCOM : std_logic; -- признак поступления новой команды

signal ENALL : std_logic; -- разрешение всех команд

signal INTA : std_logic; -- ответ на запрос

signal INTCOM : std_logic; -- запрос прерывания по новой команде

signal ERRORCOM : std_logic; -- признак ошибочной команды

signal COP : std_logic_vector(3 downto 0); -- код операции

signal NCHANNEL : std_logic_vector(3 downto 0); -- номер канала в команде

signal NEWCOMCAPT : std_logic;

signal INTREQ : std_logic;

signal INTREQCAPT : std_logic;

component D_FLOP_UNI

port (

D : in std_logic;

C : in std_logic;

S : in std_logic;

R : in std_logic;

Q : out std_logic;

NQ : out std_logic

);

end component ;

begin

RESET <= IO0;

NEWCOM <= IN0;

ENALL <= IN1;

INTA <= IN2;

COP <= IN3 & IN4 & IN5 & IN6;

NCHANNEL <= IN7 & IN8 & IN9 & IN10;

DD1: D_FLOP_UNI

port map (

D => NEWCOM,

C => CLK,

S => RESET,

R => INTA,

Q => NEWCOMCAPT

);

process (NCHANNEL, NEWCOMCAPT)

begin

if (NCHANNEL = THISCHANNEL) and (NEWCOMCAPT = '0') then

INTREQ <= '1';

else

INTREQ <= '0';

end if;

end process;

process (COP)

begin

if (COP > x"3") or (ENALL = '1' and COP = x"0") then

ERRORCOM <= '0';

else

ERRORCOM <= '1';

end if;

end process;

-- фиксация запроса на прерывание по команде

DD2: D_FLOP_UNI

port map (

D => '1',

C => INTREQ,

S => RESET,

R => INTA,

NQ => INTREQCAPT

);

DD3: D_FLOP_UNI

port map (

D => INTREQCAPT,

C => CLK,

S => RESET,

R => INTA,

Q => INTCOM

);

IO1 <= not INTCOM;

IO2 <= ERRORCOM;

end Behavioral;

Рис. 4.3.8.VHDL-модель дляATF22V10B-10

В модели указывается номер канала, в котором будет устанавливаться микросхема. Таким образом, номер канала программируется в разработанной VHDL-модели. Также в модели указываются максимальный номер команды ввода-вывода и выделяются команды, которые не могут прервать выполнение микроалгоритма при запрете этих команд сигналомENALL#, установленным в значение высокого уровня.

В процессе разработки блока чтения команд и управления разработан формат микрокоманды. Микрокоманда является 72-разрядной, назначение отдельных битов микрокоманды приведено в табл. 4.3.1.

Табл. 4.3.1. Формат микрокоманды

Обозначение

Число разрядов

Назначение

MKA

14

Адрес перехода в микропрограмме или адрес слова в CONSTMEM(младшие 10 разрядов)

S

4

Выбор тестируемого условия

I

6

Инструкция секвенсера

LDRGA#

1

Разрешение загрузки RGAD(акт.L)

OERGA#

1

Разрешение вывода RGAD(акт.L)

ENALL#

1

Разрешение всех команд ввода-вывода (акт. L)

LDRGNPU#

1

Разрешение загрузки РгНПУ (акт. L)

INT#

1

Запрос прерывания (акт. L)

MEMR#

1

Обращение к памяти (акт. L)

R/W#

1

Режим работы памяти (H– чтение,L- запись)

ALE#

1

Признак выдачи адреса (акт. L)

INTEN

1

Разрешение прерываний на микроуровне

LDPUSK0#

1

Загрузка младших 32 разрядов РгПУСК (акт. L)

LDPUSK1#

1

Загрузка старших 32 разрядов РгПУСК (акт. L)

OESAUSK0#

1

Выбор источника для загрузки в РгАУСК – шина AD(акт.L)

OESAUSK1#

1

Выбор источника для загрузки в РгАУСК – выход инкрементора адреса ADDL(акт.L)

OESAUSK2#

1

Выбор источника для загрузки в РгАУСК – из РгПУСК (поле УСК) (акт. L)

LDUSK#

1

Разрешение загрузки УСК (РгКОУ и СчТД) (акт. L)

LDAUSK#

1

Разрешение загрузки РгАУСК (акт. L)

OEAUSK#

1

Разрешение вывода данных с РгАУСК на шину AD(акт.L)

TADSRC

1

Выбор источника для загрузки в РгТАД (H– из поля УСК,L– с выхода инкрементора адресаADDL)

LDTAD#

1

Разрешение загрузки РгТАД (акт. L)

OT

29

Другие сигналы управления

Для сигналов управления интерфейсом, блоком сборки данных и др. в микрокоманде выделено 29-разрядное поле OT.

Алгоритм чтения команд и УСК

Для выдачи новой команды на СПВВ процессор выставляет на шину ADкоманду ввода-вывода, а сигнал управленияNEWCOM# переводит в низкий уровень. По фронту синхросигнала новая команда захватывается вRGK. В микросхемеPLDпроверяется номер канала, указанный в команде, и если он совпадает с номером данного канала, по следующему фронту синхросигнала зафиксируется запрос на прерывание, поступающий на соответствующий вход запроса на обслуживание прерывания секвенсера. ВыходERRORCOM# сигнала ошибки в команде активизируется в случае, если указан недопустимый номер команды. Кроме того, запрещено при выполнении ввода-вывода начинать новый ввод-вывод (в микрокоманде есть бит блокировкиENALL#). При пассивном уровнеENALL# при поступлении команды, запрещённой в данный момент, активизируется сигнал ошибки в команде. Вход разрешения прерывания управляется битом микрокоманды, в микроалгоритме могут быть участки, где прерывания микропрограммы необходимо запретить. При обработке прерывания по новой команде адрес обработчика в МПП выбирается из ПНАК по следующему принципу: если не выставлен сигнал ошибки в команде, адрес в ПНАК определяется по коду операции, иначе на вход ПНАК подаётся специальный код (0xF), и из ПНАК выбирается адрес обработчика ошибочной команды. СПВВ извещает процессор об ошибочной команде прерыванием.

Если пришла команда «Начать ввод-вывод», начинает работать соответствующий алгоритм, обеспечивающий чтение из памяти АСК. Адрес АСК хранится в одной из ячеек ППЗУ CONSTMEM. В разрядах микрокоманды указывается адрес вCONSTMEMадреса АСК, адрес АСК загружается вRGAD, откуда поступает на шинуAD. АСК принимается в РгАУСК. По адресу, поступившему в РгАУСК, из памяти считывается первое УСК программы канала в РгПУСК. В следующем такте УСК из РгПУСК загружается в РгКОУ, СчТД и РгТАД. Если не задано УСК перехода в канале, значение адреса в РгАУСК увеличивается на 4 (длина слова в байтах) для последовательной адресации УСК. Если УСК является командой перехода в канале, адрес следующего УСК загружается из старшего 32-разрядного слова РгПУСК. В процессе ввода-вывода при достижении СчТД заданного значения (32), осуществляется предварительная выборка УСК в РгПУСК. После выполнения очередной команды может быть сформировано прерывание (при установленном указателе ПР=1). Ввод-вывод заканчивается выполнением текущего УСК, если указатели ЦД=0 и ЦО=0. После завершения выполнения последнего УСК СПВВ посылает в процессор запрос прерывания.

Соседние файлы в папке doc92