Симуляция проекта Теннис

Иногда приходится иметь дело с аппаратными проектами в которых отдельные события происходят довольно редко. И не то что бы рабочая частота была небольшой - как раз нет, рабочая частота довольно высокая и события быстротечны, но происходят редко. Типичный пример - та же видео игра Теннис, которую я сделал недавно. Смотрите: вся схема тактируется частотой 5Мгц. Я реализовываю видео режим 800x600 - вообще то частота пикселов в этом режиме должна быть 40Мгц. Ну ладно, я использую 5Мгц. Таким образом, один мой период - это 8 точек по строке. Мой мячик в игре - 2 периода, то есть 16 точек. При всем при этом положение мячика не может меняться слишком быстро - так игрок просто не увидит его. Именно поэтому изменение ситуации в игре привязано к кадрам и тактируется кадровой частотой. Более того, мяч двигается только каждый четвертый кадр. То же самое и с ракетками - опрос клавиш идет каждый четвертый кадр. Понятно, что для полноценой симуляции нужны многие секунды. И что делать? Если задать время для симуляции хотя бы одну секунду, то это составит 5 миллионов тактов рабочей частоты. А как тогда анализировать этот поток временных диаграмм?

Вот что я придумал.

Я решил сделать такой тестбенч на Verilog, что бы он мне в текстовом виде "рисовал" каждый следующий экранчик видео игры. В тестбенче я создаю экземпляры модуля видео синхронизации hvsync.v и модуля игры game.v. Анализируя их выходные сигналы я вывожу символы на консоль согласно текущему цвету видео сигнала игры. Конечно, отображаю только каждую 16ю строку (поскольку вся игра представлена квадратиками 16х16 точек).

Ну вот мой тестбенч. Ну и опять же он есть внутри всего проекта для платы Марсоход выполненный в среде Altera Quartus II 

Теперь, пользуясь Icarus Verilog я могу откомпилировать тестбенч и мои модули и отсимулировать их:


c:\altera\marsohod\max2tennisM>iverilog -o qqq test.v game.v hvsync.v
c:\altera\marsohod\max2tennisM>vvp qqq >>zzz


И вот в результате я получаю текстовый файл "zzz" в котором вижу последовательно экраны моей игры. Я вижу как движется левая ракетка (ведь одна кнопка в тестбенче была запрограммирована нажатой) и я вижу как движется мячик:

Verilog Testbench Tennis

Теперь с таким средством можно подробнее посмотреть что происходит в каждом кадре игры.

 

Добавить комментарий