В этом примере показана и объяснена методология проекта «Сверху-Вниз», которая применяется к алгоритму Sobel Edge Detection. Алгоритм Sobel Edge Detection является популярным, но простым алгоритмом обнаружения ребер и является особым вниманием этого примера. На этом примере вы узнаете:
Как Simulink ® позволяет вам проектировать алгоритм цифровой обработки сигналов (DSP) на системном уровне.
Как разработать проект, чтобы сделать его реализуемым на оборудовании.
Как совместное моделирование написанного вручную HDL-кода (соответствующего вашей модели Simulink) с ModelSim ® или Cadence ® Incisive ® в окружение Simulink.
Этот подход является примером Model Based Design. Дополнительные сведения о Model Based Проекта см. в http://www.mathworks.com/model-based-design
Вам нужны следующие продукты, чтобы запустить все модели в примере:
MATLAB ®
Simulink
Fixed-Point Designer™
HDL Verifier™
Computer Vision Toolbox™
DSP System Toolbox™
ModelSim SE или PE. или Cadence Incisive
Когда проекты становятся больше и сложнее, стало необходимо описать дизайн на высоком уровне. Это описание высокого уровня не только позволяет дизайнеру запускать симуляции быстрее, но и может использоваться в течение процесса разработки для верификации. Этот полученный процесс позволяет разработчикам идентифицировать ошибки на раннем этапе и избежать дорогостоящего обнаружения ошибок к концу разработки. Этот высокоуровневый проект обычно выполняется системными инженерами.
Чтобы реализовать Алгоритм ЦОС на оборудовании, таком как ASIC или FPGA, инженер- уровень системы сначала проектирует алгоритм и проверяет, что алгоритм удовлетворяет требованиям проекта. Этот проект позже станет золотой ссылкой для инженеров, ответственных за перенос алгоритма на оборудование.
В этом примере алгоритм Sobel Edge Detection был реализован в Simulink. Откройте исполняемую модель и дважды кликните по блоку «Sobel Edge Detection», чтобы узнать, как алгоритм реализован в Simulink. При двойном клике по блоку Sobel Edge Detection можно увидеть, что алгоритм состоит из двух 2D фильтров, один для вычисления градиента в направлении столбца (верхний фильтр) и один для вычисления градиента в направлении строки (нижний фильтр). Оба фильтра используют ядро 3x3.
Эта модель Simulink служит спецификацией для остальной части пути разработки. Это исполняемая спецификация, что означает, что вы можете легко выполнить эту модель в окружение Simulink.
Этот пример использует спутниковое изображение в качестве входа в алгоритм обнаружения ребер. Это изображение служит входу тестовым вектором и используется на протяжении всего примера. Если инженеры, отвечающие за аппаратную реализацию алгоритма, работают и в окружение Simulink, нет необходимости в дополнительных накладных расходах при переносе тестовых векторов в различные приложения или создании тестовых обвязок, подверженных ошибкам персонала. Тестовая обвязка, который используется в исполняемой спецификации, используется на протяжении всего примера.
При разработке исполняемой модели системный инженер обычно не учитывает детали реализации, а скорее реализует алгоритм, чтобы соответствовать поведенческим требованиям. Как только системный инженер представляет исполняемую спецификацию группе разработчиков, группа разработчиков, возможно, должна сделать модификации к исполняемой спецификации, чтобы вместить проект в систему реального времени, у которой могут быть ограниченные ресурсы, такие как память или вычислительная мощность.
В этом примере разработчики могут принять решение исключить квадратные операции и заменить их операцией абсолютного значения для более эффективной аппаратной реализации. Это вызовет различие между результатом косимуляции и золотой ссылкой, но ради этого примера мы принимаем, что различие приемлет. Откройте модель проекта обнаружения ребер. Вы можете увидеть те же тестовые векторы, что и предыдущая модель, все еще используются. Результат можно легко проверить по золотой ссылке. Численное отображение показывает среднее различие между золотой ссылкой и новым проектом.
Поскольку нашей конечной целью является реализация алгоритма в FPGA или ASIC, мы должны преобразовать наш проект двойной точности в проект с фиксированной точкой. Это можно сделать легко с помощью Simulink. Мы используем модель двойной точности, которую мы разработали в предыдущем разделе, чтобы непосредственно разработать модель с фиксированной точкой, не вводя никаких новых блоков. Simulink позволяет нам определять количество бит и масштабирования для данных, а также математических операций, и предоставляет большую окружение для анализа работы системы с фиксированной точкой.
В этом проекте с фиксированной точкой вход в фильтры является 9-битным целым числом со знаком, а выходы фильтров являются 11-битными целыми числами. Если дважды кликнуть по каждому вычислительному блоку, такому как фильтры или блоки сумм, можно увидеть, что разработчик может легко настроить ширину бита и масштабирование, связанные с внутренними расчетами этого блока. Это дает дизайнеру огромный рычаг для компромисса между совпадением выхода золотой ссылки при использовании наименьшего количества бит, необходимого для сохранения области на устройстве.
Откройте модель с фиксированной точкой и исследуйте, как реализована фиксированная точка, дважды нажатие вычислительные блоки, такие как фильтры 2D или блок сложения, и посмотрев на соответствующую панель с фиксированной точкой.
В нашем примере входом алгоритма обнаружения ребер было двумерное изображение размера 200x100. В системе реального времени вход, скорее всего, является не матрицей, а последовательным потоком данных; для примера этот последовательный поток данных может быть сгенерирован Устройством с соединением зарядов (CCD). Поэтому нам нужно изменить структуру проекта таким образом, чтобы алгоритм обнаружения ребер принял и выполнил 2D фильтрацию по последовательному потоку данных.
В этой степени мы сначала сериализуем вход изображение. Затем мы выполняем фильтрацию 2D на этих последовательных данных. Позже мы десериализуем поток данных, чтобы иметь возможность сравнить выход с золотой ссылкой. Чтобы увидеть, как это делается, пожалуйста, обратитесь к модели разработки обнаружения ребер.
Эта операция выполняется только для нижнего фильтра. Как и ожидалось, новый проект все еще дает те же точные результаты, что и раньше. Два элемента задержки были добавлены, чтобы компенсировать буферизацию в блоке сериализатора. Этот проект также демонстрирует многоскоростные возможности Simulink. Выход блока сериализатора в 20000 раз выше по частоте дискретизации относительно входа в этот блок.
Модель из предыдущего раздела может быть передана HDL-дизайнеру, который может использовать 2D фильтр, разработанный в последнем разделе, чтобы записать соответствующий код VHDL или Verilog. После написания кода HDL-дизайнер может использовать HDL- Verifier™ для симуляции HDL- проекта в Окружение Simulink с помощью ModelSim или Incisive и сравнить вывод HDL- проекта с выходом исполняемой спецификации. Обратите внимание, что в этом процессе нет необходимости в генерации HDL- испытательного стенда. Модель Simulink подает входной тестовый вектор в ModelSim или Incisive через HDL Verifier и извлекает данные из ModelSim или Incisive обратно в окружение Simulink. HDL-дизайнер может легко проверить, запуски ли HDL-код в соответствии со спецификациями.
ModelSim/QuestaSim
См. модель VHDL или модель Verilog, чтобы увидеть, как HDL Verifier используется для косимуляции Simulink и ModelSim. Последний рисунок показывает моментальный снимок сигналов, отображаемых в ModelSim.
Incisive/Xcelium Обратитесь к модели Verilog, чтобы увидеть, как программное обеспечение HDL Verifier используется для косимуляции Simulink и платформы Incisive.