如何使用语义记录 sc_logic 值?
How to log sc_logic values using semantic?
我需要转换这段代码:
bool hw = (gpio_ctrl(idx) >> 5) & 1;
uint8_t cnfg = (gpio_ctrl(idx) >> 3) & 3;
sc_dt::sc_logic oe_n = Log_1; // Default disable
sc_dt::sc_logic od = Log_Z; // Default disable
DEBUG_PRINTF(("GPIO update_ouput: CTRL=0x%x IDX=%d, HW=%d CNFG=%d, OE_N=%d, od=%d\n", gpio_ctrl(idx), idx, hw, cnfg, oe_n, od));
使用语义记录。
我试过简单地这样做:
SEM_MSG(gpio_output_logic_update, SEM_INFO, "GPIO output logic update", "Control register index", ("value", SEM_ATTR_HEX), "HW (active low)", "Config style", "OE_N", "OD");
// ...
SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n, od);
但是SEM_MSG并没有神奇地理解sc_logic。
您可以使用 to_char()
方法返回 char
版本的 sc_logic
。 (或 to_bool()
)。参见 IEEE Std 1666-2011.
的 7.9.2.2 部分
SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n.to_char(), od.to_char());
我目前所做的是为 sc_logic
值声明一个语义枚举,并使用 sc_logic 的值对其进行跟踪。读起来有点费解 ("why do I have to take the value()
of the sc_logic
variable?") 但它确实有效...
// Support logging sc_logic values
SEM_ENUM(sc_dt::sc_logic_value_t, (sc_dt::Log_0, "0"), (sc_dt::Log_1, "1"), (sc_dt::Log_Z, "Z"), (sc_dt::Log_X, "X"));
//...
SEM_MSG(gpio_output_logic_update, SEM_INFO, "GPIO output logic update", "index", ("value", SEM_ATTR_HEX), "HW", "CNFG", "OE_N", "OD");
//..
SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n.value(), od.value());
我需要转换这段代码:
bool hw = (gpio_ctrl(idx) >> 5) & 1;
uint8_t cnfg = (gpio_ctrl(idx) >> 3) & 3;
sc_dt::sc_logic oe_n = Log_1; // Default disable
sc_dt::sc_logic od = Log_Z; // Default disable
DEBUG_PRINTF(("GPIO update_ouput: CTRL=0x%x IDX=%d, HW=%d CNFG=%d, OE_N=%d, od=%d\n", gpio_ctrl(idx), idx, hw, cnfg, oe_n, od));
使用语义记录。
我试过简单地这样做:
SEM_MSG(gpio_output_logic_update, SEM_INFO, "GPIO output logic update", "Control register index", ("value", SEM_ATTR_HEX), "HW (active low)", "Config style", "OE_N", "OD");
// ...
SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n, od);
但是SEM_MSG并没有神奇地理解sc_logic。
您可以使用 to_char()
方法返回 char
版本的 sc_logic
。 (或 to_bool()
)。参见 IEEE Std 1666-2011.
SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n.to_char(), od.to_char());
我目前所做的是为 sc_logic
值声明一个语义枚举,并使用 sc_logic 的值对其进行跟踪。读起来有点费解 ("why do I have to take the value()
of the sc_logic
variable?") 但它确实有效...
// Support logging sc_logic values
SEM_ENUM(sc_dt::sc_logic_value_t, (sc_dt::Log_0, "0"), (sc_dt::Log_1, "1"), (sc_dt::Log_Z, "Z"), (sc_dt::Log_X, "X"));
//...
SEM_MSG(gpio_output_logic_update, SEM_INFO, "GPIO output logic update", "index", ("value", SEM_ATTR_HEX), "HW", "CNFG", "OE_N", "OD");
//..
SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n.value(), od.value());