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

UptoLike

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

35
9 структуризация текста описания, т. е. возможность явного и наглядного выде-
ления совокупности операторов, описывающих законченный функциональный
узел;
9 возможность объявления в блоке локальных типов, сигналов, подпрограмм и
некоторых других локальных понятий;
9 возможность приписывания всем или некоторым операторам блока общих ус-
ловий инициализации.
Упрощенные правила записи оператора блока определены таким образом:
<оператор блока>::=
<метка блока>: block [(охранное выражение)] [is]
[<раздел деклараций блока>]
begin
<раздел операторов блока>
end block [<метка блока>];
Наиболее специфическими аспектами блочной организации являются понятия охран-
ного выражения и охраняемого оператора присваивания.
Охранное выражениеэто любое выражение логического типа, аргументами которо-
го являются сигналы. Любое изменение сигналов, входящих в охранное выражение, вызыва-
ет вычисление значения этого выражения и присвоение полученного значения предопреде-
ленной переменной
guard. Область действия этой переменнойвсе тело блока, и она мо-
жет использоваться как обычная логическая переменная во вложенных операторах блока.
Например, узел выборки данных из тридцатидвухразрядного регистра на восьмиразрядную
линию, в котором транслируется байт, указанный двухразрядным кодом номера byte_sel,
может быть представлен таким блоком:
select_byte: block (select='l' and read='l') is
begin
dbus <= reg(7 downto 0) when guard and byte_sel="00" else
reg(15 downto 0) when guard and byte_sel="01" else
reg{23 downto 16) when guard and byte_sel ="10" else
reg(31 downto 24) when guard and byte_sel ="11" else "zzzzzzzz";
end block select_byte;
Охраняемый оператор присваивания использует значение переменной guard без яв-
ного указания условия в программе. Если guard ='0', то исполнение операторов присваи-
вания, содержащих ключевое слово
guarded, в таком блоке запрещено.
4.9. Разрешение сигналов и шины
В предыдущих разделах мы обходили рассмотрение случаев, когда несколько источни-
ков подключаются к одной линии. Если сигнал имеет один драйвер, то его значение опреде-
ляется достаточно просто. После исполнения или перехода в состояние ожидания всех про-
цессов и параллельных операторов, вызванных общим событием, предсказанные изменения
передаются из драйверов сигналов, являющихся, в сущности, программными буферами, в
поле данных системы моделирования. Это и определяет новое значение сигнала.
          9 структуризация текста описания, т. е. возможность явного и наглядного выде-
          ления совокупности операторов, описывающих законченный функциональный
          узел;
          9 возможность объявления в блоке локальных типов, сигналов, подпрограмм и
          некоторых других локальных понятий;
          9 возможность приписывания всем или некоторым операторам блока общих ус-
          ловий инициализации.
     Упрощенные правила записи оператора блока определены таким образом:
<оператор блока>::=
<метка блока>: block [(охранное выражение)] [is]
[<раздел деклараций блока>]
begin
<раздел операторов блока>
end block [<метка блока>];
     Наиболее специфическими аспектами блочной организации являются понятия охран-
ного выражения и охраняемого оператора присваивания.
     Охранное выражение — это любое выражение логического типа, аргументами которо-
го являются сигналы. Любое изменение сигналов, входящих в охранное выражение, вызыва-
ет вычисление значения этого выражения и присвоение полученного значения предопреде-
ленной переменной guard. Область действия этой переменной — все тело блока, и она мо-
жет использоваться как обычная логическая переменная во вложенных операторах блока.
Например, узел выборки данных из тридцатидвухразрядного регистра на восьмиразрядную
линию, в котором транслируется байт, указанный двухразрядным кодом номера byte_sel,
может быть представлен таким блоком:
select_byte: block (select='l' and read='l') is
begin
dbus <= reg(7 downto 0) when guard and byte_sel="00" else
      reg(15 downto 0) when guard and byte_sel="01" else
      reg{23 downto 16) when guard and byte_sel ="10" else
      reg(31 downto 24) when guard and byte_sel ="11" else "zzzzzzzz";
end block select_byte;
     Охраняемый оператор присваивания использует значение переменной guard без яв-
ного указания условия в программе. Если guard ='0', то исполнение операторов присваи-
вания, содержащих ключевое слово guarded, в таком блоке запрещено.

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


                                            35