您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制SystemC动态规则检查 正文
SystemC动态规则检查

SystemC动态规则检查

点击数:7109 次   录入时间:03-04 11:44:39   整理:http://www.55dianzi.com   电脑-单片机-自动控制

      有些规则检查只有运行时才能够进行。运行时进行的规则检查叫动态规则检查。我们下面给出“一个sc_signal<T>类只能被一个进程驱动”这个规则的动态检查部分的代码:

  1. template <class T>   
  2. inline void sc_signal<T>::write( const T& value_ )  
  3. {  
  4. #ifdef DEBUG_SYSTEMC  
  5.     check_writer();  
  6. #endif  
  7.    m_new_val = value_;  
  8.     if( !( m_new_val == m_cur_val ) ) {  
  9.    request_update();  
  10.    }  
  11. }  
  12. template <class T>  
  13. inline void sc_signal<T>::check_writer()  
  14. {  
  15.    sc_process_b* writer = sc_get_curr_process_handle();  
  16.     if( m_writer == 0 ) {  
  17.    m_writer = writer;  
  18.     } else if( m_writer != writer ) {  
  19.     sc_signal_invalid_writer( name(), kind(),  
  20.                   m_writer->name(), writer->name() );  
  21.     }  

      当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()以通知写操作非法。




本文关键字:动态  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制

上一篇:SystemC-基本通道