我正在使用Altera DE2 FPGA板和verilog,使用这些设计了一个简单的CPU。我需要使用电路板的VGA输出打印寄存器的值。
我应该怎么做?
恐怕是一条很长的路。
首先,您需要掌握VGA输出外设。 它从内存中获取值,并在相对于同步脉冲(它也必须生成)的正确时间将适当的RGB值发送到屏幕。
完成此操作后,处理器需要将一组看起来像要显示的字符的点写入内存 - 因此您需要一个简单的位图字体。 或者,您可以使内存面向字符,因此处理器只需将一组ASCII值放入其中,然后VGA输出将查找i(在内部字体查找表中)"a"(例如)的点图案应该在它当时正在创建的显示器的任何一行上。
视频输出是一个很好的有趣的项目!
再加上Martin所说的,如果你想通过黑客攻击来缩短这条路径,你基本上可以创建一个段库。为了理解我在说什么,如果你看一个 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);
}
}
}
...
...