11818

Проектирование на ПЛИС

Книга

Архитектура, проектирование и строительство

Бутов А.С. Учебноеметодическое пособие для самостоятельной работы По курсу Проектирование на ПЛИС Содержание Аннотация Введение.. ...

Русский

2013-04-12

1.77 MB

205 чел.

Бутов А.С.

Учебное-методическое пособие для самостоятельной работы

По курсу «Проектирование на ПЛИС»

 Содержание

Аннотация………………………………………………………………………

Введение………………………………………………………………………..

1. Иерархическое проектирование в САПР «MAX+PLUSII»………..……

    1.1. Прототип модуля ……………………………………….……………..

    1.2. Структура иерархического проекта ……………………………...…..

    1.3. Иерархическое описание накапливающего сумматора………..……

    1.4. Пользовательские библиотеки элементов MAX+PLUSII…………..

2. Проектирование узлов двоично-десятичной арифметики………………..

    2.1. Двоично-десятичное представление чисел….……………………….

    2.2. Двоично-десятичные сумматоры…..…………………………………

    2.4. Двоично-десятичные вычитатели…………………..………………..

    2.4. Двоично-десятичные счетчики…………..…………..………………..

3. Проектирование устройств на базе  абстрактных автоматов…….………

    3.1. Способы задания абстрактных автоматов ………….………………..

    3.2. Описание работы автоматов на языке AHDL…………………….….

    3.3. Проектирование счетчиков на базе абстрактных автоматов…….….

4. Проектирование типовых схемотехнических узлов….………….………..

    4.1. Матричные дешифраторы клавиатуры……………………………….

    4.2. Схемы вычисления функций………………………………………….

    4.3. Счетчики расхода, пробега..……………….…….…………………....

    4.4. Узлы обработки сигналов локаторов….….………………….……….

    4.5. Счетчики времени, календари…..…………………………….………

    4.6. Частотомеры……………………………..……….……………………

    4.7. Умножители……….………..………...……………..…………………

5. Проектирование схем с магистральным вводом-выводом данных...…....

   5.1. Правила работы с магистралью, арбитр…..………………….……….

   5.1. Подготовка временных диаграмм…….……………………….……....

   5.2. Пример сумматора с магистральным вводом-выводом данных….…

Литература……………………………………………………………………...


Аннотация

Данное пособие содержит краткое описание методик и типовых схем для выполнения курсовых работ по «Проектирование на ПЛИС» на базе  САПР MAX+PLUSII, предназначенная  для проектирования  ПЛИС фирмы «Altera». Это пособие будет полезным для получения более глубоких знаний по курсу.


Введение

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

 Поэтому, несмотря на то, что ПЛИС уступают заказным схемам по быстродействию в 35 раз, а по расходу кремния в 710 раз, они очень популярны среди разработчиков аппаратуры, поскольку позволяют в несколько раз сократить сроки разработки аппаратуры, улучшить качество её отладки.

Очень популярны ПЛИС в России. Это объясняется тем, что Российские разработчики аппаратуры практически не имеют возможности заказывать изготовление специализированных БИС за рубежом. Уровень же отечественных предприятий, выпускающих микросхем очень сильно отстаёт от мирового. В такой ситуации ПЛИС являются той самой «палочкой-выручалочкой», позволяющей Российским разработчикам создавать современную аппаратуру. По этой причине практически все специализированные узлы аппаратуры систем связи, обработки сложной графической информации, специализированных вычислителей разрабатываются в России исключительно на базе ПЛИС.

В России наиболее популярны ПЛИС фирм Altera и Xilins С помощью этих микросхем можно достаточно быстро выполнять разработку цифровой аппаратуры самого различного спектра. Наиболее доступными являются все-таки ПЛИС фирмы Altera. Фирма Altera проводит достаточно демократическую политику на Российском рынке. Имеется небольшая, но достаточно эффективная дилерская сеть. Заинтересованным пользователям Фирма Altera предлагает бесплатные средства проектирования – САПР MAX+PLUSII (полная версия) и САПР QUARTUS (начальная редакция). С помощью этих бесплатных средств можно разрабатывать  достаточно серьёзные проекты БИС. Если учесть, что ПЛИС фирмы более дешевые и доступные, то становиться понятным, что большинство разработок в России  используют ПЛИС Altera.

Фирма Altera предоставляет широкий набор различных ПЛИС для применения в аппаратуре различного назначения. Эти ПЛИС можно разбить на 3 основные группы (классические PLD, ПЛИС архитектуры MAX и ПЛИС архитектуры FLEX).

Классические  PLD представляют собой ПЛИС небольшого  объёма, выполненные на основе программируемый логических матриц (ПЛМ). Имеют степень интеграции несколько сотен вентилей и  используются для разработки БИС, реализующих простые функции.

ПЛИС архитектуры МАХ являются более сложными микросхемами. Они состоят из совокупности  несколько PLD, объединённых матрицей коммутации.  По степени интеграции ПЛИС архитектуры МАХ  могут достигать 20000 вентилей. Они применяются для разработке аппаратуры средней сложности.

ПЛИС архитектуры FLEХ являются самыми сложными микросхемами, построенными на базе системы программируемых логических блоков.  По степени интеграции ПЛИС архитектуры FLEХ  достигают  объёма в несколько миллионов вентилей. На их основе возможно создавать даже программируемые системы на кристалле (ПСНК).

С учетом вышесказанного, курс «проектирование на ПЛИС» ориентирован на изучение проектирования ПЛИС применительно к средствам проектирования ПЛИС Altera. Базовой системой проектирования выбрана доступная САПР ПЛИС – «MAX+PLUSII».


1. Иерархическое проектирование в «MAX+PLUSII»

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

  •  вести разработку аппаратуры пофрагментно, с распараллеливанием объёма работ между различными исполнителями;
  •  повысить качество отладки проекта за счет перекрестного моделирования модулей;
  •  многократно использовать одинаковые модули и тем самым резко сократить объём вновь разрабатываемой аппаратуры;
  •  повысить наглядность представления проектов.

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

Рассмотрим пример иерархического проекта БИС, приведенный  На рис 1.1.

 Рис.1.1. Пример иерархического проекта БИС.


Как видно из Рис 1.1. представленный проект имеет четыре уровня иерархии. Он включает в себя 6 типов различных модулей
(A,B,C,D,E,F) при общем количестве копий равным тринадцати, причем модуль С встречается 7 раз.

Важнейшим свойством иерархического проектирования является возможность организации работ по проектированию БИС с использование заранее отработанных типовых библиотек. Подготовка стандартных  библиотек является достаточно сложной и ответственной задачей. Дело в том , что библиотечные модули могут работать  в составе самой различной аппаратуры, их могут применять разработчики не высокой квалификации. Поэтому при подготовке библиотечных элементов общего пользования приходится самое серьезное внимание уделять надёжности схемотехнических решений. В проектах совершенно необходима «защита от дурака». В параметризуемых модулях необходимо всегда проверять корректность входных аргументов.

 

1.1. Прототип модуля

Язык AHDL позволяет при описании модуля использовать в качестве его компонентов созданные ранее модули. Для этого текстовое описание модуля верхнего уровня иерархии должно содержать описание прототипов этих модулей.

 Прототип задается с помощью оператора Function Prototype Statement, который может быть расположен либо непосредственно в текстовом описании, либо в файле включения (Include File)  содержимое которого подсоединяется к текстовому описанию на этапе компиляции.

Файл  включения (Include File) с описанием прототипа модуля создается с помощью команды Create Default Include File (меню File) выполняемой в окне текстового редактора пакета MAX+PLUSII  и содержащего описание модуля.

В языке AHDL определены два способа обращения к прототипу модуля:

  •  непосредственное обращение (In_Line  Reference);
  •  присвоение прототипу символического имени, т.е. объявление его переменной,  и обращение к нему как к переменной.

Отметим, что указанные способы обращения к прототипу совпадают со способами обращения к примитиву.


1.2. Структура иерархического проекта

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

  •  модуль нижнего уровня (либо нескольких нижних уровней);
  •  модуль верхнего уровня иерархии.

В языке AHDL определены два типа модулей:

  •  параметризованные(Parameterized);
  •  непараметризованные (Unparameterized).

1.3. Иерархическое описание накапливающего сумматора.

Рассмотрим пример иерархического описания накапливающего сумматора. Схема сумматора приведена на рис. 1.3.1.

 Рис. 1.3.1. Схема накапливающего сумматора.

Как видно из рисунка 1.3.1. накапливающий сумматор состоит из входного регистра Rg_a, собственно сумматора Add и выходного регистра Rg_out, в котором собственно и накапливается сумма входных чисел. Сумматор имеет вход сброса накопленной суммы R. На каждом такте своей работы накапливающий сумматор записывает в регистр Rg_a  входное число а в регистр Rg_out – накопленную сумму предыдущих чисел. Модуль Add формирует сумму текущего слагаемого с ранее накопленной суммой чисел.

Структурно описание накапливающего сумматора включает следующие файлы.

Файл входного регистра Rg_a.tdf, содержащий следующее текстовое описание:

SUBDESIGN RG_A

(D[8..1],CLK,Reset:INPUT = GND;

        OUT[8..1] : OUTPUT;)

VARIABLE TR[8..1] : DFF;

BEGIN

  TR[].(CLK,CLRn) = (CLK,!Reset);

           TR[].D = D[];

           OUT[] = TR[].Q;

END;

Модуль имеет входную шину данных D[8..1], тактовый вход CLK и вход сброса Reset. Выходные данные выводятся на шину OUT[8..1]. Запись информации в регистр осуществляется по положительному фронту сигнала CLK.

Регистр реализован на базе стандартных примитивов DFF.

Файл двоичного сумматора Add.tdf, содержащий следующее текстовое описание:

SUBDESIGN ADD

(A[8..1],B[9..1]:INPUT;

        OUT[9..1] : OUTPUT;)

BEGIN

  OUT[] = B[]+(GND,A[]);

END;

Модуль имеет входные шины данных A[8..1], и B[9..1]. Сумма формируется на выходной шине OUT[9..1]. При описании функционирования сумматора на языке AHDL используется знак арифметической операции «+». По этому знаку происходит автоматическое формирование необходимой схемы сумматора. Для выравнивания числа разрядов слагаемых во временную группу (GND,A[]), добавлен нулевой старший разряд.

Файл входного регистра Rg_out.tdf, содержащий следующее текстовое описание:


SUBDESIGN RG_OUT

(D[9..1],CLK,Reset:INPUT = GND;

        OUT[9..1] : OUTPUT;)

VARIABLE TR[9..1] : DFF;

BEGIN

  TR[].(CLK,CLRn) = (CLK,!Reset);

           TR[].D = D[];

           OUT[] = TR[].Q;

END;

Модуль имеет входную шину данных D[9..1], тактовый вход CLK и вход сброса Reset. Выходные данные выводятся на шину OUT[9..1]. Запись информации в регистр осуществляется по положительному фронту сигнала CLK.

Регистр реализован на базе стандартных примитивов DFF.

По умолчанию на все входы подаются нулевые значения сигналов.

Головной файл накапливающего сумматора Accum.tdf, содержащий следующее текстовое описание:

INCLUDE "RG_A.INC";

INCLUDE "ADD.INC";

INCLUDE "RG_OUT.INC";

SUBDESIGN ACCUM

 ( Din[8..1],CLK,Reset : INPUT;

             Dout[9..1]: OUTPUT;

               D[8..1] : OUTPUT;)

VARIABLE

   M_RG_A : RG_A;

   M_ADD  : ADD;

 M_RG_OUT : RG_OUT;

BEGIN

  M_RG_A.CLK = CLK;

  M_RG_OUT.(CLK,Reset) = (CLK,Reset);

  M_RG_A.D[]     = Din[];

  M_ADD.A[]       = M_RG_A.OUT[];

  M_ADD.B[]       = M_RG_OUT.OUT[];

  M_RG_OUT.D[] =  M_ADD.OUT[];

   Dout[] = M_RG_OUT.OUT[];

   D[] = M_RG_A.OUT[];

END;

