Конечные автоматы — это шаблон, который очень часто используется при написании синхронных проектов. Они служат контроллерами в конструкции. Итак, есть ли стандартный способ проверить их, если они написаны с использованием VHDL или Verilog/SystemVerilog? Или лучше использовать некоторый графический интерфейс для их рисования, а затем вместо этого генерировать код из графического интерфейса?
Под стандартным способом я подразумеваю шаблон кода, используемый для их проверки. Всегда есть разные способы «содрать шкуру с кота», но, возможно, есть метод, который очень популярен.
Дело в том, что конечные автоматы могут быть довольно большими, и придется писать код для проверки каждой ветки в конечном автомате, что приводит к большому количеству кода в тестовом стенде.
Редактировать: я занимаюсь только самостоятельной проверкой самого fsm, чтобы убедиться, что он соответствует диаграмме состояний fsm и не существует ошибок в кодировании rtl.
Проверка — огромная часть процесса проектирования; в сложном проекте не было бы ничего необычного в том, чтобы потратить на проверку столько же или даже больше времени, сколько вы тратите на сам проект. В таком случае вопрос, который, по сути, сводится к тому, «как вы проверяете сложные проекты», довольно широк.
В целом, если проект справляется с большим количеством сценариев, о чем свидетельствует очень много состояний в конечном автомате, хорошей отправной точкой для набора тестов будет наличие отдельных тестов, которые стимулируют проект, чтобы воспроизвести все эти сценарии. Затем вы можете использовать инструменты покрытия кода, чтобы увидеть, какие переходы состояний были покрыты, и добавлять новые тесты, пока не будет покрыто все. Вы можете управлять различными тестовыми примерами, используя configuration
конструкцию в VHDL.
Обычно бывает так, что существуют сценарии, являющиеся вариациями на тему, например, получение какого-либо пакета, но с разной длиной пакета, длиной за пределами границ и т. д. В этих случаях вы можете написать тесты, которые генерируют количество пакетов произвольной длины; затем вам нужно будет убедиться, что все ваши крайние случаи соблюдены, например, минимальная и максимальная длина, минимальная плюс один, максимальный минус один и т. д., и что ваш дизайн работает правильно в каждом случае. Вам также может понадобиться протестировать комбинации входных данных для проекта, и снова эти комбинации могут быть сгенерированы тестовым примером, а не выписаны вручную по одному.
Существует ряд методологий, которые пытаются помочь управлять процессом создания стимула и записи результатов. Я использую OSVVM , о которой узнал из курса пару лет назад. Мне это нравится, потому что он использует тот же язык VHDL, к которому я привык, вместе с небольшим количеством сценариев TCL и не требует никаких «дополнительных услуг» для работы с моим симулятором. Есть много альтернатив, которые я не буду здесь перечислять, но быстрый поиск в Google по запросу «проверка fpga» выдает много ресурсов.
Я рекомендую использовать формальные методы проверки.
Напишите 2 набора утверждений:
Иногда вы можете написать одно утверждение для проверки всей функциональности FSM, как я сделал здесь: https://electronics.stackexchange.com/a/505842/238188 .
Для небольших FSM нарисуйте их в графическом интерфейсе и сгенерируйте HDL-код или сгенерируйте диаграмму перехода состояний из HDL-кода и проверьте диаграмму.
Я знаю 2 решения для этих 2 случаев:
Дэйв Твид
квант231
квант231
Шашанк В.М.
Шашанк В.М.
Шашанк В.М.
Шашанк В.М.
квант231