Systemc: Nbit Adder от Full Adder: в коде нет ошибок, но он не запущен

Я новичок в systemc, и мне нужно использовать модули Full Adder для создания N_bit Adder.
Мой код не показывает ошибок, но не запускается, может кто-то предложить предложения по этому, я был бы очень признателен. Я предполагаю, что проблема связана с массивом модулей и сигналов или как они связаны друг с другом.

Вот код:

Заголовочный файл N_bit

#include "Full_Adder.h"#define N 8

SC_MODULE (NAdder){
sc_vector<FullAdder> FA_vec;

sc_vector< sc_in<sc_logic> > A_vec,B_vec;
sc_vector< sc_out<sc_logic> > S_vec;

sc_in <bool> clk;
sc_in <sc_logic> nci;
sc_out <sc_logic> nco;

NAdder(sc_core::sc_module_name, unsigned Nm=N):FA_vec("FAdder_",Nm)
{
A_vec.init(Nm);
B_vec.init(Nm);
S_vec.init(Nm);

for(unsigned i=0;i<Nm;++i)
{
FA_vec[i].ia(A_vec[i]);
FA_vec[i].ib(B_vec[i]);
FA_vec[i].is(S_vec[i]);
FA_vec[i].clk(clk);
if(i!=0)
FA_vec[i].ici(FA_vec[i-1].ico);
}
FA_vec[0].ici(nci);
FA_vec[Nm].ico(nco); //Nm or Nm-1 ???
}};

Заголовок испытательного стенда

#include<systemc.h>

SC_MODULE (testbench){
sc_in<bool> clk;
sc_vector< sc_out<sc_logic> > A_p,B_p;
sc_vector< sc_in<sc_logic> > SUM_p;
sc_out<sc_logic>  CIN_p;
sc_in<sc_logic>   COUT_p;

SC_CTOR (testbench)
{
A_p.init(N);
B_p.init(N);
SUM_p.init(N);
SC_CTHREAD (process,clk.pos());
}
private:
void process()
{
//A_p="00001111";
//B_p[i]="11110000";
//wait(200);
for(int i=0;i<N;i++)
{
A_p[i]=sc_logic_0;
B_p[i]=sc_logic_0;
wait(200);
}}};

И, наконец, это файл cpp, где модули фактически соединены вместе, и симуляция запускается и записывает файл VCD.

#include "N_Adder.h"#include "TB_N_Adder.h"
int sc_main(int argc, char* argv[])
{
sc_clock clk("clock",10,SC_PS);
sc_vector < sc_signal<sc_logic> > A_s,B_s,SUM_s;
A_s.init(N);
B_s.init(N);
SUM_s.init(N);

sc_signal<sc_logic> CIN_s,COUT_s;

NAdder nadder("Nbit_Adder");
nadder.A_vec(A_s);
nadder.B_vec(B_s);
nadder.S_vec(SUM_s);
nadder.clk(clk);
nadder.nci(CIN_s);
nadder.nco(COUT_s);

testbench test1("TestBench1");
test1.clk(clk);
test1.A_p(A_s);
test1.B_p(B_s);
test1.CIN_p(CIN_s);
test1.SUM_p(SUM_s);
test1.COUT_p(COUT_s);

sc_trace_file *tf = sc_create_vcd_trace_file ("N_adder");

//tf->set_time_unit(10, SC_PS);
sc_trace(tf, clk, "Clock");
sc_trace(tf, CIN_s, "Carry_in");
sc_trace(tf, COUT_s, "Carry_out");
for(int i=0; i<N;i++)
{
sc_trace(tf, A_s[i], "A");
sc_trace(tf, B_s[i], "B");
sc_trace(tf, SUM_s[i], "SUM");
}
sc_start(10,SC_NS);

sc_close_vcd_trace_file(tf);    // close trace file

cout << "\n\t\t---Success---\n\t\t-----End-----\n";

return(0);

}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]