17 #include "sc_logic_7.h"
18 #include "sysc/datatypes/bit/sc_bit_ids.h"
24 void sc_logic_7::invalid_value(sc_logic_7_value_t v) {
25 std::array<char, BUFSIZ> msg{};
26 std::sprintf(msg.data(),
"sc_logic_7( %d )", v);
27 SC_REPORT_ERROR(sc_core::SC_ID_VALUE_NOT_VALID_, msg.data());
30 void sc_logic_7::invalid_value(
char c) {
31 std::array<char, BUFSIZ> msg{};
32 std::sprintf(msg.data(),
"sc_logic_7( '%c' )", c);
33 SC_REPORT_ERROR(sc_core::SC_ID_VALUE_NOT_VALID_, msg.data());
36 void sc_logic_7::invalid_value(
int i) {
37 std::array<char, BUFSIZ> msg{};
38 std::sprintf(msg.data(),
"sc_logic_7( %d )", i);
39 SC_REPORT_ERROR(sc_core::SC_ID_VALUE_NOT_VALID_, msg.data());
42 void sc_logic_7::invalid_01()
const {
43 if((
int)m_val == Log_Z) {
44 SC_REPORT_WARNING(sc_core::SC_ID_LOGIC_Z_TO_BOOL_,
"");
46 SC_REPORT_WARNING(sc_core::SC_ID_LOGIC_X_TO_BOOL_,
"");
52 std::array<const sc_logic_7_value_t, 128> sc_logic_7::char_to_logic = {
53 {Log_0, Log_1, Log_L, Log_H, Log_Z, Log_X, Log_U, Log_X,
54 Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X,
55 Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X,
56 Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_0, Log_1, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X,
57 Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X,
58 Log_H, Log_X, Log_X, Log_X, Log_L, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_U, Log_X, Log_X,
59 Log_X, Log_X, Log_Z, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X,
60 Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X,
61 Log_X, Log_X, Log_Z, Log_X, Log_X, Log_X, Log_X, Log_X}};
63 std::array<const char, 7> sc_logic_7::logic_to_char = {{
'0',
'1',
'L',
'H',
'Z',
'X',
'U'}};
65 std::array<std::array<const sc_logic_7_value_t, 7>, 7> sc_logic_7::and_table = {{
66 {Log_0, Log_0, Log_0, Log_0, Log_0, Log_0, Log_0},
67 {Log_0, Log_1, Log_L, Log_1, Log_X, Log_X, Log_X},
68 {Log_0, Log_L, Log_L, Log_L, Log_L, Log_L, Log_L},
69 {Log_0, Log_1, Log_L, Log_H, Log_X, Log_X, Log_X},
70 {Log_0, Log_X, Log_L, Log_X, Log_X, Log_X, Log_X},
71 {Log_0, Log_X, Log_L, Log_X, Log_X, Log_X, Log_X},
72 {Log_0, Log_X, Log_L, Log_X, Log_X, Log_X, Log_X}}};
74 std::array<std::array<const sc_logic_7_value_t, 7>, 7> sc_logic_7::or_table = {{
75 {Log_0, Log_1, Log_L, Log_H, Log_Z, Log_X, Log_U},
76 {Log_1, Log_1, Log_1, Log_1, Log_1, Log_1, Log_1},
77 {Log_L, Log_1, Log_L, Log_H, Log_Z, Log_X, Log_U},
78 {Log_H, Log_1, Log_H, Log_H, Log_H, Log_H, Log_H},
79 {Log_Z, Log_1, Log_Z, Log_H, Log_X, Log_X, Log_X},
80 {Log_X, Log_1, Log_X, Log_H, Log_X, Log_X, Log_X},
81 {Log_U, Log_1, Log_U, Log_H, Log_X, Log_X, Log_X}}};
83 std::array<std::array<const sc_logic_7_value_t, 7>, 7> sc_logic_7::xor_table = {{
84 {Log_0, Log_1, Log_0, Log_1, Log_X, Log_X, Log_X},
85 {Log_1, Log_0, Log_1, Log_0, Log_X, Log_X, Log_X},
86 {Log_0, Log_1, Log_H, Log_L, Log_X, Log_X, Log_X},
87 {Log_1, Log_0, Log_L, Log_H, Log_X, Log_X, Log_X},
88 {Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X},
89 {Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X},
90 {Log_X, Log_X, Log_X, Log_X, Log_X, Log_X, Log_X}}};
92 std::array<const sc_logic_7_value_t, 7> sc_logic_7::not_table = {{Log_1, Log_0, Log_H, Log_L, Log_X, Log_X, Log_X}};
96 void sc_logic_7::scan(::std::istream& is) {
102 const sc_logic_7 SC_LOGIC7_0(Log_0);
103 const sc_logic_7 SC_LOGIC7_1(Log_1);
104 const sc_logic_7 SC_LOGIC7_Z(Log_Z);
105 const sc_logic_7 SC_LOGIC7_X(Log_X);