検索
連載

オリジナルCPU「DL166」のレジスタをLEDドットマトリックスで見える化するオリジナルCPUでバイナリコード入門(6)(3/3 ページ)

オリジナル4ビットCPUを用いてバイナリコードを学ぶ本連載。第6回は、「Tang Nano 9K」に移植したオリジナルCPU「DL166」のレジスタをLEDドットマトリックスで見える化する。

Share
Tweet
LINE
Hatena
前のページへ |       

サンプルプログラムと動作確認

 リスト4はサンプルプログラムです。Tang Nano起動時に実行されます。

16: initial begin
17:  ram[0] <=8'b1010_0010;  // mvi r0,2
18:  ram[1] <=8'b00_001_000; // mov r1,r0
19:  ram[2] <=8'b1010_0011;  // mvi r0,3
20:  ram[3] <=8'b00_010_000; // mov r2,r0
21:  ram[4] <=8'b1010_0100;  // mvi r0,4
22:  ram[5] <=8'b00_011_000; // mov r3,r0
23:  ram[6] <=8'b1010_0101;  // mvi r0,5
24:  ram[7] <=8'b00_100_000; // mov r4,r0
25:  ram[8] <=8'b1010_0001;  // mvi r0,1
26:  ram[9] <=8'b01100_110;  // inc R6		
27:  ram[10] <=8'b1001_1001; // jmp 9
28: end
リスト4 サンプルプログラム

 16〜28行目はinitialブロックです。Tang Nanoに搭載されているFPGAの起動時に1回だけ実行されるブロックです。17〜27行目がメモリに格納される命令セットです。18〜25行は何かというと、LEDドットマトリックス上の意図した位置に、意図したレジスタが表示されていることを確かめるプログラムです。その後、26行目からはR6のインクリメントを繰り返して、R6がオーバーフローするとc_flagが立つのかを確かめています。

LEDドットマトリックスの見方

 図2は、リスト4のサンプルプログラムをしばらく実行した後のLEDドットマトリクスの様子を示したものです。

図2 サンプルプログラムをしばらく実行した後のLEDドットマトリクスの様子
図2 サンプルプログラムをしばらく実行した後のLEDドットマトリクスの様子[クリックで拡大]

 図2の左上から最初の1行目の4ドットでr0の値を表示しています。左端のドットが最下位ビットで、左から4ビット目が最上位ビットを表しています。というように、2行目がr1という具合にそれぞれのレジスタの値をドットの点灯で表しています。一番下の左端から4ビットはr7の値を表示しており、これはプログラムカウンターとして使われていますので、現在実行中のアドレスが表示されています。r5は4ビット入力の値が格納されているはずなのですが、今回は未接続なので4ビットとも1になっています。ブレッドボードの上にタクトスイッチが3つ並んでいますが、どことも未接続なので今回は無視してください。

物理制約条件ファイル

 リスト5は物理制約条件ファイル(register.cst)です。モジュールの入出力で定義されたシンボルはここで実際のTang Nano搭載のFPGAのピンと関連付けられます。

IO_LOC "clk" 52;
IO_LOC "rst" 4;
IO_PORT "rst" PULL_MODE=UP;
IO_LOC "col[0]" 74;
IO_LOC "col[1]" 34;
IO_LOC "col[2]" 40;
IO_LOC "col[3]" 71;
IO_LOC "col[4]" 41;
IO_LOC "col[5]" 72;
IO_LOC "col[6]" 76;
IO_LOC "col[7]" 77;
IO_LOC "row[0]" 70;
IO_LOC "row[1]" 75;
IO_LOC "row[2]" 51;
IO_LOC "row[3]" 73;
IO_LOC "row[4]" 30;
IO_LOC "row[5]" 42;
IO_LOC "row[6]" 33;
IO_LOC "row[7]" 35;
IO_LOC "leds[0]" 10;
IO_LOC "leds[1]" 11;
IO_LOC "leds[2]" 13;
IO_LOC "leds[3]" 14;
IO_LOC "leds[4]" 15;
IO_LOC "leds[5]" 16;
リスト5 物理制約条件ファイル(register.cst)

おわりに

 今回は、連載第4回記事でTang NanoにマウントしたLEDドットマトリクスに、DL166のレジスタを表示させてみました。CPU実行時に刻々と変わっていくレジスタの様子を見ることができます。プログラムのデバッグやCPUの動作を学ぶにはなくてはならない機能の一つですね。

 実用的にはそういうことなのですが、刻々と変化するドットマトリクスをながめているとなんだか癒されませんか。もしそう感じるようでしたら、あなたも“バイナリアン”の素質大です。

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る