Проектирование счетчика с двумя режимами работы: М=0 – счетчик по модулю 12, M=1 – счетчик по модулю 9, страница 3

    0,1,0,1 :: 0,1,1,0 ;

    0,1,1,0 :: 0,1,1,1;

    0,1,1,1 :: 1,0,0,0;

    1,0,0,0 :: 1,0,0,1;

    1,0,0,1 :: 1,0,1,0;

    1,0,1,0 :: 1,0,1,1;

    1,0,1,1 :: 1,1,0,0;

    1,1,0,0 :: 0,0,0,0;

    1,1,0,1 :: 0,0,0,0;

    1,1,1,0 :: 0,0,0,0;

    1,1,1,1 :: 0,0,0,0;               

END TRUTH_TABLE;

ELSE

   TRUTH_TABLE

  Y[3],Y[2],Y[1],Y[0]  :: Y[3],Y[2],Y[1],Y[0];

  "--------------------------------

    0,0,0,0 :: 0,0,0,1;

    0,0,0,1 :: 0,0,1,0;

    0,0,1,0 :: 0,0,1,1;

    0,0,1,1 :: 0,1,0,0;

    0,1,0,0 :: 0,1,0,1;

    0,1,0,1 :: 0,1,1,0;

    0,1,1,0 :: 0,1,1,1;

    0,1,1,1 :: 1,0,0,0;

    1,0,0,0 :: 0,0,0,0;

    1,0,0,1 :: 0,0,0,0;

    1,0,1,0 :: 0,0,0,0;

    1,0,1,1 :: 0,0,0,0;

           TRUTH_TABLE

  Y[3],Y[2],Y[1],Y[0]  :: Y[3],Y[2],Y[1],Y[0];

  "--------------------------------

    0,0,0,0 :: 0,0,0,1;

PROCEDURE COUNTDSL (

      INPUT M, C, R ;

      OUTPUT Q3, Q2, Q1, Q0 ;

);

NODE Y[4] CLOCKED_BY C RESET_BY /R;

IF M = 0 THEN

           TRUTH_TABLE

  Y[3],Y[2],Y[1],Y[0]  :: Y[3],Y[2],Y[1],Y[0];

  "--------------------------------

    0,0,0,0 :: 0,0,0,1;

    0,0,0,1 :: 0,0,1,0;

    0,0,1,0 :: 0,0,1,1;

    0,0,1,1 :: 0,1,0,0;

    0,1,0,0 :: 0,1,0,1;

    0,1,0,1 :: 0,1,1,0 ;

    0,1,1,0 :: 0,1,1,1;

    0,1,1,1 :: 1,0,0,0;

    1,0,0,0 :: 1,0,0,1;

    1,0,0,1 :: 1,0,1,0;

    1,0,1,0 :: 1,0,1,1;

    1,0,1,1 :: 1,1,0,0;

    1,1,0,0 :: 0,0,0,0;

    1,1,0,1 :: 0,0,0,0;

    1,1,1,0 :: 0,0,0,0;

    1,1,1,1 :: 0,0,0,0;               

END TRUTH_TABLE;

ELSE

   TRUTH_TABLE

  Y[3],Y[2],Y[1],Y[0]  :: Y[3],Y[2],Y[1],Y[0];

  "--------------------------------

    0,0,0,0 :: 0,0,0,1;

    0,0,0,1 :: 0,0,1,0;

    0,0,1,0 :: 0,0,1,1;

    0,0,1,1 :: 0,1,0,0;

    0,1,0,0 :: 0,1,0,1;

    0,1,0,1 :: 0,1,1,0;

    0,1,1,0 :: 0,1,1,1;

    0,1,1,1 :: 1,0,0,0;

    1,0,0,0 :: 0,0,0,0;

    1,0,0,1 :: 0,0,0,0;

    1,0,1,0 :: 0,0,0,0;

    1,0,1,1 :: 0,0,0,0;

    1,1,0,0 :: 0,0,0,0;

    1,1,0,1 :: 0,0,0,0;

    1,1,1,0 :: 0,0,0,0;

    1,1,1,1 :: 0,0,0,0;

END TRUTH_TABLE;

END IF;

      [Q3..Q0]=Y;

END COUNTDSL;

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

 

Рис.6

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

Для реализации автомата необходимы следующие логические элементы: 3-И, 4-И, 5-И, 3-ИЛИ, 5-ИЛИ, инвертор, D-триггер.

УГО элементов приведены на рисунке 7.

Рис.7

Ниже приведены DSL-модели данных логических элементов:

PROCEDURE AND3_DSL (

      INPUT A, B, C ;

      OUTPUT Y ;

);

Y=*(A,B,C);

END AND3_DSL;

PROCEDURE AND4_DSL (

      INPUT A, B, C, D ;

      OUTPUT Y ;

);

Y=*(A,B,C,D);

END AND4_DSL;

PROCEDURE AND5_DSL (

      INPUT A, B, C, D, E ;

      OUTPUT Y ;

);

Y=*(A,B,C,D,E);

END AND5_DSL;

PROCEDURE OR3_DSL (

      INPUT A, B,C;

      OUTPUT Y ;

);

Y=+(A,B,C);

END OR3_DSL;

PROCEDURE OR5_DSL (

      INPUT A, B, C, D, E ;

      OUTPUT Y ;

);

Y=+(A,B,C,D,E);  

END OR5_DSL;

PROCEDURE INV_DSL (

      INPUT A ;

      OUTPUT Y ;

);

Y=/A;

END INV_DSL;

PROCEDURE D_DSL (

      INPUT S, R, D, C ;

      OUTPUT Q, NQ ;

);

NODE Y CLOCKED_BY C  RESET_BY /R  PRESET_BY /S;

Y.D=D;

Q=Y;

NQ=/Y;

END D_DSL;

Схема, построенная на спроектированных элементах, приведена на рисунке 8.  

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

Рис.9

7.Синтез комбинационной части автомата на мультиплексорах.

Учитывая, что функция возбуждения зависит от 5 переменных необходимо спроектировать мультиплексор 32->1. На его адресные входы подавать значения аргументов функции возбуждения, а на входы данных – значения самой функции при соответствующих значениях аргументов. В соответствии с заданием мультиплексор реализуем в виде DSL-блока, используя оператор TRUTH-TABLE.