Как напечатать номер, используя VGA на платах Verilog и Altera DE2?

Я использую плату Altera DE2 FPGA и Verilog, разработал простой процессор с использованием этих. Мне нужно распечатать значение регистра, используя VGA выход платы.

Как я должен идти об этом?

2 ответа

Боюсь, довольно долгий путь.

Во-первых, вам нужно получить выходное VGA периферийное устройство. Это берет значения из памяти и отправляет соответствующие значения RGB на экран в нужное время относительно импульсов синхронизации (которые он также должен генерировать).

Как только вы это сделаете, ваш процессор должен записать в память набор точек, которые выглядят как символы, которые вы хотите отобразить - так что вам нужен простой растровый шрифт. В качестве альтернативы, вы можете сделать память ориентированной на символы, так что процессор просто должен поместить в нее набор значений ASCII, и выход VGA затем будет искать i(во внутренней таблице поиска шрифтов), какой шаблон точек для 'a' (скажем) должно быть на той строке дисплея, которую он создает в данный момент.

Видеовыход - хороший веселый проект!

В дополнение к тому, что говорит Мартин, если вы захотите сократить этот путь, взломав его, вы можете создать библиотеку сегментов. Чтобы понять, что я говорю, если вы посмотрели на 7-сегментный дисплей, каждый сегмент загорается индивидуально, чтобы создать значение от 0 до 9, по сути, вы можете написать библиотеку для создания каждого из этих сегментов, а затем транспонировать их для представления в одно место, десятое место и так далее. Вот фрагмент кода, который отображает сегменты справа внизу.

/*
  __5__
 |     |
1|__6__|3
 |     |
2|_____|4
    7
  offset referring to the position meaning tens or ones place.
  If you would like ones place, call seg_1(0) for example and 
 if you would like tens place, call seg_1(1) and so forth. 
*/

void seg_1(int offset) {
    for(i = 360; i < 420; i++) //y-axis
    {
        for(j = 540-(offset*120) ; j < 560-(offset*120); j++) //x-axis
        {
            Vga_Set_Pixel(VGA_0_BASE,j,i);
        }
    }
}

void seg_2(int offset) {
    for(i = 420; i < 460; i++) //y-axis
    {
        for(j = 540-(offset*120) ; j < 560-(offset*120); j++) //x-axis
        {
            Vga_Set_Pixel(VGA_0_BASE,j,i);
        }
    }
}
...
...
Другие вопросы по тегам