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


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

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

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




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

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

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

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

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

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

endmodule



PLLモジュールの配置

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

PLLモジュールはインスタンス呼び出しとして記述する.
また必要な周波数を得るための逓倍・分周については, PLLモジュール内のパラメータ変数に対して適切な値を渡すことで実現する.
なお、LOCKEDはPLLが安定動作を開始したことを示す信号
pllfbはPLLでのフィードバッククロックとして用いる。
  //
  // 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) );



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
             .ICS(ICS)          // Instruction Complete Signal
	);



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

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


| Back |