Я пытаюсь написать синтезируемый трехмерный растеризатор в Verilog / SystemVerilog. В настоящий момент растеризатор на самом деле не является трехмерным растеризатором: он просто получает шесть 32-битных чисел с плавающей запятой для положения вершины (vertA_pos_x, vertA_pos_y, vertB_pos_x, vertB_pos_y, vertC_pos_x, vertC_pos_y) и девять 8-битных целых чисел для раскраски вершин (vertA_gol_Color_Color_r , vertB_color_r, vertB_color_g, vertB_color_b, vertC_color_r, vertC_color_g, vertC_color_b).
Диапазон позиций составляет 0,0f ~ 1,0f, 0,0f представляет верхнюю / левую часть экрана, 0,5f - середину и 1,0f - нижнюю / правую сторону.
Работа с растром состоит в том, чтобы, во-первых, подсчитать, сколько требуется линий растра. Учитывая, что высота фреймбуфера составляет 240 пикселей, вершина A - верхняя вершина, B - левая нижняя, C - правая нижняя, а X - самая нижняя вершина (либо B, либо C; это необходимо вычислить), количество строк растра равно (vertX_pos_y - vertA_pos_y) / 240
.
Эта часть процесса растеризации достаточно сложна, чтобы развеять мои сомнения, поэтому я перестану объяснять, как я буду действовать здесь.
Теперь я хочу знать, как реализовать такую «сложную» логику в Verilog (она «сложна», потому что она последовательна и занимает более одного тактового цикла, что не совсем приятно для проектирования с помощью оборудования. язык описания).
Я использую Quartus от Altera, поэтому меня в основном интересуют решения Altera.
Мегафункции операций с плавающей запятой, которые поставляются с Quartus, требуют для завершения более одного тактового цикла, поэтому для реализации «простых» вычислений, таких как (vertX_pos_y - vertA_pos_y) / 240
, я предполагаю, что необходим довольно скучный для записи и подверженный ошибкам конечный автомат. . Мое самое большое ожидание состоит в том, что кто-то скажет мне, что мне это не нужно, но если это не так, я все равно хотел бы знать, как люди обычно проектируют такие вещи.
Также обратите внимание, что я новичок в Verilog и дизайне оборудования в целом, поэтому извините, если скажу что-то глупое. Идеи?