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

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

Материал из Wiki
Перейти к: навигация, поиск
(Требования к оформлению отчета)
м (Шпаргалка)
 
(не показаны 32 промежуточные версии 2 участников)
Строка 4: Строка 4:
  
 
===Задание===
 
===Задание===
Для заданной нерегулярной логической схемы:
+
{| align=right
* cоставить структурное VHDL-описание;
+
! [[Файл:Lab01-variant01.png|center|400px|Вариант 1]]
* выполнить моделирование на всех наборах значений входных переменных;
+
|-
* построить систему логических функций, реализуемую схемой;
+
! Рисунок 1 — Пример задания схемы
 +
|}
 +
 
 +
Для заданной нерегулярной логической схемы (см. пример на рисунке 1):
 +
* составить структурное VHDL-описание;
 +
* построить систему логических функций, реализуемую схемой и составить VHDL-описание по полученным выражениям;
 +
* составить тестбенч для проверки эквивалентности двух VHDL-описаний, выполнив моделирование на всех наборах значений входных переменных;
 
* найти критический путь в схеме.
 
* найти критический путь в схеме.
  
== Рекомендуемый порядок выполнения работы ==
+
===Рекомендуемый порядок выполнения работы===
 
+
1. Составить VHDL-модель каждого из типов элементов, входящих в схему. Если в схеме есть элементы одинакового типа, то составляется ''одна модель'' для всех элементов данного типа. Модель элемента должна соответствовать задержке, указанной в табл. 5.1. При графическом изображении логического элемента на схеме будет указываться его тип (библиотечное имя) и имена входных и выходных полюсов.
+
 
+
2. Составить VHDL-модель схемы в целом.
+
 
+
3. Составить тестирующую программу для всех наборов значений входных переменных.
+
 
+
4. Провести моделирование и получить временную диаграмму.
+
 
+
5. По временной диаграмме записать систему логических функций, реализуемых схемой.
+
  
6. Для каждого тестирующего набора определить задержку схемы.
+
# Составить VHDL-модель каждого из типов элементов, входящих в схему. Если в схеме есть элементы одинакового типа, то составляется одна модель для всех элементов данного типа. Модель элемента должна учитывать задержку распространения сигнала (от входа к выходу), указанную в таблице 1. В схеме для каждого логического элемента указаны его тип (библиотечное имя) и имена входных и выходных портов.
 +
# Составить структурную VHDL-модель схемы в целом. Предварительно следует проставить на схеме имена связей и номера элементов, которые должны соответствовать именам сигналов и меткам элементов (в операторе port map).
 +
# По схеме составить логические уравнения зависимости выходов от входов, используя заданные в таблице 1 логические функции элементов. Составить VHDL-модель, используя полученные выражения.
 +
# Составить тестирующую программу, включающую две VHDL-модели, и формирующую входные сигналы (полный перебор) и сравнивая ответы двух схем (сигнал OK). При сравнении ответов следует учитывать, что в структурном VHDL-описании учитываются задержки распространения сигналов в логических элементах, и поэтому правильные (окончательные) ответы со структурного и логического описаний будут разнесены во времени.
 +
# Провести моделирование и получить временную диаграмму.
 +
# Для каждого тестирующего набора и для каждой функции определить задержку схемы.
 +
# Найти критический путь на схеме – путь с наибольшей суммарной задержкой элементов.
  
7. Найти критический путь на схеме – путь с наибольшей суммарной задержкой элементов.
 
  
 
=== Требования к оформлению отчета ===
 
=== Требования к оформлению отчета ===
  
1. В отчете должна быть нарисована логическая '''схема'''. При этом обозначения сигналов, элементов схемы должны ''соответствовать''''' '''описанию на языке VHDL.
+
# В отчете должна быть приведена логическая схема, на которой должны быть обозначены имена сигналов и меток элементов ({{Зел|как показано на рисунке 2}}), соответствующие структурному описанию на языке VHDL (изображение схемы можно скопировать из файла [[Медиа:ПЦУСБ-ЛР02-tasks.zip|заданий]]).
 +
# В отчете должен быть приведён список (таблица) используемых библиотечных элементов, с описанием логических функций и задержек.
 +
# В отчете необходимо привести VHDL-коды:
 +
#* структурного описания схемы (включая описания используемых библиотечных элементов{{Зел|, которые разместить в приложении А в конце отчета}})
 +
#* логического описания схемы
 +
#* тестирующей программы {{Зел|(достаточно одного варианта тестбенча)}}.
 +
# В отчете должны содержаться временные диаграммы, соответствующие тестирующей программе.
 +
#* на временной диаграмме должны быть приведены
 +
#** входы, выходы блоков структурного и логического описаний схемы
 +
#** внутренние сигналы структурного и логического описаний схемы
 +
#** сигнал сравнения выходов
 +
#** При использовании второго тестбенча, сигналы определения задержек
 +
#* На временных диаграммах должны быть видны все возможные значения входов и соответствующие им значения выходов (например, если 5 входов, то 32 возможных значений входов должны быть различимы на диаграмме).
 +
