VHDL против MATLAB

Анатолий Сергиенко

Широкому распространению персональных ЭВМ два десятилетия назад способствовал язык БЕЙСИК. Начинающий пользователь мог быстро освоить язык и начать решать свои несложные задачи в интерактивном режиме. Пользователям — математикам этого оказалось мало — и для них была разработана программа и язык MATLAB.
MATLAB — это БЕЙСИК, оперирующий с векторами и матрицами, поддержаный большой математической библиотекой.

Сейчас MATLAB широко используется для экспериментального численного решения многих математических задач. В большинстве случаев с его помощью выполняется исследовательское численное моделирование явлений различной природы, как, например, процессы в электрических сетях, задачи акустики, прочности, гидродинамики.

С точки зрения области приложений MATLAB — «всеядная» система. Для решения задач цифровой обработки сигналов к MATLABу был добавлен пакет SIGNAL, а затем, для моделирования систем авторегулирования, — пакет SIMULINK. При этом MATLAB не только красиво вырисовывает графики результирующих сигналов, но, например, рассчитывает коэффициенты фильтров, предлагает типичные решения.
Иногда MATLAB-программа используется в реальном масштабе времени в индустриальных приложениях.

В области цифровой обработки сигналов MATLAB получил такое широкое распространение, что сейчас он становится стандартом для задания алгоритма работы устройства на системном уровне.
Дошло до того, что MATLAB-программа цифровой обработки сигналов воспринимается как входные данные системой синтеза логических схем для ПЛИС. Т.е. в этом случае MATLAB конкурирует с VHDL и Verilog, как язык для описания устройства на системном уровне.

Таким образом, современный разработчик аппаратных систем обработки сигналов наравне с языком VHDL должен пользоваться MATLABом. Но обязан ли? И может ли он обойтись одним VHDL?

Чтобы ответить на эти вопросы проведем сравнительный анализ MATLABа и VHDL. Критерием сравнения будет пригодность и эффективность языка для моделирования задач цифровой обработки сигналов, описанных на верхнем ( системном ) уровне.

Принцип моделирования.

Основные операции в MATLABe — это операции над векторами и матрицами. Например, фильтрация — это умножение вектора отсчетов сигнала на теплицеву матрицу импульсной реакции, выполняемое по встроенной подпрограмме свертки.

Поэтому моделирование в MATLABe — синхронное и прерывистое.
Синхронное, т.к. предполагается, что данные поступают в равноотстоящих тактах, а прерывистое, т.к. порции моделируемых данных и результатов ограничены заранее заданными размерами массивов.
Моделирование выполняется поэтапно — прежде чем начать выполнение следующего этапа обработки, необходимо завершить предыдущий этап и сохранить его результаты в промежуточном массиве.
При этом редко, когда размер массива превосходит миллион. Это означает, что без дополнительных усилий по «сращиванию» соседних «порций моделирования» можно моделировать процессы, длящиеся не более 1 млн. тактов. И эта величина сокращается пропорционально сложности алгоритма, т.к. для хранения промежуточных массивов может не хватить памяти компьютера.
Если требуется моделирование системы с различными частотами дискретизации (multirate system), то приходится приводить частоты дискретизации к одному знаменателю. Например, если 2 смежных блока работают с частотами дискретизации 8 и 11 кГц, то для получения 100 отсчетов результата необходимо промоделировать 8800 тактов.

Проблема больших массивов решена в пакете SIMULINK, который используется для моделирования систем с обратными связями. При этом алгоритм представляется графом синхронных потоков данных, отображаемым на экране в виде граф-схемы. Этот граф исполняется программно, так что за один моделируемый такт обрабатывающие блоки — вершины графа — исполняют свои функции и обмениваются порциями данных, относящимися к этому такту. Однако здесь теряется быстродействие скоростной обработки векторов и матриц, присущее MATLABу.

 VHDL — моделирование — событийное. Данные обрабатываются в процессах, которые запускаются, как только приходят входные данные. Все временные соотношения можно отслеживать очень точно — с точностью до фемтасекунды.
Моделирование — непрерывное с любыми частотами дискретизации данных. Под промежуточные переменные и сигналы отводится небольшой объем памяти, который необходим для хранения соответстствующих данных только в течение одного такта. Только под сигналы, которые выводятся в виде графиков, симулятором заводятся динамические массивы, максимальный размер которых определяется объемом виртуальной памяти компьютера. Поэтому VHDL — модель можно моделировать очень долго — многие миллионы, а иногда и миллиарды тактов.

