Поведение списка чувствительности SystemC/управление контактами из основной программы

Я пишу простую программу System C для моделирования и логики. Список конфиденциальности имеет элементы a ,b . Я хочу вбить 0 ,1 в эти строки в основной программе и согласно определению списка чувствительности мой модуль and должен запуститься и дать мне новые значения.

#include<systemc.h>

SC_MODULE(digital_logic)
{
  sc_in<sc_logic> a,b;
  sc_out<sc_logic> c;

  SC_CTOR(digital_logic)
  {
    SC_METHOD (process);
    sensitive << a << b;
  }

  void process()
  {
    cout << "PRINT FROM MODULE\n";
    c = a.read() & b.read();
    cout << a.read() << b.read() << c << endl;
  }

};

int sc_main(int argc , char* argv[])
{
  sc_signal<sc_logic> a_in ,b_in , c_out , c_out2;
  a_in  = SC_LOGIC_1 , b_in = SC_LOGIC_1;

  digital_logic digital_and1("digital_and1");
  digital_and1 (a_in , b_in , c_out);

  sc_start(200,SC_NS);
  cout << "PRINT FROM SC_MAIN\n";

  a_in = SC_LOGIC_1;
  cout << c_out << endl;
  b_in = SC_LOGIC_0;
  cout << c_out << endl;
  b_in = SC_LOGIC_1;
  cout << c_out << endl;

  return 0;
}

Я ожидал, что, поскольку сигналы в списке чувствительности изменились, выходы также изменятся, но это o/p. Как изменить сигналы в основной программе, чтобы имитировался вентиль и без написания отдельного тестбенча.

OUTPUT
PRINT FROM MODULE
11X
PRINT FROM SC_MAIN
1
1
1

person kartik    schedule 24.06.2013    source источник


Ответы (1)


Вы должны поставить sc_start() между точкой, где вы хотите продолжить симуляцию. Нравится подписаться

a_in = SC_LOGIC_1;
b_in = SC_LOGIC_0;
sc_start(1,SC_NS);     // Add this
cout << c_out << endl;
b_in = SC_LOGIC_1;
sc_start(1,SC_NS);     // Add this
cout << c_out << endl;

В исходном коде вы просто последовательно присваиваете новое значение a_in и b_in. Он изменяет текущие значения a_in и b_in, но не влияет на текущее значение c_out, поскольку ваша программа не входит в ядро ​​моделирования SystemC для имитации изменения. Таким образом, следующее значение c_out не будет изменено вашим списком конфиденциальности a_in или b_in.

person jclin    schedule 24.06.2013