# В отчете должна содержаться система логических функций, реализуемых схемой ({{Зел|не обязательно, если она совпадает с логическим VHDL-описанием схемы}}).
 +
# В отчете необходимо привести таблицу, содержащую значения задержки распространения сигналов от входа к выходам для каждого входного набора каждой функции. {{Сн|А также, если используется тесбенч считающий задержки, то привести скриншот отчета по задержкам, выдаваемого в транскрипт при выполнении тестбенча.}}
 +
# {{Зел|В отчете необходимо привести схему, на которой должен быть отмечен критический путь для каждой выходной функции}} (как показано на рисунке 3). При этом на схеме для каждого элемента должны быть отмечены (на рисунке розовым цветом):
 +
#* собственная задержка распространения (внутри элемента)
 +
#* и суммарная максимальная задержка распространения сигнала на выходе элемента относительно входов X (на выходе элемента, например, "=7").
 +
# В отчете должно быть указано значение задержки схемы, соответствующее задержке критического пути.
 +
# {{Зел|В заключении необходимо сравнить значения максимальных задержек для каждого выхода, полученные путём моделирования и ручного анализа. Если значения не совпадают, то выявить причину и привести пояснения этому (провести анализ причин несовпадения).}}
  
2. В отчете должен содержаться '''VHDL''''''-код''' схемы и '''тестирующая программа'''.
+
Требования к VHDL-файлам проекта:
 +
* Описания всех элементов должны быть в отдельных файлах, <s>при этом каждый файл должен включать следующий комментарий:
 +
** ФИО и номер группы автора разработанной VHDL-модели;
 +
** номер варианта;</s>
  
3. VHDL-код и тест должны быть в ''отдельных'' файлах и содержать ''комментарии:''
 
  
* автор разработанной VHDL-модели;
+
{{Info|Если в комментариях используете русский алфавит, то кодировку текстового файла нужно выбирать UTF-8. В стандартной Windows кодировке (cp1251) могут наблюдаться фиктивные ошибки при компиляции VHDL кода. Для задания кодировки в ModelSim нужно выполнить команду <code>encoding system utf-8</code> в терминальном окне (там куда выводятся системные сообщения).}}
* номер варианта;
+
  
4. В отчете должны содержаться '''временные диаграммы''', соответствующие тестирующей программе.
+
=== Библиотека элементов ===
  
5. В отчете должна содержаться '''система логических функций''', реализуемых схемой.
+
В таблице заданы 2 типа задержек: в относительных единицах и в пикосекундах. Относительные единицы можно приравнять к наносекундам.
  
6. На логической схеме должен быть отмечен '''критический путь'''.
+
{{Info|Группа 013201 должна использовать значения задержки в пикосекундах, <br />
 +
а группа 013202 — в относительных единицах (нс).}}
  
