sc_fifoの問題
sc_fifoには、write()、read() メンバ関数が用意されていて、
それを使ってアクセスができる。
しかし、channel経由でアクセスする場合は、->演算子を使う。
なぜ?
というわけで、最初の実験。
まずはsc_fifoへのアクセス方法を押さえよう。
#include
SC_MODULE(fifo_test1)
{
sc_in
void process(void);
SC_CTOR(fifo_test1) {
SC_THREAD(process);
sensitive << clk;
}
sc_fifo
};
void fifo_test1::process(void)
{
sc_int<16> rdata;
fifo.write(1);
fifo.write(2);
fifo.write(3);
wait();
std::cout << fifo.read() << std::endl;
std::cout << fifo.read() << std::endl;
std::cout << fifo.read() << std::endl;
sc_stop();
}
これはOK。ちゃんと1,2,3と表示される。
fifo.write(1); を fifo->write(1);に変えると
fifo_test1.cpp:10: error: base operand of `->' has non-pointer type `sc_core::sc_fifo
*** Error code 1
というエラーになる。
つまり、ある関数内部で、sc_fifoを宣言して、その中でアクセスする時は
read()/write()メンバ関数を使えばよい。
#include
SC_MODULE(fifo_test2)
{
sc_in
void process(void);
SC_CTOR(fifo_test2) {
pfifo = new sc_fifo
SC_THREAD(process);
sensitive << clk;
}
~fifo_test2() {
delete pfifo;
}
sc_fifo
};
void fifo_test2::process(void)
{
sc_int<16> rdata;
pfifo->write(1);
pfifo->write(2);
pfifo->write(3);
wait();
std::cout << pfifo->read() << std::endl;
std::cout << pfifo->read() << std::endl;
std::cout << pfifo->read() << std::endl;
sc_stop();
}
ポインタ経由のアクセスだと、->が普通にメンバ関数を呼び出している
ここまでは直感通り。
次に、sc_fifo_portsが何をしているか調べよう。
The comments to this entry are closed.


Comments