Головной модуль накапливающего сумматора имеет входную шину данных Din[8..1], на которую последовательно подаются слагаемые, входной тактовый сигнал CLK и сигнал сброса Reset. Накопленная сумма выдается на шину Dout[9..1]. Шина D[8..1], используется для контроля состояния входов сумматора.

Головной модуль накапливающего сумматора содержит три оператора INCLUDE со ссылками на прототипы модулей.

Прототипы модулей представлены следующим образом.

Прототип модуля Rg_a.tdf

FUNCTION rg_a (d[8..1], clk, reset)

   RETURNS (out[8..1]);

Прототип модуля add.tdf

FUNCTION add (a[8..1], b[9..1])

   RETURNS (out[9..1]);

Прототип модуля Rg_out.tdf

FUNCTION rg_out (d[9..1], clk, reset)

   RETURNS (out[9..1]);

Отметим, что прототипы модулей формируются автоматически с помощью команды Create Default Include File (меню File) выполняемой в окне текстового редактора пакета MAX+PLUSII  и содержащего описание модуля.

В представленном примере модулям присвоены символические имена M_RG_A, M_ADD и M_RG_OUT и обращение к ним идёт как к переменным.

Временная диаграмма работы накапливающего сумматора имеет вид, представленный на рис 1.3.2

Рис 1.3.2. Временная диаграмма работы накапливающего сумматора.


1.4. Пользовательские библиотеки элементов
MAX+PLUSII

В состав САПР MAX+PLUSII входят следующие пользовательские библиотеки

Библиотека примитивов (prim), включающая в свой состав простые,  элементы такие как

  •  элементарные логические элементы;
  •  внешние выводы;
  •  контакты земли питания;
  •  D и Т триггеры;
  •  JK триггеры;
  •  Триггеры LACH;
  •  RS триггеры.

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

  •  счетчики;
  •  мультиплексоры;
  •  компараторы;
  •  элементы стандартной серии 7400, включающие богатый набор таких элементов как сумматоры, регистры, шифраторы, кодеры и т.д.

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

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

  •  счетчики;
  •  сумматоры;
  •  умножители;
  •  делители;
  •  компараторы;
  •  регистры;
  •  блоки памяти;
  •  декодеры;
  •  мультиплексоры.

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

Билиотека типовых схемных решений (.edif), включающая широкий набор различных стандартных, схемных решений, логических узлов. Эта библиотека разработана специалистами фирмы Altera, для облегчения перевода в базис MAX+PLUSII проектов, разработанных ранее в базисе стандартных серий микросхем.

Отметим что в формате EDIF может быть представлена самая разнообразная информация, включая графическое описание, описание тестовых векторов, список цепей (net list), параметры и т.д.


2. Проектирование схем двоично-десятичной арифметики.

2.1. Двоично-десятичное представление схем.

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

Двоично-десятичное представление используется при выводе чисел на индикаторы, принтеры другие алфавитно-графические устройства.

Двоично-десятичное представление чисел базируется на основе тетрад, при котором каждой десятичной цифре ставится в соответствие четыре бита. Ниже приведен пример двоично-десятичного представления числа 1956.

                  0001     1001      0101      0110

                     1           9            5            6

 

Для чисел меньше 10 шестнадцатеричные и двоично-десятичные представления совпадают, для больших чисел они отличаются. Например, число 15 имеет следующие представления  в различных форматах.

     1111                    0001 0101                                 F

двоичное      двоично-десятичное        шестнадцатеричное.

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

Для выполнения операций двоично-десятичной арифметики можно использовать две схемы.

а) Схемы с переводом.

 

В этом случае арифметическая операция выполняется в три этапа:

  •  перевод чисел из 2-10-й системы в двоичную;
  •  собственно арифметическая операция;
  •  перевод результата из двоичного вида в 2-10-й.

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


б) Схемы с коррекцией результатов
.

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

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

Например,  при  сложении  чисел  7 (0111)  и  8  (1000) получается число 15 (1111), которое больше 9. После проведения коррекции т.е. прибавления числа 6 получается код 10101, что соответствует 15 в двоично-десятичном виде.

2.2. Двоично-десятичный сумматор

Рассмотрим схему двоично-десятичного сумматора, работающую с коррекцией результата. Эта схема  представлена на рис 2.1.2.

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


Данный сумматор выполняет сложение двух двоично-десятичных тетрад
A[3..0]   и B[3..0]. На выходах S[3..0] и P формируется двоично-десятичная сумма.

На представленной схеме сумматор sum4(1) выполняет обычное двоичное сложение чисел A[3..0] и  B[3..0]. Сумматор sum4(2) выполняет коррекцию: добавляет к сумме число 6, задаваемое подключением его входов B к земле или питанию. Схема комбинационной логики, построенная на элементах OR2 и AND2, управляет работой выходных мультиплексоров мux2(9)мux2(12), мux2(18). Если результат на выходе sum4(1) оказывается меньше 10, мультиплексоры пропускают на выход результат без коррекции (входы В), в противном случае -  скорректированный результат (входы А). Коррекция осуществляется так же в случае если результат меньше десяти, но был сформирован сигнал переноса схемой sum4(2).

Временная диаграмма работы двоично-десятичного сумматора представлена на рис 2.1.2.

       Рис 2.1.2. Временная диаграмма работы двоично-десятичного сумматора.

На рис 2.1.2. следует обратить внимание, что группа SUM представлена в шестнадцатеричном виде, а результат выглядит так, как будто она имеет десятичный вид. Это стандартная ситуация для схем, работающих в двоично-десятичной арифметике.


На языке
AHDL двоично-десятичные сумматоры описываются достаточно просто. Для описания условий и вариантов коррекции результата используется либо оператор IF THEN либо оператор CASE.

Рассмотрим пример описания восьмиразрядного двоично-десятичного сумматора, работающего в диапазоне десятичных чисел от 1 до 99.

SUBDESIGN ADD210

(A[7..0],B[7..0]:INPUT;

        OUT[8..0]: OUTPUT;)

VARIABLE

TA[4..0],TAK[4..0]:NODE;

TB[4..0],TBP[4..0],TBK[4..0]:NODE;

BEGIN

  TA[] = (GND,B[3..0])+(GND,A[3..0]);

  IF(TA[]>9 ) THEN TAK[]=TA[]+6;

    ELSE TAK[]=TA[];

  END IF;

   TB[]=(GND,A[7..4])+(GND,B[7..4]);

   TBP[]=TB[]+(GND,GND,GND,GND,TAK[4]);

   IF(TBP[]>9) THEN TBK[]=TBP[]+6;

    ELSE TBK[]=TBP[];

  END IF;

 OUT????TBK???????TAK??????????

END??

?

Данный сумматор имеет входные вектора сигналов слагаемых A[7..0], B[7..0] и выходной  сигнала суммы OUT[8..0].

Кроме того, он содержит несколько векторов для хранения промежуточных результатов:

TA[4..0] – первая не скорректированная тетрада суммы;

TAК[4..0] – первая скорректированная тетрада суммы;

TВ[4..0] – вторая не скорректированная тетрада суммы;

TВP[4..0] – вторая  не скорректированная тетрада суммы с учётом переноса;

TВK[4..0] – вторая скорректированная тетрада суммы.

Окончательный результат, получающийся после коррекции старшей тетрады, записывается в выходной вектор OUT[].

Условия коррекции результатов отрабатываются с помощью операторов IF THEN. Для упрощения записи при описании используется оператор арифметического сложения «+».

Временная диаграмма работы такого сумматора представлена на рис 2.1.3.

Рис 2.1.3. Временная диаграмма работы восьмиразрядного двоично-десятичного сумматора.

2.2. Двоично-десятичный  вычитатель

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

Например,  при  вычитании из двоично-десятичного числа  12 (10010)  числа  5 (101) получается число D (1101), которое больше 9. После проведения коррекции т.е. вычитания  числа 6 получается правильный результат 7 (111).

Рассмотрим пример восьмиразрядного двоично-десятичного вычитателя, описанного на языке AHDL.


SUBDESIGN RAZ210

(U[7..0],V[7..0]:INPUT;

        R[8..0]: OUTPUT;)

VARIABLE

TA[4..0],TAK[4..0]:NODE;

TB[4..0],TBP[4..0],TBK[4..0]:NODE;

BEGIN

  TA[] = (GND,U[3..0])-(GND,V[3..0]);

  IF(TA[]>9 ) THEN TAK[]=TA[]-6;

    ELSE TAK[]=TA[];

  END IF;

   TB[]=(GND,U[7..4])-(GND,V[7..4]);

   TBP[]=TB[]-(GND,GND,GND,GND,TAK[4]);

   IF(TBP[]>9) THEN TBK[]=TBP[]-6;

    ELSE TBK[]=TBP[];

  END IF;

 R[]=(TBK[4..0],TAK[3..0]);

END;

Данный вычитатель имеет входные вектора сигналов уменьшаемого U[7..0], и вычитаемого V[7..0] а так же  сигнала разности R[8..0].

Кроме того, он содержит несколько векторов для хранения промежуточных результатов:

TA[4..0] – первая не скорректированная тетрада разности;

TAК[4..0] – первая скорректированная тетрада разности;

TВ[4..0] – вторая не скорректированная тетрада разности;

TВP[4..0] – вторая  не скорректированная тетрада разности учётом переноса;

TВK[4..0] – вторая скорректированная тетрада разности.

Окончательный результат, получающийся после коррекции старшей тетрады, записывается в выходной вектор OUT[].

Условия коррекции результатов отрабатываются с помощью операторов IF THEN. Для упрощения записи при описании используется оператор арифметического вычитания  «-».

Временная диаграмма работы вычитателя приведена на рис.2.2.1.


Рис  2.2.1. Временная диаграмма работы восьмиразрядного двоично десятичного вычитателя.

2.3. Двоично-десятичные счетчики

Двоично-десятичные счетчики позволяют организовать счёт импульсом в двоично-десятичном виде. Реализация двоично-десятичного счета осуществляется путём организации счёта по тетрадам. Для этого в схемы счётчиков вводятся узлы, обеспечивающие корректировку процесса счёта при переполнении тетрад в ту или иную сторону. Для этого используют схемы сброса - установки, которые позволяют организовать в процессе прямого счета переходы от кода 9 (1001) в код 10 (1000) и от кода 10 (1000) в код 9 (1001) при счёте по убыванию.

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

Двоично-десятичные счетчики строятся исключительно по синхронных схемам, позволяющим «развязать» логику управления установками триггеров и логику счёта.

Рассмотрим пример пример двоично-десятичного счетчика, считающего от 3 до 15. Этот пример приведен на рис 2.3.1.

Рис 2.3.1. Двоично-десятичный счетчик, считающий от 3 до 15.

Представленный двоично-десятичный счет выполнен по синхронной схеме на базе пяти стандартных одноразрядных схем trev-r, показанных на рис 2.3.2.

На представленной схеме  входы S и R являются входами установки и сброса. Вход В является входом переноса из младшего разряда а выход P –  выходом переноса в старший разряд. Вход К управляет направлением счета, при К=0 счёт ведётся по возрастанию, а при К=1 – по убыванию.

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


 Рис 2.3.2. Схема одного разряда синхронного счетчика trev-r.

На схеме, представленной на рис 2.3.1. четыре младшие схемы (2427) считают единицы, старшая схема (28) – десятки. Элемент AND2(34), организует переход из кода A(1010)  в код 10 (1000), а элемент AND3(36) – переход из кода 16(10110) в код 0(00000).

Временная диаграмма работы счётчика представлена на рис 2.3.2.

 

Импульс на выходе TET появляется, когда счётчик отсчитывает очередную тетраду.

Как видно из рисунка 2.3.3. группа Q представлена в шестнадцатеричном виде, однако  результат выглядит так, как будто она имеет десятичный вид.

Это стандартная ситуация для схем, работающих в двоично-десятичной арифметике.


Рисунок 2.3.3. Временная диаграмма работы двоично-десятичного счетчика.


3. Проектирование устройств на базе  абстрактных автоматов
…….………

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

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

{Zi} – входной алфавит;

 {Wj} – выходной алфавит;

 {Sk} – множество состояний;

    A –  функция переходов;

     F –  функция выходов;

    S0  – начальное состояние.

Автомат работает на дискретной временной сетке, начиная с момента T0 и с некоторого начального состояния S0.

