FPGA入门教程 FPGA架构教程 Verilog教程 Verilog-2001SystemC教程
返回首页
当前位置: FPGA主页 > FPGA教程 > SystemC教程 >

3.12 SystemC动态规则检查

时间:2010-03-31 20:59来源:未知 作者:admin 点击:
有些规则检查只有运行时才能够进行。运行时进行的规则检查叫动态规则检查。我们下面给出一个sc_signalT类只能被一个进程驱动这个规则的动态检查部分的代码: template class T inline v

      有些规则检查只有运行时才能够进行。运行时进行的规则检查叫动态规则检查。我们下面给出“一个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.     }  
  22. }  

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

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名:密码: 验证码:点击我更换图片
推荐内容