7. В отчете должно быть указано значение задержки схемы, соответствующее задержке критического пути.
+
{| class=standard align=center
 
+
|+ Таблица 1
{| cellspacing="1" cellpadding="3" class=standard align=center
+
! valign="TOP" colspan="3" | Логические элементы
+
 
|-
 
|-
 
! Имя элемента
 
! Имя элемента
 
! Функция элемента
 
! Функция элемента
! Задержка, нс
+
! Задержка, <br /> относит. ед.<br /> (гр. 013202)
|-
+
! Площадь
| GND
+
! Задержка, пс<br /> (гр. 013201)
| <m>Y = 0</m>
+
| 1
+
|-
+
| VCC
+
| <m>Y = 1</m>
+
| 1
+
|-
+
| N
+
| <m>Y = \overline A</m>
+
| 1
+
|-
+
| A2
+
|
+
| 2
+
|-
+
| A3
+
|
+
| 3
+
|-
+
| A4
+
|
+
| 4
+
|-
+
| A6
+
|
+
| 6
+
|-
+
| A8
+
|
+
| 8
+
 
|-
 
|-
| EX2
 
|
 
| 5
 
|-
 
| MX2
 
|
 
| 3
 
|-
 
| NA2
 
|
 
| 2
 
|-
 
| NA3
 
|
 
| 3
 
|-
 
| NA3O2
 
|
 
| 4
 
|-
 
| NA4
 
|
 
| 5
 
|-
 
| NAO2
 
|
 
| 3
 
|-
 
| NAO22
 
|
 
| 3
 
|-
 
| NAO3
 
|
 
| 5
 
|-
 
| NAOA2
 
|
 
| 4
 
|-
 
| NEX2
 
|
 
| 5
 
|-
 
| NMX2
 
|
 
| 6
 
|-
 
| NMX4
 
|
 
| 8
 
|-
 
| NO2
 
|
 
| 3
 
|-
 
| NO3
 
|
 
| 4
 
|-
 
| NO3A2
 
|
 
| 5
 
|-
 
| NO4
 
|
 
| 5
 
|-
 
| NOA2
 
|
 
| 3
 
|-
 
| NOA22
 
|
 
| 4
 
|-
 
| NOA3
 
|
 
| 5
 
|-
 
| NOAO2
 
|
 
| 4
 
|-
 
| O2
 
|
 
| 2
 
|-
 
| O3
 
|
 
| 3
 
|-
 
| O4
 
|
 
| 4
 
|-
 
| O6
 
|
 
| 6
 
|-
 
| O8
 
|
 
| 8
 
|}
 
 
 
{| class=standard align=center
 
 
| GND     
 
| GND     
 
| <m>Y = 0</m>
 
| <m>Y = 0</m>
 
| 1  
 
| 1  
| ---
+
|
| ---
+
|
 
|-
 
|-
 
| VCC  
 
| VCC  
 
| <m>Y = 1</m>  
 
| <m>Y = 1</m>  
 
| 1  
 
| 1  
| ---
+
|
| ---
+
|
 
|-
 
|-
 
| N       
 
| N       
| <m>Y = \overline A</m>
+
| <m>Y=\overline A </m>
 
| 2  
 
| 2  
 
| 100  
 
| 100  
Строка 210: Строка 93:
 
|-
 
|-
 
| A2     
 
| A2     
| <m>Y = AB</m>     
+
| <m>Y= AB</m>     
 
| 4  
 
| 4  
 
| 1000  
 
| 1000  
Строка 216: Строка 99:
 
|-
 
|-
 
| A3     
 
| A3     
| <math>Y = ABC</math>  
+
| <m>Y= ABC</m>
 
| 5  
 
| 5  
 
| 1500  
 
| 1500  
Строка 222: Строка 105:
 
|-
 
|-
 
| A4
 
| A4
| <m>Y=A*B*C*D</m>
+
| <m>Y= ABCD</m>
 
| 6
 
| 6
 
| 400
 
| 400
 
| 1156
 
| 1156
 
|-
 
|-
| A6    || <m>Y=ABCDEF</m> || 10 || 400 ||  1505
+
| A6    || <m>Y = ABCDEF</m> || 10 || 400 ||  1505
 
|-
 
|-
| A8    || <m>Y=ABCDEFGH</m> || 12 || 400 ||  2121
+
| A8    || <m>Y = ABCDEFGH</m> || 12 || 400 ||  2121
 
|-
 
|-
| EX2    || <m>Y=A\overline{B} \vee \overline{A} B </m>    || 7 || 1000 ||  592
+
| EX2    || <m>Y = A\overline{B} \vee \overline{A} B </m>    || 7 || 1000 ||  592
 
|-
 
|-
| MX2    || <m>Y=(A\vee V)(B\vee\overline{V})</m> || 8 || 1000 ||  938
+
| MX2    || <m>Y = (A\vee V)(B\vee\overline{V})</m> || 8 || 1000 ||  938
 
|-
 
|-
| NA2    || <m>Y=\overline{AB}</m> || 3 || 200 ||  275
+
| NA2    || <m>Y = \overline{AB}</m> || 3 || 200 ||  275
 
|-
 
|-
| NA3    || <m>Y=\overline{ABC}</m> || 4 || 300 ||  425
+
| NA3    || <m>Y = \overline{ABC}</m> || 4 || 300 ||  425
 
|-
 
|-
| NA3O2  || <m>Y=\overline{AB(C \vee D)}</m> || 5 || 300 ||  441
+
| NA3O2  || <m>Y = \overline{AB(C \vee D)}</m> || 5 || 300 ||  441
 
|-
 
|-
| NA4    || <m>Y=\overline{ABCD}</m> || 5 || 400 ||  742
+
| NA4    || <m>Y = \overline{ABCD}</m> || 5 || 400 ||  742
 
|-
 
|-
| NAO2  || <m>Y=\overline{A(B \vee C)}</m> || 4 || 200 ||  362
+
| NAO2  || <m>Y = \overline{A(B \vee C)}</m> || 4 || 200 ||  362
 
|-
 
|-
| NAO22  || <m>Y=\overline{(A \vee B)(C \vee D)}</m> || 5 || 200 ||  487
+
| NAO22  || <m>Y = \overline{(A \vee B)(C \vee D)}</m> || 5 || 200 ||  487
 
|-
 
|-
| NAO3  || <m>Y=\overline{A(B \vee C \vee D)}</m> || 5 || 300 ||  1000
+
| NAO3  || <m>Y = \overline{A(B \vee C \vee D)}</m> || 5 || 300 ||  1000
 
|-
 
|-
| NAOA2  || <m>Y=\overline{A(B\vee(CD))}</m> || 5 || 200 ||  1000
+
| NAOA2  || <m>Y = \overline{A(B\vee(CD))}</m> || 5 || 200 ||  1000
 
|-
 
|-
| NEX2  || <m>Y=AB \vee \overline{A}\,\overline{B}</m> || 7 || 1000 ||  526
+
| NEX2  || <m>Y = AB \vee \overline{A}\,\overline{B}</m> || 7 || 1000 ||  526
 
|-
 
|-
| NMX2  || <m>Y=\overline{(A \vee \overline{V})(B \vee V)}</m> || 6 || 1000 || 593
+
| NMX2  || <m>Y = \overline{(A \vee \overline{V})(B \vee V)}</m> || 6 || 1000 || 593
 
|-
 
|-
| NMX4  || <m>{\strut}^{\strut}Y=\overline{A}\,\overline{V_1}\,\overline{V_2}\vee \overline{B}\,\overline{V_1}V_2\vee</m>
+
| NMX4  || <m>{\strut}^{\strut}Y = \overline{A}\,\overline{V_1}\,\overline{V_2}\vee \overline{B}\,\overline{V_1}V_2\vee\overline{C}V_1\overline{V_2}\vee  \overline{D}V_1V_{2} </m>       
          <m>\vee\overline{C}V_1\overline{V_2}\vee  \overline{D}V_1V_{2} {\strut}_{\strut}</m>       
+
 
|  15  ||  1000  ||  910   
 
|  15  ||  1000  ||  910   
 
|-
 
|-
| NO2    || <m>Y=\overline{A \vee B}</m> || 3 || 200 ||  299
+
| NO2    || <m>Y = \overline{A \vee B}</m> || 3 || 200 ||  299
 
|-
 
|-
| NO3    || <m>Y=\overline{A \vee B \vee C}</m> || 4 || 300 ||  559
+
| NO3    || <m>Y = \overline{A \vee B \vee C}</m> || 4 || 300 ||  559
 
|-
 
|-
| NO3A2  || <m>Y=\overline{A \vee B \vee CD}</m> || 5 || 300 ||  643
+
| NO3A2  || <m>Y = \overline{A \vee B \vee CD}</m> || 5 || 300 ||  643
 
|-
 
|-
| NO4    || <m>Y=\overline{A \vee B \vee C \vee D}</m>    || 5 || 400 ||  1087
+
| NO4    || <m>Y = \overline{A \vee B \vee C \vee D}</m>    || 5 || 400 ||  1087
 
|-
 
|-
| NOA2  || <m>Y=\overline{A\vee BC}</m> || 4 || 200 ||  346
+
| NOA2  || <m>Y = \overline{A\vee BC}</m> || 4 || 200 ||  346
 
|-
 
|-
| NOA22  || <m>Y=\overline{AB \vee CD}</m> || 5 || 200 ||  477
+
| NOA22  || <m>Y = \overline{AB \vee CD}</m> || 5 || 200 ||  477
 
|-
 
|-
| NOA3  || <m>Y=\overline{A \vee BCD}</m> || 5 || 300 ||  570
+
| NOA3  || <m>Y = \overline{A \vee BCD}</m> || 5 || 300 ||  570
 
|-
 
|-
| NOAO2  || <m>Y=\overline{A \vee B(C \vee D)}</m> || 5 || 200 ||  570
+
| NOAO2  || <m>Y = \overline{A \vee B(C \vee D)}</m> || 5 || 200 ||  570
 
|-
 
|-
| O2    || <m>Y= A \vee B</m> || 4 || 1000 ||  601
+
| O2    || <m>Y = A \vee B</m> || 4 || 1000 ||  601
 
|-
 
|-
| O3    || <m>Y= A \vee B \vee C</m>                      || 5 || 1500 ||  946   
+
| O3    || <m>Y = A \vee B \vee C</m>                      || 5 || 1500 ||  946   
 
|-
 
|-
| O4    || <m>Y= A \vee B \vee C \vee D</m>              || 6 || 1500 ||  1400  
+
| O4    || <m>Y = A \vee B \vee C \vee D</m>              || 6 || 1500 ||  1400  
 
|-
 
|-
 
| O6     
 
| O6     
| <m>Y= A \vee B \vee C \vee D \vee E \vee F</m>  
+
| <m>Y = A \vee B \vee C \vee D \vee E \vee F</m>  
 
| 10 || 1500 || 1831
 
| 10 || 1500 || 1831
 
|-
 
|-
 
| O8     
 
| O8     
| <m>Y= A \vee B \vee C \vee D \vee</m>
+
| <m>Y = A \vee B \vee C \vee D \vee E \vee F \vee G \vee H</m>   
 
+
<m>\vee E \vee F \vee G \vee H</m>   
+
 
|  12  || 1500 ||  2388  
 
|  12  || 1500 ||  2388  
 
|-
 
|-
Строка 297: Строка 177:
 
|}
 
|}
  
