Вопрос 13 - Трехстабильный порт. Назначение, область применения. Использование примитивы TRI для проектирования трехстабильного порта. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вопрос 13 - Трехстабильный порт. Назначение, область применения. Использование примитивы TRI для проектирования трехстабильного порта.



 

FUNCTION TRI (in, oe)

RETURNS (out);

 

Примитивы TRI, которые управляют портами OUTPUT или BIDIR, имеют вход разрешения выхода (Output Enable), который переводит выход в высокоимпедансное состояние.

Вы можете создать тристабильную шину путем соединения примитивов TRI и портов OUTPUT или BIDIR вместе с помощью узла TRI_STATE_NODE типа. Схема управления должна обеспечивать разрешение не более одного выхода в одно и тоже время.

Файл tri_bus.tdf, приведенный ниже, реализует тристабильную шину, используя узел TRI_STATE_NODE типа, созданный в объявлении Node.

 

SUBDESIGN tri_bus

(

in[3..1], oe[3..1]: INPUT;

out1: OUTPUT;

)

 

VARIABLE

tnode: TRI_STATE_NODE;

BEGIN

tnode = TRI(in1, oe1);

tnode = TRI(in2, oe2);

tnode = TRI(in3, oe3);

out1 = tnode;

END;

 

В этом примере несколько присваиваний узлу tnode, связывают сигналы вместе. Для реализации тристабильной шины требуется тип TRI_STATE_NODE, вместо типа NODE: для типа NODE сигналы связываются вместе с помощью проводного И или проводного ИЛИ, тогда как для типа TRI_STATE_NODE сигналы соединяются с тем же самым узлом. Однако, если только одна переменная присваивается узлу TRI_STATE_NODE, то она трактуется как переменная обычного типа NODE.

 

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

 


Параметризированная мегафункция lpm_bustri:

 

 

 

FUNCTION lpm_bustri (data[LPM_WIDTH-1..0],

enabletr, enabledt)

WITH (LPM_WIDTH)

RETURNS (tridata[LPM_WIDTH-1..0],

result[LPM_WIDTH-1..0]);


 

 

Двунаправленный порт:

 

INCLUDE "lpm_bustri.inc";

CONSTANT wt = 8;

CONSTANT ewt = wt-1;

SUBDESIGN bustri

(in_en: INPUT = VCC;

out_en: INPUT = GND;

outdata[ewt..0]: INPUT;

indata[ewt..0]: OUTPUT;

in/out[ewt..0]: BIDIR;

)

--VARIABLE

--bidir_port: lpm_bustri WITH(LPM_WIDTH = wt);

BEGIN

(in/out[], indata[]) = lpm_bustri(outdata[],

in_en, out_en)

WITH(LPM_WIDTH = wt);

--bidir_port.data[] = outdata[];

--bidir_port.enabledt = out_en;

--bidir_port.enabletr = in_en;

--in/out[] = bidir_port.tridata[];

--indata[] = bidir_port.result[];

END;


 

Вопрос 15 - Реализация звена нерекурсивного фильтра типа TDF II с использованием мегафункции LPM_MULT. Организация конвейерной обработки.

 

Параметризированная мегафункция lpm_mult:

FUNCTION lpm_mult

(

dataa[(LPM_WIDTHA - 1)..0], --входной порт множимого. Порт обязателен!

datab[(LPM_WIDTHB - 1)..0], --входной порт множителя. Порт обязателен!

sum[(LPM_WIDTHS - 1)..0], -- входной порт сумматора. Порт обязателен!

aclr, -- входной порт асинхронной очистки регистров конвейера. Порт не обязателен!

clock, -- входной порт тактовой частоты конвейера. Порт не обязателен!

clken -- входной порт разрешение тактовой частоты конвейера. Порт не обязателен!

)

WITH --Жирным шрифтом выделены параметры по-умолчанию

(

LPM_WIDTHA, --число разрядов шины dataa. Параметр обязателен!

LPM_WIDTHB, --число разрядов шины datab. Параметр обязателен!

LPM_WIDTHP, --число разрядов шины result. Параметр обязателен!

LPM_WIDTHS, --число разрядов шины sum. Параметр обязателен!

LPM_REPRESENTATION, --представление данных: "SIGNED", "UNSIGNED" или "UNUSED"

LATENCY, --то же, что и LPM_PIPELINE. НЕ ИСПОЛЬЗУЕТСЯ в новых проектах.

LPM_PIPELINE, --число тактов N задержки результата конвейером.N = 1, 2, 3,..

INPUT_A_IS_CONSTANT, --на вход a подана константа. "YES", "NO“ или "UNUSED"

INPUT_B_IS_CONSTANT, --на вход b подана константа. "YES", "NO“ или "UNUSED"

USE_EAB, --использовать блоки памяти: "ON", "OFF” или "UNUSED"

MAXIMIZE_SPEED --обмен ресурсы-скорость. Целое число от 0 до 10. Установлено 6

) --(<6 – сокращение ресурсов, >6 – увеличение быстродействия)

RETURNS.

(result[(LPM_WIDTHP - 1)..0]); --результат result[] = (dataa[] * datab[] + sum[]) * Z-N;

-- Z-N - задержки результата конвейером на N тактов

Нерекурсивный фильтр с конечной импульсной характеристикой (КИХ):

 


INCLUDE "lpm_mult.inc";

PARAMETERS

(widthx = 8, --число разрядов шины xn[]

widthy = 8, --число разрядов шины yn[]

widthc = 10, --число разрядов коэффициентов

widthp = 18, --число разрядов шины result[]

an = 100, --коэффициент an знаменателя (изменить знак!!)

bn = 100 --коэффициент bn числителя

);

CONSTANT widths= widthp;

