Язык AHDL


Создание дешифраторов


В AHDL  для создания дешифратора Вы можете использовать или оператор Truth Table или lpm_compare или  lpm_decode функции.

Файл 7segment.tdf,  приведенный ниже, является дешифратором для комбинации светоизлучающих диодов (LED). LED отображают шестнадцатеричные числа.

SUBDESIGN 7segment

(

i[3..0]                : INPUT;

a, b, c, d, e, f, g            : OUTPUT;

)

BEGIN

   TABLE

      i[3..0]  => a, b, c, d, e, f, g;

      H"0"    => 1, 1, 1, 1, 1, 1, 0;

      H"1"    => 0, 1, 1, 0, 0, 0, 0;

      H"2"    => 1, 1, 0, 1, 1, 0, 1;



      H"3"    => 1, 1, 1, 1, 0, 0, 1;

      H"4"    => 0, 1, 1, 0, 0, 1, 1;

      H"5"    => 1, 0, 1, 1, 0, 1, 1;

      H"6"    => 1, 0, 1, 1, 1, 1, 1;

      H"7"    => 1, 1, 1, 0, 0, 0, 0;

      H"8"    => 1, 1, 1, 1, 1, 1, 1;

      H"9"    => 1, 1, 1, 1, 0, 1, 1;

      H"A"    => 1, 1, 1, 0, 1, 1, 1;

      H"B"    => 0, 0, 1, 1, 1, 1, 1;

      H"C"    => 1, 0, 0, 1, 1, 1, 0;

      H"D"    => 0, 1, 1, 1, 1, 0, 1;

      H"E"    => 1, 0, 0, 1, 1, 1, 1;

      H"F"    => 1, 0, 0, 0, 1, 1, 1;

   END TABLE;

END;

В этом примере выходной  набор для всех 16 возможных  входных наборов i[3..0] описан в операторе Truth Table

Файл decode3.tdf,  приведенный ниже, является дешифратором адреса для реализации 16-битной микропроцессорной системы.

SUBDESIGN decode3

(

addr[15..0], m/io         : INPUT;

rom, ram, print, sp[2..1] : OUTPUT;

)

BEGIN

   TABLE

      m/io, addr[15..0]                    => rom, ram,  print,    sp[];

      1,    B"00XXXXXXXXXXXXXX"              => 1,    0,       0,         B"00";

      1,    B"100XXXXXXXXXXXXX"               => 0,    1,       0,         B"00";

      0,    B"0000001010101110"      => 0,    0,       1,         B"00";




      0,    B"0000001011011110"      => 0,    0,       0,         B"01";

      0,    B"0000001101110000"      => 0,    0,       0,         B"10";

   END TABLE;

END;

В этом примере существуют тысячи входных наборов и описывать их все в операторе Truth Table

непрактично. Вместо этого Вы можете использовать логический уровень Х для указания того, что выход не зависит от соответствующего входа. Например, в первой строчке оператора TABLE выход  rom должен быть высоким для всех 16,384 входных наборов addr[15..0], начинающихся с 00. Следовательно Вам необходимо точно определить только общую часть входного набора, а для остальных входов использовать символ Х.

При использовании символов Х  Вы должны гарантировать отсутствие наложений между битовыми комбинациями в таблице истинности. Язык AHDL предполагает что одновременно только одно условие в таблице истинности может быть истинно.

Файл decode4.tdf, приведенный ниже, использует функцию lpm_decode для получения такой же функциональности как и файл decode1.tdf.

INCLUDE "lpm_decode.inc";

SUBDESIGN decode4

(

address[15..0]   : INPUT;

chip_enable      : OUTPUT;

)

BEGIN

chip_enable = lpm_decode(.data[]=address[])

WITH (LPM_WIDTH=16, LPM_DECODES=2^10)

      RETURNS (.eq[H"0370"]);

END;


Содержание раздела