- •Цель курсового проекта
- •Задание на курсовой проект
- •Общие исходные данные
- •Индивидуальные исходные данные
- •Разработка структурной схемы эвм
- •Центральный процессор
- •Кэш команд
- •Адресный сопроцессор
- •Основная память
- •Система прерывания программ
- •Система приоритетного арбитража системной шины
- •Система ввода-вывода
- •Клавиатура
- •Управляющая информация для операций ввода-вывода
- •Разработка блока чтения команд и управления
- •Заключение
Управляющая информация для операций ввода-вывода
В управлении вводом-выводом используется следующая управляющая информация:
команды ввода-вывода;
адресное слово канала (АСК);
управляющие слова канала;
слово состояния канала;
байт состояния и байт уточнённого состояния ПУ.
Формат команды ввода-вывода приведён на рис. 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. Формат слова состояния канала
Разработка блока чтения команд и управления
Функциональная схема блока 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. После завершения выполнения последнего УСК СПВВ посылает в процессор запрос прерывания.