В месте, где я работал, было два лагеря дизайнеров ПЛИС. Один лагерь я назвал симуляцией, симуляцией, симуляцией или кубами. Другой лагерь был все о дизайне.
Ребята с кубами использовали симулятор, такой как modelsim, они могли придумать начальный дизайн с помощью методов кодирования и \ или блоков в наборе дизайна. Затем они имитируют это и находят вещи, которые не будут работать, а затем изменяют код. Этот процесс повторялся несколько раз, пока они не придумали дизайн, который работал.
Лагерь дизайнеров (который я предпочел) разработал форму волны на бумаге (или цифровой бумаге, такой как visio), именно то, что требовалось. Тогда придумайте логическую схему. Это самодокументируемый процесс. Затем диаграмма была переведена в код (код и диаграмма были 1: 1, если на диаграмме что-то было, в коде был процесс для этого). Затем он был смоделирован, и форма волны моделирования была сравнена с расчетной формой волны на бумаге, и ожидалось, что она будет такой же.
Я заканчивал тем, что делал оба, иногда я переходил в режим s cubed, и это было не очень весело. Я обнаружил, что иногда упускаю из виду свою цель. Например, я изменил бы состояние в конечном аппарате, и изменение переместилось бы к следующему состоянию, тогда я должен был бы это исправить. Я потратил больше времени, чем думать об этом.
В каком лагере вы бы предпочли быть? Я думаю, что должен быть строгий дизайн, делать то, что работает для вас, но я думаю, что чем более детальным и строгим вы будете заниматься проектированием, тем меньше проблем у вас будет в долгосрочной перспективе. Я привел несколько примеров того, что возможно, они могут не соответствовать организационной структуре вашего рабочего места. Причина, по которой детали дизайна и тщательное планирование так полезны, это заставляет вас задуматься о том, что вы делаете. Это облегчает отладку. Разработайте рабочий процесс проектирования, который позволит этому случиться. Кроме того, познакомьтесь с инструментами моделирования и напишите хорошие испытательные стенды, которые будут проверять все условия, с которыми может столкнуться симулируемое устройство. Это, конечно, должно быть сбалансировано со временем. Например, напишите код ADC HDL, который будет имитировать устройство в ваших симуляциях.
Самый ценный инструмент для проектирования ПЛИС (на мой взгляд) - это хорошая процедура тестирования, которая позволит вам полностью протестировать свой дизайн и выполнить его в нужном темпе. Нельзя ожидать, что дизайн FPGA «просто сработает», нужно приложить усилия, чтобы убедиться, что все части работают. Если вы обнаружите ошибки, вернитесь к моделированию и проектированию и изучите различия между имитируемой FPGA и RTL. Это в основном приходит с опытом, но если дизайн работает в симуляции, а не в аппаратном обеспечении, вам нужно выяснить, почему есть разница.
Несколько ключевых вещей, которые я изучил:
1) Санитарная обработка ваших входов, схемы синхронизации и сброса должны быть чистыми, иначе вы можете получить метастабильность, распространяющуюся через вашу систему. Знайте, что такое синхронизатор двойного ранга. Существует множество различных топологий для схем сброса, знайте, как их использовать (в сети есть отличная статья, хотя у меня ее нет под рукой).
2) Получить требования дизайна заранее, а затем дизайн вокруг них. Если окружающие вас люди не будут предъявлять вам определенные требования, придумайте их сами.
3) Набор инструментов с фиксированной точкой Matlab отлично подходит для имитации систем управления и приложений DSP, но у вас может не быть к этому доступа. Это отличный способ доказать дизайн, прежде чем писать код.
4) Сначала дизайн, потом кодирование, потом симуляция.
5) Строго набирается, также сохраняйте согласованность имен сигналов на схемах pcb и hdl. (это также, почему я предпочитаю VHDL над Verilog.