Изучить методы и компьютерные средства
Язык VHDL является международным стандартом в области автоматизации проектирования цифровых систем, это входной язык многих современных систем автоматизированного проектирования (САПР) как заказных, так и программируемых логических интегральных схем (ПЛИС) – Programmable Logic Devices (PLD) – и программируемых пользователями вентильных матриц – Field-Programmable Gate Arrays (FPGA). VHDL предназначен, в первую очередь, для спецификации – точного описания проектируемых систем и их моделирования на начальных этапах проектирования – алгоритмическом и логическом.
Для оценки сложности интегральных схем используется единица эквивалентного вентиля (например 2-входовый И-НЕ),
который соответствует 4-м эквивалентным транзисторам. Уровни интеграции цифровых интегральных схем принято делить на следующие группы:
Наибольшее распространение на данный момент имеют СБИС, поэтому далее мы будем пользоваться этим термином для обозначения всех интегральных схем высокой степени интеграции.
Кроме того интегральные схемы условно делятся на группы специализированных применений (ASIC - Application Specific Integrated Circuit) и коммерческие интегральные микросхемы общего применения, как массовые микропроцессоры и серийные наборы микросхем. С развитием технологий производства и повышением степени интеграции появилось такое понятие как системы на кристалле (СнК) или Systems-on-Chip (SoC), которые представляют собой комбинацию специализированных и универсальных процессорных ядер и блоков, выполненных на единой кремниевой подложке.
СБИС также различаются по полупроводниковой технологии исполнения:
Каждый тип СБИС имеет свою нишу на рынке, которая определяется массовостью применения приборов
и изделий, а также степенью универсальности характеристик СБИС.
Все эти типы СБИС различаются стоимостью проектирования и изготовления, в случае ПЛИС разработчик использует готовые СБИС, программируя их
для своих приложений, что дает минимальную цену подготовки производства, которую называют
NRE – non-recurring engineering cost.
На рисунке ниже приведены наборы масок (называемых также фотошаблонами) для полнозаказных и полузаказных СБИС,
по их требуемому числу можно легко определить трудоемкость разработки каждого типа СБИС.
Самые нижние маски определяют
формирование базовых транзисторов на кремниевой подложке, следующие уровни определяют их топологические соединения металлическими проводниками для формирования базовых логических элементов и макро-блоков. Верхние уровни масок определяют межсоединения между крупными макроблоками и конфигурацию ввода-вывода. В современных технологических процессах производства полупроводников использутся свыше сорока масок, определяющих транзисторы, слои металлизации и изоляции. Стоимость комплекта масок достигает миллиона долларов и выше для процессов 45нм, а для 10нм достигает десятков миллионов долларов.
Обычно микропроцессоры раньше выполнялись в виде полностью заказных СБИС, но сейчас проявляется массовая тенденция использования технологий проектирования полузаказных СБИС, особенно в системах на кристалле. Другими примерами полнозаказных микросхем являются специализированные схемы для высоковольтной логики (автомобили), аналого-цифровые схемы (коммуникации), датчики и микромеханизмы, также как динамическая память DRAM.
Этот тип полузаказных СБИС является базовой кремниевой платформой для современных систем на кристалле (СнК или SoC).
Так как с точки зрения свободы размещения блоков и макроблоков этот тип СБИС близок к полнозаказной и отличается только использованием заранее спроектированных библиотечных элементов и макроблоков, то размещение базовых транзисторов может быть совершенно произвольным и определяется макрокомпоновкой топологии полузаказной СБИС. Библиотечные элементы-ячейки в такой СБИС могут располагаться в виде матрицы, имеющей определенное число строк и столбцов, пресечениями которых являются логические элемент-ячейки. Между строками и столбцами могут оставляться пространства (каналы) для разводки межсоединений. И полузаказная структура СБИС строится путем соединения этих ячеек-элементов в логические схемы в соответствии с принципиальной схемой логического устройства, оформленной в виде списка логических сетей в формате EDIF или структурного кода VHDL/Verilog.
В матрице вентилей позиции всех транзисторов на пластине предопределены нижними слоями топологических масок, которые являются общими для всех вариантов СБИС. Эта предопределенная топология размещения транзисторов называется базовой матрицей, поэтому такие СБИС часто называют базовыми матричными кристаллами (БМК).
После предварительной проверки реализуемости СБИС на уровне библиотечных элементов и макроблоков используется, как правило, автоматическое размещение и трассировка для преобразования в топологию СБИС с использованием ячеек-примитивов базовой матрицы.
Существуют три типа базовых матричных СБИС:
Рассмотрим упрощенный маршрут проектирования СБИС, который включает ряд этапов, взаимосвязь которых отображена на рисунке ниже. В реальности маршрут проектирования выглядит сложнее, но в любом случае он содержит верификацию, логическое проектирование СБИС (front-end design) и физическое проектирования СБИС (back-end design).
Этап описания логических схем (не учитывается технология, физические,электрические и другие характеристики). Описывается комбинационная логика, триггеры и связи между элементами схемы. Для описания используются такие языки, как VHDL, Verilog, SystemC. Результатом является логическая схема на уровне регистровых передач (RTL).
В данном этапе можно выделить нексолько дополнительных шагов:
Цифровая система может быть описана на уровне поведения посредством описания функций, реализуемых системой, и на структурном уровне.
Структурное описание – это описание системы в виде совокупности компонент (подсхем, элементов) и связей между компонентами.
Поведенческое описание – это описание системы при помощи некоторых процедур на уровне зависимостей выходов от входов. Иначе говоря, поведенческое описание задает алгоритм, реализуемый системой.
Цифровая система может быть сложной, как, например, микропроцессор или весьма простой, как логическая схема, состоящая из нескольких логических элементов (вентилей). Некоторые компоненты системы в структурном описании
могут состоять из нескольких частей – компонент более низкого уровня иерархии описания. Представляя отношение вхождения подсхем в схемы в виде графа, можно получить дерево (граф) иерархии описания всей системы.
Пусть цифровая система S реализует следующий алгоритм. На входные полюсы системы S подаются два двухразрядных числа a=(a2,a1), b=(b2,b1),
где a2, b2 – старшие разряды чисел a, b соответственно и x – управляющий сигнал.
Если x=1, система S должна перемножить числа a, b и выдать четырехразрядное число d=(d4,d3,d2,d1), где d= a×b.
Если x=0, то числа a, b должны быть сложены, при этом в разряде d4 всегда должен быть нуль, в разряде d3 – перенос c2, в разряде d2 – старший разряд суммы s2, в разряде d1 – младший разряд суммы s1. Предполагается, что
(a2,a1) + (b2,b1)= (с2,s2,s1).
Мы описали алгоритм, который должна реализовать система S, на русском языке. Однако для автоматизированного (компьютерного) проектирования требуется формальная спецификация.
Формальные спецификации должны быть записаны на соответствующем формальном языке. Позже будет показано, что алгоритм, реализуемый системой S, может быть очень коротко описан на языке VHDL.
Если же рассматривать структурный уровень описания системы S, то можно легко увидеть, что в систему S входит двухразрядный сумматор и двухразрядный умножитель.
Двухразрядный сумматор – это устройство для сложения двухразрядных чисел, двухразрядный умножитель – устройство для перемножения двух чисел, каждое из которых имеет только два разряда. В систему S должно входить также простейшее устройство управления и схема дизъюнктивного объединения выходных сигналов. Структура системы S изображена ниже.
Рассмотрим двухразрядный умножитель mult_2. На вход данной схемы поступают сигналы r1, r0, s1, s0.
В схему входят элементы двух типов – add1 и and2. Элемент and2 представляет собой логический элемент И – двухвходовый конъюнктор. Заметим, что на языке VHDL знак & употребляется не для обозначения логической операции "И" (конъюнкции), а для операции конкатенации векторов. Оператором логической конъюнкции служит оператор and, поэтому описание функции элемента and2 на языке VHDL выглядит следующим образом:
y <= x1 and x2;
где x1, x2 – имена входных сигналов, у – имя выходного сигнала, <= – оператор назначения сигнала (будет рассмотрен позже).
Элемент add1 представляет собой одноразрядный полусумматор.
entity mult_2 is port (s1,s0,r1,r0 : in BIT; t3,t2,t1,t0 : out BIT); end mult_2; architecture structure of mult_2 is component add1 port (b1,b2: in BIT; c1,s1: out BIT); end component; signal p1,p2,p3,p4 : BIT; begin t0 <= r0 and s0; p2 <= r0 and s1; p1 <= r1 and s0; p4 <= r1 and s1; circ1: add1 port map (p1, p2, p3,t1); circ2: add1 port map (p3,p4,t3,t2); end structure;
entity vlsi_1 is port (a2, a1, b2,b1,x:in BIT; d4,d3,d2,d1: out BIT); end vlsi_1; architecture structure of vlsi_1 is component adder_2 -- декларация компонента port (a1,b1,a2,b2: in BIT; c2,s2,s1: out BIT); end component; component mult_2 -- декларация компонента port(s1,s0, r1,r0: in BIT; t3,t2,t1,t0: out BIT); end component; component dd -- декларация компонента port (x1,x2,x3,x4,x5,x6 : in BIT; y1,y2,y3 : out BIT); end component; component yy -- декларация компонента port( a2,a1,b2,b1,x : in BIT; f6,f5,f4,f3,f2,f1 : out bit); end component; signal f1,f2,f3,f4,f5,f6,t4,t3,t2,t1,c2,s2,s1: BIT; -- декларация внутренних сигналов begin circ1: yy port map ( a2,a1, b2,b1, x, f6,f5,f4,f3,f2,f1); circ2: mult_2 port map ( f2,f1, b2,b1, d4,t3,t2,t1); circ3: adder_2 port map ( f4,f3, f6,f5,c2,s2,s1); circ4: dd port map ( s1,t1,s2,t2,c2,t3, d1,d2,d3); end structure;
entity vlsi_1 is port (a,b : in integer range 0 to 3; x : in BIT; D : out integer range 0 to 15); end vlsi_1; architecture functional of vlsi_1 is signal e: integer range 0 to 15; begin p0: process(a, b, x) begin if (x='0') then e <= a + b; elsif ( x = '1') then e <= a * b ; end if; end process; D <= e; end functional;
entity Test_add1 is end Test_add1; architecture Behavior of test_add1 is component add1 port (b1,b2 : in BIT; -- в VHDL не различаются строчные c1,s1 : out BIT); -- и прописные буквы end component; signal b1, b2 : BIT; signal c1, s1 : BIT; begin p1 : add1 port map (b1 => b1, b2 => b2, c1 => c1, s1 => s1); b1 <= '1', -- входные воздействия '0' after 50 ns, '1' after 100 ns, '0' after 150 ns, '1' after 200 ns; b2 <= '1', -- входные воздействия '1' after 50 ns, '1' after 100 ns, '0' after 150 ns, '0' after 200 ns, '1' after 250 ns; end behavior; --------------------------------------------------
Тестирующая программа для проверки правильности VHDL-модели полусумматора представляет собой текстовый файл test_add1.vhd. Файл test_add1.vhd находится в директории D:/Petrov, который называется рабочим директорием (директорием проекта)
В главном меню выбираем File → New → Project. Появится окно Create Project Указание имени проекта, места расположения проекта, имени рабочей библиотеки.
По очереди (с помощью Browser) находим в директории d:/petrov файл add1.vhd (VHDL-модель) и файл test_add1.vhd (VHDL-тест)
и добавляем их в проект (можно отметить несколько файлов и одновременно добавить их в проект). В окне Workspace поочередно,
в порядке их добавления, появляются имена добавляемых файлов, составляющих проект.
В главном меню выбратьм Compile → Compile Order , появится окно Compile Order.
Рекомендуется выбрать Auto Generate и нажать OK. Если программы не содержат ошибок,
то в окне Workspace напротив имен файлов знак вопроса после компиляции заменяется “птичкой”.
В этом окне можно вручную установить порядок компиляции файлов:
компиляция осуществляется согласно иерархии описания проекта – сначала на компиляцию должны поступать
Если программа содержит ошибку, то в нижнем окне Transcript выдается сообщение. Двойной щелчок на сообщении об ошибке выдает строку VHDL-текста, в которой может быть ошибка (однако на самом деле ошибка может быть совершенно в другой строке – синтаксис VHDL сложный!!!). Выдача текста VHDL-программы для редактирования осуществляется двойным щелчком по имени соответствующего VHDL-файла.
# vcom_capture -work work -2002 -explicit D:/petrov/add1.vhd # Compile of add1.vhd was successful. # vcom_capture -work work -2002 -explicit D:/petrov/test_add1.vhd # Compile of test_add1.vhd was successful.
Выбрать в главном меню Simulate → Runtime Options, появится окно Runtime Options. Задать:
Остальное – по умолчанию, нажать OK
Выполнить команду (Run All) в окне Wave, получить возможно визуально “сжатую” временную диаграмму, которую сложно воспринимать.
Остановить бесконечное (зациклившиеся) моделирование можно командой break в консольной области (окно Transcript), либо командой главного меню Simulate → Break, либо нажатием кнопки (Break) в окне Wave.
В нормальном случае текущее время моделирования непрерывно увеличивается. Текущее время выводится внизу окна Wave.
! Опасность бесконечного цикла состоит в том, что результат моделирования (файл временной диаграммы) “забьет” все свободное место на жестком диске. Удалить такой файл бывает трудно.
Временную диаграмму можно сохранить и распечатать по команде Print. При выходе из системы моделирования в рабочем директории появятся:
При завершении работы в системе ModelSim директорий проекта запоминается и в следующем сеансе можно начать работу с проектом, выполнив команду File → Recent Directories и выбрав соответствующий рабочий директорий, либо выполнив команду File → Recent Project, выбрав ранее сохраненный проект
Этап проверки соответствия описания логических схем спецификации.
Объект верификации (ОВ) часто называют DUT (Design Under Test).
Актуальные проблемы верификации:
Верификацию можно разделить на следующие шаги:
Функциональная верификация в объеме всех работ наиболее значительна и требует непосредственного участия человека. Статический анализ кода требуют только первоначальной настройки инструментов, которая соответствует внутренним правилам проектирования, принятым в компании, дальше данный инструмент можно использовать без дополнительных трудозатрат. Инструменты формальной верификации часто тоже весьма самостоятельны, требует только внимательного анализа отчетов, которые они генерируют.
Функциональная верификация — представляет собой набор тестов, которые условно можно разбить на три группы:
Первые две стадии поддаются автоматизации с помощью UVC/VIP(Universal Verification Component/Verification IP) и достаточно быстро там можно нарастить объем различных тестов, в том числе — генерируемых автоматически. Третья стадия требует неординарного подхода и опыта, очень сложно автоматизируется, т.к. большинство ситуаций — это отдельный алгоритм, возможно скрипт для САПР или инструкции для «ручных» проверок.
Для целей верификации часто используются такие языки как SystemVerilog, SystemC, VHDL, specman E. Для каждого из перечисленных языков существуют стандартные фреймворки (библиотеки).
Метрики — это показатели охвата проекта тестами. Они нужны для того, чтобы понять какие еще тесты необходимо разработать для проверки возможных ситуаций и сколько предположительно времени может занять верификация. К сожалению, только один тип метрик оценивается на основании исходного кода проекта, определение критериев для остальных типов — это результат интеллектуального труда. К тому же, необходимо помнить, что достижение желаемых показателей одним типом метрик никак не говорит о работоспособности в целом, всегда необходимо оценивать комплекс.
Типы метрик:
Directed Tests Method (DTM)
Прямые, осмысленные тесты. Если принимается этот метод в проекте, то план верификации составляется из тестов направленных на проверку поведения устройства в конкретных интересующих точках (состояниях). Проверить все возможные ситуации, особенно в сложных проектах, почти не возможно.
При этом проблемы, которые могут возникнуть в ситуациях не покрытых тестами не обнаруживаются до того, как устройство начинают использовать в реальных условиях. Обычно в этих тестах используются метрики функционального покрытия.
Coverage-Driven Verification, Metric-Driven Verification (CDV, MDV)
Концепция создания тестов, направленная на достижение определенного «тестового покрытия» DUT. Опираются на метрики, чтобы понять какие тесты необходимо добавить в план верификации, чтобы достигнуть целевых показателей готовности проекта.
Необходимо использовать инструменты анализа покрытия, чтобы посмотреть, что еще добавить в план верификации. По-сути, если начать корректировать план верификации в DTM, опираясь хотя бы на “покрытие кода”, то уже можно считать, что от DTM плавно перешли к CDV.
Constrained Random Verification (CRV)
Верификация подачей случайных воздействий. Это действительно автоматические тесты с генерацией случайных воздействий на DUT.
Метод очень затратный вначале, т.к. требуется длительное время на подготовку инструментов. После того как начальный этап подготовки пройден, то тестирование может запускаться автоматически, многократно с разными исходными данными. При выявлении несоответствия проверок или утверждений (checkers or assertions), команда разработчиков и верификаторов приступает к анализу выявленной ошибки.
В реальном проекте нельзя ограничится только этим методом, т.к. этим методом можно собрать покрытие кода и покрытие утверждений, а они могут ничего не говорить о правильности работы DUT, т.е. соответствии спецификации. Его необходимо дополнять функциональными тестами.
Для реализации данной методологии требуется:
Assertion Based Verification (ABV)
Верификация с помощью утверждений. Наверное, это даже не самостоятельный метод, а некоторый компонент или базовая составляющая вышеупомянутых.
Важным вопросом при ABV является как распределить assertions, какие из них лучше поместить в исходные код DUT, какие нужно иметь в тестовом окружении.
Сразу стоит отметить, что язык Verilog не имеет assertions в своем стандарте (их можно создать с использованием основных конструкций языка, но необходимы директивы для синтезатора, чтобы он не занимался их преобразованием). Аssertions появляются только в стандарте SystemVerilog, а так же они изначально были в стандарте языка VHDL и e.
Этап построения топологии цифровой схемы (размещение логических элементов и проводников на поверхности кристалла) для конкретного технологического процесса с учётом всех производственных норм и характеристик.
Результатом является файл топологии интегральной схемы GDS II, который отправляется на фабрику.
Физическое проектирование можно разбить на следующие шаги:
В рамках этапов физического моделирования производится также проверка соблюдения правил дизайна для технологии, по которой будет производиться СБИС (design rule check – DRC), также производится процесс обратной экстракции принципиальной схемы из физического топологии и используемых библиотек и производится сверка с исходной принципиальной схемой (netlist). Такая проверка называется сверкой топологии с принципиальной схемой (layout versus schematic check- LVS).