SystemC犯错:键入不匹配成员分配

SystemC Make Errors: Type Mismatch Member Assignment

本文关键字:不匹配 成员 分配 犯错 SystemC      更新时间:2023-10-16

您好,我在尝试制作基本Systemc项目时看到了一些错误。它看起来像是略微不匹配的类型,但我对Systemc库中的类型还不够熟悉,无法真正知道问题是什么。我或多或少直接从本教程中获取了代码。

https://www.youtube.com/watch?v=ddsg4pmoucx4

目前,我的makefile看起来像

CXX=g++
OBJ= main.o fir_filter.o test_bench.o
INC=- -I /home/epi/jfrye_xilinx/SystemC/systemc-2.3.2/include -I /home/epi/jfrye_xilinx/SystemC/lib/fir_filter/src
LFLAGS=-L/home/epi/jfrye_xilinx/SystemC/systemc-2.3.2/lib-linux64
LIBS=-lsystemc
EXEC=test_fir
all: $(OBJ)
    $(CXX) $(OBJS) -o $(EXEC)
main.o: main.cpp
    $(CXX) $(INC) $(LFLAGS) $(LIBS) main.cpp
fir_filter.o: fir_filter.cpp fir_filter.h
    $(CXX) $(INC) $(LFLAGS) $(LIBS) fir_filter.cpp
test_bench.o: test_bench.cpp test_bench.h
    $(CXX) $(INC) $(LFLAGS) $(LIBS) test_bench.cpp

我在运行时看到这些错误

main.cpp:28:19:错误:无匹配的电话 (sc_core::sc_in<sc_dt::sc_uint<16> >) (sc_core::sc_signal<sc_dt::sc_int<16> >&)

fir-> inp(inp_sig);

main.cpp:29:21:错误:无匹配的电话 (sc_core::sc_out<sc_dt::sc_uint<16> >) (sc_core::sc_signal<sc_dt::sc_int<16> >&)

fir-> outp(Outp_sig);

这是main.cpp

#include <systemc.h>
#include "fir_filter.h"
#include "test_bench.h"
SC_MODULE(SYSTEM)
{
    test_bench  *tb;
    fir_filter  *fir;
    sc_signal<bool>     rst_sig;
    sc_signal< sc_int<16> > inp_sig;
    sc_signal< sc_int<16> > outp_sig;
    sc_clock clk_sig;
    SC_CTOR(SYSTEM)
        : clk_sig("clk_sig", 10, SC_NS)
    {
        tb = new test_bench("tb");
        tb->clk(clk_sig);
        tb->rst(rst_sig);
        tb->inp(inp_sig);
        tb->outp(outp_sig);
        fir = new fir_filter("fir");
        fir->clk(clk_sig);
        fir->rst(rst_sig);
        fir->inp(inp_sig);
        fir->outp(outp_sig);
    }
    ~SYSTEM()
    {
        delete tb;
        delete fir;
    }
};
SYSTEM *top = NULL;
int sc_main(int argc, char *argv[])
{
    top = new SYSTEM("top");
    sc_start();
    return 0;
}

最后,fir_filter.h

#include <systemc.h>
SC_MODULE( fir_filter )
{
    sc_in<bool>         clk;
    sc_in<bool>         rst;
    sc_in< sc_uint<16> >    inp;
    sc_out< sc_uint<16> >   outp;
    void fir_main();
    SC_CTOR( fir_filter ) 
    {
        SC_CTHREAD( fir_main, clk.pos());
        reset_signal_is( rst, true);
    }
};

更新

感谢提供的答案,我能够更改两个模块,以确保类型匹配,无论是签名还是未签名。

然而,制作仍然给我这个错误。我最初没有包括它,因为我没有意识到它会破坏汇编。

g :错误:-e或-x在输入是从标准输入制造中所需的: *** [main.o]错误1

在您的系统模块中,它不应该是:

sc_signal< sc_int<16> > inp_sig;
sc_signal< sc_int<16> > outp_sig;

但是:

sc_signal< sc_uint<16> > inp_sig;
sc_signal< sc_uint<16> > outp_sig;

在FIR滤波器模块中AS inpsc_in< sc_uint<16> >