Скорость моделирования.

Синхронное моделирование — самое быстрое временное моделирование. В MATLABе такие процедуры, как свертка, БПФ, перемножение и обращение матриц, выполняются по быстродействующим встроенным процедурам, что еще более ускоряет моделирование. Но есть причины, сдерживающие рост скорости моделирования.

MATLAB — универсальная система и она не была адаптирована под задачи обработки сигналов, как, например, аналогичная система ELANIX System View. Система MATLAB не испытывала особенной конкуренции со стороны других аналогичных систем, как например, MATHCAD, MAPLE, так как у всех таких систем различные языки программирования и они заняли отдельные потребительские ниши. Поэтому не было особенной необходимости оптимизировать быстродействие системы при моделировании обработки сигналов.
Событийное моделирование на 1-2 порядка медленнее синхронного моделирования. Но фирмы-поставщики VHDL-симуляторов, благодаря конкурентной борьбе между собой, вынуждены постоянно повышать скорость своих симуляторов. С другой стороны, индустрия СБИС остро нуждается в повышении быстродействия симуляторов.
Например, современный симулятор распознает, что данный модуль может быть промоделирован синхронно и переводит его в режим синхронного моделирования. В этом режиме моделирование ускоряется на 2 порядка. Современные VHDL-симуляторы также обеспечивают моделирование одного проекта на параллельной системе из нескольких компьютеров, соединенных в локальную сеть, что также ускоряет этот процесс.

Если VHDL-модель описана синтезируемым стилем, то ее можно моделировать с помощью аппаратного ускорителя, основанного на конфигурировании ПЛИС. Такое моделирование дает ускорение от десятков до десятков тысяч раз.

Представление данных.

В подавляющем большинстве случаев в MATLABe используются данные с плавающей запятой с двойной точностью. Только некоторые модули пакета SIMULINK работают с фиксированной запятой с разрядностью 8,16 или 32 бита, чтобы приблизить моделирование алгоритмов обработки сигналов к их исполнению в сигнальных микропроцессорах.
Моделирование с плавающей запятой избавляет разработчика от проблем масштабирования, переполнения и потери точности при вычислениях. Но постоянное использование плавающей запятой развращает разработчика, который уже не стремится подобрать оптимальный по точности и аппаратуроемкости алгоритм. И тогда необходимо прикладывать серьезные усилия для замены плавающей запятой в алгоритме на фиксированную. Нередко в результате этого приходится выбирать дорогостоящий сигнальный микропроцессор с плавающей запятой.

VHDL обеспечивает моделирование с данными, имеющими любое представление, в том числе с плавающей и фиксированной точкой. Правда, точность плавающей запятой стандарт VHDL не регламентирует. Но в большинстве случаев, если в современном симуляторе промоделировать оператор

constant maxreal: real:=real'high;

то в результате получится максимальное число с плавающей запятой с двойной точностью: maxreal = 1.0000E+308. Правда, число отображаемых разрядов ограничено 5 или 7.

Числа с фиксированной точкой представляются как целые со знаком или как векторы битов. В последнем случае возможно моделирование обработки данных произвольной разрядности.

Обработка целых чисел в VHDL имеет следующие полезные особенности:

  • можно любую переменную или сигнал задать с диапазоном, тогда выход переменной за границы диапазона, например, при переполнении, вызовет остановку симулятора. Это соответствует заданию разрядности операндов с точностью до бита. Это также удобно при отладке алгоритма и коррекции масштабных коэффициентов. Причем соответствие диапазонов данных и результатов операций, как в случае векторов битов, необязательно, поэтому
  • программирование с целыми числами проще, чем с векторами битов, что подтверждается также тем, что не нужно использовать функции преобразования типов и/или типы signed, unsigned;
  • моделирование с целыми числами происходит заметно быстрее, чем с векторами битов или с числами с плавающей запятой;
  • целые числа занимают в памяти существенно меньше места, чем векторы битов или числа с плавающей запятой;
  • проекты с переменными и сигналами целого типа, особенно с диапазонами, могут быть без всяких изменений странслированы в логическую схему и далее — в ПЛИС, и их моделирование может быть существенно ускорено аппаратными ускорителями;
  • целые числа более близки к архитектуре большинства сигнальных процессоров, чем числа с плавающей запятой, поэтому модель с целыми переменными легче переделать в программу для такого процессора.

