マルチプレクサ版KITE-1マイクロプロセッサコアの実験ボードへの適用


KITEの実験ではKITE Microprocessor PLUS+ボードを使用していますが、FPGAの実装規模が小さいこと、周辺装置用のインタフェースを別途開発する必要があることから、今回は実装ボードとして DIGILENT社製 ATLYS ボードを用います。

作成しようとしているシステムは、KITE-1プロセッサをコアプロセッサとして、メモリもジュールとVGAモジュールを含む、簡易なマイクロプロセッサシステムです。

以下の、システムブロック図を参考にして、各モジュールの接続関係を作成します。




全体を統合する kite_top.v 階層は、以下のようにしておきます。
module kite_top(
      CLOCK,	// Clock 100MHz
      RESET,	// Reset (negative)
      TMDSP,	// DVI Video (P)
      TMDSN,	// DVI Video (N)
      );

  input         CLOCK;
  input         RESET;
  output [3:0]	TMDSP, TMDSN;

  wire          RST;   // internal reset (positive)
  wire          ACK;   // acknowledge
  wire  [15:0]  DATAI; // internal data bus

  assign DATAI = ( ... ) ? ... : ...;
  assign RST   = ... ;
  assign ACK   = ... ;

  //
  // PLL module
  //
  ...
  ...
  ...

  //
  // KITE-1 processor core
  //
  ...
  ...
  ...

  //
  // Memory & Video RAM
  //
  ...
  ...
  ...

  //
  // DVI encoder
  //
  ...
  ...
  ...

endmodule



PLLモジュールの配置

今回設計するシステムでは,4種類のクロックを使用する. 使用するSpartan6 FPGAにはハードマクロのPLLモジュールがあり, FPGA外部から供給されたクロックを逓倍・分周することで必要な クロックを生成することができる.

PLLモジュールはインスタンス呼び出しとして記述する.
また必要な周波数を得るための逓倍・分周については, PLLモジュール内のパラメータ変数に対して適切な値を渡すことで実現する.
なお、LOCKEDはPLLが安定動作を開始したことを示す信号であり、
pllfbはPLLでのフィードバッククロックとして用いる。
また、Atlysボードのリセットは負論理であるが、PLLモジュールのリセット信 号であるRSTは正論理であるため、反転して入力する必要がある。
  //
  // PLL Module
  //
  wire CLK25, CLK50, CLK75, CLK250, LOCKED, pllfb;

  pll_module 
  #(.C_CLKFBOUT_MULT(15),   // x15,
    .C_CLKIN1_PERIOD(10.0), // 100MHz
    .C_CLKOUT0_DIVIDE ( 3), // 100*15/2/ 3 = 250MHz
    .C_CLKOUT1_DIVIDE (10), // 100*15/2/10 =  75MHz
    .C_CLKOUT2_DIVIDE (15), // 100*15/2/15 =  50MHz
    .C_CLKOUT3_DIVIDE (30), // 100*15/2/30 =  25MHz
    .C_CLKOUT1_BUF( 1 ),
    .C_CLKOUT2_BUF( 1 ),
    .C_CLKOUT3_BUF( 1 ),
    .C_DIVCLK_DIVIDE( 2 )   // 2
    )
  pll (
    .CLKIN1 (CLOCK ), 
    .CLKOUT0(CLK250), 
    .CLKOUT1( CLK75), 
    .CLKOUT2( CLK50), 
    .CLKOUT3( CLK25), 
    .RST(!RESET), .LOCKED(LOCKED), .CLKFBIN(pllfb), .CLKFBOUT(pllfb) );


PLLモジュールのソースは ここからコピー しておいてください。
なお、もうひとつのハードウエア記述言語であるVHDLで提供されています。


KITE-1プロセッサをIPコアとして使用する場合、 KITE-1から出ているほとんどの観測用信号は使用しない。
kite.v 階層の入出力信号は以下の信号のみ使用する。
※未使用配線は、未結線としておけば実装処理に際に最適化により削除される。
  //
  // KITE-1 processor core
  //
  kite kite( .DATAI(DATAI),     // in  DATA Bus
             .DATAO(DATAO),     // out DATA Bus
             .ADDR(ADR),        // Address Bus
             .HALT(HALT),       // HALT Signal
             .MREQ(MREQ),       // Memory Request
             .IORQ(IORQ),       // I/O Request
             .ACK(ACK),         // Acknowledge
             .RW(RW),           // Read/Write
             .CLK(CLK75),       // Clock
             .RST(RST),         // Reset (positive)
             .ICS(ICS)          // Instruction Complete Signal
	);
なお、PLLモジュールから供給されるクロックによりプロセッサが動作するが、 PLLモジュールからのクロックが安定するまでには時間がかかる。
PLLモジュールからのクロックが安定しているかについては、LOCKED信号が HIGHであることを確認すれば良い。
したがってプロセッサのリセットは、 時にかかる必要がある。


メモリモジュール、VGAモジュール、DVIエンコーダモジュールの詳細については次ページ以降で解説する。

次は、 メモリモジュールの作成 を行います。


| Back |