=== СПРАВОЧНИКИ ===
 
  
'''СПРАВОЧНИК 1. '''
+
{| align=center
 +
! [[Файл:Alib3-logic.png|600px]]
 +
|-
 +
! Рисунок 2 – Условное графическое обозначение элементов
 +
|}
  
'''Петровский И.И., Прибыльский А.В., Троян А.А., Чувелев В.С. Логические ИС. КР 1533. КР 1554. Справочник. Изд. “Бином”, 1993. Часть I, II. '''
+
=== Варианты заданий ===
  
''' СПРАВОЧНИК 2. '''
+
Варианты заданий приведены в [[Медиа:ПЦУСБ-ЛР02-tasks.zip|DOC-файле]].
 +
 
 +
{{Info|Для группы 013201 вариант задания соответствует номеру в журнале. <br /> Для группы 013202 вариант задания определяется по формуле (31 – N), где N – номер по списку в группе.}}
 +
 
 +
 
 +
{{Info|Группа 013201 моделирует задержки с точностью пс, поэтому нужно установить параметр '''Resolution''' при запуске моделирования равным '''ps'''}}
 +
 
 +
== Шпаргалка ==
 +
 
 +
{| align=center
 +
! <html><img src="https://docs.google.com/drawings/d/10Tk3WXQRDjZxECs6GPA9UKKyr7WJyYoDxIG4VPl48Mw/pub?w=800"></html>
 +
|-
 +
! Рисунок 3 — Схема
 +
|}
 +
 
 +