На каждом такте Ti своей работы, автомат находясь в состоянии Si получает входное слово Zi, выдаёт выходной слово Wi=F(Zi,Si),  и переходит в новое состояние Si+1=A(Zi,Si), определяемое функцией переходов.

Это полные автоматы или автоматы МИЛИ.

Существуют ещё автоматы МУРА, у которых функция выходов зависит только от текущего состояния т.е. Wi=F(Si),

Теоретически автомат МИЛИ можно свести к автомату МУРА, однако, при этом он будет иметь существенно больше состояний.


3.1. Способы задания абстрактных автоматов.

Автоматы задаются либо в виде графов, либо в виде таблиц. Рассмотрим способы задания автоматов МИЛИ.

При графическом задании автомата МИЛИ изображается граф автомата, у которого каждая вершина соответствует одному состоянию автомата, а каждое ребро одному такту его работы. Начало ребра определяет начальное состояние, конец конечное для данного перехода. Около каждого ребра записывается входное слово, определяющее переход и в скобках – выдаваемый сигнал.  Пример графа автомата МИЛИ приведен на Рис 3.1.1.

 

                         Z1(W1)                                       Z2(W3)

                                   Z1(W1)                      Z1(W1)

                                                                                                      Z2(W2)

                                          Z2(W2)

 Рис 3.1.1 Пример графа автомата МИЛИ.

Графическое представление автоматов является, пожалуй, наиболее наглядным и удобным для человека. К сожалению, при большом числе вершин графа автомата наглядность существенно теряется. Отметим, что графическое представление является также не самым удобным для ввода информации в компьютер.

Очень часто работу автоматов описывают в виде таблиц. Для задания автомата МИЛИ нужно расписать две таблицы: таблицу определяющую функцию выходов и таблицу задающую функцию переходов.

В таблице 1 приведена функцию выходов для автомата, представленного на Рис 3.1.1.   а в таблице 2 – функция переходов.

  Таблица 1.

Функция выходов автомата МИЛИ.

Состояние

Входные и выходные сигналы.

Z1

Z2

S0

W1

W2

S1

W2

W3

S2

W1

W2


        Таблица 2.

Функция переходов автомата МИЛИ.

Состояние

Входные сигналы и новые состояния.

Z1

Z2

S0

S1

S2

S1

S0

S2

S2

S1

S2

При графическом задании автомата МУРА изображается граф автомата, у которого каждая вершина соответствует одному состоянию автомата, а каждое ребро одному такту его работы. Начало ребра определяет начальное состояние, конец конечное для конкретного перехода. Около каждого ребра записывается входное слово, определяющее переход, а у каждой вершины  – выдаваемый сигнал.  Пример графа автомата МУРА приведен на Рис 3.1.2.

         ????????????????Z????????????????????????????????????????????????Z??

?

?

?????????????????????????????????????????????Z??

?

?????????????????????????????????????????????????????????????????????????????Z??

???????????????????????????????????Z??

?

??????????????????Z?????????????????????????????????????????????????????????????????Z??

?????????????????????????????????????????????????????????????Z??

?

?

?

?

?Рис 3.1.2. Пример автомата  МУРА

. Для задания автомата МУРА нужно расписать только таблицу,  задающую функцию переходов, поскольку выходной сигнал для автомата  однозначно определяется его состоянием.

В таблице 3 приведена комплексная информация, определяющая  функцию  переходов и выходные сигналы для автомата, представленного на Рис 3.1.2

 


      Таблица 3.

Описание автомата МУРА.

Состояние

Выходной сигнал

Входные сигналы и новые состояния.

Z1

Z2

S0

W0

S0

S1

S1

W1

S1

S2

S2

W2

S2

S3

S3

W3

S3

S0

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

