Лекция 1. DE0-Nano. Синтаксис Verilog. Управляющие автоматы (1158791)
Текст из файла
Пакеты проектированиясверхбольшихинтегральных схемЛектор:Подымов Владислав Васильевичe-mail:valdus@yandex.ruОсень 2016Лекция 1Часть 1Напоминание основЛогические значенияI0 — логический нольI1 — логическая единицаx — неопределённое значениеIIIнапример, в неинициализированном регистреz — состояние высокого импедансаIIоно нужно в основном для управления шиной, к которойподключено много независимых устройствв ближайшее время это значение нам не понадобитсяЛогические значенияЧто мы строим: схему, между узлами которой в реальномвремени передаются логические значениязначениеxУзел сети10задний фронт(negedge)передний фронт(posedge)времяI0 и 1 — это конкретные уровни напряженияIx — это абстракция: уровень напряжения,соответствующий неизвестному логическому значениюВвод-вывод DE0-NanoLED[7] . .
. LED[0] KEY[1] KEY[0]SW[3] . . . SW[0]CLOCK_50(и ещё GPIO, но они нам пока не нужны)Ввод-вывод DE0-NanoКак ведёт себя ввод-вывод DE0-Nano1KEY[i]010SW[i]Ввод-вывод DE0-NanoКак ведёт себя ввод-вывод DE0-NanoCLOCK_50102 · 10−8 секунд10LED[i]Verilog: модули и шины“Строительный блок” дизайна Verilog — модуль:входы(input)...теловыходы...(output)Входы и выходы (и многое другое) могут быть объединены вмассивы (индексация с ноля; при определении задаютсясмещения сначала последнего, потом первого элемента: [7:0]; востальном — как в C++)Массив проводов (входов, выходов и других) — это шина:A[2]A[1]A[0]B[1]B[0] ≡CA23BCVerilog: определение модуляЛучше всего описывать модуль в отдельном файле срасширением .v и названием, совпадающим с названиеммодуляabmod2Файл mod.v:module mod ( a , b , c ) ;input a ;input [ 1 : 0 ] b ;output [ 2 : 0 ] c ;// d e s c r i p t i o nendmodule// EMPTY LINE !3c(первый вариант )Verilog: определение модуляЛучше всего описывать модуль в отдельном файле срасширением .v и названием, совпадающим с названиеммодуляabФайл mod.v:module mod( input a ,input [ 1 : 0 ] b ,output [ 2 : 0 ] c);// d e s c r i p t i o nendmodule// EMPTY LINE !mod23c(второй вариант )Verilog: главный модульСреди модулей обязательно есть главный (top module): это иесть разрабатываемая схема, которая будет заливаться в FPGAПри работе с DE0-Nano главный модуль будет выглядеть так:CLOCK_50KEY2SW4Файл top.v:module t o p( i n p u t [ 1 : 0 ] KEY ,i n p u t [ 3 : 0 ] SW,i n p u t CLOCK_50 ,output [ 7 : 0 ] LED);// d e s c r i p t i o nendmoduletop8LEDVerilog: способы описания модуляОбычно различают два подхода к описанию модуля:Iструктурный: явно описать инстанциации (страшнаякалька с английского, будем называть их экземплярами)других модулей и связи между нимиIфункциональный: без явного описания структуры задатьвзаимосвязь входов и выходовСтруктурное описание:mm1m2m1Функциональное описание:~f (x1, x2, x3)Verilog: структурное описаниеэкземпляры модулейi1i2i3i1i2m1mm1m2m1oi1i2o1o2o3m2o1o2module m( i n p u t i 1 , i 2 , i 3 , output o1 , o2 , o3 ) ;wire w;m1 u p l e f t ( .
i 1 ( i 1 ) , . i 2 ( i 2 ) , . o (w ) ) ;m1 d o w n l e f t ( . i 1 ( i 2 ) , . i 2 ( i 3 ) , . o ( o3 ) ) ;m2 r i g h t ( . i 1 (w) , . i 2 ( o3 ) , . o1 ( o1 ) , . o2 ( o2 ) ) ;endmoduleВсе используемые имена (в том числе провода: wire)должны быть определены перед использованиемVerilog: структурное описаниенепрерывное присваиваниеiomodule t r i v i a l ( i n p u t i , output o ) ;assign o = i ;endmoduleassign провод = выражение; :Iв любой момент времени (с некоторой задержкой приизменении значения) на проводе должно быть значениевыраженияVerilog: выраженияЧто можно использовать при написании выражений:Iлогические операцииIIарифметические операцииIIнапример, a + b — это сложение двух чисел одинаковойбитности с переполнениемпобитовые операцииIIнапример, a && b — логическое Инапример, a & b — это побитовое И двух битовыхмассивов одинаковой длиныотношенияIнапример, a < b возвращает логическую 1, если число,двоичная запись которого есть a, меньше такового для b, илогический 0 иначеVerilog: выраженияЧто можно использовать при написании выражений:IконкатенацииIIредукцииIIнапример, &a — логическая 1, если все биты a — единицы,и логический 0 иначеусловияIIнапример, {a, b} — битовый массив, составленный из a иbнапример, cond ? a : b работает как в C++; condдолжно иметь логическое значение, а a и b должны иметьодинаковое число битконстантыIнапример, 0 — это логический ноль, а 5’b00110 —пятибитная двоичная запись числа 6(полный список операций спрашивайте у интернета)Verilog: функциональное описаниеблок alwaysОн выглядит так:always @( a or posedge b or negedge c )// s t a t e m e n tВ аргументе перечисляются места (например, провода), при изменении сигнала в которых должно производиться какое-то действиеВ данном случае:I при изменении логического значения в a,Iа также когда в b возникает передний фронт,Iа также когда в c возникает задний фронтДействие перезаписывает значения сигналов модуляПосле выполнения действия получившиеся значения сохраняются в проводах до следующего выполнения блокаVerilog: функциональное описаниеблок alwaysОн выглядит так:always @( a or posedge b or negedge c )begin// s e q u e n c e o f s t a t e m e n t sendДействий можно задавать много, и тогда их обычным программистским образом нужно соединить в составное действиеVerilog: функциональное описаниеблок alwaysОн выглядит так:always @( a , posedge b , negedge c )begin// s e q u e n c e o f s t a t e m e n t sendВ какой-то момент разработчики стандарта Verilog поняли, что“or” писать неудобно, так что разрешили вместо него ставитьзапятуюКакие же действия можно писать в always-блоке?Verilog: функциональное описаниеблокирующее присваиваниеalways @( b , c )beginb = c;a = b;c = a;endIПоследовательно делается следующее:IIIв b выставляется начальное значение из cв a выставляется изменённое значение из bв c выставляется изменённое значение из aБлокирующее присваивание моделирует последовательноевыполнение команд: пока присваивание не выполнено,следующие команды не выполняются(но в конечном итоге строится схема, просто она имеет хитруюструктуру с блоками памяти)Verilog: функциональное описаниенеблокирующее присваиваниеalwaysbeginb <=a <=c <=endI@( b , c )c;b;a;Одновременно делается следующее:IIIв b выставляется начальное значение из cв a выставляется начальное значение из bв c выставляется начальное значение из aВообще говоря, одновременности не бывает, но в реальнойсхеме эти действия будут выполнены близко по времени, иблоки памяти будут организованы так, чтобы выставлялисьименно начальные значенияVerilog: регистры переменныеПри выставлении сигналов в схеме могут понадобитьсядополнительные (неявные) ячейки памятиЧтобы компилятор имел возможность распознать такие местаи по необходимости синтезировать дополнительную память, вVerilog вводится понятие регистра переменной (терминологияменялась в стандарте)Всё, что появляется в присваиваниях (=, <=) слева, должнобыть обявлено как переменная:reg a , b , c ;always @( b , c )beginb = c; a = b; c = a;endВсё остальное может быть объявлено переменнойVerilog: регистры переменныеIимя не может одновременно быть переменной и проводомIв некоторых случаях (например, при встрече в левой частинепрерывного присваивания) имя не может бытьпеременнойIвсе входы и выходы являются проводами по умолчаниюIвсе входы обязаны быть проводамивыходы можно определять как переменные: достаточноIIIдописать в начале модуля reg <имя выхода>; илипри определении выхода написатьoutput reg <имя выхода>вместоoutput <имя выхода>Verilog: функциональное описаниеусловные переходыi f ( cond ) stmt ;e l s e stmt ;case ( a )3 ’ b000 : stmt ;3 ’ b010 : stmt ;3 ’ b011 : stmt ;d e f a u l t : stmt ;endcaseУсловные инструкции тоже можно писатьКак и инструкцию switch-caseОни интерпретируются обычным образом (примерно как вC++)Verilog: параметрыИногда бывает нужно написать несколько невероятно похожих,но всё же разных модулейНапример:module r e g i s t e r 3 ( i n p u t l o a d , r e s e t , c l o c k ,i n p u t [ 2 : 0 ] i n , output reg [ 2 : 0 ] o u t ) ;always @( posedge c l o c k , negedge r e s e t )i f (~ r e s e t ) o u t <= 0 ;e l s e i f (~ l o a d ) o u t <= i n ;endmodulemodule r e g i s t e r 5 ( i n p u t l o a d , r e s e t , c l o c k ,i n p u t [ 4 : 0 ] i n , output reg [ 4 : 0 ] o u t ) ;always @( posedge c l o c k , negedge r e s e t )i f (~ r e s e t ) o u t <= 0 ;e l s e i f (~ l o a d ) o u t <= i n ;endmodule...Verilog: параметрыЧтобы описать сразу всё разнообразие модулей, отличающихсятолько какими-то константными значениями (например,регистры — размером шины), достаточно описать один модульс соответствующими параметрами:module r e g i s t e r#(parameter Width = 5 )( input load , r e s e t , clock ,i n p u t [ Width − 1 : 0 ] i n ,output reg [ Width − 1 : 0 ] o u t);always @( posedge c l o c k , negedge r e s e t )i f (~ r e s e t ) o u t <= 0 ;e l s e i f (~ l o a d ) o u t <= i n ;endmoduleVerilog: параметрыЧтобы описать сразу всё разнообразие модулей, отличающихсятолько какими-то константными значениями (например,регистры — размером шины), достаточно описать один модульс соответствующими параметрами:Или так:module r e g i s t e r ( l o a d , r e s e t , c l o c k , i n , o u t ) ;parameter Width = 5 ;input load , r e s e t , c l o c k ;i n p u t [ Width − 1 : 0 ] i n ;output reg [ Width − 1 : 0 ] o u t ;always @( posedge c l o c k , negedge r e s e t )i f (~ r e s e t ) o u t <= 0 ;e l s e i f (~ l o a d ) o u t <= i n ;endmoduleVerilog: параметрыparameter Width = 5 ;Параметр можно писать вместо числа почти везде в модуле(нельзя — в константах на месте размера)Значение параметра по умолчанию указывается при егоопределении (здесь — 5)Экземпляр параметризованного модуля может быть вызвандвумя способами:Iс явным указанием параметров (указание параметров —такое же, как и входов-выходов)r e g i s t e r r #(.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.