1. На схеме подписываются все связи и даются имена всем элементам. Подписывать элементы рекомендуется как принято в ГОСТе: слева направо, сверху вниз. Рекомендуется использовать префикс DD в метке элемента.
 +
 
 +
2. Определяется список библиотечных элементов, входящих в схему.
 +
 
 +
{| class=standard align=center
 +
|+ Таблица 1
 +
|-
 +
! Имя элемента
 +
! Функция элемента
 +
! Задержка, <br /> относит. ед.
 +
! Площадь
 +
! Задержка, пс
 +
|-
 +
|-
 +
| N     
 +
| <m>Y=\overline A  </m>
 +
| 2
 +
| 100
 +
| 160
 +
|-
 +
| NA3    || <m>Y = \overline{ABC}</m> || 4 || 300 ||  425
 +
|-
 +
| NO2    || <m>Y = \overline{A \vee B}</m> || 3 || 200 ||  299
 +
|-
 +
| NAO22  || <m>Y = \overline{(A \vee B)(C \vee D)}</m> || 5 || 200 ||  487
 +
|-
 +
| NOAO2  || <m>Y = \overline{A \vee B(C \vee D)}</m> || 5 || 200 ||  570
 +
|}
 +
 
 +
По функциям заданным в таблице составляются соответствующие VHDL описания используемых логических элементов. Для примера будем использовать задержки заданные в условных единицах, которые приравняем к наносекундам (т.е. значения заданные в таблице домножим на 1 нс).
 +
 
 +
{{Hider|VHDL-модель элемента N}}
 +
{{Файл|N.vhd|
 +
<source lang="vhdl">
 +
ibrary ieee;
 +
use ieee.std_logic_1164.all;
 +
 
 +
entity n is
 +
 
 +
  generic (
 +
    del : time := 2 ns);
 +
 
 +
  port (
 +
    A : in  std_logic;
 +
    Y : out std_logic);
 +
 
 +
end entity n;
 +
 
 +
architecture beh of n is
 +
 
 +
begin  -- architecture beh
 +
 
 +
  Y <= not A after del;
 +
 
 +
end architecture beh;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
{{Hider|VHDL-модель элемента NO2}}
 +
{{Файл|NO2.vhd|
 +
<source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 
 +
entity NO2 is
 +
 
 +
  port (
 +
    A, B : in  std_logic;
 +
    Y    : out std_logic);
 +
 
 +
end entity NO2;
 +
 
 +
architecture beh of NO2 is
 +
 
 +
begin  -- architecture beh
 +
 
 +
  Y <= not (A or B) after 3 ns;
 +
 
 +
end architecture beh;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
{{Hider|VHDL-модель элемента NA3}}
 +
{{Файл|NA3.vhd|
 +
<source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 
 +
entity NA3 is
 +
 
 +
  generic (
 +
    del : time := 4 ns);
 +
 
 +
  port (
 +
    A : in  std_logic;
 +
    B : in  std_logic;
 +
    C : in  std_logic;
 +
    Y : out std_logic);
 +
 
 +
end entity NA3;
 +
 
 +
architecture beh of NA3 is
 +
 
 +
begin  -- architecture beh
 +
 
 +
  Y <= not (A and B and C) after del;
 +
 
 +
end architecture beh;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
{{Hider|VHDL-модель элемента NAO22}}
 +
{{Файл|NAO22.vhd|
 +
<source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 
 +
entity NAO22 is
 +
 
 +
  generic (
 +
    del : time := 5 ns);
 +
 
 +
  port (
 +
    A : in  std_logic;
 +
    B : in  std_logic;
 +
    C : in  std_logic;
 +
    D : in  std_logic;
 +
    Y : out std_logic);
 +
 
 +
end entity NAO22;
 +
 
 +
architecture beh of NAO22 is
 +
 
 +
begin
 +
 
 +
  Y <= not ((A or B) and (C or D)) after del;
 +
 
 +
end architecture beh;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
{{Hider|VHDL-модель элемента NOAO2}}
 +
{{Файл|NOAO2.vhd|
 +
<source lang="vhdl">
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 
 +
entity NOAO2 is
 +
 
 +
  generic (
 +
--    del : time := 570 ps);
 +
    del : time := 5 ns);
 +
 
 +
  port (
 +
    A : in  std_logic;
 +
    B : in  std_logic;
 +
    C : in  std_logic;
 +
    D : in  std_logic;
 +
    Y : out std_logic);
 +
 
 +
end entity NOAO2;
 +
 
 +
architecture beh of NOAO2 is
 +
 
 +
begin
 +
 
 +
  Y <= not (A or (B and (C or D))) after del;
 +
 
 +
end architecture beh;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
Чтобы уменьшить размер файла структурного описания схемы, декларации элементов (описание интерфейсов) выносятся в пакет <code>lib</code> (package), который будет подключаться в структурной VHDL модели через оператор <code>use work.lib.all;</code>
 +
 
 +
 
 +
{{Hider|VHDL-модель пакета lib (файл lib_p.vhd)}}
 +
{{Файл|lib_p.vhd|
 +
<source lang="vhdl">
 +
-------------------------------------------------------------------------------
 +
-- Project    : Lab02
 +
-- Variant    : 01
 +
-- Author    : ANA (XXX group)
 +
-------------------------------------------------------------------------------
 +
 
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 
 +
package lib is
 +
 
 +
  component n is
 +
    generic (
 +
      del : time := 2 ns);
 +
    port (
 +
      A : in  std_logic;
 +
      Y : out std_logic);
 +
  end component n;
 +
 
 +
  component NO2 is
 +
    port (
 +
      A, B : in  std_logic;
 +
      Y    : out std_logic);
 +
  end component NO2;
 +
 
 +
  component NA3 is
 +
--  generic (
 +
--      del : time :);
 +
    port (
 +
      A : in  std_logic;
 +
      B : in  std_logic;
 +
      C : in  std_logic;
 +
      Y : out std_logic);
 +
  end component NA3;
 +
 
 +
  component NAO22 is
 +
    generic (
 +
      del : time := 5 ns);
 +
    port (
 +
      A : in  std_logic;
 +
      B : in  std_logic;
 +
      C : in  std_logic;
 +
      D : in  std_logic;
 +
      Y : out std_logic);
 +
  end component NAO22;
 +
 
 +
  component NOAO2 is
 +
    generic (
 +
      del : time := 5 ns);
 +
    port (
 +
      A : in  std_logic;
 +
      B : in  std_logic;
 +
      C : in  std_logic;
 +
      D : in  std_logic;
 +
      Y : out std_logic);
 +
  end component NOAO2;
 +
 
 +
end package lib;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
{{Hider|Структурное описание схемы на VHDL (sch01.vhd)}}
 +
{{Файл|sch01.vhd|
 +
<source lang="vhdl">
 +
-------------------------------------------------------------------------------
 +
-- Project    : Lab02
 +
-- Variant    : 01
 +
-- Author    : ANA (XXX group)
 +
-------------------------------------------------------------------------------
 +
 
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
use work.lib.all;
 +
 
 +
entity sch01 is
 +
 
 +
  port (
 +
    X : in  std_logic_vector(3 downto 1);
 +
    Y : out std_logic_vector(2 downto 1));
 +
 
 +
end entity sch01;
 +
 
 +
architecture sch of sch01 is
 +
 
 +
  signal x1_n, x2_n, x3_n : std_logic;
 +
  signal DD3_Y  : std_logic;
 +
  signal DD4_Y  : std_logic;
 +
  signal DD5_Y  : std_logic;
 +
  signal DD5_YN : std_logic;
 +
  signal DD8_Y  : std_logic;
 +
 
 +
begin
 +
 
 +
  DD1: n port map (X(1), X1_N);
 +
  DD2: n port map (A => X(2), Y => X2_N);
 +
  DD3: NO2
 +
    port map (
 +
      A => X1_N,
 +
      B => X(2),
 +
      Y => DD3_Y);
 +
  DD4: NO2
 +
    port map (X(1), X(3), DD4_Y);
 +
 
 +
  DD5: NA3
 +
    port map (
 +
      A => x2_N,
 +
      B => X(1),
 +
      C => x(3),
 +
      Y => DD5_Y);
 +
  DD6: n port map (DD5_Y, DD5_YN);
 +
  DD7: n port map (X(3), X3_N);
 +
  DD8: NA3
 +
    port map (
 +
      A => x(1),
 +
      B => DD4_Y,
 +
      C => x(3),
 +
      Y => DD8_Y);
 +
 
 +
  DD9: NAO22
 +
    port map (
 +
      A => DD3_Y,
 +
      B => DD4_Y,
 +
      C => DD8_Y,
 +
      D => DD5_YN,
 +
      Y => Y(1));
 +
 
 +
  DD10: NOAO2
 +
    port map (
 +
      A => X(1),
 +
      B => X3_N,
 +
      C => DD3_Y,
 +
      D => DD5_Y,
 +
      Y => Y(2));
 +
 
 +
end architecture sch;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
 
 +
{{Hider|VHDL-модель схемы на логическом уровне (sch01_log.vhd)}}
 +
{{Файл|sch01_log.vhd|
 +
<source lang="vhdl">
 +
-------------------------------------------------------------------------------
 +
-- Project    : Lab02
 +
-- Variant    : 01
 +
-- Author    : ANA (XXX group)
 +
-------------------------------------------------------------------------------
 +
 
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
use work.lib.all;
 +
 
 +
entity sch01a is
 +
 
 +
  port (
 +
    X : in  std_logic_vector(3 downto 1);
 +
    Y : out std_logic_vector(2 downto 1));
 +
 
 +
end entity sch01a;
 +
 
 +
architecture log of sch01a is
 +
 
 +
  signal DD3_Y  : std_logic;
 +
  signal DD4_Y  : std_logic;
 +
  signal DD5_Y  : std_logic;
 +
  signal DD8_Y  : std_logic;
 +
 
 +
begin
 +
 
 +
  -- DD3: NO2
 +
  DD3_Y <= not ( not X(1) or X(2) );
 +
  -- DD4: NO2
 +
  DD4_Y <= not ( X(1) or X(3) );
 +
  -- DD5: NA3
 +
  DD5_Y <= not ( not x(2) and X(1) and x(3) );
 +
  -- DD8: NA3
 +
  DD8_Y <= not (x(1) and DD4_Y and x(3));
 +
  -- DD9: NAO22
 +
  Y(1) <= not ((DD3_Y or  DD4_Y) and (DD8_Y or not DD5_Y));
 +
  -- DD10: NOAO2
 +
  Y(2) <= not (X(1) or (not x(3) and (DD3_Y or DD5_Y)));
 +
 
 +
end architecture log;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
{{Hider|VHDL-модель тестбенча (sch01_tb.vhd)}}
 +
{{Файл|sch01_tb.vhd|
 +
<source lang="vhdl">
 +
-------------------------------------------------------------------------------
 +
-- Project    : Lab02
 +
-- Variant    : 01
 +
-- Author    : ANA (XXX group)
 +
-------------------------------------------------------------------------------
 +
 
 +
library ieee;
 +
use ieee.std_logic_1164.all;
 +
 
 +
entity sch01_tb is
 +
end entity sch01_tb;
 +
 
 +
architecture tb of sch01_tb is
 +
 
 +
  -- components
 +
  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;
 +
 
 +
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;
 +
 
 +
  OK <=
 +
    '1' when Y1 = Y2 else
 +
    'X';
 +
 
 +
end architecture tb;
 +
</source>
 +
}}
 +
{{Hider|end}}
 +
 
 +
 
 +
Тестбенч sch01_tb(tb) позволяет проверить правильность работы двух VHDL описаний схемы, но определение задержки по выходам для каждого набора нужно делать вручную, используя два курсора на временных диаграммах как показано на рисунке 4.
 +
 
 +
 
 +
{| align=center
 +
! [[Файл:Lab02-wave-cursors.png|center]]
 +
|-
 +
! Рисунок 4 — Временная диаграмма тестбенча (sch01_tb(tb))
 +
|}
 +
 
 +
 
 +
Определение задержек можно автоматизировать, для этого необходимо дополнить тесбенч соответствующим описанием.
 +
 
 +
{{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
 +
  -- функция для преобразования вектора (std_logic_vector) в строку символов (string)
 +
  function to_string (vec : std_logic_vector) return string is
 +
    alias v : std_logic_vector(1 to vec'length) is vec;
 +
    variable str : string(v'range);
 +
  begin  -- function to_string
 +
    for i in v'range loop
 +
      if v(i) = '1' then
 +
        str(i) := '1';
 +
      else
 +
        str(i) := '0';
 +
      end if;
 +
    end loop ;
 +
    return str;
 +
  end function to_string;
 +
 +
  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                -- отключение определения максимальной задержки на 100 нс (не всем это нужно)
 +
    delay_y2 when delay_y2 >= delay_y2_max else
 +
    delay_y2_max;
 +
 +
-- процесс для вывода значений задержки в транскрипт
 +
  process (strob)
 +
    variable t1 : bit_vector(5 downto 0) := "101010";
 +
  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]]
 +
|-
 +
! Рисунок 5 – Временная диаграмма тесбенча (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 нс) для функции Y2 "фиктивное", поэтому в описании поведения сигнала  delay_y2_max добавлена дополнительная строка обнуляющая  delay_y2_max начальные 100 нс.
 +
 
 +
Однако, при ручном анализе схемы:
 +
 
 +
{| align=center
 +
! <html><img src="https://docs.google.com/drawings/d/1XZO6wtpykyefcsPqQfV27MHfzaKG82h0ff1AutnV7fA/pub?w=800"></html>
 +
|-
 +
! Рисунок 6 — Схема с отмеченным критическим путём для каждого выхода ([https://docs.google.com/drawings/d/1XZO6wtpykyefcsPqQfV27MHfzaKG82h0ff1AutnV7fA/edit Edit])
 +
|}
  
'''Применение интегральных микросхем в электронной вычислительной технике: Справочник / Р.В. Данилов, С.А. Ельцова, Ю.П.Иванов и др. Под ред. Б.Н. Файзулаева, Б.В. Тарабрина. – М. Радио и связь. 1987. 384. '''
+
Значение максимальной задержки равно 13 и 11 для выходов Y1 и Y2. Почему при моделировании не получены эти значения?
  
''' СПРАВОЧНИК 3.'''
+
<!--
 +
{{Hider|VHDL-модель элемента }}
 +
{{Файл|.vhd|
 +
<source lang="vhdl">
  
'''Цифровые интегральные микросхемы: Справочник. / М.И. Богданович, И.Н. Грель и др. Минск, Изд-во “Беларусь”, 1991, 493с. '''
+
</source>
 +
}}
 +
{{Hider|end}}-->

Текущая версия на 09:27, 20 декабря 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. В отчете должна быть приведена логическая схема, на которой должны быть обозначены имена сигналов и меток элементов (как показано на рисунке 2), соответствующие структурному описанию на языке VHDL (изображение схемы можно скопировать из файла заданий).
  2. В отчете должен быть приведён список (таблица) используемых библиотечных элементов, с описанием логических функций и задержек.
  3. В отчете необходимо привести VHDL-коды:
    • структурного описания схемы (включая описания используемых библиотечных элементов, которые разместить в приложении А в конце отчета)
    • логического описания схемы
    • тестирующей программы (достаточно одного варианта тестбенча).
  4. В отчете должны содержаться временные диаграммы, соответствующие тестирующей программе.
    • на временной диаграмме должны быть приведены
      • входы, выходы блоков структурного и логического описаний схемы
      • внутренние сигналы структурного и логического описаний схемы
      • сигнал сравнения выходов
      • При использовании второго тестбенча, сигналы определения задержек
    • На временных диаграммах должны быть видны все возможные значения входов и соответствующие им значения выходов (например, если 5 входов, то 32 возможных значений входов должны быть различимы на диаграмме).
  5. В отчете должна содержаться система логических функций, реализуемых схемой (не обязательно, если она совпадает с логическим VHDL-описанием схемы).
  6. В отчете необходимо привести таблицу, содержащую значения задержки распространения сигналов от входа к выходам для каждого входного набора каждой функции. А также, если используется тесбенч считающий задержки, то привести скриншот отчета по задержкам, выдаваемого в транскрипт при выполнении тестбенча.
  7. В отчете необходимо привести схему, на которой должен быть отмечен критический путь для каждой выходной функции (как показано на рисунке 3). При этом на схеме для каждого элемента должны быть отмечены (на рисунке розовым цветом):
    • собственная задержка распространения (внутри элемента)
    • и суммарная максимальная задержка распространения сигнала на выходе элемента относительно входов X (на выходе элемента, например, "=7").
  8. В отчете должно быть указано значение задержки схемы, соответствующее задержке критического пути.
  9. В заключении необходимо сравнить значения максимальных задержек для каждого выхода, полученные путём моделирования и ручного анализа. Если значения не совпадают, то выявить причину и привести пояснения этому (провести анализ причин несовпадения).

Требования к VHDL-файлам проекта:

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


Информация

Если в комментариях используете русский алфавит, то кодировку текстового файла нужно выбирать UTF-8. В стандартной Windows кодировке (cp1251) могут наблюдаться фиктивные ошибки при компиляции VHDL кода. Для задания кодировки в ModelSim нужно выполнить команду encoding system utf-8 в терминальном окне (там куда выводятся системные сообщения).

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

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

Информация

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

Таблица 1
Имя элемента Функция элемента Задержка,
относит. ед.
(гр. 013202)
Площадь Задержка, пс
(гр. 013201)
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
Рисунок 2 – Условное графическое обозначение элементов

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

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

Информация

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


Информация

Группа 013201 моделирует задержки с точностью пс, поэтому нужно установить параметр Resolution при запуске моделирования равным ps

Шпаргалка

Рисунок 3 — Схема

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 нс).






Чтобы уменьшить размер файла структурного описания схемы, декларации элементов (описание интерфейсов) выносятся в пакет lib (package), который будет подключаться в структурной VHDL модели через оператор use work.lib.all;






Тестбенч sch01_tb(tb) позволяет проверить правильность работы двух VHDL описаний схемы, но определение задержки по выходам для каждого набора нужно делать вручную, используя два курсора на временных диаграммах как показано на рисунке 4.


Lab02-wave-cursors.png
Рисунок 4 — Временная диаграмма тестбенча (sch01_tb(tb))


Определение задержек можно автоматизировать, для этого необходимо дополнить тесбенч соответствующим описанием.


ЦСУСБ-Лаб2-Tb2 vawe.png
Рисунок 5 – Временная диаграмма тесбенча (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 нс (условных единиц)
  • DY2 = 7 нс (условных единиц)

Начальное значение задержки (9 нс) для функции Y2 "фиктивное", поэтому в описании поведения сигнала delay_y2_max добавлена дополнительная строка обнуляющая delay_y2_max начальные 100 нс.

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

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

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