Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »