Язык описания электронной аппаратуры VHDL. Берчун Ю.В. - 36 стр.

UptoLike

Составители: 

36
Однако во многих системах к одной линии подключено несколько источников. На-
пример, шина данных компьютера может принимать сигналы от процессора, памяти, пери-
ферийных устройств, а к линии данных матрицы запоминающего устройства подключается
достаточно много ячеек памяти, а также буферы ввода-вывода. Этому соответствуют про-
граммные модели, в которых один сигнал назначается в нескольких параллельных операто-
рах и процессах. В VHDL не любые сигналы способны принимать значение в соответствии
со значениями нескольких источников. Сигналы, значения которых автоматически опреде-
ляются исходя из состояний нескольких источников (драйверов), называют разрешаемыми
(resolved). Разрешаемым может быть объявлен конкретный сигнал или подтип данных, к
которому такой сигнал отнесен при его декларации. Мы ограничимся объявлением сигнала
как разрешаемого (resolved) через использование декларации разрешаемого подтипа. Напом-
ним, что декларация подтипа может содержать имя функции разрешения (resolution func-
tion). Функция разрешения определяет правило вычисления сигнала, формируемого несколь-
кими независимыми источниками. В общем случае функция разрешения зависит от конкрет-
ных условий приложения проекта, в том числе технологии изготовления проектируемого
устройства, и если в системе интерпретации отсутствует подходящий аналог, требуется раз-
работка соответствующей программы.
Функция разрешения локализуется в том же программном модуле, что и декларация
подтипа, и вызывается всякий раз, когда меняет состояние любой из драйверов разрешаемого
сигнала. Можно сказать, что по умолчанию предполагается наличие в программном модуле
параллельного вызова этой функции, причем драйверы сигналов являются ее фактическими
параметрами, а возвращаемое значение присваивается сигналу.
Рассмотрим в качестве примера так называемое монтажное ИЛИ. В качестве базового
типа данных выберем
bit. Введём функцию разрешения wired_OR:
function wired_OR (inputs : in bit_vector) return bit is
variable X : bit := ’0’;
begin
for i in inputs’range loop
if inputs(i)=’1’ then
X:=’1’;
exit;
end if;
end loop;
return X;
end;
Пусть эта функция определена в некотором архитектурном теле или пакете. Там же
вводим подтип:
subtype WO is wired_OR bit;
Объявим сигнал и в разделе операторов объединим выходы элементов (в данном случае
— 2-х элементов И):
signal Y : WO;
Y <= X1 and X2;
Y <= X3 and X4;
       Однако во многих системах к одной линии подключено несколько источников. На-
пример, шина данных компьютера может принимать сигналы от процессора, памяти, пери-
ферийных устройств, а к линии данных матрицы запоминающего устройства подключается
достаточно много ячеек памяти, а также буферы ввода-вывода. Этому соответствуют про-
граммные модели, в которых один сигнал назначается в нескольких параллельных операто-
рах и процессах. В VHDL не любые сигналы способны принимать значение в соответствии
со значениями нескольких источников. Сигналы, значения которых автоматически опреде-
ляются исходя из состояний нескольких источников (драйверов), называют разрешаемыми
(resolved). Разрешаемым может быть объявлен конкретный сигнал или подтип данных, к
которому такой сигнал отнесен при его декларации. Мы ограничимся объявлением сигнала
как разрешаемого (resolved) через использование декларации разрешаемого подтипа. Напом-
ним, что декларация подтипа может содержать имя функции разрешения (resolution func-
tion). Функция разрешения определяет правило вычисления сигнала, формируемого несколь-
кими независимыми источниками. В общем случае функция разрешения зависит от конкрет-
ных условий приложения проекта, в том числе технологии изготовления проектируемого
устройства, и если в системе интерпретации отсутствует подходящий аналог, требуется раз-
работка соответствующей программы.
     Функция разрешения локализуется в том же программном модуле, что и декларация
подтипа, и вызывается всякий раз, когда меняет состояние любой из драйверов разрешаемого
сигнала. Можно сказать, что по умолчанию предполагается наличие в программном модуле
параллельного вызова этой функции, причем драйверы сигналов являются ее фактическими
параметрами, а возвращаемое значение присваивается сигналу.
     Рассмотрим в качестве примера так называемое монтажное ИЛИ. В качестве базового
типа данных выберем bit. Введём функцию разрешения wired_OR:
function wired_OR (inputs : in bit_vector) return bit is
variable X : bit := ’0’;
begin
      for i in inputs’range loop
            if inputs(i)=’1’ then
                  X:=’1’;
                  exit;
            end if;
      end loop;
      return X;
end;
     Пусть эта функция определена в некотором архитектурном теле или пакете. Там же
вводим подтип:
subtype WO is wired_OR bit;
     Объявим сигнал и в разделе операторов объединим выходы элементов (в данном случае
— 2-х элементов И):
signal Y : WO;
…
Y <= X1 and X2;
Y <= X3 and X4;

                                             36