«…лишь недалекие люди боятся конкуренции, а люди подлинного творчества ценят общение с каждым талантом…» А. Бек, Талант.

ПЦУСБ/Лекция 3 — различия между версиями

Материал из Wiki
Перейти к: навигация, поиск
м (Слайд: VHDL-модели триггеров (fdrs))
 
(не показаны 37 промежуточных версий 1 участника)
Строка 10: Строка 10:
  
 
* Логические элементы (И, ИЛИ, НЕ, Исключающее ИЛИ)
 
* Логические элементы (И, ИЛИ, НЕ, Исключающее ИЛИ)
* [http://bourabai.kz/toe/ic5.htm Комбинационные схемы]:
+
* [http://bourabai.kz/toe/ic5.htm Комбинационные схемы] [http://www.intuit.ru/studies/courses/685/541/lecture/7002], [http://www.intuit.ru/studies/courses/685/541/lecture/7001]:
** Дешифратор/Шифратор
+
** Дешифратор [http://www.intuit.ru/studies/courses/685/541/lecture/7003] /Шифратор
 
** Мультиплексор/Демультиплексор
 
** Мультиплексор/Демультиплексор
* Последовательные схемы
+
** Сумматор
 +
** Компаратор
 +
* Последовательностные схемы
 
** Триггеры
 
** Триггеры
 +
*** Синхронные
 +
**** по фронту
 +
**** по уровню
 +
*** Асинхронные
 
** Регистры
 
** Регистры
 
** Автоматы
 
** Автоматы
Строка 87: Строка 93:
  
  
=== Слайд:Сложные логические функции ===
+
=== Слайд: [http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%88%D0%B8%D1%84%D1%80%D0%B0%D1%82%D0%BE%D1%80 Дешифратор] (DC)===
  
1. Записать таблицу истинности
+
* комбинационная схема, преобразующее n-разрядный двоичныйв <m>k^n</m>-ичный одноединичный (позиционный) код
  
2. Минимизировать функцию (например, с помощью  
+
{| width=100%
 +
! http://www.plam.ru/radioel/lekcii_po_shemotehnike/image234.png
 +
|}
 +
 
 +
* [http://www.khaer.com.ua/downloads/ke/rus/tema1/1.5.htm Принцип работы] [http://www.khaer.com.ua/downloads/ke/rus/tema1/img/5/1.swf swf]
 +
 
 +
==== Слайд:Дешифратор (VHDL модель) ====
 +
<source lang="vhdl">
 +
entity dc is
 +
  port (
 +
    x : in  std_logic_vector(2 downto 0);
 +
    y : out std_logic_vector(7 downto 0));
 +
end dc;
 +
 
 +
architecture beh of dc is
 +
begin
 +
  y <=
 +
    "00000001" when x = "000" else
 +
    "00000010" when x = "001" else
 +
    "00000100" when x = "010" else
 +
    "00001000" when x = "011" else
 +
    "00010000" when x = "100" else
 +
    "00100000" when x = "101" else
 +
    "01000000" when x = "110" else
 +
    "10000000" when x = "111" else
 +
    "00000000";
 +
end beh;
 +
</source>
 +
 
 +
=== Слайд:Шифратор ===
 +
 
 +
* комбинационная схема, выполняющее преобразование одноединичный (позиционного) n-разрядного кода в m-разрядный двоичный код.
 +
 
 +
{| width=100%
 +
! http://www.plam.ru/radioel/lekcii_po_shemotehnike/image232.png
 +
|}
 +
 
 +
* [http://www.khaer.com.ua/downloads/ke/rus/tema1/1.5.htm Принцип работы] [http://www.khaer.com.ua/downloads/ke/rus/tema1/img/5/3.swf swf]
 +
 
 +
 
 +
==== Слайд:Шифратор (VHDL модель 1) ====
 +
 
 +
{| class=standard align=center border=1
 +
! VHDL модель 1
 +
! VHDL модель 2
 +
|-
 +
|valign=top|<source lang="vhdl">
 +
entity cd is
 +
 
 +
  port (
 +
    x : in  std_logic_vector(7 downto 0);
 +
    y : out std_logic_vector(2 downto 0));
 +
 
 +
end dc;
 +
 
 +
architecture beh1 of cd is
 +
 
 +
begin 
 +
 
 +
  y <=
 +
    "000" when x(0) = "1" else
 +
    "001" when x(1) = "1" else
 +
    "010" when x(2) = "1" else
 +
    "011" when x(3) = "1" else
 +
    "100" when x(4) = "1" else
 +
    "101" when x(5) = "1" else
 +
    "110" when x(6) = "1" else
 +
    "111" when x(7) = "1" else
 +
    "000";   
 +
 
 +
end beh1;
 +
</source>
 +
|valign=top|<source lang="vhdl">
 +
entity cd is
 +
 
 +
  port (
 +
    x : in  std_logic_vector(7 downto 0);
 +
    y : out std_logic_vector(2 downto 0));
 +
 
 +
end dc;
 +
 
 +
architecture beh2 of cd is
 +
 
 +
begin
 +
 
 +
  y(0) <= x(1) or x(3) or x(5) or x(7);
 +
  y(1) <= x(2) or x(3) or x(6) or x(7);
 +
  y(2) <= x(4) or x(5) or x(6) or x(7);
 +
 
 +
end beh2;
 +
</source>
 +
|}
 +
 
 +
=== Слайд: [http://life-prog.ru/view_automati.php?id=14 Мультиплексор] ===
 +
 
 +
* [http://g7iy34buhsdfn.narod.ru/4.htm комбинационная схема], которая передает сигнал с одного из информационных входов X<sub>i</sub> на единственный выход Y, причем номер выбираемого входа задается с помощью управляющих сигналов (адресных входов a<sub>i</sub>).
 +
 
 +
{| width=100%
 +
! http://de.ifmo.ru/--books/electron/tabl5.gif
 +
|-
 +
! <big>y = OE(x0*{{Overline|a1}}*{{Overline|a0}} + x1*{{Overline|a1}}*a0 + x2*a1*{{Overline|a0}} + x3*a1*a0)</big>
 +
|}
 +
 
 +
* [http://www.khaer.com.ua/downloads/ke/rus/tema1/1.6.htm анимация работы] ([http://www.khaer.com.ua/downloads/ke/rus/tema1/img/6/1.swf swf])
 +
 
 +
 
 +
==== Слайд:Мультиплексор (Схема) ====
 +
 
 +
{| width=100%
 +
! http://life-prog.ru/articles3/6.htm1.gif
 +
|-
 +
! http://digteh.ru/digital/image/MS_S.gif
 +
|}
 +
 
 +
==== Слайд:Мультиплексор (VHDL модель) ====
 +
 
 +
<source lang="vhdl">
 +
entity mux is
 +
 
 +
  port (
 +
    x : in  std_logic_vector(3 downto 0);
 +
    a : in  std_logic_vector(1 downto 0);
 +
    y : out std_logic);
 +
 
 +
end mux;
 +
 
 +
architecture beh of mux is
 +
begin
 +
  y <=
 +
    x(0) when a = "00" else
 +
    x(1) when a = "01" else
 +
    x(2) when a = "10" else
 +
    x(3) when a = "11" else
 +
    '0';
 +
end beh;
 +
</source>
 +
 
 +
 
 +
==== Слайд:Мультиплексор (Особенность) ====
 +
 
 +
* с помощью мультиплексора можно реализовать любую логическую функцию
 +
 
 +
{| width=100%
 +
! http://www.island-formoza.ru/images/arhitektura-pc-60.png
 +
|}
 +
 
 +
==== Слайд:Мультиплексор (Особенность) ====
 +
 
 +
{| width=100%
 +
! http://life-prog.ru/articles3/6.htm8.jpg
 +
|}
 +
 
 +
=== Слайд: Демультиплексор [http://life-prog.ru/view_automati.php?id=14] [http://kursach37.com/uch_cifr_t4_45.html] ===
 +
 
 +
* [http://g7iy34buhsdfn.narod.ru/4.htm комбинационная схема], которая выполняет функцию, обратную мультиплексору, т.е. в соответствии с принятой адресацией ''A<sub>i</sub>'' направляет информацию с единственного входа ''D'' на один из ''M'' выходов ''F<sub>j</sub>''. При этом на остальных выходах будут логические нули (единицы).
 +
 
 +
{| class=standard cellspacing="1" cellpadding="5" border="1" align=center
 +
! colspan="2" | Входы
 +
! colspan="4" | Выходы
 +
|-
 +
! ''A''<sub>1</sub>
 +
! ''A''<sub>0</sub>
 +
! ''F''<sub>3</sub>
 +
! ''F''<sub>2</sub>
 +
! ''F''<sub>1</sub>
 +
! ''F''<sub>0</sub>
 +
|-
 +
| 0
 +
| 0
 +
| 0
 +
| 0
 +
| 0
 +
| ''D''
 +
|-
 +
| 0
 +
| 1
 +
| 0
 +
| 0
 +
| ''D''
 +
| 0
 +
|-
 +
| 1
 +
| 0
 +
| 0
 +
| ''D''
 +
| 0
 +
| 0
 +
|-
 +
| 1
 +
| 1
 +
| ''D''
 +
| 0
 +
| 0
 +
| 0
 +
|}
 +
 
 +
* * [http://www.khaer.com.ua/downloads/ke/rus/tema1/1.6.htm анимация работы] ([http://www.khaer.com.ua/downloads/ke/rus/tema1/img/6/2.swf swf])
 +
 
 +
==== Слайд: Демультиплексор (Схема) ====
 +
 
 +
{| width=100% align=center
 +
! http://kursach37.com/uch_cifr_t4_45_image016.gif
 +
! http://kursach37.com/uch_cifr_t4_45_image015.gif
 +
! http://kursach37.com/uch_cifr_t4_45_image017.gif
 +
|}
 +
 
 +
==== Слайд: Демультиплексор (VHDL модель) ====
 +
 
 +
<source lang="vhdl">
 +
entity dms is
 +
  port (
 +
    x : in  std_logic;
 +
    a : in  std_logic_vector(1 downto 0);
 +
    y : out std_logic_vector(3 downto 0));
 +
end dms;
 +
 
 +
architecture beh of dms is
 +
begin
 +
  y <=
 +
    "000" & x      when a = "00" else
 +
    "00" & x & '0' when a = "01" else
 +
    '0' & x & "00" when a = "10" else
 +
    x & "000"      when a = "11" else
 +
    "0000";
 +
end beh;
 +
</source>
 +
 
 +
=== Слайд: Сумматор ===
 +
* http://www.intuit.ru/studies/courses/685/541/lecture/7008?page=1
 +
 
 +
== Слайд: Классификация триггеров  ==
 +
 
 +
{| align=center width=80%
 +
! [[Файл:Триггеры.mm]]
 +
|}
 +
 
 +
=== Слайд: Триггеры [http://www.khaer.com.ua/downloads/ke/rus/tema2/2.1.htm] [http://life-prog.ru/view_shpargalkiCompStroi.php?id=4] ===
 +
Ссылки:
 +
* [http://www.intuit.ru/studies/courses/685/541/lecture/7006 RS-триггер]
 +
* [http://www.intuit.ru/studies/courses/685/541/lecture/7006?page=2 D-триггер (синхн. по уровню)]
 +
* [http://www.khaer.com.ua/downloads/ke/rus/tema2/2.2.htm Регистры] [http://www.go-radio.ru/registr.html] [http://edu.dvgups.ru/METDOC/GDTRAN/YAT/TELECOMM/ELEKTRONIKA/METOD/NAHALOV/frame/2_2.htm]
 +
* [http://www.khaer.com.ua/downloads/ke/rus/tema2/2.3.htm Двоичные счетчики] [http://edu.dvgups.ru/METDOC/GDTRAN/YAT/TELECOMM/ELEKTRONIKA/METOD/NAHALOV/frame/2_1.htm]
 +
 
 +
=== Слайд: УГО триггеров ===
 +
 
 +
[[Файл:Alib3-triggers.png|center]]
 +
 
 +
=== Слайд: VHDL-минимум для описания триггеров (1) ===
 +
 
 +
* Атрибуты — это различные характеристики объектов VHDL
 +
 
 +
{| border="1" align=center cellspacing="0" cellpadding="5"
 +
|+ Атрибуты сигналов (S)
 +
! Атрибут
 +
! Описание
 +
|-
 +
| S'active
 +
| TRUE, если было присвоение, но текущее значение еще прежнее
 +
|-
 +
| S'delayed(t)
 +
| Значение сигнала, существовавшее на время t перед вычислением данного атрибута
 +
|-
 +
! {{Зел|S'event}}
 +
| TRUE, если происходит изменение сигнала
 +
|-
 +
| S'last_active
 +
| Время от последнего присвоения значения сигналу до момента вычисления атрибута
 +
|-
 +
| S'last_event
 +
| Время от последнего изменения сигнала до момента вычисления атрибута
 +
|-
 +
| S'last_value
 +
| Последнее присвоенное сигналу значение
 +
|-
 +
! S'stable(t)
 +
| TRUE, если не происходило изменение сигнала в течение времени t
 +
|-
 +
| S'transaction
 +
| TRUE, если происходит очередное присвоение значения сигналу
 +
|-
 +
| S'quiet
 +
| FALSE, если было присвоение, но текущее значение еще прежнее
 +
|}
 +
 
 +
<!--
 +
'''Таблица 2'''
 +
 
 +
{| border="1"
 +
! Атрибут
 +
! Описание
 +
|-
 +
| A'left(N)
 +
| Левая граница N-го индекса массива А
 +
|-
 +
| A'right(N)
 +
| Правая граница N-го индекса массива А
 +
|-
 +
| A'high(N)
 +
| Верхняя граница N-го индекса массива А
 +
|-
 +
| A'low(N)
 +
| Нижняя граница N-го индекса массива А
 +
|-
 +
| A'range(N)
 +
| Диапазон N-го индекса массива А
 +
|-
 +
| A'reverse_range(N)
 +
| Обратный диапазон N-го индекса массива А
 +
|-
 +
| A'length(N)
 +
| Длина диапазона N-го индекса массива А
 +
|}
 +
 
 +
<br>
 +
 
 +
'''Таблица 3'''
 +
 
 +
{| border="1"
 +
! Атрибут
 +
! Описание
 +
|-
 +
| T'base
 +
| Базовый тип данных
 +
|-
 +
| T'left
 +
| Левая граница значений T
 +
|-
 +
| T'right
 +
| Правая граница значений T
 +
|-
 +
| T'high
 +
| Верхняя граница значений T
 +
|-
 +
| T'low
 +
| Нижняя граница значений T
 +
|-
 +
| T'pos(X)
 +
| Позиция значения Х в наборе значений Т
 +
|-
 +
| T'val(N)
 +
| Значение элемента в позиции N набора значений Т
 +
|-
 +
| T'succ(X)
 +
| Значение в наборе значений T, на одну позицию большее X
 +
|-
 +
| T'pred(X)
 +
| Значение в наборе значений T, на одну позицию меньшее X
 +
|-
 +
| T'succ(X)
 +
| Значение в наборе значений T, на одну позицию вправо от X
 +
|-
 +
| T'pred(X)
 +
| Значение в наборе значений T, на одну позицию влево от X
 +
|}
 +
-->
 +
 
 +
=== Слайд: VHDL-минимум для описания триггеров (2) ===
 +
* задание (выделение) фронта сигнала (ссылка на стандарт [http://www.dsol.ru/stud/STESHENKO/pril/p3.htm IEEE Std 1076.6 VHDL Register Transfer Level (RTL) Synthesis])
 +
 
 +
clock_edge ::=
 +
    '''RISING_EDGE'''(clk_signal_name)
 +
    ''или'' '''FALLING_EDGE'''(clk_signal_name)
 +
    ''или'' clock_level '''and''' event_expr
 +
    ''или'' event_expr '''and''' clock_level
 +
 
 +
clock_level ::=
 +
    clk_signal_name = '0' ''или'' clk_signal_name = '1'
 +
event_expr ::=
 +
    clk_signal_name''''EVENT'''
 +
    ''или'' not clk_signal_name''''STABLE'''
 +
* функции RISING_EDGE и FALLING_EDGE описаны для типов:
 +
** BIT, BOOLEAN и др. (пакет STANDARD в VHDL'2008)
 +
** std_logic, std_ulogic (std_logic_1164)
 +
 
 +
=== Слайд: VHDL-минимум для описания триггеров (3) ===
 +
 
 +
<!-- {| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"-->
 +
{| border="1" align=center cellspacing="0" cellpadding="5"
 +
! Положительный фронт (переход 0 → 1)
 +
|-
 +
|<source lang="vhdl">
 +
RISING_EDGE(clk_signal_name)
 +
clk_signal_name'EVENT and clk_signal_name = '1'
 +
clk_signal_name = '1' and clk_signal_name'EVENT
 +
not clk_signal_name'STABLE and clk_signal_name = '1'
 +
clk_signal_name = '1' and not clk_signal_name'STABLE
 +
</source>
 +
|}
 +
 
 +
 
 +
{| border="1" align=center cellspacing="0" cellpadding="5"
 +
! Отрицательный фронт (переход 1 → 0)
 +
|-
 +
| <source lang="vhdl">
 +
FALLING_EDGE(clk_signal_name)
 +
clk_signal_name'EVENT and clk_signal_name = '0'
 +
clk_signal_name = '0' and clk_signal_name'EVENT
 +
not clk_signal_name'STABLE and clk_signal_name = '0'
 +
clk_signal_name = '0' and not clk_signal_name'STABLE</source>
 +
|}
 +
 
 +
* Все записи в столбцах эквивалентны
 +
 
 +
=== Слайд: VHDL-минимум для описания триггеров. Оператор Process (3) ===
 +
* Оператор процесса
 +
 +
LABEL: '''process''' [ ( ''имя сигнала'' {, ''имя сигнала'' } ) ]
 +
      ''объявление в процессе''
 +
'''begin'''
 +
      ''последовательный оператор[ы]''
 +
'''end''' '''process''';
 +
 +
 
 +
* Пример
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! Пример c process
 +
! Сокращённая запись
 +
|-
 +
|valign=top|<source lang="vhdl">
 +
entity A2 is
 +
  port (
 +
    A, B : in  std_logic;
 +
    C : out std_logic);
 +
end A2;
 +
 
 +
architecture beh of A2 is
 +
begin
 +
process (A, B)
 +
begin
 +
  C <= A and B;
 +
end process;
 +
end beh;
 +
</source>
 +
|valign=top|<source lang="vhdl">
 +
entity A2 is
 +
  port (
 +
    A, B : in  std_logic;
 +
    C : out std_logic);
 +
end A2;
 +
 
 +
architecture beh of A2 is
 +
begin
 +
  C <= A and B;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
 
 +
=== Слайд: VHDL-минимум для описания триггеров. Оператор if ===
 +
* Оператор условия if (последовательный оператор)
 +
 +
'''if''' Условие_1 '''then'''
 +
    Выражение1
 +
'''elsif''' Условие_2 '''then'''
 +
    Выражение2
 +
'''else'''
 +
    Выражение3
 +
'''end''' '''if''';
 +
 
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5"
 +
! Пример 1
 +
! Пример 2
 +
|-
 +
|valign=top|<source lang="vhdl">
 +
  IF    (s0='0' AND s1='0') THEN
 +
    output <= in0;
 +
  ELSIF (s0='1' AND s1='0') THEN
 +
    output <= in1;
 +
  ELSE
 +
    output <= 'X';
 +
  END IF;
 +
</source>
 +
|valign=top|<source lang="vhdl">
 +
  IF    (s0='0' AND s1='0') THEN
 +
    output <= in0;
 +
  ELSE
 +
    output <= 'X';
 +
  END IF;
 +
</source>
 +
|-
 +
! Пример 3
 +
! Пример 4
 +
|-
 +
|valign=top|<source lang="vhdl">
 +
  IF    (s0='0' AND s1='0') THEN
 +
    output <= in0;
 +
  ELSIF (s0='1' AND s1='0') THEN
 +
    output <= 'X';
 +
  END IF;
 +
</source>
 +
|valign=top|<source lang="vhdl">
 +
  IF (s0='0' AND s1='0') THEN
 +
    output <= in0;
 +
  END IF;
 +
</source>
 +
|}
 +
 
 +
* [http://www.quicknet.se/hdc/hdl/educaton/mux4_1/ Примеры условных операторов if, case и др.]
 +
 
 +
=== Слайд: VHDL-минимум для описания триггеров (4) ===
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! D-Триггер без сброса
 +
|-
 +
|valign=top|<source lang="vhdl">
 +
DFF: process(CLOCK)
 +
begin
 +
  if CLOCK'EVENT and CLOCK = '1' then
 +
    Q <= D; -- тактироваие передним фронтом
 +
  end if;
 +
end process;</source>
 +
|}
 +
 
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! D-Триггер со сбросом и установкой
 +
|-
 +
|valign=top| <source lang="vhdl">
 +
AS_DFF: process (CLOCK, RESET, SET)
 +
begin
 +
  if RESET = '1' then
 +
    Q <= '0';
 +
  elsif SET = '1' then
 +
    Q <= '1';
 +
  elsif CLOCK'EVENT and CLOCK = '1' then
 +
    Q <= D;
 +
  end if;
 +
end process;</source>
 +
|}
 +
 
 +
==== Слайд: VHDL-модели триггеров (fdp) ====
 +
 
 +
* D-Триггер, синхронизируемый положительным фронтом, с парафазным выходом
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Fdp.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity fdp is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    c : in  std_logic;
 +
    q : out std_logic;
 +
    qn : out std_logic);
 +
end fdp;
 +
architecture beh of fdp is
 +
begin
 +
  p1 : process (c)
 +
  begin
 +
    if c'event and c = '1' then
 +
      q <= to_x01(d) after del;
 +
      qn <= not to_x01(d) after del;
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
==== Слайд: VHDL-модели триггеров (fld)  ====
 +
 
 +
* D-Триггер, синхронизируемый отрицательным фронтом
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Fld.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity fld is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    c : in  std_logic;
 +
    q : out std_logic);
 +
end fld;
 +
architecture beh of fld is
 +
begin
 +
  p1 : process (c)
 +
  begin
 +
    if c'event and c = '0' then
 +
      q <= to_x01(d) after del;
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
==== Слайд: VHDL-модели триггеров (fdrs)  ====
 +
 
 +
* D-Триггер, синхронизируемый положительным фронтом, с асинхронным сбросом и установкой
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Fdrs.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity fdrs is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    c : in  std_logic;
 +
    r : in  std_logic;
 +
    s : in  std_logic;
 +
    q : out std_logic);
 +
end fdrs;
 +
architecture beh of fdrs is
 +
begin
 +
  p1 : process (r, s, c)
 +
  begin
 +
    if r = '1' then
 +
      q <= '0' after del;
 +
    elsif s = '1' then
 +
      q <= '1' after del;
 +
    elsif c'event and c = '1' then
 +
      q <= to_x01(d) after del;
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
<slides split="-----" width="650">
 +
 
 +
* D-Триггер, синхронизируемый положительным фронтом, с асинхронным сбросом
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Fdr.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity fdr is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    c : in  std_logic;
 +
    r : in  std_logic;
 +
    q : out std_logic);
 +
end fdr;
 +
architecture beh of fdr is
 +
begin
 +
  ff : process (r, c)
 +
  begin
 +
    if r = '1' then
 +
      q <= '0' after del;
 +
    elsif c'event and c = '1' then
 +
      q <= to_x01(d) after del;
 +
    end if;
 +
  end process ff;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
 
 +
* D-Триггер (fdrp) с прямым и инверсным выходом, синхронизируемый положительным фронтом, с асинхронным сбросом
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! —
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity fdrp is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    c : in  std_logic;
 +
    r : in  std_logic;
 +
    q : out std_logic;
 +
    qn: out std_logic);
 +
end fdrp;
 +
architecture beh of fdrp is
 +
begin
 +
  ff : process (r, c)
 +
  begin
 +
    if r = '1' then
 +
      q <= '0' after del;
 +
      qn <= '1' after del;
 +
    elsif c'event and c = '1' then
 +
      q <= to_x01(d) after del;
 +
      qn <= not to_x01(d) after del;
 +
    end if;
 +
  end process ff;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
* D-Триггер с сигналом разрешения записи данных, синхронизируемый положительным фронтом
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Fe.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity fe is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    e : in  std_logic;
 +
    c : in  std_logic;
 +
    q : out std_logic);
 +
end fe;
 +
architecture beh of fe is
 +
begin
 +
  p1 : process (c)
 +
  begin
 +
    if c'event and c = '1' then
 +
      if e = '1' then
 +
        q <= to_x01(d) after del;
 +
      end if;
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
 
 +
* D-Триггер с сигналом разрешения записи данных, синхронизируемый положительным фронтом, с асинхронным сбросом и установкой
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Fers.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity fers is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    e : in  std_logic;
 +
    c : in  std_logic;
 +
    r : in  std_logic;
 +
    s : in  std_logic;
 +
    q : out std_logic);
 +
end fers;
 +
architecture beh of fers is
 +
begin
 +
  p1 : process (r, s, c)
 +
  begin
 +
    if r = '1' then
 +
      q <= '0' after del;
 +
    elsif s = '1' then
 +
      q <= '1' after del;
 +
    elsif c'event and c = '1' then
 +
      if e = '1' then
 +
        q <= to_x01(d) after del;
 +
      end if;
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
* D-Триггер, синхронизируемый положительным уровнем
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Ld.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity ld is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    c : in  std_logic;
 +
    q : out std_logic);
 +
end ld;
 +
architecture beh of ld is
 +
begin
 +
  p1 : process (c, d)
 +
  begin
 +
    if c = '1' then
 +
      q <= to_x01(d);
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
 
 +
* D-Триггер, синхронизируемый положительным уровнем, с асинхронным сбросом
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Ldr.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity ldr is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d : in  std_logic;
 +
    c : in  std_logic;
 +
    r : in  std_logic;
 +
    q : out std_logic);
 +
end ldr;
 +
architecture beh of ldr is
 +
begin
 +
  p1 : process (r, c, d)
 +
  begin
 +
    if r = '1' then
 +
      q <= '0' after del;
 +
    elsif c='1' then
 +
      q <= to_x01(d) after del;
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
 
 +
* асинхронный RS-триггер
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Lrs.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity lrs is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    r : in  std_logic;
 +
    s : in  std_logic;
 +
    q : out std_logic);
 +
end lrs;
 +
architecture beh of lrs is
 +
begin
 +
  p1 : process (r, s)
 +
  begin
 +
    if r = '1' then
 +
      q <= '0' after del;
 +
    elsif s = '1' then
 +
      q <= '1' after del;
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
* D-Триггер, синхронизируемый низким уровнем
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Lld.png|center]]
 +
| valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity lld is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    d  : in  std_logic;
 +
    cl : in  std_logic;
 +
    q  : out std_logic);
 +
end lld;
 +
architecture beh of lld is
 +
begin
 +
  p1 : process (cl, d)
 +
  begin
 +
    if cl = '0' then
 +
      q <= to_x01(d) after del;
 +
    end if;
 +
  end process p1;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
-----
 +
 
 +
* T-триггер, синхронизируемый положительным фронтом
 +
 
 +
{| align=center border="1" cellspacing="0" cellpadding="5" border="1" style="border:1px solid #000; border-collapse: collapse"
 +
! [[Файл:Fts.png|center]]
 +
|valign=top align=left| <source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
entity fts is
 +
  -- pragma synthesis_off
 +
  generic (
 +
    del : time := 900 ps);
 +
  -- pragma synthesis_on
 +
  port (
 +
    c : in  std_logic;
 +
    s : in  std_logic;
 +
    q : out std_logic);
 +
end fts;
 +
architecture beh of fts is
 +
  signal q_i : std_logic;
 +
begin
 +
  ff : process (s, c)
 +
  begin
 +
    if s = '1' then
 +
      q_i <= '1' after del;
 +
    elsif c'event and c = '1' then
 +
      q_i <= not q_i after del;
 +
    end if;
 +
  end process ff;
 +
  q <= q_i;
 +
end beh;
 +
</source>
 +
|}
 +
 
 +
</slides>
 +
 
 +
=== Слайд: Счетчики. Классификация ===
 +
 
 +
* '''Счетчиком''' называется цифровой блок, предназначенный для подсчета входных сигналов.
 +
* '''Модуль счета''': число возможных состояний счетчика.
 +
 
 +
[[Файл:Классификация счетчиков.mm|center]]
 +
 
 +
=== Слайд: Описание регистра ===
 +
 
 +
<source lang="vhdl">
 +
entity reg is
 +
 
 +
  port (
 +
    di        : in  std_logic;
 +
    d          : in  std_logic_vector(7 downto 0);
 +
    shift_load : in  std_logic;
 +
    left_right : in  std_logic;
 +
    clk        : in  std_logic;        -- reset
 +
    reset      : in  std_logic;
 +
    q          : out std_logic_vector(7 downto 0);
 +
    qi        : out std_logic);
 +
 
 +
end reg;
 +
 
 +
architecture beh of reg is
 +
  signal qq : std_logic_vector(7 downto 0);
 +
begin  -- beh
 +
 
 +
  p1: process (clk, reset)
 +
  begin  -- process p1
 +
    if reset = '1' then
 +
      qq(7 downto 0) <= "00000000";      -- (others => '0')
 +
    elsif clk'event and clk = '1' then  -- rising clock edge
 +
      if shift_load = '0' then
 +
        if left_right = '0' then
 +
          qq <= qq(6 downto 0) & di ;
 +
          qi <= qq(7);
 +
        else
 +
          -- left_right = '1'
 +
          qq <= di & qq(7 downto 1);
 +
          qi <= qq(0);
 +
        end if;
 +
      else
 +
        -- shift_load = '1' - load mode
 +
        qq <= d;
 +
      end if;
 +
    end if;
 +
  end process p1;
 +
 
 +
  q <= qq;
 +
end beh;
 +
</source>
  
3. З
+
=== Слайд: END ===

Текущая версия на 08:44, 9 июня 2014

Лекции ПЦУСБ

Лекции

Практические
Тесты

Лабораторные

Доп. материалы

Заголовок
Базовые цифровые устройства
Автор
Авдеев Н.А.
Нижний колонтитул
ПЦУСБ/Лекция 3
Дополнительный нижний колонтитул
Авдеев Н.А., 08:44, 9 июня 2014


Содержание

Слайд: Содержание

  • Логические элементы (И, ИЛИ, НЕ, Исключающее ИЛИ)
  • Комбинационные схемы [1], [2]:
    • Дешифратор [3] /Шифратор
    • Мультиплексор/Демультиплексор
    • Сумматор
    • Компаратор
  • Последовательностные схемы
    • Триггеры
      • Синхронные
        • по фронту
        • по уровню
      • Асинхронные
    • Регистры
    • Автоматы
    • Счетчики

Слайд: Логические элементы

В алгебре логики известны три основные логические операции:

  1. Логическое умножение (конъюнкция или операция И). Записывается как F = A Λ B, F = A & B, F = A·B, F = AB, читается – A и B.
  2. Логическое сложение (дизъюнкция или операция ИЛИ). Записывается как F = A V B, F = A | B, F = A+B, читается – F = A или B.
  3. Логическое отрицание (инверсия или операция НЕ). Записывается F = A , читается – F = “не” A.

Слайд:Таблица истинности логических элементов

Image80.gif


Аргументы Логические операции (булевы функции)
А В И ИЛИ НЕ
A·B A+B A B
0 0 0 0 1 1
0 1 0 1 1 0
1 0 0 1 0 1
1 1 1 1 0 0
Операторы VHDL A and B A or B not A not B


Комментарий

Таким образом, выполнение сколь угодно сложной логической операции может быть сведено к трем вышеперечисленным операциям. Следовательно, имея некоторые технические устройства, реализующие операции И, ИЛИ, НЕ, можно построить сколь угодно сложное цифровое устройство. Такие устройства называются соответственно логическими элементами И, ИЛИ, НЕ (рис. 2) и образуют основной базис или функционально полную систему логических элементов.


Слайд: Дешифратор (DC)

  • комбинационная схема, преобразующее n-разрядный двоичныйв -ичный одноединичный (позиционный) код
image234.png

Слайд:Дешифратор (VHDL модель)

entity dc is
  port (
    x : in  std_logic_vector(2 downto 0);
    y : out std_logic_vector(7 downto 0));
end dc;
 
architecture beh of dc is
begin 
  y <=
    "00000001" when x = "000" else
    "00000010" when x = "001" else
    "00000100" when x = "010" else
    "00001000" when x = "011" else
    "00010000" when x = "100" else
    "00100000" when x = "101" else
    "01000000" when x = "110" else
    "10000000" when x = "111" else
    "00000000";
end beh;

Слайд:Шифратор

  • комбинационная схема, выполняющее преобразование одноединичный (позиционного) n-разрядного кода в m-разрядный двоичный код.
image232.png


Слайд:Шифратор (VHDL модель 1)

VHDL модель 1 VHDL модель 2
entity cd is
 
  port (
    x : in  std_logic_vector(7 downto 0);
    y : out std_logic_vector(2 downto 0));
 
end dc;
 
architecture beh1 of cd is
 
begin  
 
  y <=
    "000" when x(0) = "1" else
    "001" when x(1) = "1" else
    "010" when x(2) = "1" else
    "011" when x(3) = "1" else
    "100" when x(4) = "1" else
    "101" when x(5) = "1" else
    "110" when x(6) = "1" else
    "111" when x(7) = "1" else
    "000";    
 
end beh1;
entity cd is
 
  port (
    x : in  std_logic_vector(7 downto 0);
    y : out std_logic_vector(2 downto 0));
 
end dc;
 
architecture beh2 of cd is
 
begin 
 
  y(0) <= x(1) or x(3) or x(5) or x(7);
  y(1) <= x(2) or x(3) or x(6) or x(7);
  y(2) <= x(4) or x(5) or x(6) or x(7);
 
end beh2;

Слайд: Мультиплексор

  • комбинационная схема, которая передает сигнал с одного из информационных входов Xi на единственный выход Y, причем номер выбираемого входа задается с помощью управляющих сигналов (адресных входов ai).
tabl5.gif
y = OE(x0*a1*a0 + x1*a1*a0 + x2*a1*a0 + x3*a1*a0)


Слайд:Мультиплексор (Схема)

6.htm1.gif
MS_S.gif

Слайд:Мультиплексор (VHDL модель)

entity mux is
 
  port (
    x : in  std_logic_vector(3 downto 0);
    a : in  std_logic_vector(1 downto 0);
    y : out std_logic);
 
end mux;
 
architecture beh of mux is
begin
  y <=
    x(0) when a = "00" else
    x(1) when a = "01" else
    x(2) when a = "10" else
    x(3) when a = "11" else
    '0';
end beh;


Слайд:Мультиплексор (Особенность)

  • с помощью мультиплексора можно реализовать любую логическую функцию
arhitektura-pc-60.png

Слайд:Мультиплексор (Особенность)

6.htm8.jpg

Слайд: Демультиплексор [4] [5]

  • комбинационная схема, которая выполняет функцию, обратную мультиплексору, т.е. в соответствии с принятой адресацией Ai направляет информацию с единственного входа D на один из M выходов Fj. При этом на остальных выходах будут логические нули (единицы).
Входы Выходы
A1 A0 F3 F2 F1 F0
0 0 0 0 0 D
0 1 0 0 D 0
1 0 0 D 0 0
1 1 D 0 0 0

Слайд: Демультиплексор (Схема)

uch_cifr_t4_45_image016.gif uch_cifr_t4_45_image015.gif uch_cifr_t4_45_image017.gif

Слайд: Демультиплексор (VHDL модель)

entity dms is
  port (
    x : in  std_logic;
    a : in  std_logic_vector(1 downto 0);
    y : out std_logic_vector(3 downto 0));
end dms;
 
architecture beh of dms is
begin
  y <=
    "000" & x      when a = "00" else
    "00" & x & '0' when a = "01" else
    '0' & x & "00" when a = "10" else
    x & "000"      when a = "11" else
    "0000";
end beh;

Слайд: Сумматор

Слайд: Классификация триггеров

Слайд: Триггеры [6] [7]

Ссылки:

Слайд: УГО триггеров

Alib3-triggers.png

Слайд: VHDL-минимум для описания триггеров (1)

  • Атрибуты — это различные характеристики объектов VHDL
Атрибуты сигналов (S)
Атрибут Описание
S'active TRUE, если было присвоение, но текущее значение еще прежнее
S'delayed(t) Значение сигнала, существовавшее на время t перед вычислением данного атрибута
S'event TRUE, если происходит изменение сигнала
S'last_active Время от последнего присвоения значения сигналу до момента вычисления атрибута
S'last_event Время от последнего изменения сигнала до момента вычисления атрибута
S'last_value Последнее присвоенное сигналу значение
S'stable(t) TRUE, если не происходило изменение сигнала в течение времени t
S'transaction TRUE, если происходит очередное присвоение значения сигналу
S'quiet FALSE, если было присвоение, но текущее значение еще прежнее


Слайд: VHDL-минимум для описания триггеров (2)

clock_edge ::=
   RISING_EDGE(clk_signal_name)
   или FALLING_EDGE(clk_signal_name)
   или clock_level and event_expr
   или event_expr and clock_level
clock_level ::=
   clk_signal_name = '0' или clk_signal_name = '1'
event_expr ::=
   clk_signal_name'EVENT
   или not clk_signal_name'STABLE
  • функции RISING_EDGE и FALLING_EDGE описаны для типов:
    • BIT, BOOLEAN и др. (пакет STANDARD в VHDL'2008)
    • std_logic, std_ulogic (std_logic_1164)

Слайд: VHDL-минимум для описания триггеров (3)

Положительный фронт (переход 0 → 1)
RISING_EDGE(clk_signal_name)
clk_signal_name'EVENT and clk_signal_name = '1'
clk_signal_name = '1' and clk_signal_name'EVENT
not clk_signal_name'STABLE and clk_signal_name = '1'
clk_signal_name = '1' and not clk_signal_name'STABLE


Отрицательный фронт (переход 1 → 0)
FALLING_EDGE(clk_signal_name)
clk_signal_name'EVENT and clk_signal_name = '0'
clk_signal_name = '0' and clk_signal_name'EVENT
not clk_signal_name'STABLE and clk_signal_name = '0'
clk_signal_name = '0' and not clk_signal_name'STABLE
  • Все записи в столбцах эквивалентны

Слайд: VHDL-минимум для описания триггеров. Оператор Process (3)

  • Оператор процесса
LABEL: process [ ( имя сигнала {, имя сигнала } ) ]
      объявление в процессе
begin
      последовательный оператор[ы]
end process;

  • Пример
Пример c process Сокращённая запись
entity A2 is
  port (
    A, B : in  std_logic;
    C : out std_logic);
end A2;
 
architecture beh of A2 is
begin 
 process (A, B) 
 begin
   C <= A and B;
 end process;
end beh;
entity A2 is
  port (
    A, B : in  std_logic;
    C : out std_logic);
end A2;
 
architecture beh of A2 is
begin 
  C <= A and B;
end beh;


Слайд: VHDL-минимум для описания триггеров. Оператор if

  • Оператор условия if (последовательный оператор)
if Условие_1 then
   Выражение1
elsif Условие_2 then
   Выражение2
else
   Выражение3
end if;


Пример 1 Пример 2
  IF    (s0='0' AND s1='0') THEN
    output <= in0;
  ELSIF (s0='1' AND s1='0') THEN
    output <= in1;
  ELSE
    output <= 'X';
  END IF;
  IF    (s0='0' AND s1='0') THEN
    output <= in0;
  ELSE
    output <= 'X';
  END IF;
Пример 3 Пример 4
  IF    (s0='0' AND s1='0') THEN
    output <= in0;
  ELSIF (s0='1' AND s1='0') THEN
    output <= 'X';
  END IF;
  IF (s0='0' AND s1='0') THEN
    output <= in0;
  END IF;

Слайд: VHDL-минимум для описания триггеров (4)

D-Триггер без сброса
 DFF: process(CLOCK)
 begin
   if CLOCK'EVENT and CLOCK = '1' then
     Q <= D; -- тактироваие передним фронтом
   end if;
 end process;


D-Триггер со сбросом и установкой
 AS_DFF: process (CLOCK, RESET, SET)
 begin
   if RESET = '1' then
     Q <= '0';
   elsif SET = '1' then
     Q <= '1';
   elsif CLOCK'EVENT and CLOCK = '1' then
     Q <= D;
   end if;
 end process;

Слайд: VHDL-модели триггеров (fdp)

  • D-Триггер, синхронизируемый положительным фронтом, с парафазным выходом
Fdp.png
library ieee;
use ieee.std_logic_1164.all;
entity fdp is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    c : in  std_logic;
    q : out std_logic;
    qn : out std_logic);
end fdp;
architecture beh of fdp is
begin
  p1 : process (c)
  begin
    if c'event and c = '1' then
      q <= to_x01(d) after del;
      qn <= not to_x01(d) after del;
    end if;
  end process p1;
end beh;

Слайд: VHDL-модели триггеров (fld)

  • D-Триггер, синхронизируемый отрицательным фронтом
Fld.png
library ieee;
use ieee.std_logic_1164.all;
entity fld is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    c : in  std_logic;
    q : out std_logic);
end fld;
architecture beh of fld is
begin
  p1 : process (c)
  begin
    if c'event and c = '0' then
      q <= to_x01(d) after del;
    end if;
  end process p1;
end beh;

Слайд: VHDL-модели триггеров (fdrs)

  • D-Триггер, синхронизируемый положительным фронтом, с асинхронным сбросом и установкой
Fdrs.png
library ieee;
use ieee.std_logic_1164.all;
entity fdrs is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    c : in  std_logic;
    r : in  std_logic;
    s : in  std_logic;
    q : out std_logic);
end fdrs;
architecture beh of fdrs is
begin
  p1 : process (r, s, c)
  begin
    if r = '1' then
      q <= '0' after del;
    elsif s = '1' then
      q <= '1' after del;
    elsif c'event and c = '1' then
      q <= to_x01(d) after del;
    end if;
  end process p1;
end beh;
  • D-Триггер, синхронизируемый положительным фронтом, с асинхронным сбросом
Fdr.png
library ieee;
use ieee.std_logic_1164.all;
entity fdr is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    c : in  std_logic;
    r : in  std_logic;
    q : out std_logic);
end fdr;
architecture beh of fdr is
begin
  ff : process (r, c)
  begin
    if r = '1' then
      q <= '0' after del;
    elsif c'event and c = '1' then
      q <= to_x01(d) after del;
    end if;
  end process ff;
end beh;
  • D-Триггер (fdrp) с прямым и инверсным выходом, синхронизируемый положительным фронтом, с асинхронным сбросом
library ieee;
use ieee.std_logic_1164.all;
entity fdrp is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    c : in  std_logic;
    r : in  std_logic;
    q : out std_logic;
    qn: out std_logic);
end fdrp;
architecture beh of fdrp is
begin
  ff : process (r, c)
  begin
    if r = '1' then
      q <= '0' after del;
      qn <= '1' after del;
    elsif c'event and c = '1' then
      q <= to_x01(d) after del;
      qn <= not to_x01(d) after del;
    end if;
  end process ff;
end beh;
  • D-Триггер с сигналом разрешения записи данных, синхронизируемый положительным фронтом
Fe.png
library ieee;
use ieee.std_logic_1164.all;
entity fe is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    e : in  std_logic;
    c : in  std_logic;
    q : out std_logic);
end fe;
architecture beh of fe is
begin
  p1 : process (c)
  begin
    if c'event and c = '1' then
      if e = '1' then
        q <= to_x01(d) after del;
      end if;
    end if;
  end process p1;
end beh;
  • D-Триггер с сигналом разрешения записи данных, синхронизируемый положительным фронтом, с асинхронным сбросом и установкой
Fers.png
library ieee;
use ieee.std_logic_1164.all;
entity fers is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    e : in  std_logic;
    c : in  std_logic;
    r : in  std_logic;
    s : in  std_logic;
    q : out std_logic);
end fers;
architecture beh of fers is
begin
  p1 : process (r, s, c)
  begin
    if r = '1' then
      q <= '0' after del;
    elsif s = '1' then
      q <= '1' after del;
    elsif c'event and c = '1' then
      if e = '1' then
        q <= to_x01(d) after del;
      end if;
    end if;
  end process p1;
end beh;
  • D-Триггер, синхронизируемый положительным уровнем
Ld.png
library ieee;
use ieee.std_logic_1164.all;
entity ld is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    c : in  std_logic;
    q : out std_logic);
end ld;
architecture beh of ld is
begin
  p1 : process (c, d)
  begin
    if c = '1' then
      q <= to_x01(d);
    end if;
  end process p1;
end beh;
  • D-Триггер, синхронизируемый положительным уровнем, с асинхронным сбросом
Ldr.png
library ieee;
use ieee.std_logic_1164.all;
entity ldr is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d : in  std_logic;
    c : in  std_logic;
    r : in  std_logic;
    q : out std_logic);
