学海荡舟手机网
导航

主页 > 电子设备技术 > 电器电路基础 > > 详细内容

SystemC-sc_in_clk和sc_clock

  时钟是同步数字逻辑中必不可少的基本元素。前文中多次提到的sc_in_clk表示将要定义一个时钟输入信号,实际上在Syst内核代码中我们可以找到:

      typedef sc_in<bool> sc_in_clk;

      因此,sc_in<bool>与sc_in_clk在语法上是等价的。

      此外,在Syst中,时钟被作为一个特殊的对象处理,它就是sc_ck类。我们首先来看看它的构造函数,如下所示  

  1. sc_clock();  
  2. explit sc_clock( sc_module_name name_ );  
  3. sc_clock( const char* name_,  
  4.    const sc_time& period_,  
  5.    double duty_cycle_ = 0.5,  
  6.    const sc_time& start_time_ = SC_ZERO_TIME,  
  7.    bool posedge_first_ = true );  
  8. sc_clock( const char* name_,  
  9.    double period_v_,  
  10.    sc_time_unit period_tu_,  
  11.    double duty_cycle_ = 0.5 );  
  12. sc_clock( const char* name_,  
  13.    double period_v_,  
  14.    sc_time_unit period_tu_,  
  15.    double duty_cycle_,  
  16.    double start_time_v_,  
  17.    sc_time_unit start_time_tu_,  
  18.    bool posedge_first_ = true ); 

  在SystemC2.2中,sc_clock一共有5个重载的构造函数。name_是时钟的名字,period_ 和period_v_是时钟的,period_tu_是时钟的时间单位,duty_cycle_是占空比,start_time_v_和 start_time_是时钟初始第一逻辑值的持续时间,posedge_first_是第一个逻辑值是高还是低电平。

      下面的语句定义的时钟其波形如图所示:

      (1)sc_clock clk1("clk1", 20, 0.5, 5, true);

 

 图1 clk1的波形


      (2)sc_clock clk2("clk2", 20, 0.5, 0, true);

 

 图2 clk2的波形


      在clk1和clk2的定义中,没有给出时钟的具体时间单位,系统默认的时间单位将被采用,不同的系统的默认时间单位可能不同,这将不利于IP核的设计复用。

      假设clk1的周期为50M,即时间单位应该为纳秒(ns),则更合适的定义方法为:

      sc_clock clk1("clk1", 20, SC_NS,0.5, 5,SC_NS, true);

      其它常见的时钟的定义方法如下面的例子所示:

  1. sc_clock clk3(“Clk3”); //not recommended  
  2. sc_clock clk4(“Clk4”,15);// //not recommended  
  3. sc_clock clk5(“Clk5”,40,SC_NS); // recommended  
  4. sc_clock clk6(“Clk6”,40,SC_NS,0.4); // recommended  
  5. sc_time time1( 20, SC_NS );sc_clock clk7( “clk7”, time1 );//recommanded 


      在clk7的定义中,首先引入了一个sc_time类型常量time1,然后通过它来初始化clk7。

      sc_time是SystemC时间类型,它最常用的构造函数为sc_time( double, sc_time_unit ),第一个参数为时间的长度,第二个参数为时间的单位。

 


相关文章