К сожалению, не всегда достаточно разрядности 32-разрядных целых чисел, применяемых в большинстве симуляторов. Только некоторые из симуляторов используют 64-разрядные целые числа.
Как в MATLABe, так и в VHDL применяются одномерные и многомерные массивы. Существенным отличием есть то, что в MATLABe разреженные матрицы можно представлять в компактном виде. Но это удобно для решения уравнений в частных производных, а не большинства задач цифровой обработки сигналов.
Зато в VHDL можно вводить типы пользователя. Так, в пакете IEEE_Math_Complex вводится комплексный тип.

Библиотеки функций и процедур.

Похоже, нет такой математической функции, которой бы не было в библиотеке MATLABa. Многие процедуры и функции выполнены в странслированном с языка Си виде для своего бысторого исполнения.
Для математических расчетов, необходимых в моделировании обработки сигналов, VHDL имеет библиотеки IEEE_Math_Real и IEEE_Math_Complex. Однако в них нет таких процедур, как решение систем уравнений, нахождение корней полиномов, расчета коэффициентов фильтров, БПФ, которые часто необходимы при разработке систем цифровой обработки сигналов и которые есть в MATLABe.

Графическое представление данных.

В MATLABe сделано всё, чтобы можно было представить любые данные удобными для восприятия глазом. Особенно это касается представления многомерных массивов.
К сожалению, VHDL-симуляторы предоставляют более чем скромные средства представления данных. Только сравнительно недавно стало возможным представлять численные сигналы в виде графиков с осью аргументов как осью времени, а двумерные массивы — в виде матриц, да и то — как дамп памяти.
Зато такие графики могут содержать до миллионов точек и их масштабирование и просмотр незатруднительны. Причем, эти точки могут быть не равноотстоящими, т.е. график сохраняется в РС в «упакованном» виде. И еще немаловажно, что быстродействие вывода графиков заметно выше, чем у MATLABa.

Как резюме.

В VHDL-симуляторе плохие возможности по графическому представлению данных. Разве что, пользователю предоставляется возможность записать интересующие данные в файл и отобразить их с помощью какой-либо посторонней системы отображения данных, например, того же MATLABa.

Средства графического программирования.

Как MATLAB, так и симуляторы VHDL имеют в своем составе средства графического программирования. Структурный стиль программирования на VHDL взаимно однозначно соответствует программированию в виде вырисовывания блок-схемы некоторого виртуального устройства. Пользователю предоставляется возможность самому создать дизайн его новых графических элементов. Также автоматные алгоритмы могут представляться в виде диаграммы своих состояний.
Как и большинство современных оконных систем, VHDL-симулятор может управляться и программироваться с помощью макроязыка, такого как Visual Basic, Perl или TCL. При желании, с помощью программы на макроязыке можно к симулятору «привязать» такие функции, которые в нем не предусмотрены, например, свою программу для графического представления данных.

Выводы.

1. У VHDL достаточно много возможностей, чтобы проектировать системы обработки сигналов на высоком уровне без использования таких средств, как MATLAB. Это скоростное событийное моделирование довольно длительных и трудоемких алгоритмов, представление данных с плавающей и фиксированной точкой, в том числе с экстремально большой разрядностью, наличие библиотек математических функций и возможность графического представления данных.
2. Большинство систем исследования численных алгоритмов и алгоритмов обработки сигналов, включая MATLAB, ориентированы на обработку с плавающей запятой. VHDL-симулятор может с ними конкурировать при моделировании алгоритмов обработки сигналов с целыми числами, так как он выполняет эту обработку наиболее эффективно и от такого представления проще переход к аппаратной или программной реализации этих алгоритмов.
3. Для эффективного использования VHDL-симулятора при разработке алгоритмов и устройств обработки сигналов, необходимо, во-первых, разрабатывать пакеты процедур и функций, аналогичных таким, которые применяются в MATLABe для этих целей, во-вторых, создавать удобные условия для отображения одно — и двумерных сигналов в графическом виде.

Как посткриптум. В последних версиях симулятора Active HDL встроены средства для исполнения программ MATLAB, не выходя из симулятора. Этим самым достигнут временный компромисс в конкуренции между MATLAB и VHDL.