end ldr;
architecture beh of ldr is
begin
  p1 : process (r, c, d)
  begin
    if r = '1' then
      q <= '0' after del;
    elsif c='1' then
      q <= to_x01(d) after del;
    end if;
  end process p1;
end beh;
  • асинхронный RS-триггер
Lrs.png
library ieee;
use ieee.std_logic_1164.all;
entity lrs is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    r : in  std_logic;
    s : in  std_logic;
    q : out std_logic);
end lrs;
architecture beh of lrs is
begin
  p1 : process (r, s)
  begin
    if r = '1' then
      q <= '0' after del;
    elsif s = '1' then
      q <= '1' after del;
    end if;
  end process p1;
end beh;
  • D-Триггер, синхронизируемый низким уровнем
Lld.png
library ieee;
use ieee.std_logic_1164.all;
entity lld is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    d  : in  std_logic;
    cl : in  std_logic;
    q  : out std_logic);
end lld;
architecture beh of lld is
begin
  p1 : process (cl, d)
  begin
    if cl = '0' then
      q <= to_x01(d) after del;
    end if;
  end process p1;
end beh;
  • T-триггер, синхронизируемый положительным фронтом
Fts.png
library ieee;
use ieee.std_logic_1164.all;
entity fts is
  -- pragma synthesis_off
  generic (
    del : time := 900 ps);
  -- pragma synthesis_on
  port (
    c : in  std_logic;
    s : in  std_logic;
    q : out std_logic);
