ためになるホームページ お問い合わせ




TOP > SystemC > 4値宣言
4値宣言
sc_logic,とsc_lvは、4値の値を使用できる。0,1,x(不定),z(ハイインピーダンスまたは、フローティング)
sc_logicは1ビットの幅を持ち、sc_lvは、複数のビット幅をもつことができる。
これら二つの型は、sc_lvと同じく算術演算をする時は、一時的に対応したSystemCの型に一回代入して、その後に戻してあげればよい。
(書式)
sc_logic オブジェクト名
sc_lv<サイズ> オブジェクト名

使用方法
  • sc_logicは、リテラルを代入する事ができる(0,1,Z,X)。尚、接続信号で宣言した際はキャストして代入する必要がある。
  • sc_logicからsc_bit, sc_bitからsc_logicの代入もできる。但し、sc_logicがXもしくはZの時、sc_bitに代入すると実行時に警告がでる。
  • sc_lvはsc_bvより処理が遅いので注意が必要。
  • sc_lvの値がXやZの時に、正数計算で他のSystemCのオブジェクトに代入した時は、実行時に警告がでて値は何になるかわからない。
  • sc_lvのビットの並びを標準出力するには、to_string()メソッドをつかう。

  • sc_logicとsc_lvの例
    #include "systemc.h"
    
    class MODULE: public sc_module
    {
    public:
      sc_in<sc_logic>   IN1;
      sc_in<sc_lv<8> > IN2;
      sc_in_clk         CLK;
      SC_HAS_PROCESS(MODULE);
      MODULE(sc_module_name name) : sc_module(name)
      {
        SC_METHOD(main);
        sensitive << CLK.pos();
      }  
      void main()
      {
        sc_lv<8> tmp;
        tmp = IN2;
        cout << "IN1 = " << IN1 << endl;
        //sc_lvを人が読めるようにする(1回sc_lvに変換する必要がある)
        cout << "IN2 = " << tmp.to_string() << endl;
      }
    };
    int 
    sc_main(int argc, char** argv)
    {
      sc_bv<64> bv;
      sc_signal<sc_logic>  IN1;
      sc_signal<sc_lv<8> > IN2;
      sc_clock CLK("CLOCK", 10, 0.5, 0.0);
      sc_trace_file *trace_f;
      trace_f = sc_create_vcd_trace_file("LOGIC");
      ((vcd_trace_file *)trace_f)->sc_set_vcd_time_unit(-9);
      sc_trace(trace_f, CLK, "CLK");
      sc_trace(trace_f, IN1, "IN1");
      sc_trace(trace_f, IN2, "IN2");
    
      MODULE module("LOGIC_TEST");
      module.CLK(CLK);
      module.IN1(IN1);
      module.IN2(IN2);
    
      IN1 = (sc_logic)'Z';//castが必要
      //  IN1 = data1;
      IN2 = "XXXXXXXX";
    
      sc_start(50, SC_NS);
    
      IN1 = (sc_logic)'1';
      IN2 = "00000001";
      sc_start(50, SC_NS);
    
    
      IN1 = (sc_logic)'X';
      IN2 = "XX01X01X";
      sc_start(50, SC_NS);
    
      sc_close_vcd_trace_file(trace_f);
      return(0);
    }
    





    Copyright 2007 ためになるホームページ All Rights Reserved.