«Работать добросовестно — значит: работать, повышая свою квалификацию, проявляя инициативу в совершенствовании продукции, технологий, организации работ, оказывая не предусмотренную должностными инструкциями помощь другим сотрудникам (включая и руководителей) в общей им всем работе.

ПЦУСБ/Лабораторная работа 2 — различия между версиями

Материал из Wiki
Перейти к: навигация, поиск
м (Библиотека элементов)
м (Шпаргалка)
Строка 175: Строка 175:
 
== Шпаргалка ==
 
== Шпаргалка ==
  
{|
+
{| align=center
 
! <html><img src="https://docs.google.com/drawings/d/10Tk3WXQRDjZxECs6GPA9UKKyr7WJyYoDxIG4VPl48Mw/pub?w=800"></html>
 
! <html><img src="https://docs.google.com/drawings/d/10Tk3WXQRDjZxECs6GPA9UKKyr7WJyYoDxIG4VPl48Mw/pub?w=800"></html>
 
|-
 
|-
Строка 618: Строка 618:
 
}}
 
}}
 
{{Hider|end}}
 
{{Hider|end}}
 +
 +
 +
{{Hider|VHDL-модель тестбенча (sch01_tb2.vhd)}}
 +
 +
{{Info|Компилировать файл sch01_tb2.vhd нужно с выставленной опцией совместимости со стандартом VHDL-2008. <br /> В противном случае будет выдаваться ошибка об отсутствии функции to_string или write}}
 +
 +
 +
{{Файл|sch01_tb2.vhd|
 +
<source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
-- пакеты для ввода/вывода
 +
use std.textio.all;
 +
use ieee.std_logic_textio.all;
 +
 +
-------------------------------------------------------------------------------
 +
 +
--entity sch01_tb is
 +
--end entity sch01_tb;
 +
 +
-------------------------------------------------------------------------------
 +
 +
architecture tb2 of sch01_tb is
 +
 +
  component sch01 is
 +
    port (
 +
      X : in  std_logic_vector(3 downto 1);
 +
      Y : out std_logic_vector(2 downto 1));
 +
  end component sch01;
 +
 +
  component sch01a is
 +
    port (
 +
      X : in  std_logic_vector(3 downto 1);
 +
      Y : out std_logic_vector(2 downto 1));
 +
  end component sch01a;
 +
 +
  signal X  : std_logic_vector(2 downto 0) := (others => '0');
 +
  signal Y1 : std_logic_vector(2 downto 1);
 +
  signal Y2 : std_logic_vector(2 downto 1);
 +
 +
  signal OK    : std_logic;
 +
  signal All_Ok : std_logic;
 +
  signal strob  : std_logic := '0';
 +
 +
  signal clock_time            : time := 0 ns;
 +
  signal delay_y1, delay_y1_max : time := 0 ns;
 +
  signal delay_y2, delay_y2_max : time := 0 ns;
 +
 +
begin
 +
 +
  DUT1 : sch01
 +
    port map (
 +
      X => X,
 +
      Y => Y1);
 +
 +
  DUT2 : sch01a
 +
    port map (
 +
      X => X,
 +
      Y => Y2);
 +
 +
-- формирование входных воздействий
 +
  x(0) <= not x(0) after 50 ns;
 +
  x(1) <= not x(1) after 100 ns;
 +
  x(2) <= not x(2) after 200 ns;
 +
 +
-- процесс формирует стробирующий сигнал,
 +
-- по положительному фронту которого происходит сравнение
 +
-- выходов двух моделей и вывод в транскрипт значений задержки
 +
  process is
 +
  begin  -- process
 +
    strob <= '0';
 +
    wait for 45 ns;
 +
    strob <= '1';
 +
    wait for 5 ns;
 +
  end process;
 +
 +
-- проверка соответствия ответов
 +
  OK <=
 +
    '1' when Y1 = Y2 else
 +
    'X';
 +
 +
-- определение времени смены входных сигналов
 +
  clock_time <=
 +
    now when x(0)'event else
 +
    clock_time;
 +
 +
-- определение задержки распространения сигнала от входов к выходам
 +
  delay_y1 <=
 +
    now - clock_time when y1(1)'event else
 +
    0 ns            when x(0)'event else
 +
    delay_y1;
 +
 +
  delay_y2 <=
 +
    now - clock_time when y1(2)'event else
 +
    0 ns            when clock_time'event else
 +
    delay_y2;
 +
 +
-- определение максимальной задержки распространения сигнала
 +
  delay_y1_max <=
 +
    delay_y1 when delay_y1 >= delay_y1_max else
 +
    delay_y1_max;
 +
 +
  delay_y2_max <=
 +
    0 ns    when now < 100 ns else
 +
    delay_y2 when delay_y2 >= delay_y2_max else
 +
    delay_y2_max;
 +
 +
-- процесс для вывода значений задержки в транскрипт
 +
  process (strob)
 +
  begin  -- process
 +
    if strob'event and strob = '1' then
 +
--      write(OUTPUT, " " & time'image(now) & " " & to_string(x) & " " & to_string(y1) & " " & time'image(delay_y2)& " " & time'image(delay_y1) & LF );
 +
 +
      write(OUTPUT, " " & to_string(x) & " " & to_string(y1) & " " & time'image(delay_y2)& " " & time'image(delay_y1) );
 +
      if y1 = y2 then
 +
        All_Ok <= '1';
 +
        write(OUTPUT, " Ok" & LF);
 +
      else
 +
        All_Ok <= 'X';
 +
        write(OUTPUT, " FAIL" & LF);
 +
      end if;
 +
 +
    end if;
 +
 +
  end process;
 +
 +
end architecture tb2;
 +
</source>
 +
 +
}}{{Hider|end}}
 +
 +
 +
{| align=center
 +
! [[Файл:ЦСУСБ-Лаб2-Tb2 vawe.png|800px|center]]
 +
|-
 +
! Временная диаграмма sch01_tb(tb2)
 +
|}
 +
 +
 +
Вывод в транскрипт:
 +
 +
<source lang="text">
 +
#  X  Y  DY2  DY1
 +
#  000 00 9 ns 9 ns Ok
 +
#  001 00 0 ns 0 ns Ok
 +
#  010 00 0 ns 0 ns Ok
 +
#  011 01 0 ns 8 ns Ok
 +
#  100 11 7 ns 0 ns Ok
 +
#  101 00 5 ns 10 ns Ok
 +
#  110 11 5 ns 8 ns Ok
 +
#  111 01 5 ns 0 ns Ok
 +
#  000 00 0 ns 8 ns Ok
 +
#  001 00 0 ns 0 ns Ok
 +
#  010 00 0 ns 0 ns Ok
 +
#  011 01 0 ns 8 ns Ok
 +
#  100 11 7 ns 0 ns Ok
 +
#  101 00 5 ns 10 ns Ok
 +
#  110 11 5 ns 8 ns Ok
 +
#  111 01 5 ns 0 ns Ok
 +
#  000 00 0 ns 8 ns Ok
 +
</source>
 +
 +
В результате моделирования получено, что максимальная задержка для
 +
* D<sub>Y1</sub> = 10 нс (условных единиц)
 +
* D<sub}Y2</sub> = 7 нс (условных единиц)
 +