end fts;
architecture beh of fts is
  signal q_i : std_logic;
begin
  ff : process (s, c)
  begin
    if s = '1' then
      q_i <= '1' after del;
    elsif c'event and c = '1' then
      q_i <= not q_i after del;
    end if;
  end process ff;
  q <= q_i;
end beh;

Слайд: Счетчики. Классификация

  • Счетчиком называется цифровой блок, предназначенный для подсчета входных сигналов.
  • Модуль счета: число возможных состояний счетчика.

Слайд: Описание регистра

entity reg is
 
  port (
    di         : in  std_logic;
    d          : in  std_logic_vector(7 downto 0);
    shift_load : in  std_logic;
    left_right : in  std_logic;
    clk        : in  std_logic;         -- reset
    reset      : in  std_logic;
    q          : out std_logic_vector(7 downto 0);
    qi         : out std_logic);
 
end reg;
 
architecture beh of reg is
  signal qq : std_logic_vector(7 downto 0);
begin  -- beh
 
  p1: process (clk, reset)
  begin  -- process p1
    if reset = '1' then 
      qq(7 downto 0) <= "00000000";      -- (others => '0')
     elsif clk'event and clk = '1' then  -- rising clock edge
       if shift_load = '0' then
         if left_right = '0' then
           qq <= qq(6 downto 0) & di ;
           qi <= qq(7);
         else
           -- left_right = '1'
           qq <= di & qq(7 downto 1);
           qi <= qq(0);
         end if;
       else
         -- shift_load = '1' - load mode
         qq <= d;
       end if;
    end if;
  end process p1;
 
  q <= qq;
end beh;

Слайд: END