Как напечатать номер, используя 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);
}
}
}
...
...