私は Altera DE2 FPGA ボードと verilog を使用しており、これらを使用して簡単な CPU を設計しています。ボードの VGA 出力を使用してレジスタの値を出力する必要があります。
これについてどうすればよいですか?
かなり長い道のりです。
まず、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);
}
}
}
...
...