ВУЗ:
Составители:
34
.
.
DBus <=DBR
BusReq <=REQ
DataRdy <=RDY
Addr <=ABR
MR <=MRQ
end RT;
Рис. 13. Присваивание значений портам устройства
2.3. Поведенческое описание
Поведенческий стиль описания определяет последовательно выполнимый код процедурного типа, подобный
коду на языках программирования Фортран или Ада. Некоторые языки описания аппаратуры обеспечивают
механизм для вызова кода, написанного на Фортране, Паскале или Си, для того чтобы описать сложное
поведение. Другие, включая VHDL, интегрируют поведенческие предложения в язык.
Имеется много причин для использования поведенческого стиля в описании аппаратуры, но основным
является то, что поведенческое описание определяет с любой желаемой степенью точности функционирование
устройства без определения его структуры.
Например, разработчик может детально специфицировать поведение подсистемы, а проработку деталей
реализации передать другим. Реализация может выполняться либо специализированным предприятием, либо
может быть передана в другую группу в той же самой организации. При использовании поведенческого стиля
описания разработчик избегает чрезмерной спецификации структуры или уклона разработки в сторону какой-
либо одной технологии реализации.
С другой стороны, изготовитель может поставлять точное определение функционирования подсистемы без
упоминания специфических деталей структуры или изготовления.
Используя поведенческое описание изготовителя, заказчик может построить соответствующее структурное
описание для подсистемы.
Предложения поведенческого стиля в VHDL представляют современный язык структурного
программирования, который ближе всего к Паскалю по области применения, мощности и легкости
использования. На рис. 14 приведена реализация полной платы памяти в поведенческом стиле.
use Work.Defs.all; -- Объявления для этого проекта
entity MemoryBoard is
port
( ABus: in address;
DBus: out byte;
MemReq: in wbit;
BusReq: out wbit;
BusAck: in wbit;
DataRdy: out wbit );
constant Board_id: tribit_vector:="110";
end MemoryBoard;
architecture Behavior of MemoryBoard is
signal Addr: integer;
signal Data: byte;
signal MRint: bit;
constant Zs:byte:="ZZZZZZZZ";
begin
Memory:process
begin
wait until MRint='1';
Data<=ROM_Contents(Addr) after 150ns;
end process;
.
.
Control:process
variable addr_temp:integer;
begin
wait until MemReq='0'and ABus(16 to 18) = Board_id;
addr_temp:=0;
for i in 15 downto 0 loop
addr_temp:=addr_temp*2;
if ABus(i)='1' then
addr_temp:=addr_temp+1;
Страницы
- « первая
- ‹ предыдущая
- …
- 31
- 32
- 33
- 34
- 35
- …
- следующая ›
- последняя »