SUBDESIGN mult_b

(xn[widthx-1..0]: INPUT;

yn[widthy-1..0]: INPUT;

sum[widths-1..0]: INPUT;

clock: INPUT;

clken: INPUT = VCC;

result[widthp-1..0]: OUTPUT;

)

 

VARIABLE

mult_x: lpm_mult WITH (

LPM_WIDTHA = widthx,

LPM_WIDTHB = widthc,

LPM_WIDTHP = widthp,

LPM_WIDTHS = widths,

INPUT_B_IS_CONSTANT = "YES",

LPM_REPRESENTATION = "SIGNED",

USE_EAB = "OFF",

LPM_PIPELINE = 1,

MAXIMIZE_SPEED = 6);

mult_y: lpm_mult WITH (

LPM_WIDTHA = widthy,

LPM_WIDTHB = widthc,

LPM_WIDTHP = widthp,

LPM_WIDTHS = widths,

INPUT_B_IS_CONSTANT = "YES",

LPM_REPRESENTATION = "SIGNED",

USE_EAB = "OFF",

--LPM_PIPELINE = 1,

MAXIMIZE_SPEED = 6);

BEGIN

mult_x.(clock, clken, aclr) = (clock, clken, aclr);

result[] = mult_x.result[];

mult_x.dataa[] = xn[];

mult_x.datab[] = bn;

mult_x.sum[] = mult_y.result[];

mult_y.dataa[] = yn[];

mult_y.datab[] = an;

mult_y.sum[] = sum[];

END;


 

 

Вопрос 16 - Реализация звена рекурсивного фильтра типа TDF II с использованием мегафункции LPM_MULT. Организация конвейерной обработки.

Рекурсивный фильтр с бесконечной импульсной характеристикой (БИХ):

 

 

Вопрос 17 - Цифровые автоматы Мура. Структурная схема автомата. Описание работы автомата с помощью ориентированного граф состояний. Объявление обыкновенного и вырожденного автомата Мура в секции VARIABLE. Проблема неиспользуемых состояний и ее решение. Описание логики работы автомата.

 


Если выходы конечного автомата зависят только от состояний автомата, Вы можете определить его выходы в предложении WITH STATES объявления конечного автомата.

Файл moore1.tdf, приведенный ниже, реализует автомат Мура на четыре состояния.


 


SUBDESIGN moore1

(

clk: INPUT;

reset: INPUT;

y: INPUT;

z: OUTPUT;

)

VARIABLE

ss: MACHINE OF BITS (z)

WITH STATES (s0 = 0,

s1 = 1,

s2 = 1,

s3 = 0);

BEGIN

ss.clk = clk;

ss.reset = reset;

 

TABLE

% текущее текущий следующее %

% состояние вход состояние %

ss, y => ss;

s0, 0 => s0;

s0, 1 => s2;

s1, 0 => s0;

s1, 1 => s2;

s2, 0 => s2;

s2, 1 => s3;

s3, 0 => s3;

s3, 1 => s1;

END TABLE;

END;


 

Этот пример определяет состояния конечного автомата с помощью объявления конечного автомата. Переходы между состояниями определены в таблице переходов, которая реализована с помощью оператора Table. В этом примере автомат ss имеет 4 состояния, но только один бит состояния (z). Компилятор автоматически добавляет другой бит и создает соответствующие присваивания для синтезированной переменной для представления автомата на 4 состояния. Этот автомат требует не менее 2 битов.

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

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

 


SUBDESIGN moore2

(

clk: INPUT;

reset: INPUT;

y: INPUT;

z: OUTPUT;

)

VARIABLE

ss: MACHINE WITH STATES (s0, s1, s2, s3);

zd: NODE;

BEGIN

ss.clk = clk;

ss.reset = reset;

z = DFF(zd, clk, VCC, VCC);

TABLE

% состояние вход состояние выход %

ss, y => ss, zd;

s0, 0 => s0, 0;

s0, 1 => s2, 1;

s1, 0 => s0, 0;

s1, 1 => s2, 1;

s2, 0 => s2, 1;

s2, 1 => s3, 0;

s3, 0 => s3, 0;

s3, 1 => s1, 1;

END TABLE;

END;


 

Вместо определения выхода с помощью присваиваний значений состояниям в объявлении конечного автомата, этот пример включает столбец ‘‘ следующий выход ’’, после столбца ‘‘ следующее состояние ’’ в операторе Table. Этот метод использует D триггер (DFF), вызванный с помощью ссылки, для синхронизации выходов с тактовой частотой.

 

Вопрос 18 - Цифровые автоматы Мили. Структурная схема автомата. Описание работы автомата с помощью ориентированного граф состояний. Объявление автомата в секции VARIABLE. Проблема неиспользуемых состояний и ее решение. Описание логики работы автомата Мили.

 

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

Файл mealy.tdf, приведенный ниже, реализует автомат Мили на 4 состояния с асинхронными выходами.

 


SUBDESIGN mealy

(

clk: INPUT;

reset: INPUT;

y: INPUT;

z: OUTPUT;

)

VARIABLE

ss: MACHINE WITH STATES (s0, s1, s2, s3);

BEGIN

ss.clk = clk;

ss.reset = reset;

 

 

TABLE

% состояние вход выход состояние %

ss, y => z, ss;

s0, 0 => 0, s0;

s0, 1 => 1, s1;

s1, 0 => 1, s1;

s1, 1 => 0, s2;

s2, 0 => 0, s2;

s2, 1 => 1, s3;

s3, 0 => 0, s3;

s3, 1 => 1, s0;

END TABLE;

END;

 


 



Поделиться:


Последнее изменение этой страницы: 2016-08-16; просмотров: 554; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.251.155 (0.048 с.)