Цель этой работы — получение минимального представления о языке SystemVerilog, среде проектирования Vivado и базовом процессе проектирования цифровых схем.
Предполагается, что:
- среда Vivado установлена;
- вы минимально знакомы с её интерфейсом и основными командами.
Необходимо спроектировать и описать на SystemVerilog простейшую логическую схему с:
- двумя входами;
- одним выходом.
К входам схемы подключены кнопки в дверях автомобиля:
- когда дверь открыта, кнопка нажата;
- состояние кнопки преобразуется в логический сигнал на входе схемы.
К выходу схемы подключена лампа освещения салона:
- при логической единице на выходе лампа горит;
- при логическом нуле — погашена.
Требование:
схема должна зажигать лампу, если открыта хотя бы одна дверь.
Способ подключения кнопок может быть разным:
- при нажатии кнопка может выдавать логический 0 или логическую 1 — это зависит от схемы включения (active-low / active-high).
Откройте папку docs и ознакомьтесь с описанием устройства, на котором будет реализована схема (стр. 6).
Определите активный уровень сигнала кнопки и учтите это при проектировании.
-
Откройте файл проекта:
vivado/door_lamp.xpr -
В левой панели Flow Navigator откройте Project Manager.
-
В окне Sources найдите файл:
door_lamp.sv -
Откройте его.
В файле уже приведено описание интерфейса модуля — список входных и выходных сигналов. -
После описания интерфейса добавьте описание логики схемы.
Перед написанием кода:
- составьте для себя таблицу истинности зависимости
lampотdoor1иdoor2; - убедитесь, что учли активный уровень кнопок.
- составьте для себя таблицу истинности зависимости
-
Описывая логику:
- используйте только оператор
assign; - не используйте
always,always_comb,if,case(на этом этапе).
- используйте только оператор
После описания логики:
- Перейдите в RTL Analysis → Schematic.
- Посмотрите, какая логическая схема была синтезирована.
- Ответьте для себя:
- какие логические элементы используются?
- соответствует ли схема ожидаемой логике?
Для проверки корректности работы используется симуляция.
- Тестбенч
door_lamp_tb.svуже подготовлен. - Найдите его в окне Sources и откройте.
- Изменять тестбенч не нужно.
Рекомендуемый порядок:
- Внимательно прочитайте код тестбенча.
- Для лучшего понимания можно скопировать его в ChatGPT и попросить:
- объяснить, что делает этот код;
- как он работает;
- зачем нужен каждый его фрагмент.
- Если что-то непонятно — задайте дополнительные вопросы.
- В панели Flow Navigator выберите Behavioral Simulation.
- После завершения симуляции:
- откройте вывод в Tcl Console;
- проанализируйте результаты.
Корректно ли работает схема?
Что сдаётся: репозиторий GitHub Classroom
Лабораторная работа считается выполненной, если:
- модуль
door_lampкорректно описан на SystemVerilog; - симуляция (Behavioral Simulation) завершается без ошибок;
- выходной сигнал
lampпринимает корректные значения для всех комбинаций входов; - проект синтезируется без ошибок;
- студент может устно объяснить ход решения и принятые допущения.
Перепишите основной код, используя оператор case вместо логических операций.
Создайте схему управления фарами автомобиля.
Исходные элементы:
- 8 светодиодов — фары автомобиля;
- 2 движковых переключателя;
- 1 кнопка.
Расположение светодиодов:
Д Д Б - - Б Д Д
Б— ближний светД— дальний свет- два центральных светодиода не используются и всегда должны быть равны 0
Управление:
- первый переключатель — включение фар;
- второй переключатель — включение дальнего света;
- кнопка — временное включение дальнего света (аналог подрулевого рычага без фиксации).
Постарайтесь имитировать поведение фар реального автомобиля.
- опишите логику на Verilog/SystemVerilog;
- используйте только оператор
assign; - выходы светодиодов опишите как:
output [7:0] led
Если вы ещё не знаете, что означает [7:0], спросите об этом ChatGPT.
Подумайте:
- как соединить один логический сигнал сразу с несколькими выходами;
- что произойдёт, если левая и правая части оператора
assignимеют разную ширину.
Преподаватель может задать вопросы про:
- векторы в SystemVerilog;
- slicing (вырезание);
- concatenation (конкатенацию);
- правила согласования разрядности сигналов.