Лекция 3. Debug схем - визуализация схемы, диаграммы Мура, симуляция (В.В. Подымов, М.С. Шуплецов - Лекции и семинары)
Описание файла
Файл "Лекция 3. Debug схем - визуализация схемы, диаграммы Мура, симуляция" внутри архива находится в папке "В.В. Подымов, М.С. Шуплецов - Лекции и семинары". PDF-файл из архива "В.В. Подымов, М.С. Шуплецов - Лекции и семинары", который расположен в категории "". Всё это находится в предмете "пакеты проектирования сверхбольших интегральных схем" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Пакеты проектированиясверхбольшихинтегральных схемЛекция 3DebugРассказывает:Подымов Владислав ВасильевичОсень 2016e-mail:valdus@yandex.ruКак вы могли убедиться...Даже если вы сделали так, что схема успешно компилируется иразмещается, она скорее всего не работает как надо с первого разаОшибок никак не избежатьЧтобы легче работалось, их нужно уметь быстро отлавливать и исправлятьА насколько быстро?Явно быстрее, чем вот так:Работает как надо?Что-то написалнетнетЖдёшь, пока соберётсяБез ошибок?даУра!даСмотришь на выходыПрошиваешьУправляешьА если нет возможности залить всё на плату, то эта схема вообще не работаетDebug программЛокализация ошибки,вычитывание кодаНу конечно, тут же должно быть“++i”, а не “++j”!Отладчик●Поставил breakpoint’ы●Запустил отладчик●Посмотрел промежуточные значенияDebug схемЛокализация ошибки,вычитывание кодаОтладчикНе помогаетТогда можнопосмотреть на схемуНаписать модультестирования(testbench)Запустить симуляторИли, например,на диаграмму МураПосмотреть нанужные сигналыКак смотреть схему...Quartus, слева в меню разные viewer’ыЧто такое testbenchtestbench – это модуль на языке verilogУ этого модуля нет аргументов; в него вставляется тестируемый модуль,и все входы-выходы этого модуля выводятся в reg и wireVerilog содержит ряд инструкций, которые могут игнорироваться компилятором,но содержат информацию, полезную для отладки и симуляцииСреди таких инструкций:● отладочный вывод● вывод значений переменных вдоль конкретной трассы выполнения схемы● вывод значения текущего времени от начала работы схемыА вывод куда?●В консоль при работе средства симуляции●В файл специального формата (.vcd), из которого можно получитьнаглядное представление того, как изменяются сигналы во времениА сигналы какие?Какие хотим, вплоть до всех переменных всех модулей проектаКак писать testbenchТиповой набор команд и конструкций, который можно использовать в testbench’е:ИнициализацияВ реальной схеме нет единого момента времени, с которого начинается работаУ симулятора есть такой момент: 0 секундМожно задавать значения сигналов в начальный момент времени:reg [2:0] a = 3’b001;reg b;Обязательно “reg”!reg clock;initialbeginb = 1;clock = 0;endФункциональный блок, запускающийся в момент времени 0Блокирующее присваивание, ...Как писать testbenchТиповой набор команд и конструкций, который можно использовать в testbench’е:Контроль временных интерваловСимулятор предполагает, что операции, записанные в функциональных блоках(always, initial)происходят одновременно; в симуляторе можно явно разнести эти операции во времени:initialbeginb = 0;#2c = 1;b = 1;#3b = 0;endt=0t = t(posedge clock)t=2t = t(posedge clock) + 1always @(posedge clock)beginb = 0;#1c = 1;endt=5“#i” означает “всё, что дальше, происходит через i единиц времени”Как писать testbenchТиповой набор команд и конструкций, который можно использовать в testbench’е:“Хитрый” always-блокalwaysbeginb = 0;#1c = 1;#1b = 1;#1c = 0;#2endt=0t=5t = 10t=1t=6t = 11t=2t=7t = 12t=3t=8t = 13Такой always-блок выполняется всегдаВ нём явно должен быть указанхотя бы один ненулевой оператор продвижения времени...Как писать testbenchТиповой набор команд и конструкций, который можно использовать в testbench’е:“Хитрый” always-блокВ частности, вот так можно моделировать тактовый сигнал:Начинаем со значения clock = 0reg clock = 0;always#1clock = ~clock;Каждую единицу временименяем значение clock на противоположноеКак писать testbenchТиповой набор команд и конструкций, который можно использовать в testbench’е:Отладочная печать$display(“format”, args...)Полный аналог printf в C/C++$monitor(var1, var2, ...)Когда изменяется хотя бы одно из значенийпеременных vari, делать $displayстроки значений переменных$monitor(var1,, var2,,, var3)Если между запятыми ничего нет,то в этом месте печатается пробелА куда это всё выводится?Симулятор – это обычная программа с обычным потоком выводаВ этот поток всё и выводитсяКак писать testbenchТиповой набор команд и конструкций, который можно использовать в testbench’е:Текущее время$time, $stime, $realtimeЭто переменные, в которых хранится значение текущего времени:● в формате int_64● в формате uint_32● в формате floatЭти переменные можно использовать, например, так:$monitor($stime,, a,, b)Тогда вывод производится как минимум в каждый новый момент времениКак писать testbenchТиповой набор команд и конструкций, который можно использовать в testbench’е:Конец симуляции$finishЭто команда, завершающая симуляциюНапример:…initial#100$finish;...Завершить симуляциючерез 100 единиц времени…initialbegin#1 b = 0;#1 c = 1;#3 $finish;end...t = 1: сделать b = 0t = 2: сделать c = 1t = 5: завершить симуляциюКак писать testbenchТиповой набор команд и конструкций, который можно использовать в testbench’е:Генерация осцилограмм(так можно перевести “waveform”)$dumpfile(“file”)С выполнения этой команды устанавливается имя файла file:в него по другим командам будут записываться осцилограммы$dumpvars(level, objlist)С выполнения этой команды в установленный файл начинает записыватьсяинформация об изменении переменных, достаточная для создания осцилограммыobjlist – список имён переменных и модулей●●level = 0: для каждого модуля отслеживаем все его переменные ипеременные используемых в нём экземпляровlevel = 1: не отслеживаем переменные экземпляров$dumpoff – выключить запись изменения значений переменных$dumpon – включить запись обратно после $dumpoffКак работать с симулятором...●Quartus, наверху кнопка “RTL simulation”●Icarus Verilog: iverilog + vvp + gtkwave.