Организация и функционирование ЭВМ\Обучение проектированию устройств в HLCCAD\Обучение проектированию устройств в HLCCAD\
  • Введение
  • 1 Начальные сведения
  • 2 Приёмы проектирования
  • 3 Условия задач и их решения с пояснениями
  • 4 Характерные ошибки проектирования
  • Заключение

    Введение


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

    Цифровые микросхемы первоначально разрабатывались для построения электронно-вычислительных машин, получивших в дальнейшем название компьютеры. Первое их предназначение было заменить человека при выполнении рутинной работы. Сейчас, наверное, никто и не вспомнит, что слово калькулятор ещё каких-нибудь шестьдесят лет назад обозначало не маленький карманный прибор, а профессию большого числа людей, которые занимались расчётами по конкретным математическим формулам.

    Однако вскоре после начала массового производства цифровых микросхем выяснилось, что они оказались очень удобны для управления какими либо объектами. Управляемая схема может обычно находиться в двух состояниях. Например: схема может быть либо включена, либо выключена, светодиод может либо гореть, либо не гореть, соединение в телефонной станции может быть или не быть, радиостанция может находиться в режиме передачи или в режиме приёма. В результате цифровые микросхемы практически полностью вытеснили применявшиеся ещё с девятнадцатого века для управления приборами электромагнитные реле и перфокарты.

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

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


    1 Начальные сведения



    1.1 Создание нового проекта

    Специально для тех, кто видит HLCCAD впервые, а такие, несомненно, есть, здесь я расскажу, как создать проект с нуля.

    Итак, шаг номер один! Необходимо создать новый проект. Без этого ну никак. Я надеюсь, запускать HLCCAD научились все, и я не буду объяснять, как это делается. На первой картинке показано, что надо нажать, чтобы начать создавать новый проект (рис. 1.1).


    Рис.1.1. Начальная стадия создания нового проекта

    После клика на выпадающем меню в месте с надписью "Новый проект", должно появиться окошко, внешний вид которого показан на второй картинке (рис. 1.2). Большинство первокурсников "погорели" на том, что, видя это окошко, быстренько ввели произвольное имя файла, добавили новый проект и проектировали дальше, ни капельки не подозревая, что уже есть ошибка. Так что же надо вводить? В условии задачи в правом верхнем углу есть надпись. К примеру, в первой задаче была такая надпись: "Имя HLCCAD проекта:Logic.prd". Вот и надо было ввести слово "Logic", а только потом добавлять проект.


    Рис.1.2. Вводится имя проекта

    Шаг номер два! Нужно добавить новое устройство. Как же это делается? Наводим указатель мышки на уже созданный проект в инспекторе проектов и кликаем правой клавишей мыши. Тут выпадает меню (рис. 1.3). Если всё сделано правильно, то должно получиться что-то вроде этого.


    Рис.1.3. Создание нового устройства

    В этом меню надо нажать на строчку с надписью "Новое устройство". Появится маленькое окошко (рис. 1.4).


    Рис.1.4. Вводится имя устройства

    Опять же! Никогда не спешите! В это маленькое окошко вводится название устройства не с потолка, а с условия задачи. Каким должно быть имя входного устройства написано в правом верхнем углу условия задачи. В первой задаче написано так: "Входное устройство: Logic". Вводите Logic и кликаете ОК.

    Всё! Здесь больше делать ничего не надо. Остаётся только спроектировать требуемое устройство и отослать его.



    1.2 Изменение размерности

    Иногда студент, проектирующий устройство в HLCCAD-е, ищет определённый элемент с определённой размерностью. Но, обыскав всё что можно и всё что нельзя, такого элемента он не находит. Следовательно, эту задачу он прекращает делать и приступает к следующей. И очень зря! Здесь я расскажу, как надо правильно менять размерности входных и выходных контактов. Данные правила распространяются только на элементы библиотеки Standard.prj. Итак, всего существует два способа.

    1 способ

    Пусть, например, есть умножитель (рис. 1.5) размерности восемь (то есть на входе по 8 бит, а на выходе 16 бит).


    Рис.1.5. Умножитель

    Изменим размерность на четыре (то есть на входе поставим по 4 бита, а на выходе 8). Сперва нужно два раза кликнуть левой клавишей мыши в самом центре умножителя. После этого появится корпус устройства. Проверить, всё ли до сих пор сделано правильно можно следующим образом: попробовать передвинуть с помощью мыши синие буквы "MUL" (рис. 1.6).


    Рис.1.6. Синие буквы "MUL" передвинуты

    Если они двигаются, то пока всё правильно, иначе что-то Вы сделали не то. Будем считать, что всё правильно. Далее кликаем два раза на любом контакте и в появившемся окошке "Параметры контакта" меняем размерность на нужную (рис. 1.7).


    Рис.1.7. Изменение размерности при помощи параметров контакта

    Сохраняем изменения на корпусе и переходим на схему. Там Вы увидите умножитель с изменённой размерностью (рис. 1.8).


    Рис.1.8. Умножитель с изменённой размерностью

    2 способ

    Пусть, например, есть сумматор размерности восемь (то есть на входах и выходе по 8 бит). Изменим размерность на четыре (то есть на входах и выходе поставим по 4 бита).


    Рис.1.9. Изменение размерности сумматора
    при помощи внешнего редактора

    Наводим курсор на сам сумматор, кликаем правой клавишей мыши, в выпадающем меня выбираем строку с надписью "Внешний редактор" (рис. 1.9).


    Рис.1.10. Изменение размерности сумматора

    Указываем нужную размерность (рис. 1.11), ...


    Рис.1.11. Указание размерности

    ... кликаем ОК ...


    Рис.1.12. Сумматор с изменённой размерностью

    ... и продолжаем радоваться жизни.



    1.3 Логические элементы (And, Or, Xor, Not)

    В последнее время мне неоднократно доводилось наблюдать, как некоторые студенты путают визуально похожие, но отличающиеся таблицами истинности, логические элементы. В связи с этим в этом сообщении я попытаюсь подробно описать каждый логический элемент. Для решения задач, которые предлагаются на контрольных работах, достаточно понять принцип работы только четырёх логических элементов: отрицание – NOT, логическое сложение – OR, логическое умножение – AND и исключающее ИЛИ – XOR.

    1.3.1.Отрицание – NOT

    Таблица истинности "отрицания" следующая (рис. 1.13):


    Рис.1.13. Таблица истинности "отрицания"

    При инверсии 0 заменяется на 1, а 1 - на 0. В HLCCAD-е элемент NOT обозначается единичкой ("1"), а на выходе стоит инвертор (маленький кружок). На рисунке (рис. 1.14) показан элемент NOT размерности один бит:


    Рис.1.14. Элемент NOT размерности один бит

    А это уже восьмибитный элемент NOT (рис. 1.15). Принцип его работы заключается в побитном инвертировании всего числа. Пример приведён выше (рис. 1.13).


    Рис.1.15. Восьмибитный элемент NOT

    Вот ещё несколько примеров (рис. 1.16):


    Рис.1.16. Примеры элемента NOT

    Как же отличить NOT от других логических элементов? Очень просто! Нужно дважды кликнуть по самому элементу и посмотреть имя корпуса (рис. 1.17).


    Рис.1.17. Редактор устройства

    В данном случае, как и предполагалось, перед нами элемент NOT.

    1.3.2.Логическое сложение – OR

    Таблица истинности логического сложения (рис. 1.18):


    Рис.1.18. Таблица истинности логического сложения

    В HLCCAD-е элемент OR, так же как и элемент NOT обозначается единичкой ("1"). Внешне эти элементы очень похожи, но, и таблицы истинности, и имена корпусов совершенно разные (рис. 1.19).


    Рис.1.19. Редактор устройства

    Ниже показаны различные модификации элемента OR (рис. 1.20).


    Рис.1.20. Модификации элемента OR

    Примеры с числовыми значениями (рис. 1.21):


    Рис.1.21. Примеры элемента OR

    Первые два элемента работают по принципу: результат равен 0, если все слагаемые равны нулю, в остальных случаях результат равен 1. Третий элемент работает также как и первые два, просто у него "шинный" вход. А вот последний элемент, у которого один контакт восьмибитный, а другой – однобитный – делает логическое OR каждого из верхних битов с нижним и разрядность на выходе не один, как у всех остальных элементов, а равна разрядности входного верхнего контакта.

    1.3.3.Логическое умножение – AND

    Таблица истинности логического умножения (рис. 1.22)


    Рис.1.22. Таблица истинности логического умножения

    Элемент AND обозначается значком &. Названий у этого значка очень много: и амперсант, и M&M's ...

    Вот несколько примеров с элементом AND (рис. 1.23):


    Рис.1.23. Примеры элемента AND

    Первые два элемента работают по принципу: результат равен 1, если все слагаемые равны единице, в остальных случаях результат равен 0. Третий элемент работает также как и первые два, просто у него "шинный" вход. А вот последний элемент, у которого один контакт восьмибитный, а другой - однобитный - делает логическое AND каждого из верхних битов с нижним и разрядность на выходе не один, как у всех остальных элементов, а равна разрядности входного верхнего контакта.

    1.3.4.Исключающее ИЛИ – XOR

    Таблица истинности исключающего ИЛИ (рис. 1.24):


    Рис.1.24. Таблица истинности исключающего ИЛИ

    Элемент XOR обозначается значком "+". Далее приводится несколько примеров с элементом XOR (рис. 1.25):


    Рис.1.25. Примеры элемента XOR

    Первый элемент работает так: результат равен 1, если два числа на входах не равны между собой. Если же они равны, то результат равен 0. У второго элемента три входа, поэтому операцию, описанную выше для элемента с двумя входами, необходимо проделать дважды. Третий элемент работает также как и первые два, просто у него "шинный" вход. А вот последний элемент, у которого один контакт восьмибитный, а другой – однобитный – делает исключающее ИЛИ каждого из верхних битов с нижним и разрядность на выходе не один, как у всех остальных элементов, а равна разрядности входного верхнего контакта.



    1.4 Константы

    Константа – это практически то же самое что и переменная, но объявляется и определяется она один раз, то есть не изменяется по ходу программы, и всегда находится в глобальной области видимости. В HLCCAD есть две фиксированные константы: ноль и единица. Каждая из этих констант имеет единственный выход "O", который может иметь произвольную размерность (рис. 1.26).


    Рис.1.26. Константы

    Размерность изменяется точно так же, как и в случае с сумматором или умножителем (описано выше). Ниже приводятся простейшие примеры использования этих констант (рис. 1.27):


    Рис.1.27. Пример использования констант

    Более универсальным является устройство с названием Const. Месторасположение этого устройства в библиотеке Standard Devices показано на следующей картинке (рис. 1.28):


    Рис.1.28. Месторасположение библиотеки Standard Devices

    Универсальность устройства Const заключается в том, что на выходе может быть любое число в любой системе счисления. Устройство устанавливает на выходе значение, указанное в параметре устройства – "Value". Для установки значения в произвольной системе счисления нужно: кликнуть правой клавишей мыши по копусу устройства и в выпадающем меню выбрать "Внешний редактор". Появится такое окошко (рис. 1.29):


    Рис.1.29. Установка значения

    Число 10 в записи 10#123# означает систему счисления, в которой записано число 123. Таким образом, изменяя эти два числа на нужные, можно создать любую константу в любой системе счисления.



    1.5 Как подключить тест

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

    Итак, задача не прошла. Берём тест обычным образом, а именно:

    1. Заходим в протокол проверки.
    2. Кликаем на пересечении столбца, с названием "Результат", и строки, в которой значится неправильно решённая задача.
    3. Затем кликаем по ссылке "Взять тест".
    4. Выделяем тест и копируем (рис. 1.30).


    Рис.1.30. Копируем тест

    Далее вся работа будет производиться исключительно в самом проекте. Открыв его, нужно кликнуть правой кнопкой мыши по надписи "Редактор теста" (рис. 1.31).


    Рис.1.31. Открытие редактора теста

    Тесты ведь где-то должны храниться. Поэтому сперва надо сохранить файл с будущими тестами (расширение файла tst). После этого откроется чёрный экран (рис. 1.32) ...


    Рис.1.32. Редактор теста

    ... куда и надо вставить скопированные ранее тесты (рис. 1.33).


    Рис.1.33. Редактор теста вместе с тестами

    Кликая по дискетке, сохраняем этот файл и закрываем его, после чего компилируем проект заново. Если какой-то тест не проходит, окошко с сообщениями это выдаст. Далее настаёт процесс исправления ошибок ...



    1.6 Как создать тест

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

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

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

    Пример типичного тестового файла представлен ниже:

    ; test 1
    Set 0 on x at 1 ; входному контакту x присваивается значение равное x=0
    Set 0 on y at 1 ; входному контакту y присваивается значение равное y=0
    Set 0 on z at 1 ; входному контакту z присваивается значение равное z=0
    Diff 0 on res at 1000 ; выходному контакту res присваивается значение равное res=0
    ; test 2
    Set 1 on x at 1001 ; входному контакту x присваивается значение равное x=1
    Set 1 on y at 1001 ; входному контакту y присваивается значение равное y=1
    Set 1 on z at 1001 ; входному контакту z присваивается значение равное z=1
    Diff 0 on res at 2000 ; выходному контакту res присваивается значение равное res=0
    ; test 3
    Set 1 on x at 2001 ; входному контакту x присваивается значение равное x=1
    Set 1 on y at 2001 ; входному контакту y присваивается значение равное y=1
    Set 3 on z at 2001 ; входному контакту z присваивается значение равное z=3
    Diff 5 on res at 3000 ; выходному контакту res присваивается значение равное res=5

    Всё, что пишется после знака "Точка с запятой", воспринимается как комментарии.

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

    Вот так не очень хорошо:

    ;1
    IN_0=1 at 2
    IN_1=1 at 2
    IN_2=1 at 2
    IN_3=1 at 2
    IN_4=1 at 2
    Assert OUT_0=1 at 4000

    ;2
    IN_0=1 at 6000
    IN_1=0 at 6000
    IN_2=1 at 6000
    IN_3=0 at 6000
    IN_4=1 at 6000
    Assert OUT_0=0 at 8000




    2 Приёмы проектирования



    2.1 Взять нужный бит из битовой последовательности

    Для того чтобы взять нужный бит из битовой последовательности целесообразно использовать мультиплексор (рис. 2.1). Мультиплексорами называются устройства, которые позволяют подключать несколько входов к одному выходу. На рисунке приведён пример такого устройства. Из восьмибитного числа х берётся бит с номером fs и подаётся на выход s.


    Рис.2.1. Устройство из восьмибитного числа х берётся бит с
    номером fs и подаётся на выход s



    2.2 Занести "1" в битовую последовательность на указанную позицию

    Для занесения 1 в битовую последовательность на указанную позицию применяется два устройства: дешифратор и побитное логическое "OR" (рис. 2.2).


    Рис.2.2. Устройство заносит 1 в битовую последовательность
    на указанную позицию

    Дешифратором называется комбинационная схема, имеющая n входов и 2n выходов и преобразующая двоичный код на своих входах в унитарный код на выходах. Унитарным называется двоичный код, содержащий одну и только одну единицу, например 00100000. Условно-графическое обозначение дешифратора на три входа приведено на рисунке (рис. 2.3).


    Рис. 2.3. Условно-графическое обозначение
    трехвходового дешифратора

    Номер разряда, в котором устанавливается "1" на выходе дешифратора, определяется кодом на его входах. Ниже приведена таблица истинности трехвходового дешифратора (таблица 2.1).

    Таблица 2.1

    Таблица истинности трехвходового дешифратора

    Пусть, например, нужно поместить 1 в пятый бит (fs=101) восьмибитного числа 10001010 (х=10001010). Сперва fs=101 пройдёт через дешифратор и преобразуется в 100000. Затем применяется логическое сложение чисел 100000 и х=10001010. В результате y=10101010 (рис. 2.4).


    Рис.2.4. Пример



    2.3 Битовый шаблон

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


    Рис.2.5. Элемент логическое И

    В случае если число состоит из одних единиц, на выходе будет единица, иначе на выходе будет ноль.

    Аналогичным образом определяется состоит ли число только из нулей.


    Рис.2.6. Элемент логическое ИЛИ

    В случае если число состоит из одних нулей, на выходе будет ноль, иначе на выходе будет один.



    2.4 Количество единичных бит в числе

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


    Рис.2.7. Устройство, считающее количество
    единичных бит в числе



    2.5 Реализация сдвигов

    2.5.1. Логический сдвиг

    Это сдвиг, при котором уходящий бит уходит, не влияя на оставшееся биты, а на место появившегося бита записывается нулевой бит.

    Пусть у нас есть число 10101010b. Если сделать сдвиг влево на 1 бит, то получим число 01010100b. Если сделать сдвиг вправо на 1 бит, то получим число 01010101b.

    Логический сдвиг влево (рис. 2.8):


    Рис.2.8. Логический сдвиг влево

    Логический сдвиг вправо (рис. 2.9):


    Рис.2.9. Логический сдвиг вправо

    2.5.2. Арифметический сдвиг

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

    Пусть у нас есть число 11111010b=-6 (в двоичной системе). Если сделать сдвиг влево на 1 бит, то получим число 11110100b=-12. Если сделать сдвиг вправо на 1 бит, то получим число 11111101b=-3. Легко заметить, что при арифметическом сдвиге сдвиг влево соответствует умножению на 2, а сдвиг вправо делению на 2.

    Арифметический сдвиг влево (рис. 2.10):


    Рис.2.10. Арифметический сдвиг влево

    Арифметический сдвиг вправо (рис. 2.11):


    Рис.2.11. Арифметический сдвиг вправо

    2.5.3. Циклический сдвиг

    При этом сдвиге уходящий бит появляется на месте появившегося.

    Пусть у нас есть число 11111010b. Если сделать сдвиг влево на 1 бит, то получим число 11110101b. Если сделать сдвиг вправо на 1 бит, то получим число 01111101b.

    Циклический сдвиг влево (рис. 2.12):


    Рис.2.12. Циклический сдвиг влево

    Циклический сдвиг вправо (рис. 2.13):


    Рис.2.13. Циклический сдвиг вправо

    Реализация сдвигов в HLCCAD (рис. 2.14):


    Рис.2.14. Реализация сдвигов в HLCCAD




    3 Условия задач и их решения с пояснениями



    3.1 Логическое выражение

    Имя HLCCAD проекта:Logic.prd
    Входное устройство:Logic

    Название Размерность Тип
    IN_0
    IN_1
    IN_2
    IN_3
    IN_4
    OUT_0
    1
    1
    1
    1
    1
    1
    вход
    вход
    вход
    вход
    вход
    выход

    Построить цифровое устройство, удовлетворяющее следующей булевой функции:

    Пример ввода:

    IN_0: 1
    IN_1: 1
    IN_2: 1
    IN_3: 1
    IN_4: 1

    Пример вывода:

    OUT_0: 1

    Решение:


    Рис.3.1. Решение задачи “Логическое выражение”



    3.2 Арифметическое выражение

    Имя HLCCAD проекта:1.prd
    Входное устройство:1

    Название Размерность Тип
    a
    b
    res
    8
    8
    16
    вход
    вход
    выход

    На входе даны два восьмиразрядных числа – а и b. Следует к первому числу прибавить 2, ко второму прибавить 4 и перемножить полученные результаты.

    Пример ввода:

    a: 00000001b
    b: 00000011b

    Пример вывода:

    res: 0000000000010101b

    Решение:


    Рис.3.2. Решение задачи “Арифметическое выражение”



    3.3 Условное выражение

    Имя HLCCAD проекта:Arifm.prd
    Входное устройство:Arifm

    Название Размерность Тип
    x
    y
    res
    16
    16
    16
    вход
    вход
    выход

    На входе даны два числа - x и y. Разрядность каждого из них равна 16 бит. Разработать устройство для вычисления значения функции res(x,y), если:

    Пример ввода:

    x=1
    y=2

    Пример вывода:

    res=7

    Решение:


    Рис.3.3. Решение задачи “Условное выражение”



    3.4 Условное выражение с элементом геометрии

    Имя HLCCAD проекта:1.prd
    Входное устройство:1

    Название Размерность Тип
    A
    B
    C
    Res
    16
    16
    16
    1
    вход
    вход
    вход
    выход

    На входе дано три 16-и разрядных числа – А, B, С. На выходе одноразрядное число – Res. Даны длины сторон треугольника. Проверить является ли он прямоугольным. Если да, то на Res подать 1, в противном случае на Res подать 0 (причем А и В – стороны, а С – гипотенуза).

    Пример ввода:

    A=3
    B=4
    C=5

    Пример вывода:

    Res=1

    Решение:


    Рис.3.4. Решение задачи “Условное выражение с элементом геометрии”



    3.5 Обработка на уровне битов №1

    Имя HLCCAD проекта:1.prd
    Входное устройство:le

    Название Размерность Тип
    IN_0
    IN_1
    OUT_0
    4
    4
    3
    вход
    вход
    выход

    На вход по двум шинам IN_0 и IN_1 подаются два 4-х битных числа. На выход OUT_0 подать число совпадающих единичных бит во входных числах.

    Пример ввода:

    IN_0=1010b
    IN_1=1010b

    Пример вывода:

    OUT_0=10b

    Решение:


    Рис.3.5. Решение задачи “Обработка на уровне битов №1”



    3.6 Обработка на уровне битов №2

    Имя HLCCAD проекта:Coder.prd
    Входное устройство:1

    Название Размерность Тип
    in_0
    in_1
    in_2
    out_0
    8
    8
    3
    8
    вход
    вход
    вход
    выход

    На входе даны два 8-и разрядных двоичных числа in_0 и in_1 и 3-х разрядное двоичное число in_2. Заменить in_2 правых бит первого числа правыми битами второго числа.

    Пример ввода:

    in_0: 10011101b
    in_1: 00011011b
    in_2: 101b

    Пример вывода:

    out_0: 10011011b

    Решение:


    Рис.3.6. Решение задачи “Обработка на уровне битов №2”



    3.7 Реализация сдвигов

    Имя HLCCAD проекта:Dsp.prd
    Входное устройство:Dsp

    Название Размерность Тип
    A
    Y
    B
    8
    4
    8
    вход
    вход
    выход

    Разработать устройство, выполняющее сдвиг на один бит следующим образом:

    Пример ввода:

    A: 00011100
    Y: 0001

    Пример вывода:

    B: 00001110

    Решение:


    Рис.3.7. Решение задачи “Реализация сдвигов”




    4 Характерные ошибки проектирования



    4.1 Неверное оформление входных и выходных контактов

    Неверное оформление входных и выходных контактов. Это ещё одна проблема, с которой сталкивался почти каждый студент. Сперва приведу пример неправильного решения задачи "Device" (рис. 4.1).


    Рис.4.1. Неправильное решение задачи "Device"

    А теперь правильное решение этой же задачи:


    Рис.4.2. Правильное решение задачи "Device"

    Различие состоит лишь в названиях входных и выходного контактов. Из первого рисунка видно, что названия этих контактов придумано. В этом и заключается ошибка. Названия контактов всегда должны соответствовать условию задачи. В любой задаче по проектированию они описаны. К примеру, в задаче "Device" была такая табличка (рис. 4.3):


    Рис.4.3. Описание контактов задачи "Device"

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



    4.2 Контакты нужно соединять

    Вот очень интересная ошибка. На картинке видно, что обведённые контакты присоединены друг к другу. Но на самом деле это не так. Если бы контакты были соединены между собой, они бы перекрасились в белый цвет. В данном случае этого не произошло.


    Рис.4.4. Решение с не соединёнными контактами


    4.3 Если есть входы, то должны быть и выходы

    Это решение Лены Лукьяненко (ПО-22):


    Рис.4.5. Неправильное решение задачи “Вакхабит”

    А это характеристики всех входных и выходных контактов (рис. 4.6):


    Рис.4.6. Характеристики входных и выходных контактов

    Следующая ошибка очень похожа на предыдущую. Отличие лишь в том, что в предыдущем примере были только входные контакты, а здесь только выходные (рис. 4.7):


    Рис.4.7. На схеме находятся только входные контакты

    Ну, а это характеристики контактов:


    Рис.4.8. Характеристики входных и выходных контактов


    4.4 Разные размерности контактов на корпусе и схеме

    На корпусе устройства (рис. 4.9) у выходного контакта res указана размерность, равная четырём. Это не верно, так как по условию задачи размерность этого контакта равна восьми.


    Рис.4.9. Корпус устройства

    Для большей наглядности вот ещё одна картинка (рис. 4.10):


    Рис.4.10. Характеристики входных и выходных контактов

    А вот уже на схеме (рис. 4.11) той же задачи выходной контакт res имеет размерность восемь:


    Рис.4.11. Схема устройства

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

    4.5 Ошибка добавления в бит переноса сумматора нулевой константы

    Решение, которое изображено чуть ниже (рис. 4.12) неправильное только лишь из-за того, что в бит переноса сумматора не добавлена нулевая константа.


    Рис.4.12. Неправильное решение задачи

    Более того, если в проекте есть контакты, которые вообще не используются, их лучше удалить. В этом случае при компиляции появится меньше предупреждений. Да и решение более читабельно. Если скомпилировать решение изображённое на первом рисунке, то окошко сообщений выдаст нам четыре предупреждения. На второй картинке показан то же самый проект, вот только контакт переполнения у сумматора и контакты "<" и ">" у компаратора удалены. Вот что получится при компиляции (рис. 4.13):


    Рис.4.13. Предупреждение

    Далее следуют два правильных альтернативных решения этой задачи. В первом к биту переноса сумматора добавлена константа "0" (рис. 4.14):


    Рис.4.14. К биту переноса сумматора добавлена константа "0"

    Ну а во втором решении контракт переноса вообще удалён (рис. 4.15):


    Рис.4.15. Контракт переноса удалён



    Заключение


    В результате выполнения курсовой работы была создана обучающая методичка по проектированию устройств в hlccad. Были рассмотрены следующие пункты, необходимые для учащихся, которые начинают работать в hlccad: создание нового проекта, изменение размерности, как подключить тест, как создать тест.

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

    Анализируя решения задач учащихся, было замечено, что многие ошибки повторяются из контрольной в контрольную. Наиболее типичные ошибки и способ их устранения описаны в разделе “Характерные ошибки проектирования”.