1. Моделирование простых комбинационных схем на языке Verilog. Симуляция и тестирование схем (1132245)
Текст из файла
Семинар 1.Моделирование схем на языке Verilog.Симуляция и тестирование схем.Математические модели и методы синтеза СБИСВесна 2017План семинара• Цифровые интегральные схемы. Уровниабстракции при проектированииинтегральной схемы.• Языки описания схем (hardware descriptionlanguages). Введение в язык Verilog.• Лабораторная работа – моделирование исимуляция простых комбинационных схемв среде ModelSim.Сверхбольшая интегральная схемаСредства автоматизациипроектирования цифровых СБИС• Современные СБИС невозможноспроектировать вручную• Нужны специальные программы дляавтоматизации различных этаповпроектирования СБИС• При этом требуется как пониманиевозникающих при этом математическихзадач, так и особенностей технологийпроизводства СБИСЭлементная база цифровыхинтегральных схем (ИС)Уровни абстракции припроектировании цифровых СБИССистемный уровеньΣАвтоматный (поведенческий) уровеньзϕЛогический (схемный) уровеньТранзисторный уровеньУровень топологииСистемный уровеньПоведенческий уровеньab cinFull Adder`timescale 1ns / 1psmodule FullAdder (input a,input b,input cin,output s,output cout );assign {cout,s} = a + b + cin;scoutendmoduleЛогический (схемный) уровень`timescale 1ns / 1psmodule FullAdder (input a,input b,input cin,output s,output cout );// wires (from ands to or)wire w1, w2, w3;// carry-out circuitryand( w1, a, b );and( w2, a, cin );and( w3, b, cin );or( cout, w1, w2, w3 );// sumxor( s, a, b, cin );endmoduleТранзисторный уровеньУровень топологииКомбинационная и последовательнаялогикаЯзыки описания аппаратногообеспечения• Hardware Description Language (HDL) – языкописания структуры и функционированияаппаратного обеспечения цифровой системына различных уровнях абстракции.• Основные HDL:–––––VerilogSystemVerilogVHDLSystemC...• http://en.wikipedia.org/wiki/Hardware_description_languageСтили разработки аппаратногообеспечения• Снизу-вверх– Сначала отдельно проектируются базовыеэлементы, а потом из простых элементовпроектируются (собираются) более сложныеэлементы.• Сверху-вниз– Сначала проектируются системы болеевысокого уровня, а потом рекурсивнопроектируются их компоненты более низкогоуровня.Основные уровни абстракцииаппаратного обеспечения• Поведенческий уровень (Behavioral Level)– Описание устройства при помощи наборапоследовательных алгоритмов, работающиходновременно и согласованно.• Уровень регистровых передач (Register-Transfer Level)– Описание устройства при помощи заданного набораопераций преобразования значений, хранящихся врегистрах.
По сути устройство описывается в видеиерархии взаимосвязанных автоматов.• Схемный (функциональный) уровень (Gate Level)– Описание устройства при помощи схемы изфункциональных элементов в заданной библиотекеэлементов.Упрощенный маршрутпроектированияЯзык Verilog••••Модули и шиныСтруктурное описание модулейФункциональное описание модулейБлокирующее и неблокирующееприсваивание• Параметризованные модулиЛогические значения• 0 — логический ноль• 1 — логическая единица• x — неопределённое значение– например, в неинициализированном регистре• z — состояние высокого импеданса– оно нужно в основном для управления шиной, ккоторой подключено много независимых устройств– в ближайшее время это значение нам непонадобитсяЛогические значения• Что мы строим: схему, между узлами которой вреальном времени передаются логические значения• 0 и 1 — это конкретные уровни напряжения• x — это абстракция: уровень напряжениясоответствующий неизвестному логическомузначениюVerilog: модули и шины• «Строительный блок» языка Verilog – модуль• Входы и выходы могут быть проводами ирегистрами (wire и reg), а также могут бытьобъявлены как массивы ([7:0] bus, {a,b,c})• Массив проводов – это шина:Verilog: определение модуля• Лучше всего описывать модуль в отдельном файле срасширением .v и названием, совпадающим сназванием модуляФайл mod.v:module mod(a, b, c);input wire a;input wire [1:0] b;output reg [2:0] c;// descriptionendmodule// EMPTY LINE!(первый вариант)Verilog: определение модуля• Лучше всего описывать модуль в отдельном файле срасширением .v и названием, совпадающим сназванием модуляФайл mod.v:module mod(input wire a,input wire [1:0] b,output reg [2:0] c);// descriptionendmodule// EMPTY LINE!(второй вариант)Verilog: правила соединения портов• Входы блока: внутри блока входы могут быть толькопроводами (wire), а вне блока могут быть какпроводами, так и регистрами(reg)• Выходы блока: внутри блока выходы могут быть какпроводами, так и регистрами, а вне блока толькопроводами• Смешанные порты: внутри и вне блока могут бытьтолько проводамиVerilog: способы описания модуля• Обычно различают два подхода к описанию модуля:– структурный: явно описать экземпляры (instances)модулей и связи между ними– функциональный: без явного описания структуры задатьповедение (реализуемые функции) модулей и связимежду нимиСтруктурное описаниеФункциональное описаниеVerilog: структурное описание –экземпляры модулейmodule m(input i1, i2, i3, output o1, o2, o3);wire w;m1 upleft(.i1(i1), .i2(i2), .o(w));m1 downleft(.i1(i2), .i2(i3), .o(o3));m2 right(.i1(w), .i2(o3), .o1(o1), .o2(o2));endmoduleВсе встречающиеся в описании имена (в том числе провода: wire) должны бытьопределены перед первым использованиемVerilog: структурное описание –примитивыmodule m(…);…not(o1,i1);or(o2,i1,…,in);and(o3,i1,…,in);…endmoduleVerilog: структурное описание –примерmodule dff_from_nandm();wire Q, Q_bar;reg D, CLK;nandnandnandnandU1(X,D,CLK);U2(Y,X,CLK);U3(Q,Q_bar,X);U4(Q_bar,Q,Y);endmoduleVerilog: структурное описание –непрерывное присваиваниеmodule trivial(input i, output o);assign o = i;endmoduleassign «провод» = «выражение»;В любой момент времени (с некоторой задержкой при изменении значения) напроводе должно быть значение выраженияVerilog: выраженияЧто можно использовать при написании выражений:• логические операции– например, a && b — логическое И• арифметические операции– например, a + b — это сложение двух чисел одинаковойбитности с переполнением• побитовые операции– например, a & b — это побитовое И двух битовых массивоводинаковой длины• отношения– например, a < b возвращает логическую 1, если число,двоичная запись которого есть a, меньше такового для b, илогический 0 иначеVerilog: выраженияЧто можно использовать при написании выражений:• Конкатенации– например, {a, b} — битовый массив, составленный из a и b• редукции– например, &a — логическая 1, если все биты a — единицы, илогический 0 иначе• условия– например, cond ? a : b работает как в C++; cond должноиметь логическое значение, а a и b должны иметьодинаковое число бит• константы– например, 0 — это логический ноль, а 5’b00110 —пятибитная двоичная запись числа 6(полный список операций можно найти в интернете)Verilog: функциональное описание –always-блок• Он выглядит так:always @(a or posedge b or negedge c)// statement• В аргументе перечисляются места (например, провода), приизменении сигнала в которых должно производиться какое-тодействие• В данном случае:– при изменении логического значения в a,– а также когда в b возникает передний фронт,– а также когда в c возникает задний фронт••Действие перезаписывает значения сигналов модуляПосле выполнения действия получившиеся значениясохраняются в проводах до следующего выполнения блокаVerilog: функциональное описание –always-блок• Он выглядит так:always @(a or posedge b or negedge c)begin//sequence of statementsend• Действий можно задавать много, и тогда их обычнымобразом нужно соединить в составное действиеVerilog: функциональное описание –always-блок• Он выглядит так:always @(a, posedge b, negedge c)begin//sequence of statementsend• В какой-то момент разработчики стандарта Verilog поняли, что“or” писать неудобно, так что разрешили вместо него ставитьзапятую• Какие же действия можно писать в always-блоке?Verilog: функциональное описание –блокирующие присваиванияalways @(a, b)beginb = c;a = b;c = a;end• Последовательно делается следующее:– в b выставляется начальное значение из c– в a выставляется изменённое значение из b– в c выставляется изменённое значение из a• Блокирующее присваивание моделирует последовательноевыполнение команд: пока присваивание не выполнено,следующие команды не выполняются (но в конечном итогестроится схема, просто она имеет хитрую структуру с блокамипамяти)Verilog: функциональное описание –неблокирующие присваиванияalways @(a, b)beginb <= c;a <= b;c <= a;end• Одновременно делается следующее:– в b выставляется начальное значение из c– в a выставляется начальное значение из b– в c выставляется начальное значение из a• Вообще говоря, одновременности не бывает, но вреальной схеме эти действия будут выполнены близкопо времени, и блоки памяти будут организованы так,чтобы выставлялись именно начальные значенияVerilog: регистры(переменные)• При выставлении сигналов в схеме могут понадобитьсядополнительные (неявные) ячейки памяти• Чтобы компилятор имел возможность распознать такие места ипо необходимости синтезировать дополнительную память, вVerilog вводится понятие регистра или переменной(терминология менялась в стандарте)• Всё, что появляется в присваиваниях (=, <=) слева, должно бытьобъявлено как переменная:reg a, b, c;always @(a, b)beginb = c; a = b; c = a;end• Всё остальное может быть объявлено переменнойVerilog: регистры(переменные)• Имя не может одновременно быть переменной ипроводом• В некоторых случаях (например, при встрече в левойчасти непрерывного присваивания) имя не может бытьпеременной• Все входы и выходы являются проводами по умолчанию• Все входы обязаны быть проводами• Выходы можно определять как переменные: достаточно– дописать в начале модуля reg «имя выхода»; или– при определении выхода написатьoutput reg «имя выхода»вместоoutput «имя выхода»Verilog: функциональное описание –условные переходыif(cond) stmt;else stmt;case(a)3'b000: stmt;3'b010: stmt;3'b011: stmt;default: stmt;endcase• Условные инструкции тоже можно писать• Как и инструкцию switch-case• Они интерпретируются обычным образом(примерно как в C++)Verilog: функциональное описание –примерыmodule register3(input load, reset, clock,input [2:0] in,output reg [2:0] out);always @(posedge clock, negedge reset)if(~reset) out <= 0;else if(~load) out <= in;endmoduleVerilog: функциональное описание –примерыmodule adder(input [7:0] a, b,output [7:0] sum);assign sum = a + b;endmoduleVerilog: параметрыmodule register3(input load, reset, clock,input [2:0] in,output reg [2:0] out);Иногда бывает нужно написатьнесколько невероятно похожих, но всёже разных модулейalways @(posedge clock, negedge reset)if(~reset) out <= 0;else if(~load) out <= in;endmodulemodule register5(input load, reset, clock,input [4:0] in,output reg [4:0] out);always @(posedge clock, negedge reset)if(~reset) out <= 0;else if(~load) out <= in;endmoduleVerilog: параметры• Чтобы описать сразу всё разнообразие модулей,отличающихся только какими-то константнымизначениями (например, регистры — размеромшины), достаточно описать один модуль ссоответствующими параметрами:module register#(parameter Width = 5)( input load, reset, clock,input [Width-1:0] in,output reg [Width-1:0] out);always @(posedge clock, negedge reset)if(~reset) out <= 0;else if(~load) out <= in;endmoduleVerilog: параметры• Чтобы описать сразу всё разнообразие модулей,отличающихся только какими-то константнымизначениями (например, регистры — размеромшины), достаточно описать один модуль ссоответствующими параметрами:Или так:module register(load, reset, clock, in , out);parameter Width = 5;input load, reset, clock;input [Width-1:0] in;output reg [Width-1:0] out;always @(posedge clock, negedge reset)if(~reset) out <= 0;else if(~load) out <= in;endmoduleVerilog: параметрыparameter Width = 5;• Параметр можно писать вместо числа почти везде вмодуле (нельзя — в константах на месте размера)• Значение параметра по умолчанию указывается приего определении (здесь — 5)• Экземпляр параметризованного модуля может бытьвызван двумя способами:– с явным указанием параметров (указание параметров— такое же, как и входов-выходов)register r #(.Width(3)) («arguments»)– без указания параметров — тогда подставляетсязначение по умолчаниюregister r («arguments»)Язык Verilog – Hello world!Пример моделирования на языкеVerilog – 4-х битовый счетчик• Входы– Clock – вход тактового генератора– Reset – сброс значения счетчика(сброс при «1»)– Enable – включение счетчика (при«1» счетчик работает)• Выходы– Counter_out – значение счетчика• Функция– Счетчик увеличивается на 1-цу закаждый «такт» тактовогогенератораПример моделирования на языкеVerilog – 4-х битовый счетчикПример моделирования на языкеVerilog – 4-х битовый счетчикПример моделирования на языкеVerilog – тестированиеПример моделирования на языкеVerilog – тестированиеПример моделирования на языкеVerilog – тестированиеПример моделирования на языкеVerilog – тестированиеПример моделирования на языкеVerilog – тестирование.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.