【问题标题】:How to print a number using Verilog and Altera DE2 board's VGA?如何使用 Verilog 和 Altera DE2 板的 VGA 打印数字?
【发布时间】:2012-06-07 09:06:43
【问题描述】:

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

我该怎么办?

【问题讨论】:

    标签: verilog fpga vga nios


    【解决方案1】:

    恐怕路还很长。

    首先,您需要拥有一个 VGA 输出外围设备。这会从内存中获取值,并在相对于同步脉冲(它也必须生成)的正确时间将适当的 RGB 值发送到屏幕。

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

    视频输出是一个很好玩的项目!

    【讨论】:

      【解决方案2】:

      补充一下 Martin 所说的话,如果您想通过破解它来缩短该路径,您基本上可以创建一个分段库。要理解我的意思,如果您查看 7 段显示器,每个段单独亮起以创建 0-9 的值,基本上您可以编写一个库来创建这些段中的每一个,然后将它们转置以表示一个位,十位,以此类推。这是一些代码的 sn-p,它显示了右下角的段。

      /*
        __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);
              }
          }
      }
      ...
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 2018-10-14
        • 1970-01-01
        相关资源
        最近更新 更多