性能の出力

Tue, 31 Oct 2017 15:38:35 JST (45d)

性能の出力

ここでは,作成したプロセッサの性能としてサイクル数を表示する方法を解説します.プロセッサが稼働したサイクル数を表示させるためには,HALT 命令を拡張し,プロセッサ停止時に,このモジュールにアクセスするように するとよいでしょう.

OLED ディスプレイの使用に関しては,ここを参照してください.

サイクル数をカウントするカウンタの例としてfilehardware_counter.vを用いて解説します.このモジュールは,リセットが押されてからのクロック数をカウントし,そのクロック数を OLED ディスプレイに表示できるようにデコードしたものを出力します.

   module hardware_counter(
           input CLK_IP,
           input RSTN_IP,
           output [31:0] COUNTER_OP
       );

ネットリストを上に示します.CLK_IP,RSTN_IP はそれぞれクロック(FPGA のクロックではなく,プロセッサのクロック)とリセットを表し,COUNTER_OP はリセットが入力されて以降のクロック数を OLED ディスプレイで表示できるようにデコードしたバイナリを出力します.

       function [7:0] decoded_byte(
           input [3:0] hex_byte
       );
       begin
           if(hex_byte<4'd10) begin
               decoded_byte = hex_byte+`Num0;
           end else begin
               decoded_byte = hex_byte+`UpA-4'd10;
           end
       end
       endfunction

この function は,入力として受けっとた 4bit の 16 進数の数字を,char_def.v に対応する数字にデコードします.OLED ディスプレイに 1 文字表示させるためには,1byte = 8bit 指定する必要があるため,COUNTER_OP では,最大で 16 進数で 4 桁,すなわち,FFFF まで表示させることができます.

       reg [31:0] cycles;
   
       always @(posedge CLK_IP or negedge RSTN_IP) begin
           if(!RSTN_IP)begin
               cycles <= 32'h0;
           end else begin
               cycles <= cycles + 1;
           end
       end // always @(posedge CLKIN or negedge RSTN_IN)
   
       assign COUNTER_OP ={ decoded_byte(cycles[15:12]), decoded_byte(cycles[11:8]), decoded_byte(cycles[7:4]), decoded_byte(cycles[3:0]) };
   
   endmodule // hardware_counter

ここでは,サイクル数をカウントしています.always 文で監視しているのは,CLK_IP なので,プロセッサがリセット信号を受けた後に何サイクル処理を行ったかをカウントできます.


添付ファイル: filehardware_counter.v 39件 [詳細]