• トップ
  • RTL検証関連
  • 釣り関連
  • 生活の知恵
  • 日本を考える関連
  • なんだかなぁ
  • その他色々
  • Runtime SwitchとはSimulationの実行時のOptionを使用してSimulationの各動作の切り替えを仕組みの事を指します。Compile Switchと同様の動作をSimulation実行時に行う事からこう呼んでいました。Runtime Switch用のBench記述は下記のようになります。

    CHIPA dut(
    	(an omission)
    
    	// SPI Flash Interface.
    	.SCK(SCK),
    	.CS(CS),
    	.SI(SI),
    	.SO(SO),
    	.
    	(an omission)
    );
     
    // A社のメモリモデル
    SPIFlashA SPIFlashA(
    	.SCK(SCK_A),
    	.CS(CS_A),
    	.SI(SI_A),
    	.SO(SO_A)
    );
    
    // USE_SPI_Aが真となったら、
    // CHIPのSPI FLASH IFとSPIFlashAの信号を接続
    rtranif1(SCK,	SCK_A,	USE_SPI_A);
    rtranif1(CS,	CS_A,	USE_SPI_A);
    rtranif1(SI,	SI_A,	USE_SPI_A);
    rtranif1(SO,	SO_A,	USE_SPI_A);
    
    // B社のメモリモデル
    SPIFlashB SPIFlashB(
    	.SCK(SCK_B),
    	.CS(CS_B),
    	.SI(SI_B),
    	.SO(SO_B)
    );
    
    // USE_SPI_Bが真となったら、
    // CHIPのSPI FLASH IFとSPIFlashBの信号を接続
    rtranif1(SCK,	SCK_B,	USE_SPI_B);
    rtranif1(CS,	CS_B,	USE_SPI_B);
    rtranif1(SI,	SI_B,	USE_SPI_B);
    rtranif1(SO,	SO_B,	USE_SPI_B);
    
    // C社のメモリモデル
    'ifdef BENCHUSE_SPI_C
    SPIFlashC SPIFlashC(
    	.SCK(SCK_C),
    	.CS(CS_C),
    	.SI(SI_C),
    	.SO(SO_C)
    );
    
    // USE_SPI_Cが真となったら、
    // CHIPのSPI FLASH IFとSPIFlashCの信号を接続
    rtranif1(SCK,	SCK_C,	USE_SPI_C);
    rtranif1(CS,	CS_C,	USE_SPI_C);
    rtranif1(SI,	SI_C,	USE_SPI_C);
    rtranif1(SO,	SO_C,	USE_SPI_C);
             

     
    上記にはいくつか新しい信号が出てきています。また各モデルごとの信号名をそれぞれ固有の信号名にかえています。

    信号USE_SPI_A,USE_SPI_B,USE_SPI_CはRuntimeOptionで有効になる信号です。bench内では下記のように記述します。

    // SPI FLASH Aを使用するためのOptionを生成。
    reg USE_SPI_A='b0;
    initial begin
      if($test$plusargs("SPI_A"))
        USE_SPI_A='b1;
    end
    
    // SPI FLASH Bを使用するためのOptionを生成。
    reg USE_SPI_B='b0;
    initial begin
      if($test$plusargs("SPI_B"))
        USE_SPI_B='b1;
    end
    
    // SPI FLASH Cを使用するためのOptionを生成。
    reg USE_SPI_C='b0;
    initial begin
      if($test$plusargs("SPI_C"))
        USE_SPI_C='b1;
    end
             

     
    上記のように記入しておけば、例えばSynopsysのシミュレータのVCSでは"simv +SPI_A"でUSE_SPI_A信号が1になりSPI_FLASH_Aのみと通信出来るようになります。

    そのかわりbenchの記述量が増えています。検証のマネジメントの際は再compileによる時間の増加、ディスクの使用量の増加、benchの作業の作業など状況をみて最適な方法の選択について検討します。私が関わった中でもARM7を1個搭載の簡単なシステムの場合はCompileスイッチによる切り替えを選択した事があります。

    ちなみに検証環境説明書には"+SPI_A"と"+SPI_B"と"+SPI_C"は同時に指定しないでくださいとの文言は入れておきましょう(^^!。

    私が現役時代にも同時に複数指定して「Bugだ〜」と騒いでいた輩が稀に居ましたので。

    ここでもうひとつrtranif*をつかっていますが、これは次のページで説明します。

  • 前のページ:bench記述その1
  • 次のページ:bench記述その3

  •  
     
     サイト内検索
    カスタム検索