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