ОПИСАНИЕ ТРИГГЕРНЫХ СХЕМ НА ЯЗЫКЕ VHDL
Триггер по определению есть устройство с двумя устойчивыми состояниями. В триггерных устройствах входные сигналы можно разделить на две категории – управляющие и информационные. Главное свойство триггеров – способность сохранять свое состояние при пассивном состоянии управляющих входов независимо от изменения сигналов н информативных входах. Это свойство удобно описывать в VHDL с помощью оператора PROCESS. Y практике наиболее часто используются следующие способы управления триггерами: асинхронное управление, статическое управление, динамическое управление, смешанные варианты.
Функциональная модель RS -триггера может быть представлена следующим образом:
PROCESS (КбЫ)
BEGIN IF R=’1’ and S=’1’ THEN
ASSERT FALSE REPORT “Illegal input combination”
SEVERITY note;
ELSIF S=’1’ THEN Q<=’1’;
ELSIF Q<=’0’;
END IF;
END PROCESS;
ОПИСАНИЕ РЕГИСТРОВЫХ СХЕМ НА ЯЗЫКЕ VHDL
Регистр – это набот триггеров, объединенных общими цепями управления. Соответственно регистры в программах удобно представлять процессами, список инициализаторов которых включает управляющие сигналы, а в теле процесса находятся операторы присваивания, определяющие состояние триггеров регистра после изменений управляющих сигналов. Логика анализа условий выполнения операторов в теле этого процесса не отличается от такой же логики для одиночных триггеров. Состояние триггеров отражаются переменными и сигналами. Можно использовать скалярное представление и индивидуальные имена для всех триггеров регистра, однако чаще всего используется групповое представление. Представление в виде битового вектора (типа bit_vector или std_logic_vector) обеспечивает сочетание простоты описания групповых действий над содержимым регистра с простотой выделения информации о состоянии отдельных разрядов. (пример: 8-разрядный сдвиговый регистр.)
|
|
library IEEE;
use IEEE.std_logic_1164.all;
entity shift_reg8 is
port (elk, indata: in std_logic;
outdata: out std_logic_vector(7 downto 0)
end entity shift_reg8;
architecture for_synth of shift_reg8 is
signal register_bits: std_logic_vector(7 downto 0)
begin
process (сlk, indata) is
begin
if (rising_edge(clk)) then
for i in 7 downto 1 loop
register_bits(i) < = register_bits(i-1);
end loop;
register_bits(0) < = indata;
outdata < = register_bits;
end if;
end process;
end architecture for_synth;
В ряде случаев удобно использовать для представления содержимого регистра ограниченные целые и перечислимые типы данных. Такое представление может обеспечить большую наглядность и улучшить понимаемость программ. Такие типы данных определены как скалярные.
ВЫЧИСЛЯЕМЫЕ СИГНАЛЫ ЯЗЫКА VHDL
В схемах могут возникать ситуации, когда несколько выходных сигналов объединяются в один. В результате получается сигнал, формируемый множеством источников, причем разные источники могут присваивать сигналу различные значения. В этом случае возникает необходимость определения результирующего значения для этого сигнала. В модели на VHDL, когда одному и тому же сигналу соответствует несколько источников, говорят, что эти источники разделяют (в смысле совместно используют) данный сигнал. Такие сигналы называют разделяемыми сигналами (shared signals).
|
|
Разделяемые сигналы в модели объекта должны быть декларированы как сигналы специального типа — resolved type, тип сигнала с разрешением кколлизий. Назовем такие сигналы вычисляемыми сигналами (прямой перевод, т. к. термин "разрешаемый сигнал" кажется нам неудачным). В отличие от обычных сигналов, при декларации вычисляемого сигнала указывается не только тип, но и функция, на базе которой будет определяться значение сигнала.
Описание вычисляемого сигнала имеет следующий синтаксис:
signal name: [resolution_function_name] type_mark
[range (range_attribute_name |
simple_expression (to | downto) simple_expression)|
(discrete range {,...})]
Здесь:
-идентификатор type_mark задает имя типа для определяемого сигнала;
-идентификатор resoiution_function_name — имя функции, используемой для вычисляемого сигнала.
Дата добавления: 2020-04-08; просмотров: 280; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!