我的目标是创建一个ALU,用桶管加入和减法
alu.h
main
alu.cpp
#include "systemc.h"
SC_MODULE(alu){
sc_in<bool> op;
sc_in<sc_int<8> > a;
sc_inout<sc_int<8> > b;
sc_out<sc_int<8> > output;
void alu_method();
SC_CTOR(alu) {
SC_METHOD(alu_method);
dont_initialize();
sensitive << a,b,op;
}
};
barrelshift.h
#include "alu.h"
void ALU::alu_method(){
if (op.read() == 0){
//substract
out.write(in.read() - in_bs.read());
}
else{
//add
out.write(in.read() + in_bs.read());
}
}
barrelshift.cpp
#include <systemc.h>
void make_barrel();
SC_MODULE(barrel_shift) {
sc_in<bool> clk;
sc_in<bool> enable;
sc_in<bool> left_right;
sc_in<sc_uint<3> > shift_amt;
sc_in<sc_int<8> > din;
sc_inout<sc_int<8> > dout;
void barrel_method();
SC_CTOR(barrel_shift) {
SC_METHOD(barrel_method);
dont_initialize();
sensitive << clk.pos(); //edge sensitive
}
};
sc_main.cpp
#include "barrelshift.h"
void barrel_shift :: barrel_method(){
if(enable.read() == 1){
if(left_right.read() == 0){ //shift left
dout.write(din.read() << shift_amt.read());
}else if(left_right.read() == 1){ // right shift
dout.write(din.read() >> shift_amt.read());
}
}
else
cout << "Not enabled "<<endl;
dout <= din;
}
构建它时没有错误。但每当我尝试执行它时,我都会收到以下错误:
错误:(E112)get interface failed:port is not bound:port&#39; myALU.port_0&#39; (sc_in) 在文件中:sc_port.cpp:231
造成这种情况的原因是什么?如何解决?
答案 0 :(得分:5)
错误消息
Error: (E112) get interface failed: port is not bound: port 'myALU.port_0' (sc_in)
表示端口myALU.port_0
未绑定到信号。但是alu
模块中的哪个端口对应port_0
?
最好将所有端口和信号命名 - 无论您使用何种类型的硬件描述语言 - 都可以使这样的错误更易于诊断。
在alu
构造函数中命名端口:
SC_CTOR(alu) :
op("op"),
a("a"),
b("b"),
output("output")
{
// ...
我无法再现您所看到的错误。我看到了这个错误(在为所有端口和信号提供名称之后):
Error: (E115) sc_signal<T> cannot have more than one driver:
signal `signal_5' (sc_signal)
first driver `myShifter.dout' (sc_inout)
second driver `myALU.b' (sc_inout)
我注意到您的代码中存在其他一些问题:
alu_method()
中使用了错误的变量名称。sc_start()
未在sc_main()
中调用。sensitive
中的alu()
来电无效 - 应为sensitive << a << b << op;
答案 1 :(得分:0)
问题在于alu的敏感性列表
应该是
敏感&lt;&lt; a&lt;&lt; b&lt;&lt;运算;
答案 2 :(得分:0)
正如@DarrylLawson正确指出的那样,此错误消息表明端口myALU.port_0
没有绑定到信号(如果在构造函数中为端口指定了名称,则名称会更清楚)。
一个重要的细微差别是,它表示在给出错误时端口未绑定到信号。您可能有绑定它的代码,但这仅在详细说明的某个时候执行。如果您尝试在此之前使用该端口(例如,在模块的构造函数内部),则仍会收到此错误消息。在这种情况下,错误将在时间0发生。