Лекция 3. Debug схем - визуализация схемы, диаграммы Мура, симуляция (1158793)
Текст из файла
Пакеты проектированиясверхбольшихинтегральных схемЛекция 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.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.