При двоичном кодировании (Binary coding) число необходимых триггеров n определяется выражением:

 n = ]log2N[, где ] [ - операция округления до ближайшего большего целого.

При линейном кодировании по принципу одно состояние – один триггер (One Hot State), число необходимых триггеров

n = N, где N – число состояний.

Для СБИС программируемой логики семейства МАХ, содержащих относительно небольшое число макроячеек, в каждой из которых имеется многовходовая программируемая матрица «И», матрица «ИЛИ» и триггер, приемлемы оба способа кодирования. Поэтому для таких СБИС пакет MAX+PLUSII с помощью опции  One Hot State Machine Encoding (меню AssignGlobal Project Logic Synthesis)  позволяет выбирать способ кодирования (по умолчанию применяется двоичное кодирование).

Для СБИС программируемой логики семейства FLEX,  содержащих много логических элементов, в каждом из которых есть четырех входовая таблица перекодировки и триггер, оптимальным является  кодирование по принципу: одно состояние – один триггер, так как при этом существенно упрощается комбинационная схема управления переходами автомата. Поэтому для СБИС семейства FLEX в пакете MAX+PLUSII всегда применяется данный способ кодирования состояний.


3.2. Описание работы автоматов на языке
AHDL

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

<имя автомата> : MACHINE OF BITS(<список имён бит>)

               WITH STATES (<список состояний>)

Этот оператор определяет:

  •  имя переменной – символическое имя автомата;
  •  число разрядов памяти и символическое имя каждого разряда;
  •  символические имена состояний автомата.

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

<имя автомата> : MACHINE WITH STATES (<список состояний>)

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

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

  •  CLK - вход тактового сигнала;
  •  Resetвход асинхронного сброса;
  •  ENAвход разрешения работы.

Обязательно использование только входа CLK. Если входы Reset и ENA не используются, то на них автоматически подаются сигналы не препятствующие работе автомата.

Описание работы автомата на языке AHDL обычно осуществляется с помощью таблицы истинности. Причём в таблице описывается и функция выходов и функция переходов.

 

Рассмотрим пример абстрактного автомата Мура. Автомат содержит:

 Входы:  START, ABAR, CLK.

 Выходы: WORK, END_WORK.

Автомат имеет следующие состояния.

 Init, Working, Waiting, Resuming, Ending.

Таблица переходов автомата имеет следующий вид:

Исходное состояние

Входные сигналы

Новое состояние

Init

START=1

Working

Init

START=0

Init

Working

START=0

Waiting

Working

START=1

Working

Waiting

START=1

Ruming

Waiting

START=0

Ending

Ruming

START=0

Waiting

Ruming

START=1

Working

Ending

Init

 Выходные сигналы автомата выглядят следующим образом.

Состояние

Выходные сигналы

Init

WORK=0, END_WORK=0

Working

WORK=1, END_WORK=0

Waiting

WORK=1, END_WORK=1

Ruming

WORK=0, END_WORK=0

Ending

WORK=0, END_WORK=1


С учётом вышесказанного, описание работы автомата на языке
AHDL имеет следующий вид:

SUBDESIGN Moor1

( Start,ABAP,clk : INPUT;

 Work,End_work  : OUTPUT;)

VARIABLE

FSM : MACHINE WITH STATES

             (INIT,WORKING,WAITING,RUMING,ENDING);

BEGIN

FSM.clk=CLK;

FSM.RESET=ABAP;

  TABLE

     FSM ,  START  =>   WORK, END_WORK, FSM;

     INIT,      0  =>    0,       0,    INIT;

     INIT,      1  =>    0,       0,    WORKING;

     WORKING,   0  =>    1,       0,    WAITING;

     WORKING,   1  =>    1,       0,    WORKING;

     WAITING,   0  =>    1,       1,    ENDING;

     WAITING,   1  =>    1,       1,    RUMING;

     RUMING,    0  =>    0,       0,    WAITING;

     RUMING,    1  =>    0,       0,    WORKING;

     ENDING,  B"X" =>    0,       1,    INIT;

  END?TABLE;

END;

В приведённом описании задана внутренняя переменная FSM, являющаяся символическим именем конечного автомата, имеющего пять состояний.:INIT, WORKING, WAITING, RUMING, ENDING. Отметим, что при её задании указаны только состояния автомата.

Уравнение FSM.clk=CLK; определяет соединение тактового сигнала с тактовым входом конечного автомата.

Вход ABAP соединяется с входом асинхронного сброса автомата, что определяется уравнением FSM.RESET=ABAP; 

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

В левой части таблицы истинности (слева от знака =>) указываются текущее состояние и набор входных сигналов. В правой части – состояние в которое автомат перейдёт при появлении на входе CLK перепада из «0» в «1», т.е. состояние перехода. И кроме того в в правой части перечисляются выходные сигналы автомата.


Отметим, что описание представленного автомата может быть сделано с помощью операторов CASE и IF THEN.

Пример такого описания приведен ниже.

SUBDESIGN Moor2

( Start,ABAP,clk : INPUT;

 Work,End_work  : OUTPUT;)

VARIABLE

FSM : MACHINE WITH STATES

             (INIT,WORKING,WAITING,RUMING,ENDING);

BEGIN

FSM.(clk,RESET)=(CLK,ABAP);

CASE FSM IS

  WHEN INIT=>

   IF START==0

      THEN FSM=INIT;

      ELSE FSM=WORKING;

  END IF;

  WHEN WORKING=> Work=VCC;

   IF START==0

      THEN FSM=WAITING;

      ELSE FSM=WORKING;

  END IF;

  WHEN WAITING=> Work=VCC; End_work=VCC;

   IF START==0

      THEN FSM=ENDING;

      ELSE FSM=RUMING;

  END IF;

  WHEN RUMING=>

   IF START==0

      THEN FSM=WAITING;

      ELSE FSM=WORKING;

  END IF;

 

 WHEN ENDING => End_work=VCC;

    FSM=WAITING;

END CASE;

END;


В результате моделирования автомата МУРА получается временная диаграмма работы автомата,  представленная на рис 3.2.1.

Рис 3.2.1. Временная диаграмма работы автомата МУРА.


3.3. Проектирование счетчиков на базе абстрактных автоматов

С помощью абстрактных автоматов удобно описывать работу счетчиков. Для этого достаточно описать автомат МУРА, у которого число состояний определяется диапазоном работы счетчика. Что касается выходных сигналов автомата - то они определяются типом счетчика (прямой, рекурсивный, двоично-десятичный, работающий в диапазоне и т.д.). Разделение номеров состояний и соответствующих им выдаваемых сигналов очень сильно упрощает описание работы «хитрых» счетчиков.

Рассмотрим пример двоично-десятичного счетчика, считающего в диапазоне от 8 до 15.

Счетчик имеет входной тактовый сигнал clk и выходной двоично-десятичный сигнал OUT[4..0].

Соответствующий счетчику автомат имеет 8 состояний, каждому из которых поставлено в соответствие выдаваемое двоично-десятичное число.

Описание такого автомата-счетчика на языке AHDL имеет следующий вид:

SUBDESIGN C8_15

( clk : INPUT;

 OUT[4..0] : OUTPUT;)

VARIABLE

FSM : MACHINE WITH STATES

             (S8,S9,S10,S11,S12,S13,S14,S15);

BEGIN

FSM.clk=CLK;

  TABLE

     FSM      =>     OUT[],      FSM;

     S8       =>    B"01000",    S9;

     S9       =>    B"01001",    S10;

     S10      =>    B"10000",    S11;

     S11      =>    B"10001",    S12;

     S12      =>    B"10010",    S13;

     S13      =>    B"10011",    S14;

     S14      =>    B"10100",    S15;

     S15      =>    B"10101",    S8;

???????????

?????

?

В процессе своей работы автомат последовательно, по кругу, ходит по циклу состояний  S8->S9->S10->S11->S12->S13->S14->S15->S8->S9…

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


В результате моделирования вышеописанного счётчика получается временная диаграмма, приведённая на рисунке 3.3.1.

Рис 3.3.1. Временная диаграмма работы двоично-десятичного счетчика.


4. Проектирование типовых схемотехнических узлов

Рассмотрим стандартные подходы при проектировании радиоэлектронных устройств, примеры которых встречаются в курсовых работах.

    4.1. Матричные дешифраторы клавиатуры

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

Типовая структурная схема включения дешифратора и  клавиатуры приведена на рис 4.1.1.

             Тактовый сигнал

Рис.  4.1.1. Типовая структурная схема включения дешифратора  клавиатуры.


Матричная организации клавиатуры за счёт пространственно – временного разделения сигналов позволяет при минимальном количестве выводов БИС дешифратора обеспечить достаточно быстрый ввод сигналов.

Так для обеспечения работы с клавиатурой содержащей  М строк и N столбцов кнопок (всего М N кнопок), потребуется М+ N  выводов  БИС дешифратора.

На примере, приведённом на рисунке 4.1.1. продемонстрирована работа дешифратора совместно с клавиатурой, содержащей восемь кнопок, образующих матрицу 24. Алгоритм работы дешифратора выглядит следующим образом.

На каждом такте своей работы БИС дешифратора последовательно выдаёт высокий уровень сигнала на линии столбцов L0 и L1. Одновременно происходит анализ входных сигналов на входах D[4..0]. При нажатии кнопки клавиатуры происходит электрическое замыкание между шиной столбца и шиной строки. При подаче сигнала высокого уровня  на выход L0 можно идентифицировать нажатие кнопок А1, А2, А3, А4. А при подаче сигнала высокого уровня  на выход L1 соответственно - нажатие кнопок А5, А6, А7, А8.

Считается, что одновременно может быть нажата только одна кнопка клавиатуры.

Ниже приведено описание БИС дешифратора клавиатуры на  языке AHDL.

SUBDESIGN KLAV24

( CLK , D[3..0]:INPUT;

  L[1..0],Q[3..0]:OUTPUT;

)

 Variable

  RG[1..0]: DFF;

  BEGIN

     RG[].CLK=CLK;

   CASE RG[].Q IS

     WHEN  B"10" => RG[].D = B"01";

     WHEN  OTHERS => RG[].D=RG[].Q+1;

   END CASE;

L[]=RG[].Q;

  TABLE

  L[], D[] => Q[];

  B"01", B"0000"=> B"0000";

  B"01", B"0001"=> B"0001";

  B"01", B"0010"=> B"0010";

  B"01", B"0100"=> B"0011";

  B"01", B"1000"=> B"0100";

  B"10", B"0000"=> B"0000";

  B"10", B"0001"=> B"0101";

  B"10", B"0010"=> B"0110";

  B"10", B"0100"=> B"0111";

  B"10", B"1000"=> B"1000";

  END TABLE;

  END;

Представленное описание схемы содержит входные сигналы CLK, D[3..0] и выходные сигналы L[1..0],Q[3..0]:. Для организации последовательной подачи сигналов на выходы L1 и L2 в состав схемы введен счетчик на триггерах RG[1..0]. Счетчик работает в режиме ограничения счета и считает от 1 до 2. Процесс соответствующего перехода при счёте организован с помощью оператора CASE.

Анализ вариантов нажатия клавиш  и выдача соответствующих кодов символов выполняется с помощью оператора TABLE. Если не нажата ни одна кнопок – выдаётся код «0000».

 

Временная диаграмма работы дешифратора клавиатуры, полученная в результате моделирования,  представлена на рис 4.1.2.

Рис 4.1.2. Временная диаграмма работы дешифратора клавиатуры.

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

 

Рассмотрим схему устранения дребезга контактов, построенную на базе счётчика. Эта схема представлена на рис 4.1.3.

 Рис 4.1.3. Схема устранения дребезга контактов на базе счётчика.

Данная схема имеет тактовый вход CLC,  задающий временную рабочую сетку, вход KN,  состояние которого определено кнопкой клавиатуры (0 – не нажата, 1 - нажата), выход Q, определяющий «чистое» состояние кнопки после отсева дребезга и промежуточный выход Q1.

Основная идея работы схемы заключается в том, что счётчик count16,  отсчитывает временные интервалы длительностью восемь тактов в течении которых состояние сигнала KN не меняется, причём если текущее значение сигнала Q равно нулю, то отсчитывается восемь тактов сигнала «1», а если значение Q равно одному, то отсчитывается восемь тактов сигнала «0». В случае если длительность соответствующей «полочки» оказывается меньше восьми тактов, счётчик сбрасывается и начинается поиск нужного интервала снова.

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

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

На рисунке 4.1.4. видно, что переключения выхода Q  происходит значительно реже чем изменяется сигнал KN.  Эти переключения возникают только если сигнал KN держится не менее 8 тактов. Переключения триггера, хранящего состояние кнопки клавиатуры, происходит  по выходному сигналу счётчика Q1.


    4.2. Схемы вычисления функций

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

Типичная схема вычисления значения функции двух переменных  F(X,Y) с помощью ПЗУ представлена на рис 4.2.1.

                  X[6..0]

                                    A[5..0]

                F(X,Y)

                                      A[11..6]

                 Y[5..0]

Рис 4.2.1. Типичная схема вычисления значения функции двух переменных с помощью ПЗУ

Представленная схема построена на базе 12-разрядного ПЗУ объёмом 4096 слов. Каждой паре входных аргументов X и Y, заданных с точностью в 6 двоичных разрядов и вместе образующих 12 разрядный адрес ПЗУ соответствует одно выходное слово F, заданное с точностью 12 разрядов.

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

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


Рассмотрим пример функции одной переменной F(X). Пусть ПЗУ имеет разрядность n, а разрядность аргумента равна m (m>n). При этом разрядные сетки адреса ПЗУ A и аргумента X имеют вид, показанных на рис 4.2.2.

        A

                             i                i+1           i+2            i+3

        X

                             j      j+1   j+2    j+3    j+4   j+5    j+6

 Рис 4.2.2. Разрядные сетки аргумента X и адреса ПЗУ A для случая m=n-1.

Положим для простоты, что m=n-1, тогда для значений аргументов, не попадающих в разрядную сетку значений адреса (Xj+1, Xj+3, Xj+5,) значение функции можно вычислить по стандартной интерполяционной формуле

 F(Xj+1)=( F(Xj) + F(Xj+2) )/2

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

Данная схема вычислений может применятся и при значениях m=n-2, однако при этом время вычисления значений функции будет занимать не один а два такта, поскольку придётся сначала рассчитать значение функции на сетке с m=n-1, а только затем перейти к расчётам на сетке с m=n-2.

Естественно при этом удваивается объём аппаратуры, необходимой для реализации соответствующих вычислений.

Рассмотрим блок схему интерполяционного  вычислителя, которая  приведена на Рис 4.2.3.


  CLC

 A[7..0]

                                             F[11..0]

Рис 4.2.3. Блок схема вычислителя значения функции с линейной интерполяцией.

Вычислитель значения функции с линейной интерполяцией состоит из ПЗУ размером 256  12-разрядных слов.  12-разрядного регистра-защелки RG и 12-разрядного сумматора SUM. На первом такте своей работы на адресный вход ПЗУ поступает значение Xj, и происходит считывание значение F(Xj),  которое записывается а в регистр RG. На следующем такте работы на адресный вход ПЗУ поступает значение Xj+2, считывается значение F(Xj+2).   после чего  сумматором  SUM вычисляется  сумма  F(Xj) + F(Xj+2). Затем на выход вычислителя выводится ответ с выхода сумматора со сдвигом двоичного кода на один разряд вправо.

Аналогичный подход можно применять и для соотношения  m=n-2, правда, при этом для вычисления результата в общем случае потребуется три рабочих такта.


    4.3. Счетчики расхода, пробега

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

Рассмотрим схему счетчика расхода топлива, выполненную на базе двоично-десятичного счетчика. Схема счетчика приведена на рис 4.3.1.

 B[4..0]

           VCC

   С

CLC          R[7..0]

 Рис  4.3.1. Блок схема двоично-десятичного счетчика расхода

Функционально счетчик расхода состоит из счетчика порции, компаратора, определяющего конец отсчета порции, собственно счетчика расхода и блока управления, включающего управляющий D-триггер и селектор тактового сигнала AND2.

Счетчик расхода работает следующим образом. При поступлении очередного сигнала с дозатора, приходящего на вход С, управляющий триггер переключается в состояние «1», что разрешает проход тактовых сигналов через элемент AND2. В этом состоянии  он находится до тех пор, пока счётчик порции не отсчитает количество тактов, равное величине порции, определяемой входным кодом B[].

Как только, как код счетчика дозы совпадёт с кодом, заданным на шине B[], на выходе компаратор выработает сигнал «0», который перебросит управляющий триггер в состояние «0», что перекроет поступление тактовых сигналов на входы счетчиков.


Таким образом, при подаче импульса дозатора на вход
С, счетчик отсчитывает количество тактов, определяемоё дозой, причём в счётчике накапливается итоговая сумма по всем порциям.

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

Рассмотрим построение отдельных узлов счетчика расхода. Ниже представлено описание компаратора, сравнивающего значения двух кодов.

SUBDESIGN COMP3

( CLK, A[3..0], B[3..0] :INPUT;

  Q:OUTPUT;

)

 Variable

  Q1: NODE;

  BEGIN

   Q1=A[3]$B[3] # A[2]$B[2] # A[1]$B[1] # A[0]$B[0];

   Q=CLK # Q1&!CLK;

  END;

Компаратор имеет входные сигналы A[3..0], B[3..0] и CLK. В компараторе организовано поразрядное сравнение кодов A[] и B[]. Операция сравнения осуществляется путём поразрядного сравнения кодов по модулю 2 (операция XOR)  и последующим логическим суммированием результатов. В случае хотя бы одного несовпадения логическая сумма поразрядных сравнений по модулю 2 будет равна «1», иначе «0». Т.е. если все разряды попарно равны, значение Q1 будет равно «0». Выход компаратора Q формируется из сигнала Q1и тактового сигнала CLK. Это сделано для того, чтобы выход сигнала компаратора появлялся в момент нулевого значения тактового сигнала, что позволяет избежать влияния дребезга переключения разрядов счетчика и упростит головную схему.

Рассмотрим возможный вариант построения   двоично-десятичного счетчика дозы T210.

Этот счётчик используется в качестве компоненты для главного счетчика расхода.


SUBDESIGN T210

( CLK, RN, B :INPUT;

  P,Q[3..0]:OUTPUT;

)

 Variable

  RG[3..0],RP: DFF;

  BEGIN

  RG[].CLK=CLK&B;

  RP.CLK=!CLK;

  RG[].CLRN=RN;

CASE RG[].Q IS

WHEN 9 => RG[].D=0; RP.D=B"1";

   WHEN OTHERS   => RG[].D=RG[].Q+1; RP.D=B"0";

 END CASE;

     Q[] = RG[].Q;

     P?RP?Q??

???END??

?

Счетчик имеет следующие входные  и выходные сигналы:

  CLKтактовый вход;

  RN  - вход сброса по «0»;

  B   - вход переноса из младшей тетрады;

  P   - выход переноса в старшую тетраду;

Q[3..0]- выход счетчика.

Счётчик работает по классической схеме. Когда он досчитывает до кода «9» в оператореCASE  организуется обнуление счетчика на следующем такте. В том же операторе организуется  появление на один такт сигнала логической единицы на выходе переноса старшего разряда, который формируется на выходе триггера переноса RP.

Основной счетчика расхода сформирован на базе трех двоично-десятичных счетчиков T210. Данный проект имеет иерархическую организацию. Его компонент - модуль T210 имеет соответствующий INCLUDE файл "T210.INC".

 

Ниже представлено  описание счётчика расхода


INCLUDE "T210.INC";

SUBDESIGN D3

( CLK :INPUT;

  Q0[3..0],Q1[3..0],Q2[3..0],P:OUTPUT;

 )

 Variable

  T210A,T210B,T210C: T210;

 BEGIN

  T210A.CLK=CLK;

  T210B.CLK=CLK;

  T210C.CLK=CLK;

   T210A.RN=VCC;

   T210B.RN=VCC;

   T210C.RN=VCC;

  Q0[]=T210A.Q[];

  Q1[]=T210B.Q[];

  Q2[]=T210C.Q[];

  T210A.B=VCC;

  T210B.B=T210A.P;

  T210C.B=T210B.P & T210A.P;

  P=T210B.P;

 END;

Счетчик расхода  имеет следующие входные  и выходные сигналы:

  CLKтактовый вход;

    P   - контрольный  выход переноса;

   Q0[3..0]- выход младшей тетрады счетчика;

   Q1[3..0]- выход средней  тетрады счетчика;

   Q2[3..0]- выход старшей  тетрады счетчика;

В представленном описании модули T210 введены как переменные, имеющие имена T210A,T210B,T210C. Соответствующими уравнениями организована синхронная работа трёх двоично-десятичных счётчиков T210. Для этого в проект  введены цепи согласования переноса между младшими и старшими тетрадами.

Общее схема счетчика расхода, построенная на основе вышеописанных модулей представлена на рис 4.3.2. А её временная диаграмма работы на рис 4.3.3.

Рис 4.3.2.Общая схема счетчика расхода.

Схема счётчика расхода имеет следующие входные и выходные сигналы

B[3..0]  - код дозы;

 C         - входной импульс отсчёта;

 CLC    - тактовый сигнал опорной временной сетки.

CR[3..0] – выход счетчика дозы (служебный сигнал);

 QS        – выход триггера управления (служебный сигнал);

Q0[3..0] - выход младшей тетрады счетчика;

Q1[3..0] - выход средней  тетрады счетчика;

Q2[3..0] - выход старшей  тетрады счетчика;

QS           – выход триггера управления.

При поступления сигнала входного импульса отсчёт C, в управляющий триггер DFF  записывается код «1», который открывает проход тактовых импульсов с входа CLC на вход счётчика дозы  T210 и вход главного счётчика d3.

Как только счётчик дозы отсчитает количество импульсов равное коду , на выходе компаратора comp3 появиться сигнал логического «0», который сбросит управляющий триггер в состояние логического «0» и тем самым прекратит процесс счёта вплоть до появления очередного импульса на входе импульсов отсчёта C.

Таким образом, значение главного счётчика d3  будет последовательно увеличиваться квантами величиной, определяемой кодом B[3..0].

Рис 4.3.3. Временная диаграмма работы счетчика расхода,

На временной диаграмме видно, что значения счётчика дозы, выдаваемое на выходы Q0[3..0], Q1[3..0], Q2[3..0] последовательно увеличиваются на «7», последовательно принимая значения 0, 7, 14, 21 и т.д.


    4.4. Узлы обработки сигналов локаторов

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

Рассмотрим две основные задачи, решаемые в локационных системах, это задача определения расстояния до объекта и задача определения скорости объекта.

 Определение расстояния до объекта.

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

Типичная временная диаграмма работы локатора представлена на рис 4.4.1.

      Сигналы

     P

     R

          Время

                                   Tp1     Tp2           Tr1        Tr2

 Рис 4.4.1. Временная диаграмма работы локатора. P – испускаемый импульс, R – отраженный.

В данной схеме испускаемый импульс P представляет собой пакет высокочастотных радиоволн, который начинает испускаться в момент времени Tp1и заканчивается в момент времени Tp2. Отраженный сигнал представляет собой также пакет радиоволн, который возвращается к радару в момент времени Tr1 и заканчивается в момент Tr2.

 


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

Зная моменты излучения импульса Tp1и прихода отраженного сигнала Tr1 а также скорость распространения волны V можно определить расстояние S до объекта.

 

 S=V(Tr1-Tp1) [1]

 Отметим, что прямое использование формулы [1] для определения расстояния до объекта приводит к достаточно сложным аппаратным решениям, поскольку приходится решать задачу построения не только вычитателя, но и умножителя.

Существует более простое решение задачи  определения расстояния до объекта. Для построения соответствующей аппаратуры можно использовать подход, проработанный при построении схем счетчиков расхода. При таком подходе определение расстояния до объекта осуществляется c помощью подсчета числа импульсов эталонного тактового генератора, укладывающихся в интервал времени (Tp1,Tr1). Если период подачи импульсов эталонного генератора равен T,  то одну такту запаздывания прихода отраженного сигнала соответствует расстояние S равное:

 S=VT    [2]

При соответствующем выборе частоты эталонного тактового генератора можно добиться того, величина  S  будет  равна  удобной  единице  измерения длины, например 1м. Например,  в случае гидролокатора скорость звука в воде V=1500 м/сек.  Если выбрать периоде T=0.667 мсек., что соответствует частоте 1.5 кГц, получим  S=1м.

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

На языке AHDL описание такого узла определения расстояния до объекта может иметь вид, представленный ниже.


INCLUDE "T210.INC";

SUBDESIGN RADAR

( CLK,TP1,TR1 :INPUT;

  Q0[3..0],Q1[3..0],Q2[3..0],P:OUTPUT;)

 Variable

  T210A,T210B,T210C: T210;

  TS:DFF;

 BEGIN

  TS.D=VCC;

  TS.CLK=TP1;

  TS.CLRN=!TR1;

  T210A.CLK=CLK&TS.Q;

  T210B.CLK=CLK&TS.Q;

  T210C.CLK=CLK&TS.Q;

   T210A.RN=VCC;

   T210B.RN=VCC;

   T210C.RN=VCC;

  Q0[]=T210A.Q[];

  Q1[]=T210B.Q[];

  Q2[]=T210C.Q[];

  T210A.B=VCC;

  T210B.B=T210A.P;

  T210C.B=T210B.P & T210A.P;

  P=T210B.P;

 END;

Схема  определения расстояния до объекта расхода имеет следующие входные и выходные сигналы

CLC  – вход эталонной частоты,

TP1  вход выходного сигнала радара,

TR1  – вход отраженного сигнала.

Q0[3..0] - выход единиц расстояния в метрах;

Q1[3..0] - выход десятком единиц расстояния в метрах;

Q2[3..0] - выход сотен  единиц расстояния в метрах;

P – контрольный сигнал переноса.

 

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

Для этого модуля предварительно подготовлен стандартный INCLUDE файл "T210.INC".


SUBDESIGN T210

( CLK, RN, B :INPUT;

  P,Q[3..0]:OUTPUT;

)

 Variable

  RG[3..0],RP: DFF;

  BEGIN

  RG[].CLK=CLK&B;

  RP.CLK=!CLK;

  RG[].CLRN=RN;

CASE RG[].Q IS

WHEN 9 => RG[].D=0; RP.D=B"1";

   WHEN OTHERS   => RG[].D=RG[].Q+1; RP.D=B"0";

 END CASE;

     Q[] = RG[].Q;

     P=RP.Q;

  END;

 

Счетчик имеет следующие входные  и выходные сигналы:

  CLKтактовый вход;

  RN  - вход сброса по «0»;

  B   - вход переноса из младшей тетрады;

  P   - выход переноса в старшую тетраду;

Q[3..0]- выход счетчика.

Счётчик работает по классической схеме. Когда он досчитывает до кода «9» в оператореCASE  организуется обнуление счетчика на следующем такте. В том же операторе организуется  появление на один такт сигнала логической единицы на выходе переноса старшего разряда, который формируется на выходе триггера переноса RP.

Временная диаграмма работы радара в режиме определения расстояния до объекта приведена на рис 4.4.2

 Рис 4.4.2. Временная диаграмма работы радара

На примере, приведенном на рис 4.4.2. опорная тактовая частота гидролокатора  выбрана равной 1.5 кГц, что соответствует периоду 26.66 миллисекунд .Это позволило легко рассчитывать расстояние до объекта.

В данном конкретном примере оно равно  21 метру.

 Определение скорости  объекта.

Возможны два подхода к построению аппаратуры, определяющей расстояние до объекта.

Первый поход основан на том, что при движении объекта по направлению к локатору или его удалению от него, расстояние до объекта изменяется от импульса к импульсу локатора. Если период следования импульсов локатора равен t,   расстояние определённое по первому импульсу равно S1,  а по второму соответственно S2 то скорость объекта V можно определить по простой формуле:

V=(S1-S2)/t                                                                                     [3]

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

Второй подход основан на использовании эффекта Доплера. При таком подходе анализируется длительность импульса отраженного сигнала. Если длительность отраженного сигнала меньше, чем испускаемого то объект приближается, если больше – то удаляется, причём чем больше изменение длительности импульса, тем больше скорость объекта.

Пусть объект движется со скоростьюVo относительно локатора (будем считать что объект либо приближается , либо удаляется ). Тогда для времен прихода отраженного сигнала Tr1 и Tr2 (см рисунок 4.4.1), справедливы выражения:

Tr1=2S/(Vs+Vo)

Tr2=T+2 (S-VoT)/(Vs+Vo),

где Vs скорость распространения волн в среде а  T - длительность испускаемого импульса.

Отсюда можно получить выражение для длительности отраженного    импульса:

T= Tr2 - Tr1 = T-2 VoT/(Vs+Vo) = T(1-2Vo/(Vs+Vo))

 Отсюда легко получить зависимость скорости объекта Vo от длительности отраженного импульса T.

 Vo=Vs(T-T )/(T+T)                                                                         [4]

Из полученного выражения видно, что если T=T, то скорость объекта равна нулю. Если T равно бесконечности, то объект движется со скоростью Vs,  т.е. удаляется от локатора со скоростью распространения волн.

И хотя выражение [4] ничуть не проще формулы [3], оно позволяет строить очень удобные для локационной техники семы работы, поскольку вся информации об объекте определяется исходя из анализа одного отражённого импульса.

Несомненным преимуществом локационных схем, построенных на основе формулы [4] является то, что она позволяет обрабатывать одновременно импульсы от нескольких объектов, находящихся на различном расстоянии от локатора, если только их отметки не сливаются.

Рассмотрим структурную схему локатора скорости, построенную на базе формулы [4].  Эта схема приведена на рисунке 4.4.3


CLC

             Vs

           Vo

Рис 4.4.3. Структурная схему локатора скорости, построенная на базе

формулы [4].

Как видно из рисунка 4.4.3. представленная схема напрямую реализует формулу [4], для чего в неё введены вычитатель, сумматор, делитель и умножитель. Отсчет длительности импульсов в схеме ведётся с помощью счётчиков длительности прямого и отраженного сигнала. Схема управления нужна для организации правильной работы счетчиков. Она обеспечивает их запуск в момент прихода положительного фронта импульсов и останов в момент прихода отрицательного.

Данная схема обладает очень высоким быстродействием и может обрабатывать информацию о нескольких отраженных сигналах, если они не сливаются в один.


    4.5. Часы, счетчики времени, календари

Часы, счетчики времени, секундомеры, таймеры календари обычно выполняются на базе счетчиков, считающих в заданных пределах. Например, для счетчика минут нужны счетчики считающие от 0 до 5 и от 0 до 9, а для счетчика часов соответственно двоично-десятичный счетчик считающий от 0 до 23. Для управления работой устройств (установки, сброс, пуск и т.д.) используются дополнительные схемные узлы, управляющие работой счетчиков.

Рассмотрим несложную схему часов, описание которой на языке AHDL представлено ниже

SUBDESIGN WATCHMH

( CLK, CLKU, RN, MIN, HOURS :INPUT;

  Q[6..0],H[5..0]:OUTPUT;

)

Variable

  ME[3..0],RP : DFF;

  MD[2..0] : DFF;

  HE[5..0]: DFF;

BEGIN

  RP.CLK=!CLK;

  ME[].CLK=CLK&!MIN&!HOURS # CLKU&MIN;

  MD[].CLK=!ME[3].Q;

  ME[].CLRN=RN;

  MD[].CLRN=RN;

  HE[].CLRN=RN;

  HE[].CLK=!RP&!HOURS # CLKU&HOURS;

 

CASE ME[].Q IS

WHEN 9 => ME[].D=0;

   WHEN OTHERS   => ME[].D=ME[].Q+1;

 END CASE;

 CASE MD[].Q IS

WHEN 5 => MD[].D=0; RP.D=B"1";   

   WHEN OTHERS   => MD[].D=MD[].Q+1; RP.D=B"0";

 END CASE;

 CASE HE[].Q IS

WHEN 9 => HE[].D=H"10";

WHEN H"19" => HE[].D=H"20";

   WHEN H"23" => HE[].D=0;

   WHEN OTHERS   => HE[].D=HE[].Q+1;

 END CASE;

   Q[6..4] = MD[].Q;

   Q[3..0] = ME[].Q;

   H[] = HE[].Q;

  END;

.   содержащую регистр минут и регистр часов.

Схема имеет следующие входные и выходные сигналы.

   СLK - тактовый вход минут, имеющий частоту 1/60 Гц;

  CLKU - тактовый вход установок, имеющий частоту 1 Гц;

   MIN - вход установки минут;

 HOURS - вход установки часов;

     RN - вход сброса;

Q[6..0]- выходы двоично-десятичного счетчика минут;

 H[5..0]- выходы двоично-десятичного счетчика часов.

В рабочем режиме на входы MIN и HOURS поданы сигналы «0». При нажатии кнопки MIN, работа часов приостанавливается и начинается меняться показание минут в темпе частоты коррекции CLKU. Аналогичным образом, при нажатии кнопки HOURS происходит установка текущего значения часов.

Информация о текущем значении минут хранится в регистрах ME[3..0] – единицы минут, MD[2..0]- десятки минут. Информация о текущем значении часов хранится в регистре HE[5..0]. HE[3..0] – единицы часов, HE[5..4] – десятки часов.

В рассматриваемом описании часов на базе вышеуказанных регистров организованы двоично-десятичные счётчики. Счётчик на базе регистра ME[3..0]

считает от 0 до 9, счетчик на базе регистра MD[2..0] считает от 0 до 5 а счетчик на базе регистра HE[5..0] обеспечивает двоично-десятичный счёт от 0 до 23.

Для обеспечения правильного счёта во всём диапазоне значений и отработки режимов установки для управляющих тактовых сигналов используются достаточно сложные логические выражения:

  ME[].CLK=CLK&!MIN&!HOURS # CLKU&MIN;

  MD[].CLK=!ME[3].Q;

  HE[].CLK=!RP&!HOURS # CLKU&HOURS;

 Логическое выражение для ME[].CLK обеспечивает счёт минут от стандартного генератора CLK в рабочем режиме и от генератора установки CLKU в режиме установки минут (при нажатии кнопки MIN).

Логическое выражение для HE[].CLK обеспечивает счёт часов  от входа переноса счётчика минут RP в стандартном режиме работы и от генератора установки CLKU в режиме установки часов (при нажатии кнопки HOURS).

Логическое выражение для MD[].CLK обеспечивает счёт десятков минут от выхода переноса счётчика единиц минут ME[3].Q.

Ниже, на рисунке 4.5.1. приведён фрагмент временной диаграммы работы часов.

 Рис 4.5.1. Фрагмент временной диаграммы работы часов.

На временной диаграмме, представленной на рис 4.5.1. показан момент окончания установки минут (сигнал MIN переходит из состояния “1” в состояние “0”), один рабочий такт (момент 750.0 ns) и начало установки часов (сигнал HOURS переходит из состояния “0” в состояние “1”).

Схемы секундомеров проектируются аналогичным образом. Они, обычно, не имеют сигналов установки, но имеют кнопки «старт» и «стоп». При подаче единичного сигнала на вход «старт» регистры времени сбрасываются в «0» и начинается отсчет времени. При подаче единичного сигнала на вход «стоп» отсчет времени прекращается.

Схемы таймеров позволяют отсчитывать заданные интервалы времени. Они работают в реверсивном режиме (считают время в обратном порядке) имеют входы установки заданного времени, вход начала работы. По окончании отсчета времени они подают «1» на исполнительный вывод, определяющий окончание отсчета временного интервала.

Рассмотрим несложную схему таймера минут, описание которой приведено ниже:


SUBDESIGN TIMER

( CLK, CLKU, UST, START, RN :INPUT;

  Q[6..0], SQ,S :OUTPUT;

)

 Variable

  ME[3..0] : DFF;

  MD[2..0] : DFF;

  WT: DFF;

  WM: DFF;

  BEGIN

  WT.D=VCC;

  WT.CLK=START;

  WM.CLK=CLK;

  WM.CLRN=RN;

  WT.CLRN=RN&!WM.Q;

  ME[].CLK=CLK & !UST & SQ # CLKU & UST;

  MD[].CLK=ME[3].Q;

  ME[].CLRN=RN;

  MD[].CLRN=RN;

  SQ=WT.Q;

  S=WM.Q;

 IF WT.Q==1 THEN

   CASE ME[].Q IS

  WHEN B"0000" => ME[].D=9;

     WHEN OTHERS   => ME[].D=ME[].Q-1;

   END CASE;

   MD[].D=MD[].Q-1;

  END IF;

 IF WT.Q==0 THEN

   CASE ME[].Q IS

  WHEN 9 => ME[].D=0;

     WHEN OTHERS   => ME[].D=ME[].Q+1;

   END CASE;

   CASE MD[].Q IS

  WHEN 5 => MD[].D=0;  

     WHEN OTHERS   => MD[].D=MD[].Q+1;

   END CASE;

 END IF;

 IF ME[].Q==1 & MD[].Q==0 & WT.Q==1 THEN

   WM.D=B"1";

   ELSE WM.D=B"0";

 END IF;

   Q[6..4] = MD[].Q;

   Q[3..0] = ME[].Q;

 END;


Схема таймера имеет следующие входные и выходнын сигналы.

   СLK - тактовый вход минут, имеющий частоту 1/60 Гц;

  CLKU - тактовый вход установок, имеющий частоту 1 Гц;

   UST  кнопка установки таймера;

 STARTкнопка запуска таймера;

    RN - вход сброса;

     S - выход сигнала на исполнительный механизм;

    SQ - выход триггера управления (вспомогательный выход);

Q[6..0]- выходы двоично-десятичного счетчика минут;

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

Для управления режимами работы служит триггер WT.  В режиме ожидания триггер WT находится в нулевом состоянии. В этом режиме при нажатии кнопки UST счетчик минут начинает считать в прямом порядке импульсы с частотой CLKU, тем самым происходит установка начального значения таймера. При приходе положительного  фронта сигнала START триггер перебрасывается в состояние «1», поскольку на вход этого триггера постоянно подаётся напряжение высокого логического уровня. Перейдя в состояние логической единицы триггер WT переводит схему в режим счёта импульсов по убыванию с частотой СLK.

После того, как счётчик досчитает до кода «000000», в выходной триггер WM записывается сигнал «1», а триггер WT перебрасывается в состояние «0» и схема опять переходит в режим ожидания.

Управление  режимами счёта организовано с помощью условного оператора IF THEN. Внутри операторов находятся вложенные операторы CASE,  которые и организовывают двоично-десятичный счёт минут.

Операторы

   WT.CLK=START;

  WM.CLK=CLK;

определяют тактовые сигналы, которые подаются на входы триггеров управления WT и WM.

Оператор

     WT.CLRN=RN&!WM.Q;

определяет условия сброса триггера WT.

Операторы 

  ME[].CLK=CLK & !UST & SQ # CLKU & UST;

  MD[].CLK=ME[3].Q;

определяют правила подачи тактовых сигналов на младшие ME[].CLK и старшие MD[].CLK разряды счётчика минут. Из этих выражений видно, что на тактовый вход ME[].CLK поступают импульсы CLKU при сигнале UST равном логической единице и соответственно импульсы CLK при сигнале UST равном логическому нулю и сигнале SQ равному логической единице.

Примеры временной диаграммы работы таймера приведён на рис 4.5.2. и 4.5.3.

Рис 4.5.2. Примеры временной диаграммы работы таймера (установка начального значения и начало счёта).

На рисунке 4.5.2. показа первая фаза работы таймера. При подаче единичного сигнала на вход UST таймер с частой CLKU досчитывает до числа 23.  Затем при подаче логической единицы на вход START таймер переходит в режим рабочего счёта.

 

           

          Рис 4.5.3. Примеры временной диаграммы работы таймера (окончание счёта).

На рисунке 4.5.3. показа  вторая фаза работы таймера. Досчитав до нулевого значения таймер выдаёт единичный сигнал на выход управления исполнительным механизмом S и переводит таймер в режим ожидания (сигнал SQ сбрасывается в логический «0»)

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


4.6. Частотомеры

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

Существует несколько подходов к построению частотомеров. В частности при интегральном методе, опорная частота выбирается очень низкой, например, 0.5Гц и подсчитывается число периодов, входной частоты, укладывающихся в  один полупериод опорной частоты. Такой подход позволяет построить наиболее простые схемы, представляющие собой фактически счётчики с несложным управлением.

Недостатками такого подхода являются: невысокая точность  для входных сигналов с небольшой частотой и относительно большое время работы. Этот метод может применятся для измерения очень высоких частот – фактически на пределе срабатывания счётных триггеров. Для работы с очень высокими частотами опорная частота может быть также увеличена Так, например, для измерения частот в сотни мегагерц можно с успехом применять опорную частоту в десять килогерц,  что обеспечит погрешность  определения частоты менее 0.01%.

При интегральном подходе измеряемая частота Fv определяется соотношением

 Fv= n,  где n число периодов входной частоты, укладывающейся в

  полупериод опорной.

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

Если опорная частота равна F, а число импульсов, укладывающихся в полупериоде входной частоты равно n. Тогда значение  входной частоты Fv определяется выражением:

 Fv=F/n

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


Интегральные частотомеры.  

Это наиболее простой и широко распространённый тип частотомеров.

Рассмотрим схему интегрального измерителя частот, представленную на

рис 4.6.1.

 

                  Рис. 4.6.1. Структурная схема интегрального частотомера.


Схема частотомера имеет  следующие входные и выходные сигналы.

  СLKOP - тактовый импульсы опорной частоты равной 1 кГц;

  CLKIN вход неизвестной, измеряемой частоты;

 RH[3..0] старшие разряды регистра частоты;

 RS[3..0] средние разряды регистра частоты;

 RM[3..0] младшие  разряды регистра частоты.

.Опорная частота выбрана равной 1 МГц, поэтому входные частоты будут измеряться в мегагерцах.

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

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

Двоично-десятичный счетчик count3, выполняющий функции подсчёта числа импульсов измеряемой частоты, разработан на языке AHDL. Для обеспечения непосредственной выдачи результатов расчёта, например, на жидкокристаллический или светодиодный индикатор, работа счётчика организована по двоично-десятичной схеме, при которой мы сразу имеем все десятичные цифры для индикации.


Описание счётчика
count3 имеет следующий вид:

SUBDESIGN COUNT3

( CLK, RN  :INPUT;

  M[3..0], S[3..0], H[3..0] :OUTPUT;

)

Variable

  MT[3..0] : DFF;

  ST[3..0] : DFF;

  HT[3..0]: DFF;

BEGIN

  MT[].CLK=CLK;

  ST[].CLK=!MT[3].Q;

  HT[].CLK=!ST[3].Q;

  

  MT[].CLRN=RN;

  ST[].CLRN=RN;

  HT[].CLRN=RN;

CASE MT[].Q IS

WHEN 9 => MT[].D=0;

   WHEN OTHERS   => MT[].D=MT[].Q+1;

 END CASE;

 CASE ST[].Q IS

WHEN 9 => ST[].D=0;   

   WHEN OTHERS   => ST[].D=ST[].Q+1;

 END CASE;

 CASE HT[].Q IS

WHEN 9 => HT[].D=0;   

   WHEN OTHERS   => HT[].D=HT[].Q+1;

 END CASE;

   M[] = MT[].Q;

   S[] = ST[].Q;

   H[] = HT[].Q;

 END;

Схема счётчика  имеет следующие входные и выходные сигналы.

     СLK – входная частота;

     RN асинхронный сброс;

 H[3..0] выходы старшей тетрады частоты;

 S[3..0] выходы средней тетрады счётчика;

 M[3..0] выходы  младшей тетрады счётчика.


В состав счетчика входит регистр младшей тетрады
MT[3..0], средней тетрады MS[3..0], и старшей - MH[3..0].

Условия двоично-десятичного счёта отрабатываются с помощью группы операторов CASE, расписанных отдельно для каждой тетрады.

Нижеприведённые операторы обеспечивают  отработку сигналов переноса между тетрадами:

  MT[].CLK=CLK;

  ST[].CLK=!MT[3].Q;

  HT[].CLK=!ST[3].Q;

Младшая тетрада считает импульсы непосредственно входной частоты, средняя – импульсы переноса младшей, а старшая – импульсы переноса средгнй.

 Регистр для хранения результатов подсчёта частоты реализован на базе триггеров DFF. Схема четырехразрядного регистра представлена на рис 4.6.2.

 

 

 

                    Рис 4.6.2. Схема четырехразрядного буферного регистра.


Схема регистра   имеет следующие входные и выходные сигналы.

     СLK – входной тактовый сигнал записи данных;

 D0[3..0] входные сигнала регистра;

 Q0[3..0] выходные сигналы регистра;

По положительному фронту входного тактового сигнала СLK регистр записывает входные данные, заданные на шине D0[3..0]  и хранит их вплоть до прихода очередного импульса тактового сигнала.  

 

Временная диаграмма работы частотомера приведена на рис 4.6.3

Рис 4.6.3. Временная диаграмма работы частотомера.

На рисунке 4.5.3. представлен пример работы частотомера при измерении входной частоты 50 Мгц. Во втором цикле измерения из входного потока «вырезали» три рабочих такта, поэтому в результате получилась частота 47 МГц.

Частотомеры, работающие по методу определения периода.

 

В завершение обзора частотомеров рассмотрим структурную схему частотомеров, реализующих метод изменения периода. Как было отмечено выше, реализация данных частотомеров требует наличия операции деления.

Рассмотрим структурную схему частотомера, работающего по методу измерения периода, представленную на рис 4.6.4.

F

CLC

FI

       Значение частоты

Рис 4.6.4. Структурная схема частотомера, работающего по методу измерения периода.

Схема, представленная на рис 4.6.4. работает следующим образом:

Блок управления по положительному фронту входной неизвестной частоты FI сбрасывает счётчик импульсов опорной частоты (подаёт короткий импульс на вход RN) и подаёт сигнал разрежения счёта на вход ENA.  При приходе отрицательного фронта FI  работа счётчика блокируется (на вход ENA подаётся запрещающий сигнал). Кроме того в этот же момент на вход записи информации С выходного регистра подаётся сигнал записи длительностью достаточной для выполнения процедуры деления.

На выход выходного регистра Q выдаётся последняя рассчитанная частота.


4.7. Умножители

Умножители являются достаточно сложными электронными блоками, особенно если речь идёт об умножении много разрядных чисел. При работе с числами небольшой разрядности операцию умножения можно свести к табличному вычислению функций. Так, например, для умножения четырехразрядных чисел достаточно организовать таблицу умножения в виде ПЗУ объемом 256 байт. При этом получается очень высокое быстродействие и минимальное количество проблем при разработке схемы.

Для работы с восьмиразрядными числами потребуется ПЗУ объёмом 64К шестнадцатиразрядных слов, что уже может создать определённые проблемы.

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

result[15..0] = a[7..0]*b[7..0]=

          a[7..4]*b[7..4]*28

       +  a[7..4]*b[3..0]*24

       +  a[3..0]*b[7..4]*24

       +  a[3..0]*b[3..0]

В соответствии с этим методом два восьмиразрядных операнда a[7..0] и b[7..0] разбиваются на четыре четырёхразрядных операнда a[7..4], a[3..0], b[7..4] b[3..0] и их умножение осуществляется за четыре такта.

Структурная схема такого умножителя приведена на рис 4.7.1.

Умножитель имеет следующие входные и выходные сигналы:

       CLK – вход тактового сигнала, синхронизирующий работу умножителя

     Start вход запуска;

     Reset вход сброса;

   A[7..0] - вход данных первого множителя;

   B[7..0] - вход данных второго множителя;

Result[15..0]выход результата;

  Done_flag - выход квитирования результата, при Done_flag=1  на выходе Result[15..0] должен быть результат умножения.


a[3..0]

a[7..4]

sel[1]

a[3..0]

b[7..4]

sel[1]

        

             result[15..0]

      

CLK

Start                 DONE_FLAG

CLKEN

 Рис 4.6.1. Структурная схема такого умножителя восьмиразрядных чисел.


Как видно из рис 4.6.1,  в состав умножителя входят:

  •  два четырехразрядных мультиплексора MUX4_2_1;
  •  комбинационная схема сдвига данных – SHIFTER;
  •  шестнадцатиразрядный, накапливающий сумматор – ACCUM;
  •  счётчик тактов – COUNTER;
  •  блок управления CONTROL;
  •  блок умножения четырёхразрядных чисел MULT 44.

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

На втором такте перемножается старшая тетрада множителя А на младшую тетраду множителя В, после чего результат сдвигается влево на 4 разряда (умножается на 16) и добавляется к результату.

На третьем  такте перемножается младшая тетрада множителя А на старшую тетраду множителя В, после чего результат опять же сдвигается влево на 4 разряда (умножается на 16) и добавляется к накопленной сумме.

На четвёртом такте перемножаются старшие  тетрады множителей после чего результат сдвигается влево на 8 разрядов (умножается на 256) и добавляется к накопленной сумме, после чего сумма, накопленная в сумматоре содержит искомое произведение.

Рассмотрим работу отдельных модулей умножителя.

 Модуль MUX4_2_1.

MUX4_2_1 – четырехразрядный мультиплексор 2 в 1.

Выводы модуля:

A[3..0], B[..0] -  две четырёхразрядные входные шины;

           Sel  адресный вход;

       Y[3..0] -  четырёхразрядная выходная шина;

Логика работы модуля:

При Sel=0 на выход модуля Y[] передаются данные с входной шины A[];

При Sel=1 на выход модуля Y[] передаются данные с входной шины B[].


 
Модуль SHIFTER.

Данный модуль реализует комбинационную схему сдвига данных.

Выводы модуля:

  IN[7..0] – восьмиразрядная входная шина данных.

 CNT[1..0] – двухразрядная шина управления сдвигом;

 OUT[15..0] – шестнадцатиразрядная выходная шина данных.

Логика работы модуля:

  •  если CNT[1..0]=B “00” , то OUT[15..8]=0, OUT[7..0]= IN[7..0], т.е. данные передаются без сдвига.
  •  если CNT[1..0]=B “01” , то OUT[15..12]=0, OUT[11..4]= IN[7..0], OUT[7..0]=0, т.е. данные передаются со сдвигом влево на 8 разряда.
  •  если CNT[1..0]=B “10” , то OUT[15..8] = IN[7..0], OUT[3..0]=0, т.е. данные передаются со сдвигом влево на 4 разряда.
  •  если CNT[1..0]=B “11” , то OUT[15..8]=0, OUT[7..0]= IN[7..0], т.е. данные передаются без сдвига.

Модуль CONTROL.

Модуль представляет собой конечный автомат, управляющий работой умножителя.

Перечень состояний автомата:

  •  IDLE – состояние ожидания (исходное состояние);
  •  LСB – осуществляется умножение младших разрядов множителей a[3..0], b[3..0], в накапливающий сумматор записывается промежуточный результат.
  •  MID – последовательно осуществляются умножение следующих разрядов множителей a[3..0], b[7..4]. и a[7..4], b[3..0], на каждом такте накапливающий сумматор осуществляет сложение хранящихся в нём данных и текущего результата умножения.
  •  MSB –  осуществляются умножение старших разрядов множителей a[7..4], b[7..4], накапливающий сумматор осуществляет сложение хранящихся в нём данных и текущего результата умножения.
  •  ERRсостояние ошибки.


Выводы модуля:

        CLK – тактовый вход;

        RST вход асинхронного сброса автомата в начальное состояние;

      START вход запуска;

 COUT[1..0] – вход номера такта процедуры умножения.

  SEL[1..0] – выходные сигналы управления мультиплексорами.

 SHIFT[1..0] – выходные сигналы управления модулем SHIFTER;

       DONE выходной сигнал окончания работы;

      CLKEN выходной сигнал разрешающий запись данных в

                                 накапливающий сумматор;

     REGCLR выходной сигнал, осуществляющий синхронный сброс в

                                 нуль накапливающего сумматора.

Модуль ACCUM.

ACCUM -  шестнадцатеричный накапливающий сумматор. В состав сумматора входит собственно схема арифметического сумматора SUM, регистр хранения накопленной суммы REG и схема управления.

Выводы модуля:

        CLK тактовый вход;

        CLR вход синхронного сброса содержимого накапливающего

                                  сумматора в нуль, активный уровень – логическая

                                  единица;

      CLKEN входной сигнал разрешения работы, при CLKEN=0 работа

                               разрешена,   при CLKEN=1 работа запрещена но сброс

                               накапливающего сумматора в нуль разрешён;

 OUT[15..0] – шестнадцатеричный выход данных;

          A шестнадцатеричный вход данных.

Логика работы модуля:

При CLR=1 по переднему фронту сигнала CLK содержимое регистра REG сбрасывается в «0» независимо от состояния сигнала на входе CLKEN;

При CLKEN=0 результат суммирования сумматором SUM содержимого регистра REG и входного слова REG по переднему фронту сигнала записывается в регистр REG и выдаётся на выходную шину OUT[15..0].


Модуль
COUNTER.

COUNTER -  двухразрядный счётчик.

Выводы модуля:

        CLK тактовый вход;

        CLR вход асинхронного сброса счётчика сумматора в нуль

                                 активный уровень сигнала– логическая единица;

      CLKEN входной сигнал разрешения работы активный

                                 уровень сигнала– логический ноль;

 TACT[1..0] – двухразрядный  выход результата.

Счётчик реализует стандартный алгоритм прямого счёта, пробегая по циклу состоянии «0», «1», «2», «3».

Модуль MULT44.

MULT44модуль, реализующий операцию умножения четырёхразрядных чисел.

Выводы модуля:

     A[4..1] – четырёхразрядный множитель A;

     B[4..1] – четырёхразрядный множитель B;

 RESULT[7..0] – восьмиразрядный  выход результата.

Модуль MULT44 строится на основе параметризуемого умножителя lpm_mult, входящего в библиотеку lpm модулей системы MAX+PLUSII.

Прототип модуля находится в файле LPM_MULT. INC, находящемся в папке <Drive>:\maxplus2\max2lib\mega_lpm.

Прототип имеет следующий вид:

FUNCTION lpm_mult

  (dataa[(LPM_WIDTHA-1)..0], datab[(LPM_WIDTHB-1)..0],

   sum[LPM_WIDTHS-1)..0], alcr, clock)

