- •Глава 6. Примеры проектирования цифровых устройств с использованием языков описания аппаратуры vhdLиVerilog.
- •6.1. Общие сведения
- •6.2. Триггеры и регистры (Flip-Flops, Registers)
- •6.3. Построение устройств потоковой обработки данных (Datapath logic)
- •6.4. Счетчики
- •6.5. Арифметические устройства
- •6.6.Конечные автоматы (Finite State Machine)
- •6.7. Элементы ввода – вывода
- •6.8.Параметризация
- •6.9. Спрецифика проектирования устройств с учетом архитектурных особенностей плис
- •6.10. Совместное использование ресурсов
- •6.12. Дублирование регистра.
- •6.13.Создание описаний с учетом особенностей архитектуры плис (Technology Specific Coding Techniques).
6.7. Элементы ввода – вывода
Без элементов ввода вывода невозможна организация полноценного обмена данных, организация шин и т.п. Рассмотрим особенности описания на языках описания аппаратуры элементов ввода – вывода (Input-Output Buffers).
Элемент с тремя состояниями (Tri-State Buffer) позволяет организовать подключение нескольких устройств к общей шине. Обозначение такого элемента на схеме приведено на Рис.6.17
Рис.6.17. Элемент с тремя состояниями.
Пример описания на VHDL
library IEEE;
use IEEE.std_logic_1164.all;
entity tristate is
port (e,a :in std_logic;
y :out std_logic);
end tristate;
architecture tri of tristate is
begin
process (e, a)
begin
if e = '1' then
y <=a;
else
y <= 'Z';
end if;
end process;
end tri;
Другой вариант описания элемента с тремя состояниями на VHDL
library IEEE;
use IEEE.std_logic_1164.all;
entity tristate is
port (e,a :in std_logic;
y :out std_logic);
end tristate;
architecture tri of tristate is
begin
Y <=awhen (e = '1') else 'Z';
end tri;
На Verilog элемент с тремя состояниями описывается следующим образом
module TRISTATE (e, a, y);
input a, e;
output y;
reg y;
always @(e or a) begin
if (e)
y =a;
else
y = 1'bz;
end
endmodule
OR
module TRISTATE (e, a, y);
input a, e;
output y;
assign y =e ?a :1'bZ;
endmodule
Приведенные выше примеры показывают логику функционирования элемента с тремя сростояниями. Примеры создания экземрляра компонента приведены ниже.
Экземпляр компонента на VHDL
library IEEE;
use IEEE.std_logic_1164.all;
entity tristate is
port (e,a :in std_logic;
y :out std_logic);
end tristate;
architecture tri of tristate is
component TRIBUFF
port (D, E: in std_logic;
PAD: out std_logic);
end component;
begin
U1: TRIBUFF port map (D => a,
E =>e,
PAD => y);
end tri;
Экземпляр компонента на Verilog
module TRISTATE (e, a, y);
input a, e;
output y;
TRIBUFF U1 (.D(a),.E(e),.PAD(y));
endmodule
Двунаправленные элементы ввода-вывода (Bi-Directional Buffer)
Двунаправленный элемент ввода-вывода используется либо как элемент ввода, либо как выходной буфер с возможностью перехода в третье состояние.
Ниже приводятся примеры создания описания двунаправленного буфера (Рис.618).
Рис.6.18.
Пример логики двунаправленного буфера на VHDL
library IEEE;
use IEEE.std_logic_1164.all;
entity bidir is
port (y : inout std_logic;
e, a: in std_logic;
b :out std_logic);
end bidir;
architecture bi of bidir is
begin
process (e, a)
begin
case e is
when '1'=>y <=a;
when '0' => y <= 'Z';
when others => y <= 'X';
end case;
end process;
b <=y;
end bi;
Описание двунаправленного буфера на Verilog
module bidir (e, y, a, b);
input a, e;
inout y;
output b;
reg y_int;
wire y, b;
always @(a or e)
begin
if (e == 1'b1)
y_int <= a;
else
y_int <= 1'bz;
end
assign y = y_int;
assign b =y;
endmodule
Примеры создания экземпляров компонента на VHDL
library IEEE;
use IEEE.std_logic_1164.all;
entity bidir is
port (y : inout std_logic;
e, a: in std_logic;
b :out std_logic);
end bidir;
architecture bi of bidir is
component BIBUF
port (D, E: in std_logic;
Y :out std_logic;
PAD: inout std_logic);
end component;
begin
U1: BIBUF port map (D => a,
E =>e,
Y =>b,
PAD => y);
end bi;
Описание экземпляра буфера на Verilog
module bidir (e, y, a, b);
input a, e;
inout y;
output b;
BIBUF U1 (.PAD(y),.D(a),.E(e),.Y(b) );
Endmodule