Jump to content
Sign in to follow this  
viswanathb

Error when trying Clock divider or multiplier circuit using sc_clock

Recommended Posts

My intention is to devise a clock multiplier or divider circuit based on a reference clock.

 

//CLOCK DUT
//clk_dut.h

#include "systemc.h"

SC_MODULE(clk_dut)
 {
  void gen()
  {
  double ref_clk =100;
  double clk1_div =10;
  double clk2_div=5;

sc_clock refclk("refclk",ref_clk,SC_NS);
sc_clock clk1("clk1",ref_clk/clk1_div,SC_NS);
sc_clock clk2("clk2",ref_clk/clk2_div,SC_NS);
  }
 SC_CTOR(clk_dut)
  {
   SC_THREAD(gen);
    sensitive << refclk.pos() << clk1.pos() << clk2.pos();
  }
};


//TOP MODULE

#include "systemc.h"
#include "clk_dut.h"

int sc_main(int argc,char *argv[])
 {
//instantiating the dut
clk_dut dut("dut");

dut.gen();

 sc_start(100,SC_NS);

return0;
  }
 

Error Message

 

clk_dut.h: In constructor ‘clk_dut::clk_dut(sc_core::sc_module_name)’:
clk_dut.h:18: error: ‘refclk’ was not declared in this scope
clk_dut.h:18: error: ‘clk1’ was not declared in this scope
clk_dut.h:18: error: ‘clk2’ was not declared in this scope
./sim: Command not found.
Please help me resolve this.

Also When i try to trace the clock files in the SC_THREAD after the sensitivity list using

 

sc_trace_file *fp;

fp=sc_create_vcd_trace_file("wave");

sc_trace(fp,refclk,"clk");

I get the same kind of scope error.

Please help me resolve this.

Share this post


Link to post
Share on other sites

You've declared your clock objects as member variables of an SC_THREAD, which is a bad idea - when the thread ends, the clocks disappear. Also your thread has no infinite loop, so it will end immediately.

The clock objects should be class members, something like this:

//CLOCK DUT
//clk_dut.h

#include "systemc.h"

SC_MODULE(clk_dut)
 {

  sc_clock refclk;
  sc_clock clk1;
  sc_clock clk2;


 SC_CTOR(clk_dut): refclk("refclk",100,SC_NS), 
                   clk1("clk1",10,SC_NS),
                   clk2("clk2",5,SC_NS)
  {

  }
};

If you want to declare them in a module, as you've shown, then you'll probably want to bind the clocks to some ports as well,

 

regards

Alan

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×