如何使用Verilog和Altera DE2板的VGA打印数字?

时间:2012-06-07 09:06:44

标签: verilog fpga vga nios

我正在使用Altera DE2 FPGA板和verilog,设计了一个使用这些的简单CPU。我需要使用电路板的VGA输出打印寄存器的值。

我应该怎么做?

2 个答案:

答案 0 :(得分:5)

我害怕相当漫长的道路。

首先,你需要掌握VGA输出外设。它从内存中获取值,并在相对于同步脉冲(它也必须生成)的恰当时间将适当的RGB值发送到屏幕。

完成后,处理器需要向内存写入一组看起来像要显示的字符的点 - 因此您需要一个简单的位图字体。或者,您可以使内存面向字符,因此处理器只需要将一组ASCII值放入其中,然后VGA输出将查找i(在内部字体查找表中)的点的模式'a'(比如说)应该是当时正在创建的显示器的任何一行。

视频输出是一个很有趣的项目!

答案 1 :(得分:0)

除了马丁所说的话,如果你想通过黑客攻击来缩短这条路,你基本上可以创建一个段库。要理解我在说什么,如果你看一个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);
        }
    }
}
...
...