我試圖設計中的SystemC至極一個LFSR計數器的值應該是這個樣子:(click to see picture)錯誤:(E109)完全綁定失敗:端口未綁定 - SystemC的
我寫我的代碼,但我覺得療法是什麼worng與模塊shiftreg.h
和lfsr-feedback.h
之間的連接lfsr.h
文件,但我無法弄清楚是什麼問題。
我在終端運行時收到此錯誤信息:
Error: (E109) complete binding failed: port not bound: port 'top_p.LFSR_p.shiftReg_p.port_3' (sc_in)
In file: ../../../../src/sysc/communication/sc_port.cpp:231
這是main.cpp
文件的樣子:
#include <iostream>
#include "systemc.h"
#include "lfsr.h"
#include "stim_shiftReg.h"
SC_MODULE(TOP)
{
LFSR *LFSR_p;
stim_shiftReg *stim_shiftReg_p;
sc_clock sig_clk; //define clock pin
sc_signal<bool> sig_rst;
sc_signal<bool> sig_lshift;
sc_signal< sc_bv<8> > sig_out;
SC_CTOR(TOP) : sig_clk ("ClockSignal", 20, SC_NS)
{
stim_shiftReg_p = new stim_shiftReg("stim_shiftReg_p");
stim_shiftReg_p -> clk(sig_clk); //input bool
stim_shiftReg_p -> rst(sig_rst); //input bool
stim_shiftReg_p -> stim_lshift(sig_lshift); //input bool
stim_shiftReg_p -> stim_out(sig_out); //output sc_bv
LFSR_p = new LFSR("LFSR_p");
LFSR_p -> clk(sig_clk); //input bool
LFSR_p -> rst(sig_rst); //input bool
LFSR_p -> lshift(sig_lshift);
LFSR_p -> out(sig_out); //output sc_bv
}
~TOP(){
//free up memory
delete LFSR_p;
delete stim_shiftReg_p;
}
};
TOP *top_p = NULL;
int sc_main(int argc, char* argv[])
{
sc_set_time_resolution(1, SC_NS);
top_p = new TOP("top_p");
sc_start();
return 0;
}
這是lfsr.h
文件看起來的樣子:
#include"systemc.h"
#include"shiftReg.h"
#include"lfsr_feedback.h"
SC_MODULE(LFSR)
{
shiftReg *shiftReg_p;
lfsr_feedback *lfsr_feedback_p;
//define input
sc_in<bool> clk;
sc_in<bool> rst;
sc_in<bool> lshift;
//define output
sc_out<sc_bv<8> > out;
sc_signal<bool> rightin;
SC_CTOR(LFSR)
{
shiftReg_p = new shiftReg("shiftReg_p");
shiftReg_p -> clk(clk); //input bool
shiftReg_p -> rst(rst); //input bool
shiftReg_p -> lshift(lshift); //enable shift signal connection
shiftReg_p -> out(out); //output sc_bv
lfsr_feedback_p = new lfsr_feedback("lfsr_feedback_p");
lfsr_feedback_p -> clk(clk); //input bool
lfsr_feedback_p -> rst(rst); //input bool
lfsr_feedback_p -> rightin(rightin); //feedback signal
lfsr_feedback_p -> out(out); //output sc_bv
}
~LFSR()
{
//free up memory
delete shiftReg_p;
delete lfsr_feedback_p;
}
};
這是shiftReg.h
:
#include<iostream>
#include<systemc.h>
SC_MODULE(shiftReg) //'shiftReg' - Module name
{
//define input
sc_in<bool> clk;
sc_in<bool> rst;
sc_in<bool> lshift;
sc_in<bool> rightin;
//define output
sc_out<sc_bv<8> > out;
sc_bv<8> RegValue;
SC_CTOR(shiftReg) //'shiftReg' - Module name
{
SC_CTHREAD(ShiftReg, clk.pos());
async_reset_signal_is(rst, true);
}
private:
void ShiftReg()
{
//Reset actions
RegValue = (11111111); //Use RegValue to store the register value
wait();
std::cout << "Reset done! RegisterValue = " << RegValue << endl;
wait();
while(true)
{
if(lshift.read() == true)
{
RegValue = RegValue << 1; //shift to the left
RegValue[0] = rightin.read();
std::cout << "Left shift done! RegisterValue = " << RegValue << endl;
}
else //if both are set to FALSE, no action should happen
{
std::cout << "'lshift' is set to FALSE status. No shift is done!" << endl;
}
out.write(RegValue); //Write output value to the out port
wait();
}
};
};
這是lfsr_feedback.h
:
#include<iostream>
#include<systemc.h>
SC_MODULE(lfsr_feedback) //'lfsr_feedback' - Module name
{
sc_in<bool> clk;
sc_in<bool> rst;
sc_out<bool> rightin;
sc_in< sc_bv<8> > out;
sc_signal<bool> fb_xor, a, b, c, d;
SC_CTOR(lfsr_feedback) //'lfsr_feedback' - Module name
{
SC_CTHREAD(Feedaback_Gen, clk.pos());
async_reset_signal_is(rst, true);
}
private: void Feedaback_Gen()
{
wait();
while(true)
{
a = out[7]; b = out[5]; c = out[4]; d = out[3];
std::cout << "Load random bits" << endl;
fb_xor = (a^b)^(c^d);
std::cout << "Calculate xor value!" << rightin << endl;
rightin.write(fb_xor);
wait();
}
};
};
這是stim_shiftReg.h
:
#include "systemc.h"
SC_MODULE(stim_shiftReg)
{
//define stimuli input for shift register
sc_in<bool> clk;
sc_out<bool> rst;
sc_out<bool> stim_lshift;
//define stimuli output for shift register
sc_in<sc_bv<8> > stim_out;
SC_CTOR(stim_shiftReg) { //'stim_shiftReg' module name
SC_CTHREAD(Stim_Shift, clk.pos());
}
private:
void Stim_Shift() {
//Simulate reset signal
wait();
rst.write(true);
wait();
rst.write(false);
//Write input value for 'in'
stim_lshift.write(true); //enable shifting
wait(40000);
sc_stop();
};
};
注:我不知道有關端口out
這是lfsr.h
。它是來自shiftReg.h
的sc_out<T>
以及作爲輸出形式LFSR.h
。但同一個端口應該是lfsr_feedback.h
的輸入。
非常感謝!
我不知道如何在Eclipse中使用開普勒C++ 11 ... – Limko
你可以設置在編譯器設置頁面中的-std = C++ 11的項目下不可用。但是你使用的是哪個版本的編譯器? – AmeyaVS