2023-12-22 09:52:50 +01:00
|
|
|
#ifndef _TESTBENCH_H_
|
|
|
|
#define _TESTBENCH_H_
|
|
|
|
|
|
|
|
#include <ahb/pin/initiator.h>
|
|
|
|
#include <ahb/pin/target.h>
|
|
|
|
#include <scc.h>
|
|
|
|
|
|
|
|
using namespace sc_core;
|
|
|
|
|
|
|
|
class testbench : public sc_core::sc_module {
|
|
|
|
public:
|
2023-12-22 20:42:21 +01:00
|
|
|
enum { DWIDTH = 32 };
|
2023-12-22 09:52:50 +01:00
|
|
|
sc_core::sc_time clk_period{10, sc_core::SC_NS};
|
|
|
|
sc_core::sc_clock clk{"clk", clk_period, 0.5, sc_core::SC_ZERO_TIME, true};
|
|
|
|
sc_core::sc_signal<bool> rst_n{"rst_n"};
|
|
|
|
// initiator side
|
|
|
|
tlm::scc::initiator_mixin<tlm::tlm_initiator_socket<DWIDTH>> isck{"isck"};
|
|
|
|
ahb::pin::initiator<DWIDTH> intor_bfm{"intor_bfm"};
|
|
|
|
// signal accurate bus
|
|
|
|
sc_core::sc_signal<sc_dt::sc_uint<32>> HADDR{"HADDR"};
|
|
|
|
sc_core::sc_signal<sc_dt::sc_uint<3>> HBURST{"HBURST"};
|
|
|
|
sc_core::sc_signal<bool> HMASTLOCK{"HMASTLOCK"};
|
|
|
|
sc_core::sc_signal<sc_dt::sc_uint<4>> HPROT{"HPROT"};
|
|
|
|
sc_core::sc_signal<sc_dt::sc_uint<3>> HSIZE{"HSIZE"};
|
|
|
|
sc_core::sc_signal<sc_dt::sc_uint<2>> HTRANS{"HTRANS"};
|
|
|
|
sc_core::sc_signal<sc_dt::sc_uint<DWIDTH>> HWDATA{"HWDATA"};
|
|
|
|
sc_core::sc_signal<bool> HWRITE{"HWRITE"};
|
|
|
|
sc_core::sc_signal<sc_dt::sc_uint<DWIDTH>> HRDATA{"HRDATA"};
|
|
|
|
sc_core::sc_signal<bool> HREADY{"HREADY"};
|
|
|
|
sc_core::sc_signal<bool> HRESP{"HRESP"};
|
|
|
|
sc_core::sc_signal<bool> HSEL{"HSEL"};
|
|
|
|
// target side
|
|
|
|
ahb::pin::target<DWIDTH, 32> tgt_bfm{"tgt_bfm"};
|
|
|
|
tlm::scc::target_mixin<tlm::tlm_target_socket<scc::LT>> tsck{"tsck"};
|
|
|
|
|
|
|
|
public:
|
|
|
|
SC_HAS_PROCESS(testbench);
|
2023-12-22 20:42:21 +01:00
|
|
|
testbench()
|
|
|
|
: testbench("testbench") {}
|
2023-12-22 09:52:50 +01:00
|
|
|
testbench(sc_core::sc_module_name nm)
|
|
|
|
: sc_core::sc_module(nm) {
|
|
|
|
intor_bfm.HCLK_i(clk);
|
|
|
|
tgt_bfm.HCLK_i(clk);
|
|
|
|
// bfm to signals
|
|
|
|
isck(intor_bfm.tsckt);
|
|
|
|
intor_bfm.HRESETn_i(rst_n);
|
|
|
|
intor_bfm.HADDR_o(HADDR);
|
|
|
|
intor_bfm.HBURST_o(HBURST);
|
|
|
|
intor_bfm.HMASTLOCK_o(HMASTLOCK);
|
|
|
|
intor_bfm.HPROT_o(HPROT);
|
|
|
|
intor_bfm.HSIZE_o(HSIZE);
|
|
|
|
intor_bfm.HTRANS_o(HTRANS);
|
|
|
|
intor_bfm.HWDATA_o(HWDATA);
|
|
|
|
intor_bfm.HWRITE_o(HWRITE);
|
|
|
|
intor_bfm.HRDATA_i(HRDATA);
|
|
|
|
intor_bfm.HREADY_i(HREADY);
|
|
|
|
intor_bfm.HRESP_i(HRESP);
|
|
|
|
// signals to bfm
|
|
|
|
tgt_bfm.HRESETn_i(rst_n);
|
|
|
|
tgt_bfm.HADDR_i(HADDR);
|
|
|
|
tgt_bfm.HBURST_i(HBURST);
|
|
|
|
tgt_bfm.HMASTLOCK_i(HMASTLOCK);
|
|
|
|
tgt_bfm.HPROT_i(HPROT);
|
|
|
|
tgt_bfm.HSIZE_i(HSIZE);
|
|
|
|
tgt_bfm.HTRANS_i(HTRANS);
|
|
|
|
tgt_bfm.HWDATA_i(HWDATA);
|
|
|
|
tgt_bfm.HWRITE_i(HWRITE);
|
|
|
|
tgt_bfm.HSEL_i(HSEL);
|
|
|
|
tgt_bfm.HRDATA_o(HRDATA);
|
|
|
|
tgt_bfm.HREADY_o(HREADY);
|
|
|
|
tgt_bfm.HRESP_o(HRESP);
|
|
|
|
tgt_bfm.isckt(tsck);
|
|
|
|
}
|
|
|
|
|
2023-12-22 20:42:21 +01:00
|
|
|
void run1() {}
|
2023-12-22 09:52:50 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _TESTBENCH_H_
|