close

Вход

Забыли?

вход по аккаунту

?

Информационные модели специальных САПР...(ЛР 09.04.02)

код для вставкиСкачать
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«Воронежский государственный лесотехнический университет
имени Г.Ф. Морозова»
ИНФОРМАЦИОННЫЕ МОДЕЛИ СПЕЦИАЛЬНЫХ САПР
МИКРОЭЛЕКТРОННЫХ УСТРОЙСТВ
Методические указания к лабораторным работам
по направлению подготовки
09.04.02 – Информационные системы и технологии
Воронеж 2016
УДК 004
Лавлинский, В. В. Информационные модели специальных САПР микроэлектронных устройств [Электронный ресурс] : Методические указания к лабораторным работам по направлению подготовки 09.04.02 – Информационные
системы и технологии) / В.В. Лавлинский, Р.Б. Буров, Т.В. Скворцова, С.А. Евдокимова ; М-во образования и науки РФ, ФГБОУ ВО «ВГЛТУ им. Г.Ф. Морозова». – Воронеж, 2016. – 58 с.
Печатается по решению учебно-методического совета
ФГБОУ ВО «ВГЛТУ» (протокол № __ от _______ 2016 г.)
Рецензент начальник лаборатории ОАО «НИИЭТ» к.т.н. А. И. Яньков
3
ВВЕДЕНИЕ
Методические указания подготовлены в соответствии с рабочей программой дисциплины «Методы и средства создания специальных САПР микроэлектронных устройств» для магистров по направлению подготовки 09.04.02 –
Информационные системы и технологии (уровень магистратуры). Целью изучения данной дисциплины является формирование у магистров знаний и умений по проблемам создания и повышения эффективности функционирования
систем автоматизированного проектирования, управления качеством проектных работ на основе использования современных методов моделирования и
инженерного анализа, перехода на безбумажные сетевые формы документооборота и интеграции САПР в общую архитектуру автоматизированной проектно –
производственной среды.
4
Лабораторная работа 1
Введение в язык программирования Verilog HDL. Типы источников
сигнала
Verilog HDL – язык описания электрических схем. Почему именно Verilog HDL? Отличие языка Verilog HDL от VHDL в их синтаксисе. Первый имеет
С подобный синтаксис, а второй Pascal – подобный синтаксис. На этом разница
заканчивается. В Cadence есть компилятор и того, и другого языка. Поэтому
выбор языка определяется популярностью того или иного языка и тем, на каком
программирует главный инженер. Язык позволяет моделировать работу электрических схем путем программирования их работы. Этот язык отличается от
обычных языков программирования тем, в него введено больше понятий, состояний, имеет свою базу зарезервированных слов, более специализирован и
т.д. Так как Verilog имеет в своей основе язык С, то он наследует и свойства
этого языка, например, чувствительность к регистру, счет с ноля и т. д.
Понятие сигнала (Signal). Сигналы - это электрические импульсы, которые передаются по проводникам (wires) между логическими элементами схемы.
Проводники переносят информацию, не совершая над ней никаких операций.
Источником сигнала в Verilog является цепь или проводник. Можно объявить
проводник и назначить ему сигнал и позже использовать его в выражениях. Это
похоже на переменную, но не переменная. Значение проводника – это функция
того, что присоединено к нему.
Объявление однобитового проводника:
wire a;
Можно назначить ему другой сигнал:
wire b;
assign a = b;
Или
wire a = b;
5
Проводники могут передавать несколько бит информации:
wire [3:0] c; //четыре провода
Проводники, передающие несколько бит информации называются шиной
или вектором. Назначения к ним делаются также, как и к одному проводнику.
Из шины можно выбрать нужный бит и назначить его другому проводнику.
wire g;
assign g = c[2];
Таким образом можно переназначать от одной шины другой диапазон битов с тем же количеством. Также можно объявить массивы шин.
wire [7:0] k [0:19];
Другой тип источника сигнала – регистр reg. Регистры используют при
поведенческом и процедурном описании схемы. Они больше походят на переменные нежели на аппаратные регистры. Если регистру присваивать значение
логической функции, то он ведет себя как проводник. Если же присваивается
значение в синхронной логике, например, по фронту сигнала тактовой частоты,
то ему будет соответствовать физический D-триггер или их группа. Регистры
описываются также, как и проводники.
reg [3:0] m;
Они могут использоваться, как и проводники - в правой части выражений, как операнды:
wire [1:0] p = m[2:1];
Вы можете определить массив регистров, которые обычно называют ―память‖:
reg [7:0] q [0:15]; //память из 16 слов, каждое по 8 бит
Еще один тип источника сигнала – это integer. Он похож на регистр reg,
но всегда является 32х битным знаковым типом данных. Например, объявим:
integer loop_count;
Verilog позволяет группировать логику в блоки. Каждый блок логики называется ―модулем‖ (module). Модули имеют входы и выходы, которые ведут
6
себя как сигналы wire. При описании модуля сперва перечисляют его порты
(входы и выходы):
module my_module_name (port_a, port_b, w, y, z);
А затем описывают направление сигналов:
input port_a;
output [6:0] port_b;
input [0:4] w;
inout y; //двунаправленный сигнал, обычно используется только для
внешних контактов микросхем
output reg [3:0] z;
Теперь можно использовать входные сигналы, как провода wire:
wire r = w[1];
Теперь можно делать постоянные назначения выходам, как функции от
входов:
assign port_b = h[6:0];
В конце описания логики каждого модуля пишем слово endmodule.
module my_module_name (input wire a, input wire b, output wire c);
assign c = a & b;
endmodule
Последний тип источника сигнала – это постоянные сигналы или просто
числа. Числа или иначе константы могут определяться в десятичном, шестнадцатеричном, восьмеричном или двоичном форматах. В языке Verilog предусмотрены две формы для записи чисел. Первая форма представляет собой
простое десятичное число как последовательность цифр от 0 до 9 и опционально может предваряться символами плюса или минуса. Вторая форма
представления чисел имеет следующий формат:
<size> <base_format> <number>
Поле size содержит десятичные цифры и указывает разрядность константы в битах. Это поле опционально и может опускаться в случаях если раз-
7
рядность константы заранее определена (Допустим производится присвоение
константного значения переменной, разрядность которой задана при ее
объявлении). Если разрядность не определена, то разрядность принимается по
умолчанию равной 32 (32 в большинстве систем синтеза, в некоторых разрядность по умолчанию может отличаться). Второе поле base_format содержит
букву, определяющую формат представления числа (десятичный, двоичный
...). Эта буква предваряется символом одиночной кавычки ('). Формат представления определяется следующими буквами: d – десятичный; h – шестнадцатиричный; o – восмеричный и b – двоичный. Допускается вводить эти буквы
как прописными, так и строчными. Последнее поле number содержит цифры допустимые для выбранного формата: от 0 до 9 для десятичного формата; от
0 до 7 для восмеричного; 0 и 1 для двоичного; от 0 до 9 и буквы a, b, c, d, e,
f для шестнадцатеричного. Буквенные обозначения могут вводится как
строчными, так и прописными буквами.
wire [12:0] s = 12; /* 32-х битное десятичное число, которое будет “обрезано” до 13 бит */
wire [12:0] z = 13’d12; //13-ти битное десятичное число
wire [3:0] t = 4'b0101; //4-х битное двоичное число
wire [7:0] q = 8'hA5; // 8-ми битное шестнадцатеричное число A5
wire [63:0] u = 64'hdeadbeefcafebabe; /*64-х битное шестнадцатеричное число */
Если точно не определить размер числа, то оно принимается по умолчанию 32-х разрядным. Это может быть проблемой при присвоении сигналам с
большей или меньшей разрядностью. Числа – это числа. Они могут использоваться во всяких арифметических и логических выражениях. Например, можно
прибавить 1 к вектору ―p‖:
wire [3:0] p;
wire [3:0] u;
assign u = p + 1;
8
Такое выражение сложения в коде на Verilog в конечном счете обернется
аппаратным сумматором внутри чипа.
Лабораторная работа 2. Иерархия проекта и логические примитивы
В проекте, особенно сложном, бывает много модулей, соединенных между собой. Прежде всего, нужно заметить, что обычно в проекте всегда есть
один модуль самого верхнего уровня (top level). Он состоит из нескольких других модулей. Те в свою очередь могут содержать еще модули и так далее. Не
обязательно, чтобы все модули были написаны на одном языке описания аппаратуры. Эти модули могут быть написаны разными людьми, на разных языках
(Verilog, VHDL, AHDL, и даже выполнены в виде схемы). В языке Verilog данные могут принимать одно из четырех возможных состояний:
1 – представляет логическую 1 или значение «истинно» (true)
0 – представляет логический 0 или значение «ложно» (false)
z – представляет состояние высокого импеданса
x – представляет неизвестное логическое состояние
Почти все типы данных в Veriloge принимают одно из этих состояний за
небольшим исключением: такой тип данных как event вообще не удерживает состояний, а тип trireg может принимать z-состояние только в начальный
момент времени, до первой инициализации – в дальнейшем в это состояние он
больше не переходит.
Внутри тела любого модуля, можно объявлять экземпляры других модулей и потом соединять их друг с другом связями. Предположим, у нас есть следующие примитивные модули:
9
Рис. 2.1 Графическое представление самых простых логических элементов и их таблица истинности.
Слева изображен двухвходовый логический элемент И. На его выходе
единица, если на первом И на втором входе единица. Справа изображен двухвходовый логический элемент И-НЕ. На его выходе ноль, если на первом И
втором входах единицы.
Обратите внимание, что на входе может быть не только логический ноль
или единица, но и так же неопределенное значение x, или вход может быть
подключен к двунаправленному сигналу (inout), находящемуся в высокоомном
состоянии z. Эти значения так же указаны в таблице истинности для полноты
картины.
Эти логические модули можно было бы описать на языке Verilog следующим образом:
module AND2(output OUT, input IN1, input IN2);
assign OUT = IN1 & IN2;
endmodule
module NAND2(output OUT, input IN1, input IN2);
assign OUT = ~(IN1 & IN2);
endmodule
Однако, вот такие описания делать не нужно. Это базовые элементы
(gates) и они наверняка должны быть в стандартных библиотеках синтезатора.
Вот еще пара важных логических элементов:
10
Рис. 2.2 Логические элементы ИЛИ и ИЛИ-НЕ и их таблица истинности.
Следующие важные примитивы связаны с «отрицанием равнозначности»:
Рис. 2.3 Примитивы XOR и XNOR
Элемент слева (XOR) имеет на выходе ноль если на обоих входах одинаковое значение (либо оба входа ноль, либо оба входа единица). Элемент справа
(XNOR) - тоже самое, только с инверсией. На выходе единица, если либо оба
входа ноль, либо оба входа единица. Еще пара очень важных базовых элементов:
Рис. 2.4 Примитивы NOT и CTRL
Слева элемент НЕ. На его выходе значение противоположное входному
значению. Если на входе единица, то на выходе ноль. И на оборот. Справа - буферный элемент, использующийся для двунаправленных сигналов (inout). Этот
элемент «пропускает» через себя входной сигнал, только если на входе CTRL
есть управляющая единица. Если на входе CTRL ноль, то элемент «отключает-
11
ся» от выходного провода переходя в высокоомное состояние. Такие элементы
используются только для выводов цифровых микросхем. Поэтому использовать
двунаправленные сигналы (inout) правильнее всего только в модуле самого
верхнего уровня.
Сделаем однобитный сумматор по вот такой схеме:
Рис. 2.5 Логическая схема однобитного сумматора
Этот сумматор складывает два однобитных числа a и b. При выполнении
сложения однобитных чисел может случиться «переполнение», то есть результат уже будет двухбитным (1+1=2 или в двоичном виде 1‘b1+1‘b1=2‘b10). Поэтому у нас есть выходной сигнал переноса c_out. Дополнительный входной
сигнал c_in служит для приема сигнала переноса от сумматоров младших разрядов, при построении многобитных сумматоров.
Посмотрите, как можно описать эту схему на языке Verilog, устанавливая
в теле модуля экземпляры других модулей. Это описание на уровне элементов
(gate-level modelling). Мы установим в наш модуль 3 экземпляра модуля XOR и
два экземпляра модуля AND2.
module adder1(output sum, output c_out, input a, input b, input c_in);
wire s1,s2,s3;
XOR my_1_xor( .OUT (s1), .IN1 (a), .IN2 (b) );
AND2 my_1_and2( .OUT (s3), .IN1 (a), .IN2 (b) );
XOR my_2_xor( .OUT (sum), .IN1 (s1), .IN2 (c_in) );
AND2 my_2_and2( .OUT (s2), .IN1 (s1), .IN2 (c_in) );
12
XOR my_3_xor( .OUT (c_out), .IN1 (s2), .IN2 (s3) );
endmodule
Порядок описания экземпляра модуля такой:
• Пишем название модуля, тип которого нам нужен.
• Пишем название конкретно этого экземпляра модуля (по желанию).
• Описываем подключения сигналов: точка и затем имя сигнала модуля,
затем в скобках имя проводника, который сюда подключен.
Гораздо приятней видеть вот такой код однобитного сумматора:
module adder1(output sum, output c_out, input a, input b, input
c_in);
assign sum = (a^b) ^ c_in;
assign c_out = ((a^b) & c_in) ^ (a&b);
endmodule
Просто важно понимать, что существуют разные методы описания, и
нужно уметь ими всеми пользоваться. Имея однобитный сумматор, на его основе можно сделать, например, четырехбитный (с последовательным переносом):
13
Рис. 2.6 Масштабируемый сумматор
На языке Verilog это же будет выглядеть следующим образом:
module adder4(output [3:0]sum, output c_out, input [3:0]a, input [3:0]b );
wire c0, c1, c2;
adder1 my0_adder1( .sum (sum[0]) , .c_out (c0), .a (a[0]), .b (b[0]), .c_in
(1’b0) );
adder1 my1_adder1( .sum (sum[1]) , .c_out (c1), .a (a[1]), .b (b[1]), .c_in
(c0));
adder1 my2_adder1( .sum (sum[2]) , .c_out (c2), .a (a[2]), .b (b[2]), .c_in
(c1));
adder1 my3_adder1( .sum (sum[3]) , .c_out (c_out), .a (a[3]), .b (b[3]),
.c_in (c2) );
14
endmodule
Таким образом реализован четырехбитный сумматор. Он считается модулем верхнего уровня adder4, состоящий из модулей adder1, которые, в свою
очередь состоят из модулей примитивов AND2 и XOR.
Вообще, даже примитивы типа AND могут быть описаны на языке
Verilog в виде нескольких связанных MOS или CMOS переключателей, а это
уже уровень транзисторов (switch level modeling).
Лабораторная работа 3. Арифметические и логические функции.
Мы знаем про модули, их входные и выходные сигналы и как они могут
быть соединены друг с другом. С помощью комбинаторной логики производятся арифметические и логические операции. Символы операторов Verilog HDL
похожи на те, что используются в языке С.
Таблица 3.1 - Список операторов Verilog
15
Сложение и вычитание.
Пример модуля, который одновременно и складывает и вычитает два
числа. Здесь входные операнды 8-ми битные, а результат 9-ти битный. Verilog
корректно сгенерирует бит переноса (carry bit) и поместит его в девятый бит
выходного результата. С точки зрения Verilog входные операнды беззнаковые.
Если нужна знаковая арифметика, то об этом нужно отдельно позаботиться.
module simple_add_sub(operandA, operandB, out_sum, out_dif); //два
входных 8-ми битных операнда
input [7:0] operandA, operandB; /*Выходы для арифметических операций имеют дополнительный 9-й бит переполнения*/
output [8:0] out_sum, out_dif;
assign out_sum = operandA + operandB; //сложение
assign out_dif = operandA - operandB; //вычитание
endmodule
Логический и арифметический сдвиг.
Пример модуля, который выполняет сдвиги. В примере результат для
сдвига влево 16-ти битный. Если сдвигать влево или вправо слишком далеко, то
результат получится просто ноль. Часто для сдвига используются только часть
бит от второго операнда, для того, чтобы сэкономить логику.
module simple_shift (operandA, operandB,out_shl, out_shr, out_sar); //
два входных 8-ми битных операнда
input [7:0] operandA, operandB;
// Выходы для операций сдвига
output [15:0] out_shl;
output [7:0] out_shr;
output [7:0] out_sar;
//логический сдвиг влево
assign out_shl = operandA << operandB;
/* пример: на сколько сдвигать определяется 3-мя битами второго
16
операнда */
assign out_shr = operandA >> operandB[2:0]; //арифметический сдвиг
вправо (сохранение знака числа)
assign out_sar = operandA >>> operandB[2:0];
endmodule
Битовые логические операции.
Битовые операции в Verilog выглядят так же, как и в языке C. Каждый
бит результата вычисляется отдельно соответственно битам операндов. Вот
пример:
module simple_bit_logic ( operandA, operandB, out_bit_and, out_bit_or,
out_bit_xor, out_bit_not); //два входных 8-ми битных операнда
input [7:0] operandA, operandB;
//Выходы для битовых (bit-wise) логических операций
output [7:0] out_bit_and, out_bit_or, out_bit_xor, out_bit_not;
assign out_bit_and = operandA & operandB; // И
assign out_bit_or = operandA | operandB; // ИЛИ
assign out_bit_xor = operandA ^ operandB; //исключающее ИЛИ
assign out_bit_not = ~operandA; //НЕ
endmodule
Булевые логические операции - отличаются от битовых операций. Так же,
как и в языке С, здесь значение всей шины рассматривается как ИСТИНА если
хотя бы один бит в шине не ноль или ЛОЖЬ, если все биты шины – ноль. Результат получается всегда однобитный (независимо от разрядности операндов)
и его значение "1" (ИСТИНА) или "0" (ЛОЖЬ).
module simple_bool_logic (
operandA, operandB,
out_bool_and, out_bool_or, out_bool_not);
//два входных 8-ми битных операнда
17
input [7:0] operandA, operandB; // Выходы для булевых (boolean) логических операций
output out_bool_and, out_bool_or, out_bool_not;
assign out_bool_and = operandA && operandB; //И
assign out_bool_or = operandA || operandB; //ИЛИ
assign out_bool_not = !operandA; //НЕ
endmodule
Операторы редукции. Verilog имеет операторы редукции. Эти операторы
позволяют выполнять операции между битами внутри одной шины. Так, можно
определить все ли биты в шине равны единице (&bus), или есть ли в шине хотя
бы одна единица (|bus). Пример:
module
simple_reduction_logic
(
operandA,
out_reduction_and,
out_reduction_or, out_redution_xor);
//входной 8-ми битный операнд
input [7:0] operandA;
// Выходы для логических операций редукции
output out_reduction_and, out_reduction_or, out_reduction_xor;
assign out_reduction_or = |operandA;
assign out_reduction_and = &operandA;
assign out_reduction_xor = ^operandA;
endmodule
А вот еще полезные операторы редукции:
~|operandA //обозначает, что в шине нет единиц.
~&operandA //обозначает, что некоторые биты в шине равны нулю.
Оператор условного выбора.
Язык C имеет оператор ‗? :‘. С его помощью можно выбрать одно значение из двух по результату логического выражения. В Verilog тоже есть подобный оператор. Он фактически реализует мультиплексор. В данном примере на
выходе мультиплексора окажется значение operandA если сигнал sel_in едини-
18
ца. И наоборот. Если входной сигнал sel_in равен нулю, то на выходе мультиплексора будет значение operandB.
module simple_mux ( operandA, operandB, sel_in, out_mux);
//входные 8-ми битные операнды
input [7:0] operandA, operandB;
//входной сигнал селектора
input sel_in;
//Выход мультиплексора
output [7:0]out_mux;
assign out_mux = sel_in ? operandA : operandB;
endmodule
Операторы сравнения. В Verilog можно ли сравнивать значения регистров
или шин. Пример (все сравнения происходят с беззнаковыми числами):
module simple_compare (operandA, operandB,out_eq, out_ne, out_gt,
out_lt, out_ge, out_le);
//входные 8-ми битные операнды
input [7:0] operandA, operandB;
//Выходы операций сравнения
output out_eq, out_ne, out_gt, out_lt, out_ge, out_le;
assign out_eq = operandA == operandB; //равно
assign out_ne = operandA != operandB; //не равно
assign out_ge = operandA >= operandB; //больше или равно
assign out_le = operandA <= operandB; //меньше или равно
assign out_gt = operandA > operandB; //больше
assign out_lt = operandA < operandB; //меньше
endmodule
В приведенных примерах были рассмотрены основные арифметические и
логические операторы языка Verilog. Вы можете заметить, что некоторые опе-
19
раторы совсем не описаны. Это такие операторы, как умножение (*) или деление (/), или модуль, остаток от деления (%). Такие вещи нужно использовать с
осторожностью. Синтез умножения или деления может привести к снижению
быстродействия схемы и при проектировании чипа данные блоки займут много
места. Нужно анализировать, как вместо этих операций можно применить, например, сдвиги или логические операции и др. Операторы умножения и деления полезны для написания моделей симуляции. Некоторые чипы могут иметь
встроенные умножители, и если синтезатор знает об этом, то он будет использовать их.
Лабораторная работа 4. Процедурные блоки.
Добавить описание про тактирующий сигнал.
Постоянные назначения сигналов выглядят примерно так:
wire a,b,c;
assign c = a & b;
Постоянные назначения сигналов весьма полезны, но имеют недостатки.
Такой код, когда его много, не очень легко читать. Чтобы сделать язык Verilog
более выразительным, он имеет так называемые "always" блоки. Они используются при описании системы с помощью процедурных блоков. Использование
процедурных блоков очень похоже на программирование на языке С. Оно позволяет выразить алгоритм так, чтобы он выглядел как последовательность
действий. Для описания процедурного блока используется вот такой синтаксис:
always @(<список_чувствительности>) <выражения>
<sensitivity_list> – это список всех входных сигналов, к которым чувствителен блок. "Always" переводится как "всегда". Такую запись можно прочитать
вот так: "Всегда выполнять выражения при изменении сигналов, описанных в
списке чувствительности".
20
Если указать список чувствительности неверно, то это не должно повлиять на синтез проекта, но может повлиять на его симуляцию. В списке чувствительности имена входных сигналов разделяются ключевым словом "or":
always @(a or b or d) <statements>
Иногда гораздо проще и надежней включать в список чувствительности
все сигналы. Это делается вот так:
always @* <statements>
Тогда исправляя выражения в <statements> вам не нужно задумываться
об изменении списка чувствительности. При описании выражений внутри процедурных блоков комбинаторной логики, с правой стороны от знака равенства,
как и раньше, можно использовать типы сигналов wire или reg, а вот с левой
стороны теперь используется только тип reg:
reg [3:0] c;
always @(a or b or d)
begin
c = <выражение использующее входные сигналы a,b,d>;
end
Обратите внимание, что регистры, которым идет присвоение в таких процедурных блоках не будут выполнены в виде D-триггеров после синтеза. Здесь
присвоение регистрам происходит с помощью оператора "=", который называется "блокирующим". Для симулятора это означает, что выражение вычисляется, а его результат присваивается регистру приемнику и он тут же, немедленно,
может быть использован в последующих выражениях.
Блокирующие присвоения обычно используются для описания комбинаторной логики в процедурных блоках.
Неблокирующие присвоения будут обычно используются для описания
синхронной логики и там регистры reg после синтеза будут представлены с помощью D-триггеров.
21
Можно написать много выражений связанных между собой, синтезатор
переработает их и создаст, возможно, довольно длинные цепи из комбинаторной логики. После того, как проект будет откомпилирован, список всех сигналов проекта (netlist) может сильно сократиться. Многие сигналы, описанные
программистом, могут исчезнуть – синтезатор выбросит их, создав цепи из оптимизированной комбинаторной логики. Синтезатор даже может выдать предупреждение (warning) о том, что какому-то сигналу присвоено значение, но оно
нигде не используется.
С процедурными блоками можно делать очень интересные вещи, такие
как условные переходы, множественный выбор по условию, циклы и прочее.
Например, код простого мультиплексора с помощью оператора "?":
reg [3:0] c;
always @(a or b or d)
begin
c = d ? (a & b) : (a + b);
end
Вместо параметра "d" может быть любое выражение. Если значение этого
выражения истина (не равно нулю), то будет выполняться первое присвоение "c
= a & b". Если значение выражения "d" ложь (равно нулю), то будет выполняться второе присвоение "c = a + b". Если нужно сделать выбор из многих вариантов (это на языке схемотехники мультиплексор со многими входами), то можно
использовать конструкцию case. Конструкция case очень похожа на switch из
языка C.
Пример:
wire [1:0] option;
wire [7:0] a, b, c, d;
reg [7:0] e;
always @(a or b or c or d or option) begin
case (option)
22
0: e = a;
1: e = b;
2: e = c;
3: e = d;
endcase
end
Поскольку входы у нас – это 8-ми битные шины, то в результате синтеза
получится восемь мультиплексоров четыре к одному.
Циклы в Verilog имеют несколько иной смысл, не такой, как в языках C
или Pascal. На языке C цикл обозначает, что некоторое действие должно быть
выполнено последовательно раз за разом. Чем больше итераций в цикле, тем
дольше он будет исполняться процессором. На языке Verilog цикл описывает
сколько экземпляров логических функций должно быть реализовано аппаратно.
Цикл должен иметь ограниченное число итераций, которое можно однозначно
определить на этапе синтеза.
Лабораторная работа 5. Синхронная логика и триггеры.
Синхронные цифровые схемы состоят из комбинационных вентилей(gates), цепей (nets) и триггеров (flip-flops). В синхронной схеме есть единственный сигнал синхронизации, который управляет всеми элементами памяти
(триггерами).
Формально, синхронную схему можно определить следующим образом:
Синхронная схема — это цифровая схема, которая удовлетворяет следующим
условиям:
1.
В схеме существует единственная цепь clock, по которой распро-
страняется сигнал синхронизации (тактовый сигнал, clock signal);
2.
Сигнал clock управляется входным портом схем;
23
3.
Множество портов, управляемых сигналом clock, эквивалентно
множеству входов синхронизации триггеров;
Существует несколько видов триггеров. Наиболее важный для практического применения – это D-триггер. D-триггер (от английского DELAY) называют информационным триггером, также триггером задержки. D - триггер бывает только синхронным.
D-Триггер (flipflop) – это специальный логический элемент, способный
запоминать. Такой триггер запоминает логическое значение сигнала входа D,
когда на втором входе C (обозначен треугольничком) появляется фронт сигнала. Один такой триггер запоминает один бит информации. Текущее значение
записанное в триггер - на его выходе Q. Еще триггер может иметь сигналы ассинхронного сброса clrn или установки prn. По сигналу clrn = 0 триггер переходит в состояние ноль независимо от других входных сигналов D или C.
Практически все существующие цифровые схемы являются синхронными, либо состоят из нескольких синхронных схем, взаимодействующих через
асинхронные каналы. Причина популярности синхронных схем — в простоте
анализа времени распространения сигналов.
Рис.5.1 - Пример синхронной схемы.
24
Триггеры A, B и R сохраняют значения на входах D по переднему фронту сигнала синхронизации (clk), т.е. в тот момент времени, когда значение clk
изменяется из 0 в 1.
Сигналы распространяются через сумматоры (и другие комбинационные
элементы) не мгновенно, а с задержкой, зависящей от длины самого большого
пути из вентилей (критического пути), т.е. от сложности элемента. К примеру,
критический путь в сумматоре будет проходить через сигналы переноса в
старший разряд (представьте себе вычисление суммы ―столбиком‖).
Предположим, что сначала во всех регистрах был записан 0. А на входы
in0, in1 сначала подаются значения 1 и 4, а потом 2 и 1. Тогда временная диаграмма для нашей схемы может выглядеть следующим образом:
Рис. 5.2 - Временная диаграмма
По первому фронту clk значения 1 и 4 будут записаны в регистры A и B.
После того как сигнал распространится через сумматоры, значение результата 1
+ 4 + 1 = 6 появится на проводе t1. Затем, по второму фронту clk результат будет записан в регистр R, а новые входные значения в регистры A и B.
Теперь представим, что период сигнала clk уменьшился в два раза. Тогда
второй фронт сигнала clk появится на регистре R до того, как на t1 появятся
правильные данные. Т.е. схема будет работать неверно!
Отсюда следует основное правило корректности работы синхронной схемы:
25
Задержка через критический путь в схеме должна быть меньше периода
сигнала синхронизации. Под критическим путем понимается самый длинный
путь в схеме, от выхода до входа регистра. Из этого правила выводится следствие, которое характеризует один из самых больших недостатков синхронных
схем: Синхронная схема работает на частоте, определяемой критическим путем
в схеме.
Представьте, что в схеме тысячи комбинационных путей с задержкой в 1
наносекунду. И один путь с задержкой в 2 наносекунды. Из-за этого единственного пути схема должна тактироваться на частоте в 500 МГц, хотя могла бы работать на гигагерце. Поэтому, при проектировании синхронных схем длинные
комбинационные цепочки разбивают регистрами на конвейерные стадии.
Несмотря на этот недостаток, синхронные схемы стали очень популярны.
Они без труда поддаются автоматическому временному анализу, т.е. частота, на
которой схема может корректно работать, определяется программой (временным анализатором) автоматически. Когда разработчик может отстраниться от
этих деталей, синхронную схему можно специфицировать набором пересылок
между регистрами. Такой подход к описанию схем – Register Transfer Logic
(RTL) стал основным в описании логики работы цифровых схем. К примеру,
схему из нашего примера можно описать следующими пересылками:
A = in0
B = in1
R = A+B+1
На каждом такте в регистр А записывается in0, в регистр B записывается
in1, а в регистр R значение A + B + 1. Идея описывать схемы на RTL в виде текста лежит в основе языков описания аппаратуры: Verilog HLD и VHDL.
Язык Verilog позволяет легко описать синхронные процессы. Описание
синхронной логики в поведенческом коде Verilog очень похоже на описание
комбинаторной логики с одним важным отличием – в списке чувствительности
always блока теперь будут не сами сигналы, а фронт тактовой частоты clock.
26
Только в этом случае регистры, которым идет присвоение, будут реализованы в
виде D-триггеров (flipflops). Давайте посмотрим простой пример. Вот графическое представление восьмибитного регистра, запоминающего входные данные
по фронту тактовой частоты и его описание на языке Verilog.
Рис. 5.3 - 8-ми битный регистр
module DFF8 (clock, data, q);
input clock;
input [7:0] data;
output [7:0] q;
reg [7:0] q;
always @(posedge clock) begin
q <= data;
end
endmodule
Здесь блок always чувствителен к фронту тактовой частоты: posedge
clock. Еще, вместо posedge – положительного фронта тактовой частоты можно
использовать negedge – отрицательный фронт. При использовании negedge запоминание в регистр происходит по перепаду сигнала clock с «1» в «0». Сам
факт запоминания входных данных data в регистре q здесь описан оператором
"<=". Это так называемое «неблокирующее присвоение». Неблокирующее присваивание выполняется не сразу, в том месте где объявлено, а откладывается до
выхода из процедурного блока.
На вход in такого регистра может быть подано, например, значение выражения какой-нибудь комбинаторной функции, вычисленной в другом always
блоке. В синхронной логике значение входов триггеров важно только в момент
запоминания в триггерах, в момент фронта тактовой частоты clock. В этом
27
главное отличие от комбинаторной логики. Комбинаторная логика, описанная
always блоками, производит «постоянное» вычисление своей функции по отношению к входным сигналам: как только меняется сигнал на входе, так сразу
может меняться и сигнал на выходе.
Очень часто модули имеют дополнительные сигнал сброса. Они используются чтобы установить триггера схемы в некоторое исходное состояние.
Сигналы сброса могут быть разных типов: синхронные и асинхронные. Вот
пример реализации синхронного сброса регистра с активным положительным
уровнем (active-high):
Рис. 5.4 - Пример синхронного сброса регистра с активным
положительным уровнем
Вот так эту схему можно описать на языке Verilog:
module DFFSR (reset, clock, data, q);
input reset;
input clock;
input [7:0] data;
output [7:0] q;
reg [7:0] q;
always @(posedge clock) begin
if (reset) begin
q <= 0;
end else begin
q <= data;
end
28
end
endmodule
Здесь при использовании синхронного сброса перед входом запоминающего регистра можно представить себе мультиплексор, как на схеме выше. Если сигнал сброса reset активен ("единица"), то на вход регистра подается ноль.
Иначе – загружаются другие полезные данные. Запись в регистр происходит
синхронно с фронтом тактовой частоты clock.
Лабораторная работа 6. Асинхронные частоты, синхронизация
Сейчас только самые элементарные логические схемы используют одну
синхрочастоту. Большинство современных устройств, работающих с данными,
включая микроконтроллеры, модемы, сетевые интерфейсы и сетевые процессоры, имеет множество последовательных интерфейсов и различных сигналов,
которые производят передачу данных и сигналов управления через многие домены синхрочастоты.
Рис. 6.1 Домен синхрочастоты
Если в проекте присутствует несколько асинхронных частот, то целесообразнее бывает делить проект на части так. Такую часть проекта называют
«домен синхрочастоты», или «клоковый домен». Симуляция такой части проекта не представляет особых трудностей. Трудности начинаются там, где необходимо пересечь границы такого домена. Когда сигнал из одного домена синхрочастоты приходит в другой домен, то этот сигнал в новом домене синхрочастоты будет асинхронным.
29
Рис. 6.2 Однокаскадный синхронизатор
Правильный режим работы триггера, имеющего импульсы синхронизации, зависит от того, насколько устойчив сигнал на входе относительно синхроимпульса. Причем необходимо, чтобы входной сигнал для триггера был устойчивым для определенного промежутка времени до (setup) и после (hold)
фронта синхроимпульса. Если эти требования по времени задержки будут соответствовать, то, соответственно, после задержки правильный сигнал появится
на выходах триггера, и этот сигнал будет иметь достоверный выходной уровень
(VoL или VoH) в выходе триггера. Однако если интервалы времени по предустановке и интервалы времени по удержанию сигнала не соответствуют требуемым, то может потребоваться значительно больше времени, для того, чтобы
выход триггера смог достигнуть достоверного логического уровня. Это называют непостоянным поведением, или метастабильностью.
Рис. 6.3 - Основы метастабильности
30
Чем больше частота входного сигнала, подаваемого на триггер, тем
больше риск того, что входной сигнал не будет соответствовать заданным параметрам по времени предустановки. Если в схеме имеется генератор синхрочастоты B, то частота синхронизации Clk B будет сэмплировать данные DA,
поступающие с выхода первого триггера. Если выходной сигнал первого триггера DA изменится, например, фронт сигнала DA попадет на фронт синхрочастоты Clk B, то сигнал на выходе второго триггера (DB) будет метастабилен.
Метастабильности нельзя избежать, но можно предпринять специальные решения для того, чтобы обрабатывать метастабильный сигнал. Лучший способ в
этом случае — использовать схемы, которые устраняют проблемы с асинхронными сигналами, что позволит всему проекту работать правильно.
Рис. 6.4 - Схема синхронизации сигнала
Сигналы синхронизируются для того, чтобы защитить всю логику в этом
домене синхрочастоты от метастабильного состояния триггера, на который
приходит асинхронный, для этого домена, сигнал. Простейший синхронизатор
представляет собой два триггера, включенных последовательно без какой-либо
комбинационной схемы между ними. Такая схема проекта гарантирует, что
первый триггер выходит из своего метастабильного состояния, и его выход переходит в устойчивое состояние перед тем, как второй триггер защелкивает это
состояние. Необходимо также разместить эти триггеры, насколько возможно,
31
ближе друг к другу для того, чтобы гарантировать наименьшую расфазировку
тактовых сигналов между ними. Для этих целей фирмы изготовители ИС предлагают свои библиотечные компоненты — ячейки синхронизатора. Первый тип
— это ячейки, которые обычно включают триггер с очень высоким усилением,
хотя такой триггер и использует больше мощности и имеет размеры, которые
больше, чем у стандартного триггера. Такой триггер имеет уменьшенные времена по предустановке/удержанию для входного сигнала и не создает колебательных процессов в схеме, когда входной сигнал вызывает метастабильность.
Другой тип ячейки синхронизатора представляет собой два близко расположенных триггера без какой-либо комбинационной логики между ними. Для
того чтобы синхронизация работала должным образом, сигнал, пересекающий
домен синхрочастоты, должен проследовать от триггера в домене синхрочастоты — источника сигнала — к первому триггеру синхронизатора, не проходя через какую-либо комбинационную логику между этими двумя триггерами. В
схеме сихронизатора сигнал, пересекающий домены синхрочастоты, должен
пройти от триггера, источника этого сигнала в первом домене синхрочастоты,
до первого триггера в синхронизаторе, не взаимодействуя при этом с какойлибо комбинационной логикой. Это требование очень важно, потому что первый каскад синхронизатора чувствителен к сбоям, которые может производить
комбинаторная логика, например из-за гонки фронтов. Сбой, имеющий достаточную длительность (glitch) и происходящий в «правильное» время, может соответствовать требованиям по предустановке/удержанию для входного сигнала
для первого триггера в синхронизаторе, а это приведет к тому, что синхронизатор передаст ложный импульс как достоверные данные для всей остальной части логики в новом домене синхрочастоты. Синхронизированный сигнал будет
достоверным в новом домене синхрочастоты после задержки на два фронта
синхроимпульса. Задержка для сигнала, приходящего в новый домен синхрочастоты, по времени составит длительность от одного и до двух периодов синхрочастоты в новом домене. Эмпирическое правило таково: схема синхрониза-
32
тора создает два тактовых цикла задержки в новом домене синхрочастоты, и
проектировщик должен просто рассматривать это как дополнительную задержку в синхронизации сигналов, пересекающих домены синхрочастоты. Есть много проектов для синхронизаторов. Они относятся к одной из трех основных
групп:
1.
Работающие по уровню;
2.
Работающие по фронту;
3.
Работающие по приходящему импульсу.
Таблица 2 - Типы синхронизаторов
Лабораторная работа 7. Понятие о сбросе ИС
Сигнал «сброс» используется для того, чтобы привести аппаратуру в исходное состояние. И применяется данный сигнал как в одном отдельно взятом
схемном триггере, так и в более крупных блоках и узлах аппаратуры: в микросхемах, модулях и в устройствах в целом. Методика привязки асинхронного
сигнала сброса может быть распространена и на привязку любых других асинхронных сигналов.
Синхронный сброс — это сигнал, который переводит триггер в состояние
«сброс» только на активном фронте синхрочастоты. Сброс может быть добавлен к триггеру как часть комбинационной логики, генерирующей входные данные на входе D у триггера. В этом случае для того, чтобы моделировать сброс,
необходимо добавить условие if/else. И в секции if описать условие для сброса,
33
а в секции else — всю остальную комбинационную логику, необходимую для
работы триггера. Если этот стиль не соблюден строго, то могут возникнуть две
проблемы. Первая — в некоторых симуляторах, основанных на логических
уравнениях, логика, которую синтезирует симулятор, может при некоторых соотношениях сигналов на входе D заблокировать прохождение сигнала сброса к
входу триггера. Хотя данная проблема может возникать только при моделировании, но, тем не менее, лучше с ней не сталкиваться.
Рис. 7.1 - Счетчик с синхронным сбросом
Вторая проблема в том, что сигнал сброса добавляется к комбинационной
логике на входе D, и из-за увеличения этой логики увеличится и время прохождения данных через всю цепь.
Необходимо также отметить, что в некоторых библиотеках, которые поставляют изготовители микросхем, могут присутствовать компоненты с отдельно выполненным входом синхронного сброса. Если таковые компоненты
имеются, то использование их синхронных входов для сброса предпочтительнее, чем объединение сброса с комбинационной логикой на входах загрузки
данных.
Код программы счетчика с синхронным сбросом:
module ex2 (q, co, d, ld, rst_n, clk);
output [7:0] q;
output co;
input [7:0] d;
input ld, rst_n, clk;
reg [7:0] q;
34
reg co;
always @(posedge clk)
if (!rst_n)
{co,q} <= 9'b0; // sync reset
else if (ld)
{co,q} <= d; // sync load
else
{co,q} <= q + 1'b1; // sync increment
endmodule
Асинхронный сброс - наиболее широко применяемый способ для установки цифровых устройств в исходное состояние. Однако асинхронные сбросы
могут быть очень опасными. Самая большая проблема состоит в том, как подать на схему и как снять с нее асинхронный сигнал. Как правило, дополнительные входы асинхронного сброса и установки входят в состав триггеров.
Вход сброса обычно имеет активный низкий уровень.
Самое большое преимущество при использовании асинхронных сбросов
состоит в том, что пока библиотека примитивов, поставляемая разработчиками
микросхем или кремниевым ателье, имеет триггеры с асинхронными входами,
цепи данных будут отделены от цепей сброса. В проектах, которые выполняются на предельных частотах и имеют критические времена для прохождения
данных, нет возможности добавлять логику и, соответственно, дополнительные
задержки в тракте передачи данных из-за этой логики, чтобы обработать синхронные сбросы.
Конечно, этот аргумент не работает, если библиотека примитивов уже
имеет триггеры с синхронными входами сброса, и проектировщик может заставить компилятор использовать эти входы. Используя асинхронный сброс, проектировщик не добавит к тракту данных дополнительную логику, обрабатывающую сигнал сброса.
35
Рис. 7.2 - Счетчик с асинхронным сбросом
Другое преимущество асинхронных сбросов состоит в том, что схема
может выполнить сброс в исходное состояние даже без наличия сигнала синхрочастоты. Таким образом, при использовании стиля кодирования для асинхронных сбросов, описанных в этом разделе, синтезатор автоматически компилирует проект. Значит, нет вообще никакой необходимости добавлять дополнительные команды для синтеза, чтобы заставить программный инструмент синтезировать триггер с асинхронным входом сброса.
Пример кода программы асинхронного сброса:
module async_reset (q, d, clk, rst_n);
output q;
input d, clk, rst_n;
reg q; // Verilog-2001: permits comma-separation
always @ (posedge clk or negedge rst_n)
if (!rst_n)
q <= 1'b0;
else
q <= d;
endmodule
Недостатки асинхронных сбросов:
Существует много причин, почему асинхронные сбросы могут привести к
неправильному функционированию проекта. Для микросхем, имеющих цепи
36
JTAG, обычно делают отдельную цепь асинхронного сброса, которая связана с
внутренней логикой микросхемы. И во время граничного сканирования цепи
сброса отключаются от ядра микросхемы. Также необходимо учитывать, что
при использовании асинхронных сбросов статический временной анализ схемы
выполнить труднее. При выдаче сигнала сброса необходимо гарантировать, что
и для синхронных, и для асинхронных сбросов сигнал сброса будет активен,
как минимум, в пределах одного периода синхрочастоты.
Поскольку сигнал сброса должен быть подан из одной точки ко многим
триггерам, то он имеет большое разветвление (fanout), и под сигнал сброса
обычно задействуется одна из глобальных цепей внутри кристалла. Временной
анализ для такой цепи сброса должен быть выполнен после того, как произведено размещение проекта пользователя на кристалле. Это необходимо для того,
чтобы гарантировать, что все требования по синхронизации соответствуют заданным. И самая большая проблема с асинхронными сбросами состоит именно
в том, что они являются асинхронными, и во время активного состояния сигнала, и в момент снятия активного состояния сигнала сброса. Причем, если установка активного состояния сигнала не представляет трудностей, то момент снятия активного состояния сигнала сброса — это проблема для разработчика.
Предположим, что у нас в проекте есть импульсы синхрочастоты. Теперь
представим, что мы подаем сигнал сброса. Если асинхронный сброс выдан во
время фронта сигнала синхрочастоты или перед этим активным фронтом синхроимпульса триггера, но время перед фронтом синхрочастоты меньше, чем
время предустановки, то выход триггера мог войти в метастабильное состояние. Но уже при истечении времени, необходимого для перехода в состояние
сброса, триггер перейдет в это состояние. А вот при снятии сигнала сброса ситуация может быть совсем другая. При снятии сигнала сброса во время фронта
сигнала синхрочастоты или перед этим активным фронтом синхроимпульса
триггера, если время перед фронтом синхро частоты меньше, чем время предустановки, то выход триггера также может перейти в метастабильное состоя-
37
ние. И, таким образом, состояние схемы станет неопределенным. Еще одна
проблема асинхронного сброса состоит в том, что вход асинхронного сброса
может быть чувствителен к ложным сбросам, которые могут возникнуть из-за
шума или сбоев на плате, либо сбоев в системном сбросе. Хотя необходимо заметить, что подобная проблема существует и для синхронных сбросов в том
случае, если сбойные импульсы сброса происходят около фронта синхроимпульса: триггеры также могут перейти в метастабильное состояние.
Конечно, изготовители FPGA принимают все меры для того, чтобы триггеры микросхемы устойчиво переходили в состояние сброса. И все же многие
инженеры используют асинхронный сброс, не принимая ни каких мер для надежного срабатывания сброса, так как они думают, что никаких проблем в этом
месте нет. Они проверяют сброс в среде моделирования, где все работает прекрасно, но иногда в «железе» их проект не приходит в исходное состояние. При
этом они не рассматривают ситуацию, что сигнал сброса в реальной системе
мог заставить микросхему входить в метастабильное неизвестное состояние и,
таким образом, не производить правильный сброс. Необходимо более строго
связать установление и снятие сигнала сброса, чтобы препятствовать микросхеме входить в метастабильное неизвестное состояние. То же самое можно
сказать и о синхронном сбросе: он должен выдаваться и сниматься в соответствии с заданными временными характеристиками на предустановку и удержание
сигнала.
Время восстановления сигнала «сброс» - представляет собой время между
тем моментом времени, когда снимается сигнал сброса, и временем, когда появляется активный фронт сигнала синхрочастоты. Стандарт Verilog-2001 имеет
три встроенных команды, для моделирования и проверки времени восстановления и снятия сигнала: $recovery, $removal и $recrem (последняя команда — это
комбинация команд восстановления и удаления сигнала). Нарушение времени
восстановления сигнала сброса может вызвать проблемы целостности сигналов
или проблемы метастабильности данных, защелкнутых в регистрах. Неравно-
38
мерность прохождения сигнала «сброс» по кристаллу. Когда снятие сигнала
сброса является асинхронным по отношению к активному фронту синхроимпульса, то небольшие различия в задержках распространения, как самого сигнала сброса, так и сигнала синхрочастоты, могут заставить некоторые регистры
или триггеры выходить из состояния сброса раньше других.
Каждая микросхема, имеющая асинхронный сброс, должна включать в
себя схему синхронизатора сброса. В реально работающем устройстве невозможно получить правильно функционирующий сброс без специального узла —
синхронизатора сброса, даже если сигнал сброса работает при моделировании.
Лабораторная работа 8. Системное и аппаратное проектирование
СБИС
Современные СБИС, в частности системы на кристалле представляет собой способ интеграции, при котором различные устройства размещаются на
одном кристалле для формирования необходимого конечного продукта. Данный способ ведет к миниатюризации оборудования, но при этом площадь самого кристалла возрастает. СБИС объединяет в себе программные и аппаратные
средства, в том числе процессорные ядра, программируемую логику, память,
интерфейсы, встроенные средства тестирования, аналоговые компоненты.
Рис. 8.1 - Компоненты СБИС
39
Технология Cadence охватывает практически все уровни разработки
сложных систем – от системного уровня, свойственного разработчикам аппаратуры, до уровней логического, схемотехнического и топологического проектирования СБИС, их корпусирования, а также разработки печатных плат, на которых эти СБИС будут монтироваться.
Маршрут проектирования систем на кристалле:
1.
Системное проектирование – построение модели системы на вы-
соком уровне абстракций с использованием С/С++/SystemC, разбиение на программные и аппаратные модули, исследование параметров системы, получение
спецификаций на программные и аппаратные блоки.
2.
Аппаратное проектирование и верификация – разработка на ос-
нове спецификации поведенческих моделей отдельных блоков системы на языках Verilog/VHDL, сборка проекта, проверка программно-аппаратной реализации на соответствие спецификации.
3.
Физическое прототипирование – реализация проекта на базе биб-
лиотек производителя ИС, предварительное размещение, оценка потребляемой
мощности, планирование шин питания и иерархии клокового сигнала, качественная оценка возможных искажений сигнала.
4.
Проектирование и верификация топологии кристалла – разра-
ботка топологии заказных блоков, трассировка на уровне ячеек, проверка правил проектирования топологии, экстракция паразитных параметров.
40
Рис. 8.2 - Общий маршрут проектирования СБИС
Далее каждый этап будет рассмотрен более детально:
Системное проектирование.
На этапе спецификации системы на кристалле определяются еѐ функциональные параметры, характеристики, операционная среда, необходимые стандарты и протоколы. Далее следует построение модели системы с использованием программных средств Cadence SPW2000 и i-Architect. Модель строится в
специализированном BDE редакторе в виде иерархической блок-диаграммы на
основе встроенной библиотеки блоков SPW2000 и модулей Matlab, IP блоков,
включая прямую поддержку IP ядер Xilinx и блоков, описанных на языках
С/С++/SystemC. Библиотека SPW2000 насчитывает более 3500 модулей, включая коммуникационные системы: CDMA, GSM, GPRS, WLAN, Bluetooth, ADSL
и др.
После разработки системы в i-Architect создается проводится еѐ моделирование и анализ. Средства SPW2000 позволяют моделировать работу всей системы в целом и отдельных еѐ блоков. Моделирование может проводиться с реальными данными и сигналами. Например возможно промоделировать передачу изображения через цифровой канал связи. На этапе моделирования проводится анализ характеристик и производительности системы, проверка архитек-
41
туры, определяются способы разрешения конфликтов, производится оптимизация алгоритмов и протоколов. В случае необходимости производится перераспределение программных и аппаратных средств SoC, вносятся функциональные
изменения в отдельные блоки и проводится повторное моделирование.
По результатам циклов проектирования и моделирования создается детальное описание системной архитектуры, спецификации отдельных блоков и
их функциональное описание на языках C/C++/SystemC. Далее следует этап
программно-аппаратного проектирования, который может осуществляться независимыми группами разработчиков.
Связь SPW2000 с аппаратным уровнем проектирования осуществляется
средствами HDS2000. Система HDS2000 использует формат данных с фиксированной точкой, содержит интерфейс с аппаратными системами моделирования и позволяет осуществлять автоматическую генерацию Verilog/VHDL кодов
из структурного описания с использование библиотечных блоков. Кроме того,
HDS2000 содержит библиотеки стандартных и микроархитектурных блоков,
редактор автомата конечных состояний, универсальный логический анализатор
для калькулятора сигналов SPW.
Для успешной реализации проекта необходимо проводить его верификацию по мере продвижения от системного уровня к полной аппаратной реализации. Основная проблема подобной верификации состоит в том, что моделирование на более детальной уровне представления системы требует всѐ больших
временных затрат, что может привести к резкому увеличению сроков реализации проекта. В SPW любой из функциональных блоков системы может быть
замещен его реализацией на языке HDL. Архитектура моделирования SPW дает
возможность полносистемного моделирования на смешанных уровнях представления, позволяя оптимизировать рост временных затрат на верификацию
постоянно усложняющегося проекта. Преимущества использования данной
системы заключается в резко возрастающей вероятности успешной реализации
42
проекта с первого раза при сокращении числа циклов проектирования (с меньшим количеством итераций).
Аппаратное проектирование и верификация:
Под аппаратным проектированием понимается разработка проекта на поведенческом уровне с использованием языков Verilog/VHDL. При этом отладка
осуществляется встроенными средствами языка, а верификация сложных проектов выделяется в отдельный этап проектирования и осуществляется независимо путем прототипирования на FPGA, ASIC или специализированных аппаратных эмуляторах.
Платформа проектирования Incvisive (Cadence) представляет собой единую среду программно-аппаратного проектирования, отладки, верификации и
генерации тестов для цифро-аналоговых СБИС от системного уровня до уровня
регистровых передач.
Рис. 8.3 - Функциональная структура Incvisive
Единая архитектура моделирования Incvisive поддерживает Verilog,
VHDL, SystemC, SCV PSL/Sugar assertion. Кроме того, Incvisive представляет
всесторонние средства отладки, включающие поддержку на уровне транзакций
и унифицированную генерацию тестов. В случае необходимости, архитектура
Incvisive может расширяться другими элементами платформы, включая выборочное ускорение, аналоговое и смешанное моделирование с элементами RF,
средствами разработки и отладки алгоритмов, аппаратным ускорителем моделирования Palladium.
43
Использование архитектуры Incvisive позволяет в 100 раз увеличить производительность аппаратного проектирования по сравнению со стандартным
маршрутом разработки на уровне RTL, на 50% сократить цикл разработки тестов и на 25% сократить время отладки.
Лабораторная работа 9. Физическое прототипирование и верификация топологии СБИС
На этапе физического прототипирования осуществляется логический
синтез исходного описания проекта на языках Verilog/VHDL и создается его
виртуальный прототип, используемый для определения параметров топологической реализации кристалла.
Рис. 9.1 - Создание виртуального прототипа
Описание проекта на поведенческом уровне на языках Verilog/VHDL
обеспечивает независимость его реализации от технологии. Инструментом реализации проекта в базе библиотечных элементов производителя ИС служат
средства логического синтеза BuildGates от Cadence.
BuildGates позволяет осуществлять логический синтез с учетом физических и технологических особенностей проектируемого кристалла. Полученный
в результате синтеза список цепей может служить входной информацией для
трассировки топологии кристалла. При проектировании современных СБИС
44
всѐ большее значение приобретает этап физического прототипирования. Виртуальный прототип является представлением СБИС или отдельного его блока, которое доступно до финальной топологии и содержит достаточную физическую
информацию чтобы точно оценить основные параметры системы, такие как
временные характеристики, паразитные параметры, занимаемую площадь, потребляемую мощность и др. При этом виртуальный прототип должен быть достаточно точным, чтобы проектирование топологии на его основе обеспечивало
реализацию в соответствии с проектными требованиями.
Рис. 9.2 - Структурная схема оптимизации
В результате задача построения физического прототипа является комбинацией задач, решение которых необходимо для последующей передачи данных на физическую реализацию, где выполняются наиболее длительные по
времени процедуры разработки физической топологии и еѐ верификации.
Весь комплекс задач по физическому прототипированию происходит на
платформе Cadence First Encounter Ultra, которая позволяет осуществлять: размещение на кристалле, пробную трассировку, быстрый анализ с 2.5D экстракцией, анализ задержек и временной анализ, анализ качества сигналов, физический синтез до 2-х миллионов ячеек, средства физической оптимизации, автоматическое разбиение кристалла, присвоение пинов, анализ искажения сигналов средствами Celtic, иерархический синтез сигнала синхронизации с под-
45
держкой нескольких доменов клока, планирования питания с использованием
статического и динамического анализа, планирование сетки питания, интерфейсы с ведущими средствами разработки топологии.
Рис. 9.3 - Платформа
Таким образом средства Cadence First Encounter Ultra позволяет осуществлять быстрое, в течение одного дня, и эффективное прототипирование сложных систем, включающих до нескольких миллионов вентилей. Его использование позволяет существенно сократить цикл проектирования топологии СБИС и
уменьшить затраты.
Проектирование и верификация физической топологии.
Этап проектирования физической топологии ИС заключается в разработке топологии ИС и передаче еѐ на производство в формате GDSII.
Для автоматической трассировки цифровых блоков на технологиях до
0,18 мкм традиционно использовались средства Silicon Ensemble от Cadence.
Однако выход производства на субмикронные технологии обусловил необходимость перехода на соответствующие средства трассировки кристаллов. В
этой области Cadence предлагает высокоэффективные средства NanoRoute для
разработки топологии цифровых ИС на нанотехнологиях меньше 130 nm.
Трассировка заказных аналоговых блоков может осуществляться средствами топологического редактора Cadence Virtuoso-XL. Virtuoso имеет удобный
пользовательский интерфейс, поддерживает иерархический проекты и параметризацию ячеек, легко интегрируется с ведущими средствами проектирования
46
front-and и back-end, имеет встроенные языковые средства управления SKILL,
позволяющие настроить процесс проектирования топологии под требования заказчика.
По окончании разработки топологии ее необходимо проверить на соответствие правилам проектирования и произвести экстракцию паразитных параметров с учетом реального размещения элементов и проводников на кристалле.
Для решения всего комплекса задач верификации топологии ИС предназначены
пакеты Diva, Dracula, Assura. Они содержат средства проверки правил проектирования (DRC), позволяют сравнить разработанную топологию со списком
цепей или принципиальной схемой (LVS). С помощью средств верификации из
топологии можно экстрагировать паразитные параметры (RCX) и временные
задержки, а затем с их учетом промоделировать схему.
Проектирование СБИС с использованием современных технологий (0,13
мкм и менее) становится невозможным без детального анализа разработанной
топологии, учета влияния на временные характеристики кристалла наводок и
помех на проводниках и разброса напряжения питания на ячейках. Для решения комплекса этих задач могут быть использованы средства Cadence, ориентированные на нанотехнологии: Fire&Ice – 3D экстракция паразитных параметров
из топологии кристалла; Celtic – быстрая и эффективная система анализа перекрестных помех на проводниках и, как следствие, различных искажений сигналов; VoltageStorm – инструмент учета влияния разброса напряжения питания на
временные характеристики системы.
Современные технологии Cadence основаны на открытых базах Open
Access и легко конфигурируются в сквозной маршрут проектирования. Именно
поэтому программные средства Cadence широко используются ведущими компаниями в России и за рубежом.
47
Лабораторная работа 10. Работа с SimVsion и NCLaunch. Реализация
задержки сигнала
Цель: Изучить основные возможности SimVision и NCLaunch, научиться
компилировать, собирать проект, строить временные диаграммы проекта и показывать его схематичное отображение. Изучить написание кода схемы на языке Verilog и уметь его объяснить.
Рис. 10.1 - Интерфейс NCLaunch
NCLaunch – это графический интерфейс, который помогает управлять
проектами, написанными как на Verilog HDL, так и на VHDL, конфигурировать
их и запускать различные средства имитационного моделирования с ними.
Данная программа может быть на таких платформах, как Solaris 2.7, HPUX 11.0
и 11i, Linux Redhat 7, Windows NT 4.0 и 2000.
Области NCLaunch
1.
Строка меню
2.
Иконки тулбара
3.
Область дизайна проекта
48
4.
Файловый менеджер
5.
Окно консоли
Когда нажимается кнопка компиляции Verilog HDL, компилятор проверяет синтаксис и логику модулей, макромодулей и пр. на наличие в них ошибок.
Если ошибок нет, то компилятор выполняет обработку каждого модуля в промежуточный файл и по умолчанию помещает его в worklib.
После компиляции модель нужно собрать. Для этого нужно нажать на
кнопку Elaborate. После этого произойдет структурирование иерархии проекта,
конкретизация и конфигурирование объектов, определятся их связи и начальные значения. Собранный проект помещается в папку Snapshots.
После того, как проект скомпилирован и собран, можно запускать его
имитационное моделирование. Для этого используется SimVision.
Рис. 10.2 Интерфейс SimVision
SimVision – универсальная графическая среда отладки проекта и поиска
ошибок в нем. Включает в себя компоненты: окно свойств, файловый менеджер, окно построения графиков, построение проекта в виде схематичной диаграммы, калькулятор, окно измерений, анализатор работы памяти и др.
Запуск программ Cadence происходит через удаленное подключение на
сервере через программу VNC. Так как на сервере установлена Linux Redhat 7,
то для запуска NClaunch нужно открыть окно терминала (правой кнопкой мы-
49
ши на рабочем столе и выбрать Open Terminal), набрать команду NClaunch. Для
запуска SimVision соответственно команду SimVision. SimVision при работе с
проектом позволяет открывать много окон отладки проекта и при этом он запрограммирован таким образом, что изменение данных в одном окне в тот же
момент приводит к изменению этих данных во всех других окнах и перемоделированию.
Создайте на рабочем столе папку с уникальным именем. В папке создайте
файл example.v и поместите в него такой код:
// Stimulus for simple circuit
module stimcrct;
reg A, B, C;
wire x, y;
circuit_with_delay cwd (A, B, C, x, y);
initial
begin
$stop;
A=1'b0; B=1'b0; C=1'b0;
#100
A=1'b1; B=1'b1; C=1'b1;
#100
$stop;
end
endmodule
// Description of circuit with delay
module circuit_with_delay (A,B,C,x,y);
input A,B,C;
output x,y;
wire e;
50
and #(30) g1(e,A,B);
not #(10) g2(y,C);
or #(20) g3(x,e,y);
endmodule
Изучите код схемы. Запустите NCLaunch и скомпилируйте код (кнопка
VHDL), потом соберите проект (кнопка Elaborate). Выделите проект в папке
Snapshots и передайте его в SimVision (кнопка Run Simulator).
После запуска SimVision появится два окна: Console и Design Browser 1
В окне Design Browser нажмите на "+" для раскрытия списка stimcrct.
Затем нажмите на следующий "+". В окне отобразятся g1, g2, and g3.
Нажмите на cwd.
(A,B,C,e,x,y).
В окне Objects area отобразятся все сигналы
51
Построение временной диаграммы.
Нажмите на кнопку Waveform. Откроется
окно Waveform.
Нажмите на кнопку Run для генерации сигналов для нашего модуля.
Обратите внимание, что входящие сигналы x и y начинаются с красных
линий. Это объясняется задержкой, которая происходит при работе схемы и поэтому начальные значения сигнаy изначально не определены.
лов x и
52
Схематичное отображение проекта.
Еще одна полезная функция SimVision это возможность показать проект
в виде схемы. В окне Waveform 1 нажмите на кнопку Schematic Tracer:
Откроется окно Schematic Tracer, в котором будет представлены входные и выходные сигналы модуля cwd, а сам модуль в виде «черного ящика».
Для того, чтобы увидеть, что внутри модуля, нажмите на кнопку Fill
Modules. После этого вы увидите логическую диаграмму модуля (логические
примитивы и связи).
Рис. 10.1 - Логические примитивы внутри модуля
Для возврата в «черному ящику» нажмите кнопку Collapse Modules.
После выполнения данной работы объяснить преподавателю код программы, временную диаграмму и логическую диаграмму.
Для справки:
53
Скорость электрического сигнала в ИМС складывается из двух компонентов:
1.
Скорости переключения транзистора из одного состояния в другой.
2.
Скорости распространения сигнала между транзисторами.
Sсигн=2ρε(4L2/P2+L/T2)
Где ρ – проводимость металла, ε – диэлектрическая проницаемость, L –
длинна проводника, Р – ширина металла, Т – толщина металла.
Лабораторная работа 11. Реализация 8-ми разрядного накопительного сумматора
Цель: изучить построение временной диаграммы проекта, программировать тактируемый импульс, уметь объяснить схему проекта.
Создайте папку на рабочем столе с уникальным именем. В ней создайте
следующие файлы с таким же расширением:
accu.cmd
accu.v
accu_test.v
Содержимое файла accu.cmd
stepsize 100
vector acc acc[7] acc[6] acc[5] acc[4] acc[3] acc[2] acc[1] acc[0]
vector in in[7] in[6] in[5] in[4] in[3] in[2] in[1] in[0]
clock clk 1 0
ana clk reset in acc
set in 00000001
h reset
c
c
l reset
54
c
c
c
c
c
c
c
c
c
c
Содержимое файла accu_test.v
module stimulus;
reg clk, reset;
reg [7:0] in;
wire [7:0] out;
accu accu1(in, out, clk, reset);
initial
begin
clk = 1'b0;
forever begin #5 clk = ~clk;
$display("At
Time:
%d
Accumulator
put=%d",$time,out); end
end
initial
begin
$shm_open("shm.db",1); // Opens a waveform database
$shm_probe("AS"); // Saves all signals to database
#50 $finish;
#100 $shm_close(); // Closes the waveform database
Out-
55
end
// Stimulate the Input Signals
initial
begin
#0 reset<=1;
in<=1;
#5 reset<=0;
end
endmodule // stimulus
Внимательно изучите содержимое этих файлов. Определите для себя типы источников сигналов, которые в них входят.
Описание модуля accu.v, по которому вам, с объяснениями преподавателя, нужно воссоздать его код. Данный модуль получает по 8-ми битной шине
значение для суммирования (in). Имеет 8-ми битную выходную шину (acc).
Внутри себя имеет 8-ми битную память, в которую записывается вычисленный
результат (acc). Вычисления происходят по фронту входного сигнала тактового
генератора (clk). Также имеет вход reset, который при появлении 1 обнуляет накопленное значение счетчика в памяти. Работу данного модуля смоделировать
в SimVision, результаты объяснить преподавателю.
После прописывания и сохранения кода в последнем файле accu.v, производим компиляцию файлов сначала accu.v, а потом accu_test.v строго в таком
порядке. Это важно, потому как файлы взаимосвязанные, и файл верхнего
уровня компилируется последним. Потом производим сборку проекта и переходим в окно SimVision.
Код accu.v (студентам не печатается, а разбирается студентами с преподавателем)
module accu(in, acc, clk, reset);
input [7:0] in;
input clk, reset;
56
output [7:0] acc;
reg [7:0] acc;
always @(posedge clk)
begin
if (reset) acc<=0;
else acc<=acc+in;
end
endmodule
Результат моделирования проекта (студенты должны уметь читать временную диаграмму) :
Рис. 11.1 Окно временной диаграммы.
57
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Основная литература
1. Основы автоматизированного проектирования: [Электронный
ресурс]:Учебник / Под ред. А.П.Карпенко - М.: НИЦ ИНФРА-М, 2015. - 329 с.–
ЭБС "Знаниум".
2. Левицкий, А. А. Проектирование микросистем. Программные
средства обеспечения САПР [Электронный ресурс] : Учеб. пособие / А. А.
Левицкий, П. С. Маринушкин. - Красноярск : Сиб. федер. ун-т, 2010. – 156 с. –
ЭБС "Знаниум".
Дополнительная литература
3. Зольников, В. К. Автоматизация проектирования электронной
компонентной базы [Электронный ресурс] : электронный учебник / В. К.
Зольников, В. В. Лавлинский, В. А. Смерек ; В. К. Зольников, В. В. Лавлинский,
В. А. Смерек; ВГЛТА. - Воронеж, 2012.
4. Зольников, В. К. Программирование на языке VHDL [Электронный
ресурс] : учебное пособие для направления 230200.62 Информационные
системы и 230.400.62 Информационные системы и технологии / В. К.
Зольников, В. В. Лавлинский, В. А. Смерек ; В. К. Зольников, В. В. Лавлинский,
В. А. Смерек; ВГЛТА. - Воронеж, 2013.
5. Руководство по САПР. Cadence.
6. Проектирование средств на кристалле средствами Cadence. А. А. Иванов, П. П. Рыжов. 14 стр., 2012 г.
7. http://www.ee.virginia.edu/~mrs8n/soc/sim_tutorial.html
8. Руководство пользователя Cadence NCLaunch.
9. Руководство пользователя Cadence SimVision
10. Электроника: Наука, Технология, Бизнес. 5/2003, ―Средства проектирования компании Cadence‖, 28-30 стр.
58
Лавлинский Валерий Викторович
Буров Роман Борисович
Скворцова Татьяна Владимировна
Евдокимова Светлана Анатольевна
ИНФОРМАЦИОННЫЕ МОДЕЛИ СПЕЦИАЛЬНЫХ САПР
МИКРОЭЛЕКТРОННЫХ УСТРОЙСТВ
Методические указания для лабораторных работ
по направлению подготовки
09.04.02 – Информационные системы и технологии
(уровень магистратуры)
Редактор
Подписано в печать
. Формат 60×90 /16. Объем
п. л.
Усл. печ. л. . Уч.-изд. л.
. Тираж экз. Заказ
ФГБОУ ВО «Воронежский государственный лесотехнический
университет имени Г.Ф. Морозова»
РИО ФГБОУ ВО «ВГЛТУ». 394087, г. Воронеж, ул. Тимирязева, 8
Отпечатано в УОП ФГБОУ ВО «ВГЛТУ»
394087, г. Воронеж, ул. Докучаева, 10
Документ
Категория
Без категории
Просмотров
11
Размер файла
1 233 Кб
Теги
информационные, специальный, модель, сапр
1/--страниц
Пожаловаться на содержимое документа