我正在使用Altera DE2 FPGA板和verilog,使用這些設計了一個簡單的CPU。我需要使用電路板的VGA輸出打印寄存器的值。如何使用Verilog和Altera DE2開發板的VGA打印數字?
我應該怎麼辦?
我正在使用Altera DE2 FPGA板和verilog,使用這些設計了一個簡單的CPU。我需要使用電路板的VGA輸出打印寄存器的值。如何使用Verilog和Altera DE2開發板的VGA打印數字?
我應該怎麼辦?
我很害怕很長的路。
首先你需要弄個VGA輸出外設。它從內存中獲取數值,並在相對於同步脈衝(它也必須產生)的恰當時間將適當的RGB值發送到屏幕。
一旦你這樣做了,你的處理器需要向存儲器中寫入一組看起來像你想要顯示的字符的點 - 所以你需要一個簡單的位圖字體。或者,您可以使內存字符爲導向,因此處理器只需將一組ASCII值放入其中,然後VGA輸出將查找我(在內部字體查找表中)點的圖案'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);
}
}
}
...
...