adds AHB pin level adapter tests
This commit is contained in:
@ -10,20 +10,6 @@ using namespace sc_core;
|
||||
|
||||
factory::add<testbench> tb;
|
||||
|
||||
struct {
|
||||
unsigned int ResetCycles{4};
|
||||
unsigned int BurstLengthByte{16};
|
||||
// unsigned int BurstLengthByte{32};
|
||||
unsigned int BurstSizeBytes{8};
|
||||
// unsigned int NumberOfIterations{8};
|
||||
unsigned int NumberOfIterations{2};
|
||||
unsigned int CachelineSizeBytes={64}; //
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> read_tx;
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> write_tx;
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> snoop_tx;
|
||||
unsigned resp_cnt{0};
|
||||
} state;
|
||||
|
||||
int snoop_id=0;
|
||||
|
||||
bool operator==(tlm::tlm_generic_payload const& a, tlm::tlm_generic_payload const& b){
|
||||
@ -77,31 +63,6 @@ inline void randomize(tlm::tlm_generic_payload& gp) {
|
||||
req_cnt++;
|
||||
}
|
||||
|
||||
unsigned testbench::transport(tlm::tlm_generic_payload& trans) {
|
||||
SCCDEBUG(__FUNCTION__)<<" update snoop trans, with snoop_id = " << snoop_id;
|
||||
// SCCDEBUG(__FUNCTION__)<<" in transport with trans " << trans;
|
||||
// extracting address and snoop_e from ac_trans and pack them into cache data trans
|
||||
auto ac_address = trans.get_address();
|
||||
auto ext = trans.get_extension<ace_extension>();
|
||||
auto ac_snoop=ext->get_snoop();
|
||||
|
||||
for(size_t i = 0; i < trans.get_data_length(); ++i) {
|
||||
*(trans.get_data_ptr() + i) = i % 2 ? i : 128;
|
||||
}
|
||||
//SCCDEBUG(__FUNCTION__)<<" vector size " <<state.snoop_tx[snoop_id].second.size();
|
||||
state.snoop_tx[snoop_id].second.emplace_back(&trans);
|
||||
|
||||
/*
|
||||
ext->set_snoop_data_transfer(true);
|
||||
ext->set_snoop_error(false);
|
||||
ext->set_pass_dirty(false);
|
||||
ext->set_shared(false);
|
||||
ext->set_snoop_was_unique(false);
|
||||
*/
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
template<typename STATE>
|
||||
unsigned run_scenario(STATE& state){
|
||||
auto& dut = factory::get<testbench>();
|
||||
@ -120,6 +81,18 @@ unsigned run_scenario(STATE& state){
|
||||
state.resp_cnt++;
|
||||
return 0;
|
||||
});
|
||||
dut.transport_cb = [&state](tlm::tlm_generic_payload& trans) -> unsigned {
|
||||
SCCDEBUG(__FUNCTION__)<<" update snoop trans, with snoop_id = " << snoop_id;
|
||||
// extracting address and snoop_e from ac_trans and pack them into cache data trans
|
||||
auto ac_address = trans.get_address();
|
||||
auto ext = trans.get_extension<ace_extension>();
|
||||
auto ac_snoop=ext->get_snoop();
|
||||
for(size_t i = 0; i < trans.get_data_length(); ++i) {
|
||||
*(trans.get_data_ptr() + i) = i % 2 ? i : 128;
|
||||
}
|
||||
state.snoop_tx[snoop_id].second.emplace_back(&trans);
|
||||
return 1;
|
||||
};
|
||||
|
||||
dut.rst.write(false);
|
||||
sc_start(state.ResetCycles*dut.clk.period());
|
||||
@ -201,6 +174,17 @@ unsigned run_scenario(STATE& state){
|
||||
}
|
||||
|
||||
TEST_CASE("ace_burst_alignment", "[AXI][pin-level]") {
|
||||
struct {
|
||||
unsigned int ResetCycles{4};
|
||||
unsigned int BurstLengthByte{16};
|
||||
unsigned int BurstSizeBytes{8};
|
||||
unsigned int NumberOfIterations{2};
|
||||
unsigned int CachelineSizeBytes={64}; //
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> read_tx;
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> write_tx;
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> snoop_tx;
|
||||
unsigned resp_cnt{0};
|
||||
} state;
|
||||
|
||||
state.resp_cnt=0;
|
||||
auto cycles = run_scenario(state);
|
||||
@ -250,7 +234,19 @@ TEST_CASE("ace_burst_alignment", "[AXI][pin-level]") {
|
||||
|
||||
}
|
||||
|
||||
TEST_CASE("axi4_narrow_burst", "[AXI][pin-level]") {
|
||||
TEST_CASE("ace_narrow_burst", "[AXI][pin-level]") {
|
||||
struct {
|
||||
unsigned int ResetCycles{4};
|
||||
unsigned int BurstLengthByte{16};
|
||||
unsigned int BurstSizeBytes{8};
|
||||
unsigned int NumberOfIterations{2};
|
||||
unsigned int CachelineSizeBytes={64}; //
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> read_tx;
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> write_tx;
|
||||
std::unordered_map<unsigned, std::pair<std::vector<tlm::scc::tlm_gp_shared_ptr>, std::vector<tlm::scc::tlm_gp_shared_ptr>>> snoop_tx;
|
||||
unsigned resp_cnt{0};
|
||||
} state;
|
||||
|
||||
state.resp_cnt=0;
|
||||
auto cycles = run_scenario(state);
|
||||
|
||||
|
@ -27,14 +27,14 @@ public:
|
||||
axi::ace_initiator_socket<bus_cfg::BUSWIDTH> intor{"ace_intor"};
|
||||
axi::pin::ace_initiator<bus_cfg> intor_bfm{"ace_intor_bfm"};
|
||||
// signal accurate bus
|
||||
axi::aw_ch_ace<bus_cfg, axi::signal_types> aw;
|
||||
axi::wdata_ch_ace<bus_cfg, axi::signal_types> wdata;
|
||||
axi::b_ch_ace<bus_cfg, axi::signal_types> b;
|
||||
axi::ar_ch_ace<bus_cfg, axi::signal_types> ar;
|
||||
axi::rresp_ch_ace<bus_cfg, axi::signal_types> rresp;
|
||||
axi::ac_ch_ace<bus_cfg, axi::signal_types> ac;
|
||||
axi::cr_ch_ace<bus_cfg, axi::signal_types> cr;
|
||||
axi::cd_ch_ace<bus_cfg, axi::signal_types> cd;
|
||||
axi::aw_ace<bus_cfg, axi::signal_types> aw;
|
||||
axi::wdata_ace<bus_cfg, axi::signal_types> wdata;
|
||||
axi::b_ace<bus_cfg, axi::signal_types> b;
|
||||
axi::ar_ace<bus_cfg, axi::signal_types> ar;
|
||||
axi::rresp_ace<bus_cfg, axi::signal_types> rresp;
|
||||
axi::ac_ace<bus_cfg, axi::signal_types> ac;
|
||||
axi::cr_ace<bus_cfg, axi::signal_types> cr;
|
||||
axi::cd_ace<bus_cfg, axi::signal_types> cd;
|
||||
|
||||
axi::pin::ace_target<bus_cfg> tgt_bfm{"ace_tgt_bfm"};
|
||||
// target side
|
||||
@ -93,9 +93,8 @@ public:
|
||||
|
||||
}
|
||||
|
||||
unsigned transport(tlm::tlm_generic_payload& trans) override ;
|
||||
void run1() {
|
||||
}
|
||||
unsigned transport(tlm::tlm_generic_payload& trans) override { if(transport_cb) return transport_cb(trans); else return 0;}
|
||||
std::function<unsigned(tlm::tlm_generic_payload&)> transport_cb;
|
||||
};
|
||||
|
||||
#endif // _TESTBENCH_H_
|
||||
|
Reference in New Issue
Block a user