Начальное значение задержки (9 нс) "фиктивное".
 +
 +
Однако, при ручном анализе схемы:
 +
 +
{| align=center
 +
! <html><img src="https://docs.google.com/drawings/d/1XZO6wtpykyefcsPqQfV27MHfzaKG82h0ff1AutnV7fA/pub?w=800"></html>
 +
|-
 +
! Схема с отмеченным критическим путём для каждого выхода ([https://docs.google.com/drawings/d/1XZO6wtpykyefcsPqQfV27MHfzaKG82h0ff1AutnV7fA/edit Edit])
 +
|}
 +
 +
Значение максимальной задержки равно 13 и 11 для выходов Y1 и Y2. Почему при моделировании не получены эти значения?
  
 
<!--  
 
<!--  

Версия 18:13, 6 октября 2013

Лекции ПЦУСБ

Лекции

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

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

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

Содержание

Описание и моделирование нерегулярных логических схем

Задание

Вариант 1
Рисунок 1 — Пример задания схемы

Для заданной нерегулярной логической схемы (см. пример на рисунке 1):

  • составить структурное VHDL-описание;
  • построить систему логических функций, реализуемую схемой и составить VHDL-описание по полученным выражениям;
  • составить тестбенч для проверки эквивалентности двух VHDL-описаний, выполнив моделирование на всех наборах значений входных переменных;
  • найти критический путь в схеме.

Рекомендуемый порядок выполнения работы

  1. Составить VHDL-модель каждого из типов элементов, входящих в схему. Если в схеме есть элементы одинакового типа, то составляется одна модель для всех элементов данного типа. Модель элемента должна учитывать задержку распространения сигнала (от входа к выходу), указанную в таблице 1. В схеме для каждого логического элемента указаны его тип (библиотечное имя) и имена входных и выходных портов.
  2. Составить структурную VHDL-модель схемы в целом. Предварительно следует проставить на схеме имена связей и номера элементов, которые должны соответствовать именам сигналов и меткам элементов (в операторе port map).
  3. По схеме составить логические уравнения зависимости выходов от входов, используя заданные в таблице 1 логические функции элементов. Составить VHDL-модель, используя полученные выражения.
  4. Составить тестирующую программу, включающую две VHDL-модели, и формирующую входные сигналы (полный перебор) и сравнивая ответы двух схем (сигнал OK). При сравнении ответов следует учитывать, что в структурном VHDL-описании учитываются задержки распространения сигналов в логических элементах, и поэтому правильные (окончательные) ответы со структурного и логического описаний будут разнесены во времени.
  5. Провести моделирование и получить временную диаграмму.
  6. Для каждого тестирующего набора и для каждой функции определить задержку схемы.
  7. Найти критический путь на схеме – путь с наибольшей суммарной задержкой элементов.


Требования к оформлению отчета

  1. В отчете должна быть приведена логическая схема, на которой должны быть обозначены имена сигналов и меток элементов, соответствующие описанию на языке VHDL.
  2. В отчете должен содержаться VHDL-код структурного (включая описания используемых библиотечных элементов) и логического описаний схемы, а также тестирующая программа.
  3. Описания всех элементов должны быть в отдельных файлах, при этом каждый файл должен включать следующий комментарий:
    • ФИО и номер группы автора разработанной VHDL-модели;
    • номер варианта;
  4. В отчете должны содержаться временные диаграммы, соответствующие тестирующей программе.
  5. В отчете должна содержаться система логических функций, реализуемых схемой.
  6. В отчете необходимо привести таблицу, содержащую значения задержки распространения сигналов от входа к выходам для каждого входного набора.
  7. На логической схеме должен быть отмечен критический путь.
  8. В отчете должно быть указано значение задержки схемы, соответствующее задержке критического пути.

Библиотека элементов

В таблице заданы 2 типа задержек: в относительных единицах и в пикосекундах. Относительные единицы можно приравнять к наносекундам.

Информация

Группа 013201 должна использовать значения задержки в пикосекундах,
а группа 013202 — в относительных единицах (нс).

Таблица 1
Имя элемента Функция элемента Задержка,
относит. ед.
Площадь Задержка, пс
GND 1
VCC 1
N 2 100 160
A2 4 1000 511
A3 5 1500 824
A4 6 400 1156
A6 10 400 1505
A8 12 400 2121
EX2 7 1000 592
MX2 8 1000 938
NA2 3 200 275
NA3 4 300 425
NA3O2 5 300 441
NA4 5 400 742
NAO2 4 200 362
NAO22 5 200 487
NAO3 5 300 1000
NAOA2 5 200 1000
NEX2 7 1000 526
NMX2 6 1000 593
NMX4 15 1000 910
NO2 3 200 299
NO3 4 300 559
NO3A2 5 300 643
NO4 5 400 1087
NOA2 4 200 346
NOA22 5 200 477
NOA3 5 300 570
NOAO2 5 200 570
O2 4 1000 601
O3 5 1500 946
O4 6 1500 1400
O6 10 1500 1831
O8 12 1500 2388
DFRS D-триггер, управляемый положительным фронтом с

асинхронным сбросом и установкой с прямым выходом

25 1000 1300


Alib3-logic.png
Рисунок 1 – Условное графическое обозначение элементов

Варианты заданий

Варианты заданий приведены в DOC-файле.

Информация

Для группы 013201 вариант задания соответствует номеру в журнале.
Для группы 013202 вариант задания определяется по формуле (31 – N), где N – номер по списку в группе.


Шпаргалка

Схема

1. На схеме подписываются все связи и даются имена всем элементам. Подписывать элементы рекомендуется как принято в ГОСТе: слева направо, сверху вниз. Рекомендуется использовать префикс DD в метке элемента.

2. Определяется список библиотечных элементов, входящих в схему.

Таблица 1
Имя элемента Функция элемента Задержка,
относит. ед.
Площадь Задержка, пс
N 2 100 160
NA3 4 300 425
NO2 3 200 299
NAO22 5 200 487
NOAO2 5 200 570

По функциям заданным в таблице составляются соответствующие VHDL описания используемых логических элементов. Для примера будем использовать задержки заданные в условных единицах, которые приравняем к наносекундам (т.е. значения заданные в таблице домножим на 1 нс).











ЦСУСБ-Лаб2-Tb2 vawe.png
Временная диаграмма sch01_tb(tb2)


Вывод в транскрипт:

#  X   Y  DY2  DY1
#  000 00 9 ns 9 ns Ok
#  001 00 0 ns 0 ns Ok
#  010 00 0 ns 0 ns Ok
#  011 01 0 ns 8 ns Ok
#  100 11 7 ns 0 ns Ok
#  101 00 5 ns 10 ns Ok
#  110 11 5 ns 8 ns Ok
#  111 01 5 ns 0 ns Ok
#  000 00 0 ns 8 ns Ok
#  001 00 0 ns 0 ns Ok
#  010 00 0 ns 0 ns Ok
#  011 01 0 ns 8 ns Ok
#  100 11 7 ns 0 ns Ok
#  101 00 5 ns 10 ns Ok
#  110 11 5 ns 8 ns Ok
#  111 01 5 ns 0 ns Ok
#  000 00 0 ns 8 ns Ok

В результате моделирования получено, что максимальная задержка для

  • DY1 = 10 нс (условных единиц)
  • D<sub}Y2</sub> = 7 нс (условных единиц)

Начальное значение задержки (9 нс) "фиктивное".

Однако, при ручном анализе схемы:

Схема с отмеченным критическим путём для каждого выхода (Edit)

Значение максимальной задержки равно 13 и 11 для выходов Y1 и Y2. Почему при моделировании не получены эти значения?