您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制SystemC进程-SC_THREAD 正文
SystemC进程-SC_THREAD

SystemC进程-SC_THREAD

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

      线程进程(Threaded Proecess)能够被挂起和重新激活。线程进程使用wait()挂起,当敏感表中有事件发生,线程进程被重新激活运行到遇到新的wait()语句在重新挂起。在一次仿真中,线程进程一旦退出,将不能再次进入。
      由于线程进程的这个特点,从理论上讲,用它可以描述几乎一切系统的行为。

      线程进程的一个方便的用途是用来描述验证平台( Testbench)的输入激励和输出获取。我们使用SC_THREAD为wb_sram设计一个激励生成模块stimulus_gen,其代码如下:

  1. #include "systEMC.h"  
  2. SC_MODULE(stimulus_gen)  
  3. {  
  4.  sc_in_clk clk_i;  
  5.  sc_in<bool> rst_i;  
  6.  sc_out<bool> stb_o,cyc_o;  
  7.  sc_out<bool> we_o;  
  8.  sc_in<bool> ack_i;  
  9.  sc_out<sc_uint<8> > adr_o;  
  10.  sc_in<sc_uint<8> > dat_i;  
  11.  sc_out<sc_uint<8> > dat_o;  
  12.  void main()  
  13.   {  
  14.   adr_o=0;  
  15.   dat_o=100;  
  16.   we_o=1;  
  17.   while(true) {   
  18.     wait();  
  19.     if(~ack_i)  
  20.     {  
  21.      stb_o=true;  
  22.      cyc_o=true;  
  23.      adr_o=adr_o.read()+1;  
  24.      dat_o=dat_o.read()+1;  
  25.      we_o=~we_o;  
  26.     }  
  27.     else 
  28.     {  
  29.       stb_o=false;  
  30.       cyc_o=false;   
  31.     }   
  32.  
  33.   }  
  34.   }  
  35.  
  36.  SC_CTOR(stimulus_gen)  
  37.  {  
  38.   SC_THREAD(main);  
  39.   sensitive<<clk_i.pos();  
  40.  };  
  41. }; 

      在时钟clk的每一个上升沿,void main()被激活一次,当执行到wait()函数,则重新被挂起,直到下一个clk的上升沿到来,void main()重新被激活,开始执行wait()后面接下来的代码,这里wait()的作用是将进程挂起,等待下一次被激活。




本文关键字:暂无联系方式电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制