ОПИСАНИЕ ТРИГГЕРНЫХ СХЕМ НА ЯЗЫКЕ 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!