![]() |
![]() |
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と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. |