WITH(LPM_WIDTHA, LPM_WIDTHB, LPM_WIDTHP,

    LPM_WIDTHS, LPM_REPRESENTATION,

    LPM_PIPELINE, LATENCY,  INPUT_A_IS_CONSTANT,

    INPUT_B_IS_CONSTANT)

RETURNS (RESULT[LPM_WIDTHP-1)..0]);


Пример непосредственного обращения к модулю

RESULT[7..0]= lpm_mult(.dataa[]=a[],(.datab[]=b[])

WITH

(LPM_WIDTHA=4, LPM_WIDTHB=4, LPM_WIDTHS=8);

Модуль MULT.

MULTэто модуль верхнего уровня в иерархии описаний умножителя, выводы этого модуля соответствуют выводам умножителя.

Рекомендации по порядку разработки схемы.

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

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

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


5  Проектирование схем с магистральным  вводом выводом данных

В настоящее время одной из серьёзных проблем при разработке аппаратуры является проблема уменьшения количества выводов БИС и упрощения разводки печатных плат. Особенно остро эта проблема стоит в случае работы с много разрядными шинами данных, размерность которых нередко достигает 64, 128 а иногда и 256 разрядов.

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

5.1 Правила работы с магистралью, арбитр.

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

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

При разработке шинных приёмо-передатчиков приходится иметь дело с выводами, которые в одни моменты времени являются входами, а в другие – выходами. Такие выводы называются двунаправленными, в САПР MAX+PLUSII эти выводы имеют тип BIDIR.

Работа с двунаправленными выводами в САПР MAX+PLUSII организуется с помощью элемента TRI, имеющего вход, выход и сигнал управления. Условное обозначение элемента приведено на рис 5.1.1.

  OE

   IN   OUT

 Рис 5.1.1.  Схемотическое обозначение магистрального элемента TRI.

Элемент TRI имеет следующую логику работы. Если сигнал OE равен логической единице, то информация с входа IN проходит на выход OUT. Если сигнал OE равен логическому нулю, то независимо от информации на входе IN  выход OUT находится в высокоимпедансном состоянии (отключен). Такое состояние обозначается как «Z».


Рассмотрим несложный пример приёмопередатчика, работающего с магистралью, представленный на рис 5.1.2.

Рис 5.1.2. Пример приёмопередатчика, работающего с магистралью,

Представленный приёмопередатчик имеет следующие входные и выходные сигналы:

 IN[2..1] – входная шина данных;

 DB[2..1 – двунаправленная шина данных;

      CS вход разрешения работы

     ADR вход выбора направления передачи;

OUT[2..1] - выходная шина данных.

 Данная схема имеет следующую логику работы.

 При CS=0 работа запрещена, выходная шина OUT[2..1] и двунаправленная шина DB[2..1] находятся в состоянии «Z».

 При CS=1 работа разрешена, состояние шина OUT[2..1] и  DB[2..1] определяется сигналом на входе ADR.

 При CS=1 и ADR=0 данные передаются с шины DB[2..1] на шину OUT[2..1].

 При CS=1 и ADR=1 данные передаются с шины IN[2..1] на шину DB[2..1].

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

SUBDESIGN SHIN2

 (IN[2..1],CS,ADR : INPUT;

  OUT[2..1]: OUTPUT;

  DB[2..1]:DIDIR;

 )

VARIABLE

 TRI_B[2..1]:TRI;

 TRI_OUT[2..1]:TRI;

BEGIN

 CASE (CS,ADR) IS

   WHEN B”10” => TRI_OUT[].OE=VCC;

   WHEN B”11” => TRI_B[].OE=VCC;

 END CASE;

 TRI_B[].IN=IN[];

 TRI_OUT[].IN=DB[];

 DB[]=TRI_B[].OUT;

 OUT[]=TRI_OUT[].OUT;

END

В приведённом текстовом описании выводы группы DB[2..1] имеют тип BIDIR.

 В разделе VARIABLE объявлены  две переменные  TRI_B и две переменные TRI_OUT каждая из которых обозначает примитив буфера с тремя состояниями TRI.

Таким образом, компилятору явно указывается, что на соответствующих выводах БИС следует использовать буферы с тремя состояниями.

Выводы CS и ADR образуют временную группу, оцениваемую в операторе CASE. Заметим, что при CS=0 и произвольном сигнале на входе ADR, значения логических функций TRI_B[] и TRI_OUT[] явно не определены.

По умолчанию их значения на данных наборах аргументов – логический нуль.  Поэтому при CS=0 все буферы TRI будут находится в состоянии «Z».

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

Результаты моделирования приёмопередатчика приведены на рис 5.1.3.

Рис 5.1.3. Результаты моделирования работы приёмопередатчика.

5.2 Подготовка временных диаграмм.

 При подготовке временных диаграмм для моделирования магистральных устройств, следует учитывать, что двунаправленные выводы БИС присутствуют на временной диаграмме дважды: как входы и как выходы.

Поэтому на временной диаграмме, представленной на рис 5.1.3. группа отображена и как группа входов DB[2..1] так и как группа выходов DB[2..1].

Данные, поступающие на входную шину, помещаются на входную шину и при моделировании автоматически отображаются на выходной шине DB[2..1]. Данные, снимаемые с двунаправленной шины, отображаются на выходной шине, при этом входная шина должна быть в состоянии отключено «Z».

На временной диаграмме состояние «Z» отображается жирной линией, расположенной посредине между уровнем логического «0» и уровнем логической «1».

Отметим, что если в процессе вывода данных из БИС на двунаправленную шину не перевести соответствующий ей входной сигнал в состояние «Z»  возникнет конфликт сигналов между входным драйвером и выходным усилителем БИС, что приведёт при моделировании работы схемы к появлению сигналов неопределённости «X», которые отображаются на временной диаграмме в виде сетки.

5.3. Пример сумматора с магистральным вводом-выводом данных.

Рассмотрим схему сумматора с магистральным вводом-выводом данных представленную на рис 5.2.1.

 M

  CLK     

   DON

 Рис 5.2.1 Структурная схема сумматора с магистральным вводом-выводом данных.

Представленная схема сумматора имеет следующие входные и выходные сигналы:

 M[8..1] – восьмиразрядная двунаправленная  магистраль;

     CLC вход тактового сигнала;

     DON выход сигнала окончания формирования суммы;

Работа схемы осуществляется в три такта:

  •  на первом такте происходит считывание с магистрали M  первого слагаемого и запись в регистр A;
  •  на втором такте происходит считывание с магистрали M второго слагаемого и запись в регистр B;
  •  на третьем такте происходит вычисление суммы и выдача результата на  магистраль M.

Работой схемы управляет арбитр, обеспечивающий корректную работу с магистралью.

Рассмотрим поведенческое описание работы восьмиразрядного  сумматора с магистральным вводом-выводом данных.

SUBDESIGN MSUM

(  

  CLK: INPUT;

  M[7..0]   : BIDIR;

  DONE : OUTPUT;

)

VARIABLE

  RA[7..0] : DFF;

  RB[7..0] : DFF;

  TT[7..0] : TRI;

  CN[1..0] : DFF;

BEGIN

  CN[].CLK= !CLK;

  RA[].D=M[];

  RB[].D=M[];

  CASE CN[].Q IS

     WHEN 2 => CN[].D=0;

     WHEN OTHERS => CN[].D=CN[].Q+1;

   END CASE;

  

RA[].CLK=CN0.Q & CLK;

RB[].CLK=CN1.Q & CLK;

TT[].OE= !CN0.Q & !CN1.Q;

TT[].IN=RA[].Q+RB[].Q;

M[7..0]=TT[].OUT;

DONE=!CN0.Q & !CN1.Q;

END;

В данном описании сумматора введены следующие переменные

 RA[7..0] – регистр хранения слагаемого A;

 RB[7..0] – регистр хранения слагаемого B;

 TT[7..0] – восемь двунаправленных элементов ввода-вывода типа TRI;

 CN[1..0] – регистр управляющего счётчика CN.

Управляющий счётчик считает от «0» до «2». Организуется работа счётчика в соответствующем операторе CASE, обеспечивающем переход счёта из состояния «2» в состояние «0».

При состоянии счётчика равном «1», происходит запись данных из магистрали M[] в регистр RA, а при состоянии равном «2», соответственно в регистр RB.

Управление этими процессами задаётся операторами:

  RA[].CLK=CN0.Q & CLK;

  RB[].CLK=CN1.Q & CLK;

  RA[].D=M[];

  RB[].D=M[];

При состоянии управляющего счётчика CN равном «0», происходит вычисление суммы и выдача результата на магистраль M[], что, в свою очередь,  определяется операторами:

TT[].IN=RA[].Q+RB[].Q;

TT[].OE= !CN0.Q & !CN1.Q;

M[7..0]=TT[].OUT;

При состоянии управляющего счётчика CN равном «0», происходит также формирование сигнала завершения работы DONE с помощью оператора

DONE=!CN0.Q & !CN1.Q;

Рассмотрим пример временной диаграммы работы восьмиразрядного  сумматора с магистральным вводом-выводом данных. Данная диаграмма представлена на рис 5.2.2.

 Рис 5.2.2. Пример временной диаграммы работы восьмиразрядного  сумматора с магистральным вводом-выводом данных. Магистраль M на диаграмме представлена и как вход и как выход.

На примере, представленном на рис 5.2.2. производятся три цикла работы сумматора, на которых выполняются следующие примеры:

50+85=135

39+1=40

127+117=244.

Как и положено, операция сложения выполняется три такта. На каждом третьем такте  входная шина M переводится в состояние «Z». На этом же такте на выходную шину M выдает результат суммирования

При внимательном изучении временной диаграммы можно заметить переходные процессы при переключении входных сигналов магистрали в состояние Z и обратно. Это происходит из-за ненулевого времени переключения элемента TRI из активного состояния в состояние Z и обратного переключения. В течении короткого времени этих переключений на магистраль находится либо в состоянии «Z» (элемент TRI ещё не включился и на магистрале нет активного сигнала) , либо состоянии «Х» (элемент TRI ещё не успел  выключился и на магистрале находятся два активных источника сигнала).

Более подробно эти переходные процессы показаны на рис 5.2.3.

Рис 5.2.3. Более подробно эти переходные процессы переключения состояний магистрали.

Такие переходные процессы являются кратковременными и не влияют на правильную работу аппаратура.


Литература

1. Комолов Д.А., Мяльк Р.А., Зобенко А.А., Филиппов А.С. Системы автоматизированного проектирования фирмы Altera MAX+PLUS II и QUARTUS II. –Москва: ИП РадиоСофт, 2002-352с.: ил.

2. Антонов А.П., ЯЗЫК ОПИСАНИЯ ЦИФРОВЫХ УСТРОЙСТВ AlteraHDL. Москва, РадиоСофт, 2002. – 224с.

3. Стешенко В.Б. ПЛИС фирмы ALTERA: проектирование устройств обработки сигналов. – Москва: ДОДЭКА, 2002 – 128с.


 

А также другие работы, которые могут Вас заинтересовать

47506. Методи стиснення інформації 161.5 KB
  Текст складається з досить обмеженої кількості символів. Український алфавіт наприклад складається з 33 літер та невеликої кількості спеціальних символів на кшталт коми тире апострофа и тд. Якщо враховувати всі 256 символів то для не буде різниці в стисканні тестового чи exe файлу. Файл довжиною в 100 байт що має 6 різних символів в собі.
47507. МЕТОДИЧНІ ВКАЗІВКИ ПО ВИКОНАННЮ РОЗДІЛУ ОХОРОНА ПРАЦІ 116 KB
  Методичні вказівки по виконанню розділу Охорона праці випускної молодшого спеціаліста для студентів спеціальності 5. Методичні вказівки роз'ясняють зміст і структуру розділу Охорона праці у випускній роботі молодшого спеціаліста. В них приводяться загальні організаційні моменти щодо роботи над розділом правил оформлення чернетки та опрацювання зауважень консультанта з охорони праці та навколишнього середовища.
47508. МЕТОДИЧНІ ВКАЗІВКИ ДО ВИКОНАННЯ РОЗДІЛУ БЕЗПЕКА ЖИТТЯ І ДІЯЛЬНОСТІ ЛЮДИНИ 888.5 KB
  Враховуючи що нещодавно Україна заявила про підтримку Концепції ООН де пріоритет віддається розвитку безпеки кожної людини а також виходячи з незадовільного стану безпеки громадян нашої держави якісна розробка питань забезпечення безпеки життя та діяльності людини БЖДЛ з метою запобігання виникнення ризику життя і здоров’ю людей має бути повною мірою реалізована у дипломному проектуванні виходячи з основних складових БЖДЛ Безпека життєдіяльності Екологія Охорона праці в галузі Цивільна оборона. При виконанні розділу “Безпека...
47510. Методичні вказівки. Фінанси 762 KB
  Вступ 5 Організація підготовки до захисту дипломної роботи 7 Захист дипломних робіт 14 Структура дипломної роботи 15 3.2 Суть дипломної роботи 20 5.2 Типи додатків 24 Правила оформлення дипломної роботи 25 7. Зразок оформлення титульного листа дипломної роботи 42 Додаток Б.
47511. Менеджмент організацій. Методичні вказівки 699.5 KB
  У сфері теорії дипломна робота виконується на основі критичного аналізу робіт, як українських економістів і фінансистів, так і закордонних. Питання теорії повинні бути взаємопов’язані з практичною діяльністю та проілюстровані статистичною інформацією
47512. Методичні вказівки до виконання дипломної роботи. Менеджмент організацій 480 KB
  МЕНЕДЖМЕНТ ОРГАНІЗАЦІЙ ОКП СПЕЦІАЛІСТ ПІДГОТОВКА НАПИСАННЯ ЗАХИСТ для всіх форм навчання 2009 Методичні вказівки до виконання дипломної роботи для студентів спеціальності
47514. Методичні вказівки. Біотехнологія 929.5 KB
  Технологічна схема ТС виробництва Приклад зображення хімічної схеми виробництва Дипломний проект як правило являє собою проект виробництва удосконалення виробництва цільового продукту або напівпродукту складений на базі діючого виробництва або за результатами науководослідних і дослідноконструкторських робіт. У процесі роботи над дипломним проектом за освітньокваліфікаційним рівнем бакалавр вирішуються такі завдання: розширення потужності діючого виробництва або організації випуску нового виду...