Changeset 42 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_vhdl_body.cpp
- Timestamp:
- Jul 5, 2007, 5:50:19 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_vhdl_body.cpp
r15 r42 15 15 namespace victim_pseudo_lru { 16 16 17 void Victim_Pseudo_LRU::vhdl_body (Vhdl & vhdl)17 void Victim_Pseudo_LRU::vhdl_body (Vhdl * & vhdl) 18 18 { 19 vhdl .set_body ("");20 vhdl .set_body ("-----------------------------------------------------------------------------");21 vhdl .set_body ("-- Access");22 vhdl .set_body ("-----------------------------------------------------------------------------");23 vhdl .set_body ("");24 vhdl .set_body ("-- Tree of Pseudo-LRU - example to 8 entity");25 vhdl .set_body ("--");26 vhdl .set_body ("-- 4-5-6-7? ");27 vhdl .set_body ("-- 0_______|_______1 ");28 vhdl .set_body ("-- | | ");29 vhdl .set_body ("-- 2-3? 6-7? ");30 vhdl .set_body ("-- 0___|___1 0___|___1 ");31 vhdl .set_body ("-- | | | | ");32 vhdl .set_body ("-- 1? 3? 5? 7? ");33 vhdl .set_body ("-- 0_|_1 0_|_1 0_|_1 0_|_1 ");34 vhdl .set_body ("-- | | | | | | | | ");35 vhdl .set_body ("-- Way Way Way Way Way Way Way Way ");36 vhdl .set_body ("-- 0 1 2 3 4 5 6 7 ");37 for (uint32_t i=0; i<_param._nb_access; i++) 38 { 39 vhdl .set_body ("");19 vhdl->set_body (""); 20 vhdl->set_body ("-----------------------------------------------------------------------------"); 21 vhdl->set_body ("-- Access"); 22 vhdl->set_body ("-----------------------------------------------------------------------------"); 23 vhdl->set_body (""); 24 vhdl->set_body ("-- Tree of Pseudo-LRU - example to 8 entity"); 25 vhdl->set_body ("--"); 26 vhdl->set_body ("-- 4-5-6-7? "); 27 vhdl->set_body ("-- 0_______|_______1 "); 28 vhdl->set_body ("-- | | "); 29 vhdl->set_body ("-- 2-3? 6-7? "); 30 vhdl->set_body ("-- 0___|___1 0___|___1 "); 31 vhdl->set_body ("-- | | | | "); 32 vhdl->set_body ("-- 1? 3? 5? 7? "); 33 vhdl->set_body ("-- 0_|_1 0_|_1 0_|_1 0_|_1 "); 34 vhdl->set_body ("-- | | | | | | | | "); 35 vhdl->set_body ("-- Way Way Way Way Way Way Way Way "); 36 vhdl->set_body ("-- 0 1 2 3 4 5 6 7 "); 37 for (uint32_t i=0; i<_param._nb_access; i++) 38 { 39 vhdl->set_body (""); 40 40 // Read the table 41 41 … … 43 43 44 44 if (_param._size_table>1) 45 access_address = "conv_integer(in_ACCESS_ ADDRESS_"+toString(i)+")";45 access_address = "conv_integer(in_ACCESS_"+toString(i)+"_ADDRESS)"; 46 46 else 47 47 access_address = "0"; 48 48 49 vhdl .set_body ("access_entry_"+toString(i)+" <= reg_TABLE ("+access_address+");");50 vhdl .set_body ("");49 vhdl->set_body ("access_entry_"+toString(i)+" <= reg_TABLE ("+access_address+");"); 50 vhdl->set_body (""); 51 51 52 52 for (int32_t j=static_cast<uint32_t>(log2(_param._nb_entity)-1); j>=0; j--) 53 53 { 54 vhdl .set_body ("access_entity_"+toString(i)+"("+toString(j)+") <= ");54 vhdl->set_body ("access_entity_"+toString(i)+"("+toString(j)+") <= "); 55 55 56 56 uint32_t cpt=0; … … 72 72 string print_else = (k==(1<<j)-1)?" ":"else "; 73 73 74 vhdl .set_body ("\t"+print_else+"access_entry_"+toString(i)+"("+toString(k)+") "+cond);74 vhdl->set_body ("\t"+print_else+"access_entry_"+toString(i)+"("+toString(k)+") "+cond); 75 75 cpt ++; 76 76 } 77 vhdl .set_body ("\t;");77 vhdl->set_body ("\t;"); 78 78 } 79 79 } 80 80 81 vhdl .set_body ("");82 vhdl .set_body ("-----------------------------------------------------------------------------");83 vhdl .set_body ("-- Update");84 vhdl .set_body ("-----------------------------------------------------------------------------");85 vhdl .set_body ("");86 vhdl .set_body ("-- port access");81 vhdl->set_body (""); 82 vhdl->set_body ("-----------------------------------------------------------------------------"); 83 vhdl->set_body ("-- Update"); 84 vhdl->set_body ("-----------------------------------------------------------------------------"); 85 vhdl->set_body (""); 86 vhdl->set_body ("-- port access"); 87 87 for (uint32_t i=0; i<_param._nb_access; i++) 88 88 for (int32_t j=static_cast<uint32_t>(log2(_param._nb_entity)-1); j>=0; j--) … … 107 107 } 108 108 109 vhdl .set_body ("access_next_entry_"+toString(i)+"("+toString(k)+") <=");110 vhdl .set_body ("\tnot access_entity_"+toString(i)+"("+toString(j)+") "+cond);109 vhdl->set_body ("access_next_entry_"+toString(i)+"("+toString(k)+") <="); 110 vhdl->set_body ("\tnot access_entity_"+toString(i)+"("+toString(j)+") "+cond); 111 111 if (have_cond == true) 112 vhdl .set_body ("\telse access_entry_"+toString(i)+"("+toString(k)+")");113 vhdl .set_body ("\t;");112 vhdl->set_body ("\telse access_entry_"+toString(i)+"("+toString(k)+")"); 113 vhdl->set_body ("\t;"); 114 114 cpt ++; 115 115 } 116 116 } 117 117 118 vhdl .set_body ("");119 vhdl .set_body ("-- port update");118 vhdl->set_body (""); 119 vhdl->set_body ("-- port update"); 120 120 for (uint32_t i=0; i<_param._nb_update; i++) 121 121 for (int32_t j=static_cast<uint32_t>(log2(_param._nb_entity)-1); j>=0; j--) … … 137 137 else 138 138 cond += " and"; 139 cond += " in_UPDATE_ ENTITY_"+toString(i)+"("+toString(l)+")='"+toString((cpt>>(l-(j+1)))&1)+"'";139 cond += " in_UPDATE_"+toString(i)+"_ENTITY("+toString(l)+")='"+toString((cpt>>(l-(j+1)))&1)+"'"; 140 140 } 141 141 142 vhdl .set_body ("update_next_entry_"+toString(i)+"("+toString(k)+") <=");143 vhdl .set_body ("\tnot in_UPDATE_ENTITY_"+toString(i)+"("+toString(j)+") "+cond);142 vhdl->set_body ("update_next_entry_"+toString(i)+"("+toString(k)+") <="); 143 vhdl->set_body ("\tnot in_UPDATE_"+toString(i)+"_ENTITY("+toString(j)+") "+cond); 144 144 if (have_cond == true) 145 145 { … … 147 147 148 148 if (_param._size_table>1) 149 update_address = "conv_integer(in_UPDATE_ ADDRESS_"+toString(i)+")";149 update_address = "conv_integer(in_UPDATE_"+toString(i)+"_ADDRESS)"; 150 150 else 151 151 update_address = "0"; 152 152 153 vhdl .set_body ("\telse reg_TABLE ("+update_address+")("+toString(k)+")");153 vhdl->set_body ("\telse reg_TABLE ("+update_address+")("+toString(k)+")"); 154 154 } 155 vhdl .set_body ("\t;");155 vhdl->set_body ("\t;"); 156 156 cpt ++; 157 157 } 158 158 } 159 159 160 vhdl .set_body ("");161 vhdl .set_body ("-----------------------------------------------------------------------------");162 vhdl .set_body ("-- Transition");163 vhdl .set_body ("-----------------------------------------------------------------------------");164 vhdl .set_body ("");165 166 vhdl .set_body ("reg_TABLE_write: process (in_CLOCK)");167 vhdl .set_body ("begin");168 vhdl .set_body ("\tif in_CLOCK'event and in_CLOCK = '1' then");169 vhdl .set_body ("\t\t-- Access port");160 vhdl->set_body (""); 161 vhdl->set_body ("-----------------------------------------------------------------------------"); 162 vhdl->set_body ("-- Transition"); 163 vhdl->set_body ("-----------------------------------------------------------------------------"); 164 vhdl->set_body (""); 165 166 vhdl->set_body ("reg_TABLE_write: process (in_CLOCK)"); 167 vhdl->set_body ("begin"); 168 vhdl->set_body ("\tif in_CLOCK'event and in_CLOCK = '1' then"); 169 vhdl->set_body ("\t\t-- Access port"); 170 170 for (uint32_t i=0; i<_param._nb_access; i++) 171 171 { … … 173 173 174 174 if (_param._size_table>1) 175 access_address = "conv_integer(in_ACCESS_ ADDRESS_"+toString(i)+")";175 access_address = "conv_integer(in_ACCESS_"+toString(i)+"_ADDRESS)"; 176 176 else 177 177 access_address = "0"; 178 178 179 vhdl .set_body ("\t\tif (in_ACCESS_VAL_"+toString(i)+"= '1') then");180 vhdl .set_body ("\t\t\treg_TABLE ("+access_address+") <= access_next_entry_"+toString(i)+";");181 vhdl .set_body ("\t\tend if;");182 } 183 184 vhdl .set_body ("\t\t-- Update port");179 vhdl->set_body ("\t\tif (in_ACCESS_"+toString(i)+"_VAL = '1') then"); 180 vhdl->set_body ("\t\t\treg_TABLE ("+access_address+") <= access_next_entry_"+toString(i)+";"); 181 vhdl->set_body ("\t\tend if;"); 182 } 183 184 vhdl->set_body ("\t\t-- Update port"); 185 185 for (uint32_t i=0; i<_param._nb_update; i++) 186 186 { … … 188 188 189 189 if (_param._size_table>1) 190 update_address = "conv_integer(in_UPDATE_ ADDRESS_"+toString(i)+")";190 update_address = "conv_integer(in_UPDATE_"+toString(i)+"_ADDRESS)"; 191 191 else 192 192 update_address = "0"; 193 193 194 vhdl .set_body ("\t\tif (in_UPDATE_VAL_"+toString(i)+"= '1') then");195 vhdl .set_body ("\t\t\treg_TABLE ("+update_address+") <= update_next_entry_"+toString(i)+";");196 vhdl .set_body ("\t\tend if;");197 } 198 199 vhdl .set_body ("\tend if;");200 vhdl .set_body ("end process reg_TABLE_write;");201 202 vhdl .set_body ("");203 vhdl .set_body ("-----------------------------------------------------------------------------");204 vhdl .set_body ("-- Output");205 vhdl .set_body ("-----------------------------------------------------------------------------");206 vhdl .set_body ("");207 vhdl .set_body ("-- Ack is always ");208 vhdl .set_body ("");209 for (uint32_t i=0; i<_param._nb_access; i++) 210 { 211 vhdl .set_body ("out_ACCESS_ACK_"+toString(i)+"<= '1';");212 vhdl .set_body ("out_ACCESS_ENTITY_"+toString(i)+" <= access_entity_"+toString(i)+" when in_ACCESS_VAL_"+toString(i)+"= '1' else (others => '0');");213 } 214 vhdl .set_body ("");194 vhdl->set_body ("\t\tif (in_UPDATE_"+toString(i)+"_VAL = '1') then"); 195 vhdl->set_body ("\t\t\treg_TABLE ("+update_address+") <= update_next_entry_"+toString(i)+";"); 196 vhdl->set_body ("\t\tend if;"); 197 } 198 199 vhdl->set_body ("\tend if;"); 200 vhdl->set_body ("end process reg_TABLE_write;"); 201 202 vhdl->set_body (""); 203 vhdl->set_body ("-----------------------------------------------------------------------------"); 204 vhdl->set_body ("-- Output"); 205 vhdl->set_body ("-----------------------------------------------------------------------------"); 206 vhdl->set_body (""); 207 vhdl->set_body ("-- Ack is always "); 208 vhdl->set_body (""); 209 for (uint32_t i=0; i<_param._nb_access; i++) 210 { 211 vhdl->set_body ("out_ACCESS_"+toString(i)+"_ACK <= '1';"); 212 vhdl->set_body ("out_ACCESS_"+toString(i)+"_ENTITY <= access_entity_"+toString(i)+" when in_ACCESS_"+toString(i)+"_VAL = '1' else (others => '0');"); 213 } 214 vhdl->set_body (""); 215 215 for (uint32_t i=0; i<_param._nb_update; i++) 216 216 { 217 vhdl .set_body ("out_UPDATE_ACK_"+toString(i)+"<= '1';");217 vhdl->set_body ("out_UPDATE_"+toString(i)+"_ACK <= '1';"); 218 218 } 219 219 };
Note: See TracChangeset
for help on using the changeset viewer.