1 | #ifndef test_BTB |
---|
2 | #define test_BTB |
---|
3 | |
---|
4 | class entry_t |
---|
5 | { |
---|
6 | public : Tcontrol_t _val ; |
---|
7 | public : Tcontext_t _context ; |
---|
8 | public : Tcontrol_t _address_dest_val; |
---|
9 | public : Tgeneral_data_t _address_src ; |
---|
10 | public : Tgeneral_data_t _address_dest ; |
---|
11 | public : Tbranch_condition_t _condition ; |
---|
12 | public : Tcontrol_t _last_take ; |
---|
13 | public : Tcounter_t _accurate ; |
---|
14 | |
---|
15 | public : bool hit (morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_register::Parameters * _param, |
---|
16 | Tgeneral_data_t addr_test, |
---|
17 | Tcontext_t context) |
---|
18 | { |
---|
19 | Tgeneral_data_t addr_src_offset = (_address_src >> _param->_shift_offset)&_param->_mask_offset; |
---|
20 | Tgeneral_data_t addr_src_index = (_address_src >> _param->_shift_bank )&_param->_mask_bank ; |
---|
21 | Tgeneral_data_t addr_src_tag = (_address_src >> _param->_shift_tag ); |
---|
22 | |
---|
23 | Tgeneral_data_t addr_test_offset = (addr_test >> _param->_shift_offset)&_param->_mask_offset; |
---|
24 | Tgeneral_data_t addr_test_index = (addr_test >> _param->_shift_bank )&_param->_mask_bank ; |
---|
25 | Tgeneral_data_t addr_test_tag = (addr_test >> _param->_shift_tag ); |
---|
26 | |
---|
27 | bool is_hit = ( (_val == 1 ) and |
---|
28 | (_context == context ) and |
---|
29 | (addr_test_tag == addr_src_tag ) and |
---|
30 | (addr_test_index == addr_src_index ) and |
---|
31 | (addr_test_offset <= addr_src_offset )); |
---|
32 | |
---|
33 | LABEL("address_src (tag, index, offset) : %.8x %.8x %.8x",addr_src_tag, addr_src_index, addr_src_offset); |
---|
34 | LABEL("address_test (tag, index, offset) : %.8x %.8x %.8x - hit : %d",addr_test_tag, addr_test_index, addr_test_offset, is_hit); |
---|
35 | return is_hit; |
---|
36 | } |
---|
37 | |
---|
38 | public : void print (void) |
---|
39 | { |
---|
40 | LABEL("%d - %.2d %.8x %.1d %.8x %.3d %.1d %.4d", |
---|
41 | _val , |
---|
42 | _context , |
---|
43 | _address_src , |
---|
44 | _address_dest_val, |
---|
45 | _address_dest , |
---|
46 | _condition , |
---|
47 | _last_take , |
---|
48 | _accurate ); |
---|
49 | } |
---|
50 | |
---|
51 | }; |
---|
52 | |
---|
53 | Tgeneral_data_t gen_addr (morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_register::Parameters * _param, |
---|
54 | Tgeneral_data_t index) |
---|
55 | { |
---|
56 | Tgeneral_data_t addr_tag = (rand()%(_param->_associativity)) << _param->_shift_tag ; |
---|
57 | Tgeneral_data_t addr_index = (index &_param->_mask_bank ) << _param->_shift_bank ; |
---|
58 | Tgeneral_data_t addr_offset = (rand()&_param->_mask_offset ) << _param->_shift_offset; |
---|
59 | |
---|
60 | LABEL("gen_addr (tag, index, offset) : %.8x %.8x %.8x",addr_tag, addr_index, addr_offset); |
---|
61 | |
---|
62 | return (addr_tag | |
---|
63 | addr_index | |
---|
64 | addr_offset ); |
---|
65 | } |
---|
66 | |
---|
67 | #endif |
---|