[872] | 1 | /** |
---|
| 2 | * \file dspin_memcache_cc_test.cpp |
---|
| 3 | * \date October 10, 2014 |
---|
| 4 | * \author Cesar Fuguet <cesar.fuguet-tortolero@lip6.fr> |
---|
| 5 | */ |
---|
| 6 | #include "dspin_memcache_cc_test.h" |
---|
| 7 | #include <cstdlib> |
---|
| 8 | |
---|
| 9 | #define tmpl(x) template<size_t M2P_WIDTH, size_t P2M_WIDTH> x \ |
---|
| 10 | DspinMemcacheCcTest<M2P_WIDTH, P2M_WIDTH> |
---|
| 11 | |
---|
| 12 | namespace soclib { namespace caba { |
---|
| 13 | |
---|
| 14 | tmpl(/**/)::DspinMemcacheCcTest(sc_module_name name) : |
---|
| 15 | BaseModule(name), |
---|
| 16 | m_srcid(0), |
---|
| 17 | r_gen_test_fsm("r_gen_test_fsm"), |
---|
| 18 | r_sign("r_sign") |
---|
| 19 | { |
---|
| 20 | SC_METHOD(transition); |
---|
| 21 | dont_initialize(); |
---|
| 22 | sensitive << p_clk.pos(); |
---|
| 23 | |
---|
| 24 | SC_METHOD(genMoore); |
---|
| 25 | dont_initialize(); |
---|
| 26 | sensitive << p_clk.neg(); |
---|
| 27 | } |
---|
| 28 | |
---|
| 29 | tmpl(/**/)::~DspinMemcacheCcTest() |
---|
| 30 | { |
---|
| 31 | |
---|
| 32 | } |
---|
| 33 | |
---|
| 34 | tmpl(void)::transition() |
---|
| 35 | { |
---|
| 36 | if (!p_resetn.read()) { |
---|
| 37 | r_gen_test_fsm = P2M_HEADER; |
---|
| 38 | r_sign = 1; |
---|
| 39 | return; |
---|
| 40 | } |
---|
| 41 | |
---|
| 42 | switch(r_gen_test_fsm.read()) { |
---|
| 43 | case P2M_HEADER: |
---|
| 44 | if (!p_dspin_p2m.read.read()) break; |
---|
| 45 | |
---|
| 46 | assert(!p_dspin_m2p.write.read()); |
---|
| 47 | assert(!p_dspin_clack.write.read()); |
---|
| 48 | |
---|
| 49 | r_gen_test_fsm = P2M_SIGNATURE; |
---|
| 50 | |
---|
| 51 | #if SOCLIB_MODULE_DEBUG |
---|
| 52 | std::cout << this->name() << ":P2M_HEADER" << std::endl; |
---|
| 53 | #endif |
---|
| 54 | break; |
---|
| 55 | |
---|
| 56 | case P2M_SIGNATURE: |
---|
| 57 | if (!p_dspin_p2m.read.read()) break; |
---|
| 58 | |
---|
| 59 | assert(!p_dspin_m2p.write.read()); |
---|
| 60 | assert(!p_dspin_clack.write.read()); |
---|
| 61 | |
---|
| 62 | r_gen_test_fsm = WAIT_M2P_AND_CLACK; |
---|
| 63 | |
---|
| 64 | #if SOCLIB_MODULE_DEBUG |
---|
| 65 | std::cout << this->name() << ":P2M_SIGNATURE" << std::endl; |
---|
| 66 | #endif |
---|
| 67 | break; |
---|
| 68 | |
---|
| 69 | case WAIT_M2P_AND_CLACK: |
---|
| 70 | { |
---|
| 71 | if (!p_dspin_m2p.write.read() || !p_dspin_clack.write.read()) break; |
---|
| 72 | |
---|
| 73 | uint64_t m2p_dest = |
---|
| 74 | FlitParam::dspin_get(p_dspin_m2p.data.read(), |
---|
| 75 | FlitParam::TEST_M2P_DEST); |
---|
| 76 | uint64_t m2p_test = |
---|
| 77 | FlitParam::dspin_get(p_dspin_m2p.data.read(), |
---|
| 78 | FlitParam::TEST_M2P_TEST); |
---|
| 79 | uint64_t clack_dest = |
---|
| 80 | FlitParam::dspin_get(p_dspin_clack.data.read(), |
---|
| 81 | FlitParam::TEST_CLACK_DEST); |
---|
| 82 | uint64_t clack_test = |
---|
| 83 | FlitParam::dspin_get(p_dspin_clack.data.read(), |
---|
| 84 | FlitParam::TEST_CLACK_TEST); |
---|
| 85 | |
---|
| 86 | assert(!p_dspin_m2p.eop.read()); |
---|
| 87 | assert(!p_dspin_clack.eop.read()); |
---|
| 88 | assert((uint32_t)m2p_dest == m_srcid); |
---|
| 89 | assert((uint32_t)clack_dest == m_srcid); |
---|
| 90 | assert(m2p_test); |
---|
| 91 | assert(clack_test); |
---|
| 92 | |
---|
| 93 | r_gen_test_fsm = CHECK_SIGNATURE; |
---|
| 94 | |
---|
| 95 | #if SOCLIB_MODULE_DEBUG |
---|
| 96 | std::cout << this->name() << ":WAIT_M2P_AND_CLACK" << std::endl; |
---|
| 97 | #endif |
---|
| 98 | break; |
---|
| 99 | } |
---|
| 100 | |
---|
| 101 | case CHECK_SIGNATURE: |
---|
| 102 | { |
---|
| 103 | uint64_t m2p_sign = |
---|
| 104 | FlitParam::dspin_get(p_dspin_m2p.data.read(), |
---|
| 105 | FlitParam::TEST_M2P_SIGNATURE); |
---|
| 106 | uint64_t clack_sign = |
---|
| 107 | FlitParam::dspin_get(p_dspin_clack.data.read(), |
---|
| 108 | FlitParam::TEST_CLACK_SIGNATURE); |
---|
| 109 | |
---|
| 110 | assert((uint32_t)(m2p_sign & ((1ULL << 32) - 1)) == |
---|
| 111 | r_sign.read()); |
---|
| 112 | assert((uint32_t)(m2p_sign >> 32) == |
---|
| 113 | (r_sign.read() & ((1 << 7) - 1))); |
---|
| 114 | assert((uint32_t)(clack_sign & ((1ULL << 32) - 1)) == |
---|
| 115 | r_sign.read()); |
---|
| 116 | assert((uint32_t)(clack_sign >> 32) == |
---|
| 117 | (r_sign.read() & ((1 << 7) - 1))); |
---|
| 118 | |
---|
| 119 | if ((uint32_t)(m2p_sign & ((1ULL << 32) - 1)) == (1UL << 31)) { |
---|
| 120 | std::cout << this->name() << ": success" << std::endl; |
---|
| 121 | exit(EXIT_SUCCESS); |
---|
| 122 | } |
---|
| 123 | |
---|
| 124 | r_sign = r_sign.read() << 1; |
---|
| 125 | r_gen_test_fsm = P2M_HEADER; |
---|
| 126 | |
---|
| 127 | #if SOCLIB_MODULE_DEBUG |
---|
| 128 | std::cout << this->name() << ":CHECK_SIGNATURE" << std::endl; |
---|
| 129 | #endif |
---|
| 130 | break; |
---|
| 131 | } |
---|
| 132 | } |
---|
| 133 | } |
---|
| 134 | |
---|
| 135 | tmpl(void)::genMoore() |
---|
| 136 | { |
---|
| 137 | p_dspin_p2m.write = false; |
---|
| 138 | p_dspin_p2m.data = 0; |
---|
| 139 | p_dspin_p2m.eop = 0; |
---|
| 140 | p_dspin_m2p.read = 0; |
---|
| 141 | p_dspin_clack.read = 0; |
---|
| 142 | |
---|
| 143 | switch(r_gen_test_fsm.read()) { |
---|
| 144 | case P2M_HEADER: |
---|
| 145 | { |
---|
| 146 | uint64_t flit = 0; |
---|
| 147 | FlitParam::dspin_set(flit, 0, FlitParam::TEST_P2M_DEST); |
---|
| 148 | FlitParam::dspin_set(flit, m_srcid, FlitParam::TEST_P2M_SRCID); |
---|
| 149 | FlitParam::dspin_set(flit, 1, FlitParam::TEST_P2M_TEST); |
---|
| 150 | FlitParam::dspin_set(flit, FlitParam::TYPE_TEST, |
---|
| 151 | FlitParam::P2M_TYPE); |
---|
| 152 | p_dspin_p2m.data = flit; |
---|
| 153 | p_dspin_p2m.write = true; |
---|
| 154 | break; |
---|
| 155 | } |
---|
| 156 | |
---|
| 157 | case P2M_SIGNATURE: |
---|
| 158 | { |
---|
| 159 | uint64_t flit = 0; |
---|
| 160 | FlitParam::dspin_set(flit, r_sign.read(), |
---|
| 161 | FlitParam::TEST_P2M_SIGNATURE); |
---|
| 162 | p_dspin_p2m.eop = true; |
---|
| 163 | p_dspin_p2m.data = flit; |
---|
| 164 | p_dspin_p2m.write = true; |
---|
| 165 | break; |
---|
| 166 | } |
---|
| 167 | |
---|
| 168 | case WAIT_M2P_AND_CLACK: |
---|
| 169 | p_dspin_m2p.read = true; |
---|
| 170 | p_dspin_clack.read = true; |
---|
| 171 | break; |
---|
| 172 | |
---|
| 173 | case CHECK_SIGNATURE: |
---|
| 174 | p_dspin_m2p.read = true; |
---|
| 175 | p_dspin_clack.read = true; |
---|
| 176 | break; |
---|
| 177 | } |
---|
| 178 | } |
---|
| 179 | |
---|
| 180 | } /* namespace caba */ |
---|
| 181 | } /* namespace soclib */ |
---|
| 182 | |
---|
| 183 | /* |
---|
| 184 | * vim: ts=4 : sw=4 : sts=4 : et |
---|
| 185 | */ |
---|