Содержание
Введение
Техническии задание для разработки
Анализ исходных данных
Выбор элементной базы
Разработка программного обеспечения
Тест ПЗУ
Алгоритм вычисления функции
Разработка структурной схемы
Проектирование функциональной схемы
Оценка быстродействия системы
Список использованной литературы
Приложение. Листинг программы
Курсовая работа выполняется с целью закрепления знаний, полученных из курса "Организация ЭВМ и систем", а также, основываясь на ранее изученных дисциплинах таких, как "Информатика", "Языки программирования" и "Электротехника и электроника", помогает их лучшему восприятию.
Основными задачами работы является:
практическое овладение методикой проектирования вычислительной системы на основе современной элементной базы, технических средств вычислительной техники, а также теории организации ЭВМ и систем;
оценка параметров проектируемой системы и повышение качества проектирования;.
приобретение практических навыков оформления и выпуска конструкторской документации в соответствии с ГОСТ.
В курсовом проекте проектируется вычислительная система, предназначенная для реализации заданного алгоритма обработки входного аналогового сигнала и структурно состоящая из устройств:
персональной ЭВМ (ПЭВМ) типа IBM PC/AT-386 и выше;
устройства ввода (УВ), связанного с ПЭВМ через стандартный интерфейс.
Устройство ввода состоит из блока цифровой программной обработки и интерфейсного блока, работающих одновременно и обеспечивающих обработку и ввод информации в ПЭВМ.
Разрабатываемая система должна функционировать в режиме реального времени, т.е. запаздывание потока результатов от потока входной информации должно быть ограничено.
Исходные данные для процесса проектирования описаны ниже:
Структуру блока цифровой обработки: однопроцессорная система на базе комплекта К1810 в минимальном режиме;
Вид функции, выполняемой блоком цифровой обработки: остаток от деления произведения двух последних принятых входных значений на предыдущее;
Тип синхронизации: с синхронизацией по готовности данных;
Тип стандартного интерфейса для связи УВ и ПЭВМ: параллельный порт.
Анализ задания позволяет сделать следующие предварительные выводы:
1. Максимальная разрядность интерфейса системной шины равна 16. Данное обстоятельство обуславливает выбрать разрядность входного и выходного слова 16 бит;
2. Так как задан комплект К1810 в минимальном режиме, то потребуется использовать следующие микросхемы: генератор тактовых импульсов К1810ГФ84, два буферных регистра К1810ИР82, два двунаправленных шинных формирователя К1810ВА86;
3. Цифровой сигнал 16-ти битовый, поэтому необходимо использовать два буферных регистра, каждый разрядностью 8 бит, необходимые для разделения входного сигнала на 16 разрядные слова. Если регистры не использовать, то большая часть данных будет потеряна;
4. Проанализировав функцию, ясно что в при ее выполнении можно обойтись внутренними регистрами микропроцессора, поэтому нет необходимости использовать ОЗУ. Вся программа хранится в ПЗУ;
5. В качестве параллельного порта будет использовать микросхему К580ВВ55, у которой 3 8-разрядных порта, для вывода данных будем использовать 2 из них, то есть обеспечим передачу слова;
6. В параллельном порте будет использовать бит 0 в порте С в качестве бита готовности данных, по которым ПЭВМ определит, что выходные данные поступили в порты А и В.
Анализ исходных данных позволяет выбрать элементы, назначение и описание выводов которых приведено в следующем пункте курсовой работы.
Микросхема К1810ВМ86
Микропроцессор К1810ВМ86 представляет собой однокристальный 16-битовый МП работающий в данной вычислительной системе в минимальном режиме. Этот модуль производит чтение ПЗУ, а также чтение и запись в порты ввода-вывода. Условное графическое обозначение МП К1810ВМ86 приведено на рис.2. Опишем его выводы, используемые при проектировании системы.
AD15-AD0 - мультиплексная двунаправленная шина адреса/данных, по которой с разделением во времени передаются адресная информация и данные;
- разрешение старшего байта, активный сигнал означает, что по старшей половине AD15-AD8 передаются 8 - битовые данные. Он защелкивается во внешнем регистре адреса и используется как дополнительный адресный выход, определяющий доступ к старшему банку памяти. Совместное использование и младшей линии адреса А0 для дешифрации адресов позволяет осуществлять передачу слов или отдельных байтов по шине АD;
ALE - строб адреса (разрешение защелкивания адреса), выдается в начале каждого цикла шины и используется для записи адреса в регистр - защелку, т.е. для демультиплексирования шины AD;
- строб данных (разрешение передачи данных). Выдается в циклах чтения, записи и разрешения входа шинных формирователей;
- чтение, идентифицирует выполнения цикла чтения из ЗУ или внешнего устройства (в зависимости от значения сигнала ). Указывает этим устройствам на необходимость выдачи данных на шину;
- запись, указывает на выполнение цикла записи ЗУ или ВУ и сопровождает данные, выдаваемые микропроцессором на шину;
- является признаком обращения к ЗУ (=1) или ВУ и используется для разделения адресного пространства памяти и ввода/вывода. =0 появляется только при выполнении команд ввода (IN) и вывода (OUT);
- передача/прием данных, определяет направление передачи по шине AD: =1 - запись данных из ЗУ или ВУ в МП. Предназначен для управления шинными формирователями и действует на протяжении всего цикла шины, как и сигнал ;
READY - готовность, указывает на то, что адресуемое в данном цикле устройство готово к обмену данными. Если устройство не готово к взаимодействию с МП, оно выдает сигнал READY=0, и МП переходит в состояние ожидания. В этом случае между тактами Т3 и Т4 цикла шины появляется необходимое число тактов ожидания TW. После установки сигнала READY=1 МП выходит из состояния ожидания и возобновляет работу;
CLK - тактовая синхронизация (тактирование). Сигнал синхронизации от внешнего генератора тактовых импульсов, предназначен для синхронизации МП. Используется серия тактовых импульсов CLK с периодом повторения T, равным 200 - 500 нс.;
RESET - сброс, переводит МП в определенное начальное состояние, в котором сброшены сегментные регистры (кроме CS, все разряды которого устанавливаются в единичное состояние), указатель команд IP, все флаги, регистры очереди команд и все внутренние триггеры в устройстве управления. Сигнал RESET не влияет на состояние общих регистров, которые устанавливаются в начальное состояние программным путем. На время действия сигнала RESET все выходы, имеющие три состояния, становятся пассивными. Минимальная продолжительность сигнала RESET при первом включении МП составляет 50 мкс., а при повторном запуске - четыре такта синхронизации. После снятия сигнала RESET работа МП возобновляется из начального состояния;
- минимальный/максимальный режим. Сигнал на этот входе определяет режимы работы МП: 1 - минимальный, 0 - максимальный. Используемый режим в работе минимальный, поэтому на него нужно подавать напряжение.
Микросхема К1810ИР82.
Буферный регистр представляет собой 8 - разрядный параллельный регистр с тристабильными выходами и используется для организации адресных защелок и портов ввода - ввода. Графическое обозначение приведено на рис.3. Опишем назначение выводов этой микросхемы.
DI7-DI0 - линии входных данных;
DO7-DO0 - линии выходных данных;
STB - вход стробирующего сигнала, при сигнале высокого уровня на нем состояние входных линий DI7-DI0 передается на выходные линии DO7-DO0. Защелкивание в информационных триггерах осуществляется при переходе сигнала STB от высокого уровня к низкому;
- разрешение выдачи данных. При = 0 буфер отпирается, при = 1 он устанавливается в Z - состояние.
Микросхема К1810ВА86.
Шинный формирователь представляет 8 - разрядный параллельный приемопередатчик с тристабильными выходами и используется как буферное устройство шины данных в микропроцессорных системах. Графическое изображение приведено на рис.4. Опишем выводы микросхемы.
DI7-DI0 - вход/выход линий данных. В зависимости от состояния входа Т они могут быть входными, если на Т сигнал высокого уровня, и выходными, если на Т сигнал низкого уровня;
DО7-DО0 - вход/выход линий данных. Они являются входными, если на Т сигнал низкого уровня, и выходными, если на Т сигнал высокого уровня;
Т - вход управления направлением передачи. При Т=0 осуществляется передача от DO к DI, при Т=1 - от DI к DO;
- вход разрешения передачи. При =0 снимается Z - состояние с выхода формирователя, выбранного по входу Т.
Микросхема К1810ГФ84.
Рис.4. Шинный формирователь
Генератор тактовых импульсов предназначен для управления ЦП К1810ВМ86 и периферийными устройствами. Графическое изображение микросхемы приведено на рис.5. Опишем используемые ее выводы.
Х1 и Х2 - выводы для подключения кварцевого резонатора;
- вход для подключение RC - цепи, обеспечивающий автоматическое формирование сигнала сброса при включении источника питания;
- вход используется для выбора задающего генератора. При =0 соответствует внутреннему генератору (кварцевый резонатор), а при =1 - внешнему генератору импульсов, подключаемый на вход ЕFI;
RDY1 - вход сигнала готовности от устройств, подключаемых к каналу системы;
- вход разрешения адресации для сигнала готовности RDY1;
СLK - выход тактовых импульсов, их частота равна 5Мгц и образуется делением частоты задающего генератора на 3 (его частота 15Мгц);
READY - выход сигнала готовности, синхронизированный с задним фронтом сигнала CLK. Он позволяет обеспечить сопряжение во времени работы МП с работой внешних устройств, имеющих меньшее быстродействие;
RESET - выход сигнала сброса, синхронизированного с задним фронтом сигнала СLK. После поступления сигнала RESET МП прекращает работу и остается в режиме ожидания до окончания этого импульса. Затем начинается процесс инициализации МП, который длится 10 тактов.
Микросхема К580ВВ55.
БИС параллельного интерфейса предназначена для организации ввода/вывода параллельной информации различного формата. Структурная схема микросхемы приведена на Рис.6. Опишем используемые ее выводы.
D7-D0 - вход/выход данных;
- чтение. Низкий уровень сигнала разрешает считывание информации из регистра, адресуемого по входам А0, А1 на шину D7. D0;
- запись. Низкий уровень сигнала разрешает запись информации с шины D7. D0 в порт микросхемы, адресуемый по входам А0 и А1;
A0 и A1 - входы для адресации внутренних регистров.00 - порт А, 01 - порт В, 10 - порт С, 11 - порт управляющего слова, которое устанавливает работу микросхемы в один из трех режимов;
- выбор микросхемы, низкий уровень подаваемого сигнала подключает ее к системной шине;
RS - сброс, высокий уровень сигнала обнуляет регистр управляющего слова и устанавливает все порты в режим ввода;
РА7-РА0 - вход/выход канала А;
РВ7-РВ0 - вход/выход канала В;
РС7-РС0 - вход/выход канала С.
Микросхема КР556РТ17.
Рис.6. Параллельный порт
ППЗУ представляет собой микросхему, предназначенную для хранения программы, которую пользователь может самостоятельно записать в нее. Операция программирования заключается в разрушении плавких перемычек на поверхности кристалла импульсами тока. Матрица до программирования, то есть в исходном состоянии, содержит однородный массив проводящих перемычек, соединяющих строки и столбцы во всех точках их пересечений. Программу в ППЗУ мы записывать не будет, предполагаем, что она уже находится там. Эта микросхема содержит 512 байт, а время выборки адреса 50нс, что на много меньше 200нс (время одного такта). Микросхема представлена на рис.7. Опишем используемые выводы.
А0-А8 - входы, по которым выбирается адрес в микросхеме ППЗУ;
DО0-DО7 - выходы, по которым передаются данные, содержащиеся в заданной ячейке памяти;
СS1, CS2, и - выводы выбора микросхемы, которые свидетельствует и одновременно и о считывании информации из нее. Каждый из них должен иметь соответствующее активное состояние, то есть CS1=CS2=1 и ==0. Нарушение этого условия хотя бы для одного из входов исключает доступ к накопителю для считывания. В этом случае микросхема будет находится в состоянии хранения, в котором выходы принимают Z - состояние.
Программа, находящаяся в ПЗУ, состоит из следующих блоков: непосредственное тестирование ПЗУ, обработка заданной функции и программирование параллельного порта. Блок - схема программы представлена на рисунке 8. Далее более детально будут рассмотрен каждый из блоков.
Рис.7. Программируемое ПЗУ
Тестирование ПЗУ заключается в суммировании содержимого всех мнемокодов программы, иными словами значений, находящихся по адреса ПЗУ. Каждый адрес содержит 16 - разрядный код, который соответствует определенной команде процессора. Вначале устанавливается начальный адрес кода программы. Перебор всех адресов делается в цикле, в котором проверяется достигнут ли адрес последний ячейки памяти, если это не так, то цикл вновь возобновляется. В противном случае, если достигнута последняя ячейка памяти, полученный результат суммы сравнивается со значением находящимся в определенном адресе ПЗУ за пределами основной программы. Это число должно быть получено ранее, путем ручного подсчета или же самой программой, которая тестирует ПЗУ. Это производится несколько раз для правильности результата, так как от него в дальнейшем будет зависеть: программа продолжит свое выполнение или же перейдет на участок, в которой будет находиться команда останова. Если тестирование ПЗУ закончилось не успешно, то до останова микропроцессора, он посылает сигнал в порт вывода - параллельный порт, в котором устанавливает значение, свидетельствующее об ошибки.
Здесь приводим участок кода программы, тестирующей ПЗУ.
movsi, ADDR_OF_BEGINING_OF_ROM
movax, 0
loop:
add ax, [si]
incsi
cmpsi, ADDR_OF_END_OF_ROM;
jneloop
cmpax, CONTROL_SUM_OF__ROM
jeALL_GOOD
jmpERROR_ROM
ALL_GOOD:
; участок кода реализуемой функции
ERROR_ROM:
mov al,02h
out 02h,al
hlt
Последние три строчки означают следующее: посылается во второй бит порта 2 значение 1 (это порт С параллельного порта речь о котором пойдет ниже), которое свидетельствует об ошибке в программе и выполняется команда останова. Она необходима для остановки всей системы и анализа ее состояния. Это позволит отследить ошибку в системе.
Заданная функция представляет собой остаток от умножение двух последующих значений и деление полученного результата на предыдущее полученное значение из порта ввода. Результат выводим в порт вывода - параллельный порт.
Входные данные представляют собой бесконечную цепочку, обработка которой заканчивается в случае останова или сброса микропроцессора. Программа обрабатывает три последовательных значения взятых из цепочки, после вывода результата первое полученное значение выбрасывается, а два других перезаписываются в регистры, в которых находились полученные на один шаг ранее значения. Последнее из трех входных значений вводим из порта. И так действия продолжаются до бесконечности.
На вход подаются из порта ввода с адресом 04h 16 - разрядные числа, которые записываются в аккумулятор и после этого из него пересылаются в другой регистр, это делается потому что, данные из порта и в порт можно посылать и получать, используя только аккумулятор. Чтобы ранее полученные данные не были потеряны для этого, необходимо сохранять их в другом регистре. После ввода данных непосредственно происходит их обработка, а именно умножение и деление. При делении нельзя допустить, чтобы делитель был равен нулю, для этого мы проверяем его содержимое на нуль. Проверку эту целесообразнее проводить не перед непосредственным делением, а как только мы получили значение, которое будет делителем. В случае, если это число окажется нулем, то переходим на тот участок программы, в котором значения перезаписываются в регистры, содержащие предшествующие значения.
Особенностью команды умножения MUL является то, что множимое непосредственно не указывается, оно находится в аккумуляторе. Результат операции будет находиться в двух регистрах DX и AX соответственно старшая и младшая часть 32 - разрядного результат. После этого производим деление: в команде DIV непосредственно указывается только один операнд - это делитель, а делимое находится в регистрах AX и DX. Результат помещается в AX - частное и в DX - остаток, который будет являться результатом функции. Но это еще не конец программы, так как необходимо полученный результат переслать в порт вывода. Для этого помещаем его в аккумулятор, младшую часть которого записываем в порт 00, а старшую часть вначале пересылаем в младшую, а затем выводим в порт 01 параллельного интерфейса.
Программирование параллельного порта.
Рассмотрим внутреннюю структуру параллельного порта. В состав входят: двунаправленный 8 - разрядный буфер данных; блок управлением записью чтением и три восьми разрядных канала ввода/вывода - порты А, В и С для обмена информации с внешними устройствами, адреса портов соответственно 00, 01 и 10. Режим работы каждого из каналов программируется с помощью управляющего слова. Управляющее слово может задать один из трех режимов: основной режим ввода/вывода (режим 0), стробируемый ввод/вывод (режим 1) и режим двунаправленной передачи информации (режим 2). Канал А может работать в любом из трех режимов, канал В - в режимах 0 и 1. Канал С может быть использован для передачи данных только в режиме 0.
Для вывода в параллельный порт должны быть использованы три порта, два из них для передачи данных - результата функции и один порт для установки бита готовности данных и определение сбоя в ПЗУ. Будет использовать режим 0, который применяется при синхронном обмене или при программной организации асинхронного обмена. Микросхема параллельного порта в этом режиме может рассматриваться как устройство, состоящее из четырех портов: 2 - восьмиразрядных и 2 - четырехразрядных, независимо настраиваемых на ввод или вывод.
Разряд 0 порта С устанавливается в 1 как только данные поступили в параллельный порт (порты А и В). Этот бит сбрасывается ПЭВМ, когда она прочитает данные из порта, в нуль. Это новое значение должен считать микропроцессор и только после этого начать обрабатывать новые значения. Механизм такой проверки реализуется следующим способом: организуется цикл, работа которого заключается в том, что каждый раз значение из порта считывается в аккумулятор и его содержимое проверяется на нуль. Такая проверка должна занять не более одного прохода цикла, потому что ПЭВМ работает на много быстрее, чем устройство ввода. Также в порте С используется разряд 1, который свидетельствует о том, что произошел сбой в ПЗУ. Обнулим содержимое порта С вначале программы (после установки режима), чтобы показать его начальное состояние и чтобы не возникло ситуации: ошибка в ПЗУ и данные готовы.
Для работы с параллельным портом необходимо вначале его проинициализировать, то есть задать ему режим работы. За это отвечает управляющее слово, к которому можно обратится в пространстве ввода/вывода по адресу 03h. В седьмой разряд запишем 1 (установка режимов каналов), а в остальные разряды запишем нули, следовательно параллельный порт будет работать в режиме 0 и все порты будут настроены на вывод информации.
Сама программа с необходимыми пояснениями представлена в Приложении. Там же описаны такты и размер каждой выполняемой команды. Первое значение необходимо для построения временных диаграмм работы системы, а второе - для подсчета всего объема программы.
Этот этап является переходной ступенью между анализом проектируемой системы и соединением ее элементов между собой на функциональной схеме. В ходе анализа задания, определили какую элементную базу будет использовать, теперь определим основные моменты соединения элементов.
Микропроцессорное устройство состоит из самого микропроцессора, генератора тактовых импульсов, а также из буферных регистров и шинных формирователей. Последние два элемента используются для демультиплексирования шины адреса/данных. Здесь рассматриваются все эти элементы как один блок, из-за того что при построение любой системы на базе К1810 эти элементы всегда должны в него входить. Системную магистраль разделим на шину адреса, шину данных и шину управления. К ним подключим наш обобщенный блок, а также ПЗУ, порт ввода и вывода, которые необходимо присоединить при помощи дешифратора адреса. Дешифратор необходим для точного выбора микросхемы, чтобы не было путаницы при обращении в пространстве ввода/вывода и пространстве памяти, которые друг от друга отделены. Непосредственное взаимодействие используемых блоков с шинами показано с помощью стрелок, направленных к и/или от соответствующим шинам. Структурная схема устройства ввода приведена на рисунке 9.
Теперь мы пришли к самому интересному этапу разработки системы - непосредственное соединение выводов элементов. Опишем наиболее интересные аспекты проектирования системы, функциональная схема которой выполнена как отдельный чертеж на формате А2. Но вначале рассмотрим работу системы после ее включения. По окончанию сигнала RESET, первая команда начинает выбираться из ячейки памяти с физическим адресом FFFF0h. И поэтому сюда необходимо поставить команду перехода JMP, которая перейдет по метки на начальный адрес программы, находящейся в ПЗУ. Адресом начала программы для микропроцессора будет 11111000000000, так как используем в системе только выводы AD14. AD0. А начало программы будет находится в ПЗУ начиная с адреса 000000000. Вся программа занимает 80 байт, следовательно можно было взять ПЗУ меньшего объема, но тогда необходимо подключать их большее число, потому что надо обеспечивать пересылку байта. ПЗУ представлено двумя блоками, для того чтобы каждое слово передавалось за один цикл шины, слова располагаются только с четных адресов. Использованием сигналов и А0, приводит к следующим пересылкам: 00 - пересылается слово, 10 - младший байт, 01 - старший байт, 11 - устройство не выбрано. Остальные адреса кроме и А0, и адресов, определяющих адрес внутри ПЗУ, участвуют в выборе микросхемы. Выбор микросхемы памяти осуществляется по 4 - м выводам, два из которых имеют активный уровень 0 и два других - 1. Первые из них заземлим, а на вторые подадим сигнал с логики адресов, чтобы при обращении к памяти там была единица. Вернемся к линии RESET к которой также подключен параллельный порт. Этот сигнал обнуляет управляющее слово и устанавливает все порты в режим ввода.
Рассмотрим формирование управляющих сигналов: запись в порт (), чтение порта () и чтение памяти (), которые непосредственно участвуют либо в разрешении выбора микросхемы, либо подаются на соответствующие выводы микросхемы, как для К580ВВ55 (для входов и ). Сигналы формируются на основании 3 - х выводов микропроцессора , и , которые вырабатываются в зависимости от того, происходит обращение к порту или памяти.
Порты ввода и вывода подключаются аналогично ПЗУ. У них существует свой единственный адрес, по которому происходит обращение к микросхеме. В качестве порта ввода используется две микросхемы К1810ИР82, которые обеспечивают передачу 16 - разрядных данных. Помимо поступления на них входных данных, также подается стробирующий сигнал, который разрешает запись данных в микросхему. Он подается как входное значение для устройства ввода для того, чтобы микропроцессор успевал обрабатывать данные, то есть возникновении ситуации: запись данных вместо других, еще не обработанных, свелась к нулю.
Более простое подключение, относительно выбора порта происходит в микросхеме К580ВВ55. Так как у нее уже есть два входа А0 и А1, по которым происходит выбор порта параллельного интерфейса. Передача данных и сигнала их готовности обеспечивается портами А, В и С этой микросхемы.
В заключении несколько слов о генераторе тактовых импульсов. Если быстродействие всех внешних устройств системы согласовано с быстродействием МП и нет необходимости в режиме ожидания, то входы готовности подключаются к источнику питания, а входы разрешения анализа заземляются. При этом сигнал READY вырабатывается схемой синхронизации готовности под действием внутреннего сигнала синхронизации СLK.
В ряде случаев, особенно при разработке программного обеспечения для МПС реального времени, важным является время выполнения той или иной программы, поэтому для каждого формата команды указывается число тактов N, требуемых для ее выполнения. Количество тактов для каждой команды приведено в приложении. Всю программу можно разбить на следующие части: инициализация системы (тест ПЗУ и установка параллельного порта), ввод данных в устройство ввода, их обработка, вывод данных и проверка готовности (ПЭВМ считал данные из порта вывода или нет).
В алгоритме используется операция деления, в которой делитель не должен быть равен нулю, из-за этого происходит пропуск этих данных и они снова вводятся. Поэтому быстродействие системы будет отличаться из-за входных значений. Также время ввод первых трех значений и значений принятых в середине работы будет отлично, так как используется в первом случае три операции вывода из порта (IN), а во втором - только одна.
Возможна также ситуация, когда ПЭВМ долгое время не будет забирать данные из порта вывода. Цикл проверки продлится большое время, что говорить о быстродействии системы будет трудно. Ситуация такая не должна возникнуть, так как ПЭВМ намного быстрее работает, чем устройство ввода. Таким образом достаточно будет одной проверки.
Наиболее интересные варианты представлены в виде временных диаграмм на рисунке 10. Но вначале надо определить, сколько времени занимает один такт. Частота такта равна 5Мгц, отсюда следует, что его продолжительность 200нс. Значит, чтобы подсчитать время, затраченное на обработку участка кода программы необходимо сложить все такты каждой из микроопераций и полученное значение умножить на 200нс. Количество тактов, за которое исполняется команда приведено в приложении (напротив каждой команды).