SystemC动态规则检查
点击数:7109 次 录入时间:03-04 11:44:39 整理:http://www.55dianzi.com 电脑-单片机-自动控制
有些规则检查只有运行时才能够进行。运行时进行的规则检查叫动态规则检查。我们下面给出“一个sc_signal<T>类只能被一个进程驱动”这个规则的动态检查部分的代码:
- template <class T>
- inline void sc_signal<T>::write( const T& value_ )
- {
- #ifdef DEBUG_SYSTEMC
- check_writer();
- #endif
- m_new_val = value_;
- if( !( m_new_val == m_cur_val ) ) {
- request_update();
- }
- }
- template <class T>
- inline void sc_signal<T>::check_writer()
- {
- sc_process_b* writer = sc_get_curr_process_handle();
- if( m_writer == 0 ) {
- m_writer = writer;
- } else if( m_writer != writer ) {
- sc_signal_invalid_writer( name(), kind(),
- m_writer->name(), writer->name() );
- }
- }
当sc_signal<T>的write()方法被调用时,它首先检查当前值和新值是否一样,如果不是它将调用request_update()进行数据更新。如果定义了DEBUG_SYSTEMC宏,则调用:check_writer()进行动态规则检查。变量m_writer记录的是曾经调用过write()方法的进程的句柄,在进行规则检查时,check_writer()首先获得调用write()方法的进程的句柄,如果发现它的句柄与记录过的有效句柄不一样,就说明有第二个进程调用了write()方法,这就违反了“一个sc_signal<T>类只能被一个进程驱动”这个规则,这时候check_writer()调用sc_signal_invalid_writer()以通知写操作非法。
本文关键字:动态 电脑-单片机-自动控制,电子学习 - 基础知识 - 电脑-单片机-自动控制