| 1 | ENTITY am2901_dpt IS |
|---|
| 2 | |
|---|
| 3 | PORT( |
|---|
| 4 | -- Command for selecting operands R and S. |
|---|
| 5 | ops_mx : in BIT_VECTOR(2 downto 0); |
|---|
| 6 | opr_mx : in BIT_VECTOR(1 downto 0); |
|---|
| 7 | |
|---|
| 8 | -- ALU commands and auxiliary terminals. |
|---|
| 9 | alu_k : in BIT_VECTOR(4 downto 0); |
|---|
| 10 | alu_cin : in BIT; |
|---|
| 11 | alu_cout : out BIT; |
|---|
| 12 | alu_over : inout BIT; |
|---|
| 13 | |
|---|
| 14 | -- RAM, ACCU shifter commands and auxiliary terminals. |
|---|
| 15 | ram_sh : in BIT_VECTOR(1 downto 0); |
|---|
| 16 | acc_sh : in BIT_VECTOR(1 downto 0); |
|---|
| 17 | -- RAM shifter inputs. |
|---|
| 18 | ram_i_up : in BIT; |
|---|
| 19 | ram_i_down : in BIT; |
|---|
| 20 | -- ACCU shifter inputs. |
|---|
| 21 | acc_i_up : in BIT; |
|---|
| 22 | acc_i_down : in BIT; |
|---|
| 23 | -- ACCU shifter outputs ("acc_scout" is "acc_q_up"). |
|---|
| 24 | acc_q_up : out BIT; |
|---|
| 25 | acc_q_down : out BIT; |
|---|
| 26 | |
|---|
| 27 | -- Output multiplexer commnand (for X bus). |
|---|
| 28 | out_mx : in BIT; |
|---|
| 29 | |
|---|
| 30 | -- ACCU controls terminals. |
|---|
| 31 | acc_ck : in BIT; |
|---|
| 32 | acc_wen : in BIT; |
|---|
| 33 | |
|---|
| 34 | -- Register file controls terminals. |
|---|
| 35 | ram_ck : in BIT_VECTOR(15 downto 0) ; -- Register clocks (ck). |
|---|
| 36 | b_w : in BIT_VECTOR(15 downto 0) ; -- Write enable |
|---|
| 37 | a : in BIT_VECTOR(15 downto 0) ; -- Register A address. |
|---|
| 38 | b : in BIT_VECTOR(15 downto 0) ; -- Register B address. |
|---|
| 39 | |
|---|
| 40 | -- Data buses terminals. |
|---|
| 41 | opr_d : in BIT_VECTOR(3 downto 0); |
|---|
| 42 | alu_f : inout BIT_VECTOR(3 downto 0); |
|---|
| 43 | alu_np : out BIT_VECTOR(3 downto 0); |
|---|
| 44 | alu_ng : out BIT_VECTOR(3 downto 0); |
|---|
| 45 | out_x : out BIT_VECTOR(3 downto 0); |
|---|
| 46 | |
|---|
| 47 | -- Power supply connectors. |
|---|
| 48 | vdd : in BIT; |
|---|
| 49 | vss : in BIT |
|---|
| 50 | ); |
|---|
| 51 | |
|---|
| 52 | END am2901_dpt; |
|---|
| 53 | |
|---|
| 54 | |
|---|
| 55 | ARCHITECTURE behavior_data_flow OF am2901_dpt IS |
|---|
| 56 | |
|---|
| 57 | -- Internals bus. |
|---|
| 58 | SIGNAL ops_ns : BIT_VECTOR(3 downto 0); |
|---|
| 59 | SIGNAL opr_nr : BIT_VECTOR(3 downto 0); |
|---|
| 60 | SIGNAL ram_d : BIT_VECTOR(3 downto 0); |
|---|
| 61 | SIGNAL acc_d : BIT_VECTOR(3 downto 0); |
|---|
| 62 | |
|---|
| 63 | -- Internal registers. |
|---|
| 64 | -- ACCU master/slave. |
|---|
| 65 | SIGNAL acc_s_q : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 66 | SIGNAL acc_m_q : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 67 | -- Internal ACCU clock signals. |
|---|
| 68 | SIGNAL acc_ws : BIT; |
|---|
| 69 | -- RAM SIGNALS |
|---|
| 70 | SIGNAL ram_adra : BIT_VECTOR(15 DOWNTO 0); |
|---|
| 71 | SIGNAL ram_adrb : BIT_VECTOR(15 DOWNTO 0); |
|---|
| 72 | -- RAM masters. |
|---|
| 73 | SIGNAL ram_m_r0 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 74 | SIGNAL ram_m_r1 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 75 | SIGNAL ram_m_r2 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 76 | SIGNAL ram_m_r3 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 77 | SIGNAL ram_m_r4 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 78 | SIGNAL ram_m_r5 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 79 | SIGNAL ram_m_r6 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 80 | SIGNAL ram_m_r7 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 81 | SIGNAL ram_m_r8 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 82 | SIGNAL ram_m_r9 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 83 | SIGNAL ram_m_r10 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 84 | SIGNAL ram_m_r11 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 85 | SIGNAL ram_m_r12 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 86 | SIGNAL ram_m_r13 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 87 | SIGNAL ram_m_r14 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 88 | SIGNAL ram_m_r15 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 89 | -- RAM slaves. |
|---|
| 90 | SIGNAL ram_s_r0 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 91 | SIGNAL ram_s_r1 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 92 | SIGNAL ram_s_r2 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 93 | SIGNAL ram_s_r3 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 94 | SIGNAL ram_s_r4 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 95 | SIGNAL ram_s_r5 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 96 | SIGNAL ram_s_r6 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 97 | SIGNAL ram_s_r7 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 98 | SIGNAL ram_s_r8 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 99 | SIGNAL ram_s_r9 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 100 | SIGNAL ram_s_r10 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 101 | SIGNAL ram_s_r11 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 102 | SIGNAL ram_s_r12 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 103 | SIGNAL ram_s_r13 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 104 | SIGNAL ram_s_r14 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 105 | SIGNAL ram_s_r15 : REG_VECTOR(3 downto 0) REGISTER; |
|---|
| 106 | -- Internal RAM clocks signals. |
|---|
| 107 | -- Masters write enable. |
|---|
| 108 | SIGNAL ram_wmd0 :BIT; |
|---|
| 109 | SIGNAL ram_wmd1 :BIT; |
|---|
| 110 | SIGNAL ram_wmd2 :BIT; |
|---|
| 111 | SIGNAL ram_wmd3 :BIT; |
|---|
| 112 | SIGNAL ram_wmd4 :BIT; |
|---|
| 113 | SIGNAL ram_wmd5 :BIT; |
|---|
| 114 | SIGNAL ram_wmd6 :BIT; |
|---|
| 115 | SIGNAL ram_wmd7 :BIT; |
|---|
| 116 | SIGNAL ram_wmd8 :BIT; |
|---|
| 117 | SIGNAL ram_wmd9 :BIT; |
|---|
| 118 | SIGNAL ram_wmd10 :BIT; |
|---|
| 119 | SIGNAL ram_wmd11 :BIT; |
|---|
| 120 | SIGNAL ram_wmd12 :BIT; |
|---|
| 121 | SIGNAL ram_wmd13 :BIT; |
|---|
| 122 | SIGNAL ram_wmd14 :BIT; |
|---|
| 123 | SIGNAL ram_wmd15 :BIT; |
|---|
| 124 | -- Slaves write enable. |
|---|
| 125 | SIGNAL ram_ws0 :BIT; |
|---|
| 126 | SIGNAL ram_ws1 :BIT; |
|---|
| 127 | SIGNAL ram_ws2 :BIT; |
|---|
| 128 | SIGNAL ram_ws3 :BIT; |
|---|
| 129 | SIGNAL ram_ws4 :BIT; |
|---|
| 130 | SIGNAL ram_ws5 :BIT; |
|---|
| 131 | SIGNAL ram_ws6 :BIT; |
|---|
| 132 | SIGNAL ram_ws7 :BIT; |
|---|
| 133 | SIGNAL ram_ws8 :BIT; |
|---|
| 134 | SIGNAL ram_ws9 :BIT; |
|---|
| 135 | SIGNAL ram_ws10 :BIT; |
|---|
| 136 | SIGNAL ram_ws11 :BIT; |
|---|
| 137 | SIGNAL ram_ws12 :BIT; |
|---|
| 138 | SIGNAL ram_ws13 :BIT; |
|---|
| 139 | SIGNAL ram_ws14 :BIT; |
|---|
| 140 | SIGNAL ram_ws15 :BIT; |
|---|
| 141 | -- Output mux bus RA and RB. |
|---|
| 142 | SIGNAL ram_ra : MUX_VECTOR(3 downto 0) BUS; |
|---|
| 143 | SIGNAL ram_rb : MUX_VECTOR(3 downto 0) BUS; |
|---|
| 144 | -- Internal ALU signals. |
|---|
| 145 | SIGNAL alu_cry : BIT_VECTOR(4 downto 0); |
|---|
| 146 | SIGNAL alu_s : BIT_VECTOR(3 downto 0); |
|---|
| 147 | SIGNAL alu_r : BIT_VECTOR(3 downto 0); |
|---|
| 148 | |
|---|
| 149 | |
|---|
| 150 | |
|---|
| 151 | SIGNAL sig_acc : BIT_VECTOR(3 downto 0); |
|---|
| 152 | |
|---|
| 153 | SIGNAL sig_ram0 : BIT_VECTOR(3 downto 0); |
|---|
| 154 | SIGNAL sig_ram1 : BIT_VECTOR(3 downto 0); |
|---|
| 155 | SIGNAL sig_ram2 : BIT_VECTOR(3 downto 0); |
|---|
| 156 | SIGNAL sig_ram3 : BIT_VECTOR(3 downto 0); |
|---|
| 157 | SIGNAL sig_ram4 : BIT_VECTOR(3 downto 0); |
|---|
| 158 | SIGNAL sig_ram5 : BIT_VECTOR(3 downto 0); |
|---|
| 159 | SIGNAL sig_ram6 : BIT_VECTOR(3 downto 0); |
|---|
| 160 | SIGNAL sig_ram7 : BIT_VECTOR(3 downto 0); |
|---|
| 161 | SIGNAL sig_ram8 : BIT_VECTOR(3 downto 0); |
|---|
| 162 | SIGNAL sig_ram9 : BIT_VECTOR(3 downto 0); |
|---|
| 163 | SIGNAL sig_ram10 : BIT_VECTOR(3 downto 0); |
|---|
| 164 | SIGNAL sig_ram11 : BIT_VECTOR(3 downto 0); |
|---|
| 165 | SIGNAL sig_ram12 : BIT_VECTOR(3 downto 0); |
|---|
| 166 | SIGNAL sig_ram13 : BIT_VECTOR(3 downto 0); |
|---|
| 167 | SIGNAL sig_ram14 : BIT_VECTOR(3 downto 0); |
|---|
| 168 | SIGNAL sig_ram15 : BIT_VECTOR(3 downto 0); |
|---|
| 169 | |
|---|
| 170 | SIGNAL ram_ck0 :BIT; |
|---|
| 171 | SIGNAL ram_ck1 :BIT; |
|---|
| 172 | SIGNAL ram_ck2 :BIT; |
|---|
| 173 | SIGNAL ram_ck3 :BIT; |
|---|
| 174 | SIGNAL ram_ck4 :BIT; |
|---|
| 175 | SIGNAL ram_ck5 :BIT; |
|---|
| 176 | SIGNAL ram_ck6 :BIT; |
|---|
| 177 | SIGNAL ram_ck7 :BIT; |
|---|
| 178 | SIGNAL ram_ck8 :BIT; |
|---|
| 179 | SIGNAL ram_ck9 :BIT; |
|---|
| 180 | SIGNAL ram_ck10 :BIT; |
|---|
| 181 | SIGNAL ram_ck11 :BIT; |
|---|
| 182 | SIGNAL ram_ck12 :BIT; |
|---|
| 183 | SIGNAL ram_ck13 :BIT; |
|---|
| 184 | SIGNAL ram_ck14 :BIT; |
|---|
| 185 | SIGNAL ram_ck15 :BIT; |
|---|
| 186 | |
|---|
| 187 | BEGIN |
|---|
| 188 | |
|---|
| 189 | -- ******************* RAM shifter description ******************* |
|---|
| 190 | |
|---|
| 191 | -- RAM shifter control code : |
|---|
| 192 | -- 1) "00" : UP shift. |
|---|
| 193 | -- 2) "01" : DOWN shift. |
|---|
| 194 | -- 3) either "10" or "11" : NO shift. |
|---|
| 195 | WITH ram_sh(1 downto 0) SELECT |
|---|
| 196 | ram_d <= alu_f(2 downto 0)&ram_i_down WHEN B"00", |
|---|
| 197 | ram_i_up&alu_f(3 downto 1) WHEN B"01", |
|---|
| 198 | alu_f(3 downto 0) WHEN B"10" | B"11"; |
|---|
| 199 | |
|---|
| 200 | -- ****************** ACCU shifter description ******************* |
|---|
| 201 | acc_q_down <= acc_s_q(0); |
|---|
| 202 | |
|---|
| 203 | -- ACCU shifter control code : |
|---|
| 204 | -- 1) "00" : UP shift accu. |
|---|
| 205 | -- 2) "01" : DOWN shift accu. |
|---|
| 206 | -- 3) either "10" or "11" : write accu with no shift. |
|---|
| 207 | WITH acc_sh(1 downto 0) SELECT |
|---|
| 208 | acc_d <= acc_s_q(2 downto 0)&acc_i_down WHEN B"00", |
|---|
| 209 | acc_i_up&acc_s_q(3 downto 1) WHEN B"01", |
|---|
| 210 | alu_f(3 downto 0) WHEN B"10" | B"11"; |
|---|
| 211 | |
|---|
| 212 | -- ****************** S multiplexer description ****************** |
|---|
| 213 | WITH ops_mx(2 downto 0) SELECT |
|---|
| 214 | ops_ns <= not acc_s_q WHEN B"000", |
|---|
| 215 | not ram_rb WHEN B"001", |
|---|
| 216 | not ram_ra WHEN B"010" | B"011", |
|---|
| 217 | "1111" WHEN B"100" | B"101" | B"110" | B"111"; |
|---|
| 218 | |
|---|
| 219 | -- ****************** R multiplexer description ****************** |
|---|
| 220 | WITH opr_mx(1 downto 0) SELECT |
|---|
| 221 | opr_nr <= not ram_ra WHEN B"00", |
|---|
| 222 | not opr_d WHEN B"01", |
|---|
| 223 | "1111" WHEN B"10" | B"11"; |
|---|
| 224 | |
|---|
| 225 | -- ****************** X multiplexer description ****************** |
|---|
| 226 | WITH out_mx SELECT |
|---|
| 227 | out_x <= alu_f WHEN B"0", |
|---|
| 228 | ram_ra WHEN B"1"; |
|---|
| 229 | |
|---|
| 230 | -- *********************** ALU description *********************** |
|---|
| 231 | alu_cry(0) <= alu_cin; |
|---|
| 232 | alu_cout <= alu_cry(4); |
|---|
| 233 | alu_over <= alu_cry(3); |
|---|
| 234 | |
|---|
| 235 | -- Inversion of R and S operands. |
|---|
| 236 | alu_s <= not ops_ns WHEN alu_k(1) = '0' ELSE ops_ns; |
|---|
| 237 | alu_r <= not opr_nr WHEN alu_k(0) = '0' ELSE opr_nr; |
|---|
| 238 | |
|---|
| 239 | -- Compute of nP and nG. |
|---|
| 240 | alu_np <= not (alu_s or alu_r); |
|---|
| 241 | alu_ng <= not (alu_s and alu_r); |
|---|
| 242 | |
|---|
| 243 | -- Arithmetic adder description. |
|---|
| 244 | alu_cry(4 downto 1) <= (alu_s and alu_r ) |
|---|
| 245 | or (alu_s and alu_cry(3 downto 0)) |
|---|
| 246 | or (alu_cry(3 downto 0) and alu_r); |
|---|
| 247 | |
|---|
| 248 | -- Select the ALU output. |
|---|
| 249 | WITH alu_k(4 downto 2) SELECT |
|---|
| 250 | alu_f <= alu_s xor alu_r xor alu_cry(3 downto 0) WHEN B"000", |
|---|
| 251 | (alu_s or alu_r) xor alu_cry(3 downto 0) WHEN B"001", |
|---|
| 252 | (alu_s and alu_r) xor alu_cry(3 downto 0) WHEN B"010", |
|---|
| 253 | alu_cry(3 downto 0) WHEN B"011", |
|---|
| 254 | not (alu_s xor alu_r) WHEN B"100", |
|---|
| 255 | not (alu_s or alu_r) WHEN B"101", |
|---|
| 256 | not (alu_s and alu_r) WHEN B"110", |
|---|
| 257 | B"1111" WHEN B"111"; |
|---|
| 258 | |
|---|
| 259 | -- ********************** ACCU description ************************ |
|---|
| 260 | -- Modification tenant compte du front montant de l'horloge |
|---|
| 261 | acc_ws <= not acc_ck; |
|---|
| 262 | acc_q_up <= acc_s_q(3); |
|---|
| 263 | |
|---|
| 264 | WITH acc_wen SELECT |
|---|
| 265 | sig_acc <= acc_d WHEN B"1" , -- Mode normal |
|---|
| 266 | acc_s_q WHEN OTHERS ; -- Reprise du registre |
|---|
| 267 | |
|---|
| 268 | -- A chaque cycle, on ecrit dans acc_s_q |
|---|
| 269 | |
|---|
| 270 | -- Echantillonnage lorsque ck=0 et memorisation sur front montant |
|---|
| 271 | acc_ck:BLOCK(acc_ws = '1') |
|---|
| 272 | BEGIN |
|---|
| 273 | acc_m_q <= GUARDED sig_acc; |
|---|
| 274 | END BLOCK acc_ck; |
|---|
| 275 | |
|---|
| 276 | -- Slave register write. |
|---|
| 277 | -- Echantillonnage lorsque ck=1 et memorisation sur front descendant |
|---|
| 278 | acc_ws:BLOCK(acc_ck = '1') |
|---|
| 279 | BEGIN |
|---|
| 280 | acc_s_q <= GUARDED acc_m_q; |
|---|
| 281 | END BLOCK acc_ws; |
|---|
| 282 | |
|---|
| 283 | -- *********************** RAM description *********************** |
|---|
| 284 | |
|---|
| 285 | -- Select B register. |
|---|
| 286 | ram_adrb(0 ) <= b(0 ) ; |
|---|
| 287 | ram_adrb(1 ) <= b(1 ) ; |
|---|
| 288 | ram_adrb(2 ) <= b(2 ) ; |
|---|
| 289 | ram_adrb(3 ) <= b(3 ) ; |
|---|
| 290 | ram_adrb(4 ) <= b(4 ) ; |
|---|
| 291 | ram_adrb(5 ) <= b(5 ) ; |
|---|
| 292 | ram_adrb(6 ) <= b(6 ) ; |
|---|
| 293 | ram_adrb(7 ) <= b(7 ) ; |
|---|
| 294 | ram_adrb(8 ) <= b(8 ) ; |
|---|
| 295 | ram_adrb(9 ) <= b(9 ) ; |
|---|
| 296 | ram_adrb(10) <= b(10) ; |
|---|
| 297 | ram_adrb(11) <= b(11) ; |
|---|
| 298 | ram_adrb(12) <= b(12) ; |
|---|
| 299 | ram_adrb(13) <= b(13) ; |
|---|
| 300 | ram_adrb(14) <= b(14) ; |
|---|
| 301 | ram_adrb(15) <= b(15) ; |
|---|
| 302 | |
|---|
| 303 | -- Select A register. |
|---|
| 304 | ram_adra(0 ) <= a(0 ) ; |
|---|
| 305 | ram_adra(1 ) <= a(1 ) ; |
|---|
| 306 | ram_adra(2 ) <= a(2 ) ; |
|---|
| 307 | ram_adra(3 ) <= a(3 ) ; |
|---|
| 308 | ram_adra(4 ) <= a(4 ) ; |
|---|
| 309 | ram_adra(5 ) <= a(5 ) ; |
|---|
| 310 | ram_adra(6 ) <= a(6 ) ; |
|---|
| 311 | ram_adra(7 ) <= a(7 ) ; |
|---|
| 312 | ram_adra(8 ) <= a(8 ) ; |
|---|
| 313 | ram_adra(9 ) <= a(9 ) ; |
|---|
| 314 | ram_adra(10) <= a(10) ; |
|---|
| 315 | ram_adra(11) <= a(11) ; |
|---|
| 316 | ram_adra(12) <= a(12) ; |
|---|
| 317 | ram_adra(13) <= a(13) ; |
|---|
| 318 | ram_adra(14) <= a(14) ; |
|---|
| 319 | ram_adra(15) <= a(15) ; |
|---|
| 320 | |
|---|
| 321 | -- Write master enable signals for b |
|---|
| 322 | ram_wmd0 <= b_w(0 ); |
|---|
| 323 | ram_wmd1 <= b_w(1 ); |
|---|
| 324 | ram_wmd2 <= b_w(2 ); |
|---|
| 325 | ram_wmd3 <= b_w(3 ); |
|---|
| 326 | ram_wmd4 <= b_w(4 ); |
|---|
| 327 | ram_wmd5 <= b_w(5 ); |
|---|
| 328 | ram_wmd6 <= b_w(6 ); |
|---|
| 329 | ram_wmd7 <= b_w(7 ); |
|---|
| 330 | ram_wmd8 <= b_w(8 ); |
|---|
| 331 | ram_wmd9 <= b_w(9 ); |
|---|
| 332 | ram_wmd10 <= b_w(10); |
|---|
| 333 | ram_wmd11 <= b_w(11); |
|---|
| 334 | ram_wmd12 <= b_w(12); |
|---|
| 335 | ram_wmd13 <= b_w(13); |
|---|
| 336 | ram_wmd14 <= b_w(14); |
|---|
| 337 | ram_wmd15 <= b_w(15); |
|---|
| 338 | |
|---|
| 339 | -- Write slave enable signals. |
|---|
| 340 | ram_ws0 <= not ram_ck(0 ) ; |
|---|
| 341 | ram_ws1 <= not ram_ck(1 ) ; |
|---|
| 342 | ram_ws2 <= not ram_ck(2 ) ; |
|---|
| 343 | ram_ws3 <= not ram_ck(3 ) ; |
|---|
| 344 | ram_ws4 <= not ram_ck(4 ) ; |
|---|
| 345 | ram_ws5 <= not ram_ck(5 ) ; |
|---|
| 346 | ram_ws6 <= not ram_ck(6 ) ; |
|---|
| 347 | ram_ws7 <= not ram_ck(7 ) ; |
|---|
| 348 | ram_ws8 <= not ram_ck(8 ) ; |
|---|
| 349 | ram_ws9 <= not ram_ck(9 ) ; |
|---|
| 350 | ram_ws10 <= not ram_ck(10) ; |
|---|
| 351 | ram_ws11 <= not ram_ck(11) ; |
|---|
| 352 | ram_ws12 <= not ram_ck(12) ; |
|---|
| 353 | ram_ws13 <= not ram_ck(13) ; |
|---|
| 354 | ram_ws14 <= not ram_ck(14) ; |
|---|
| 355 | ram_ws15 <= not ram_ck(15) ; |
|---|
| 356 | |
|---|
| 357 | ram_ck0 <= ram_ck(0 ) ; |
|---|
| 358 | ram_ck1 <= ram_ck(1 ) ; |
|---|
| 359 | ram_ck2 <= ram_ck(2 ) ; |
|---|
| 360 | ram_ck3 <= ram_ck(3 ) ; |
|---|
| 361 | ram_ck4 <= ram_ck(4 ) ; |
|---|
| 362 | ram_ck5 <= ram_ck(5 ) ; |
|---|
| 363 | ram_ck6 <= ram_ck(6 ) ; |
|---|
| 364 | ram_ck7 <= ram_ck(7 ) ; |
|---|
| 365 | ram_ck8 <= ram_ck(8 ) ; |
|---|
| 366 | ram_ck9 <= ram_ck(9 ) ; |
|---|
| 367 | ram_ck10 <= ram_ck(10) ; |
|---|
| 368 | ram_ck11 <= ram_ck(11) ; |
|---|
| 369 | ram_ck12 <= ram_ck(12) ; |
|---|
| 370 | ram_ck13 <= ram_ck(13) ; |
|---|
| 371 | ram_ck14 <= ram_ck(14) ; |
|---|
| 372 | ram_ck15 <= ram_ck(15) ; |
|---|
| 373 | |
|---|
| 374 | |
|---|
| 375 | WITH ram_wmd0 SELECT |
|---|
| 376 | sig_ram0 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 377 | ram_s_r0 WHEN OTHERS ; |
|---|
| 378 | |
|---|
| 379 | WITH ram_wmd1 SELECT |
|---|
| 380 | sig_ram1 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 381 | ram_s_r1 WHEN OTHERS ; |
|---|
| 382 | |
|---|
| 383 | WITH ram_wmd2 SELECT |
|---|
| 384 | sig_ram2 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 385 | ram_s_r2 WHEN OTHERS ; |
|---|
| 386 | |
|---|
| 387 | WITH ram_wmd3 SELECT |
|---|
| 388 | sig_ram3 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 389 | ram_s_r3 WHEN OTHERS ; |
|---|
| 390 | |
|---|
| 391 | WITH ram_wmd4 SELECT |
|---|
| 392 | sig_ram4 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 393 | ram_s_r4 WHEN OTHERS ; |
|---|
| 394 | |
|---|
| 395 | WITH ram_wmd5 SELECT |
|---|
| 396 | sig_ram5 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 397 | ram_s_r5 WHEN OTHERS ; |
|---|
| 398 | |
|---|
| 399 | WITH ram_wmd6 SELECT |
|---|
| 400 | sig_ram6 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 401 | ram_s_r6 WHEN OTHERS ; |
|---|
| 402 | |
|---|
| 403 | WITH ram_wmd7 SELECT |
|---|
| 404 | sig_ram7 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 405 | ram_s_r7 WHEN OTHERS ; |
|---|
| 406 | |
|---|
| 407 | WITH ram_wmd8 SELECT |
|---|
| 408 | sig_ram8 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 409 | ram_s_r8 WHEN OTHERS ; |
|---|
| 410 | |
|---|
| 411 | WITH ram_wmd9 SELECT |
|---|
| 412 | sig_ram9 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 413 | ram_s_r9 WHEN OTHERS ; |
|---|
| 414 | |
|---|
| 415 | WITH ram_wmd10 SELECT |
|---|
| 416 | sig_ram10 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 417 | ram_s_r10 WHEN OTHERS ; |
|---|
| 418 | |
|---|
| 419 | WITH ram_wmd11 SELECT |
|---|
| 420 | sig_ram11 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 421 | ram_s_r11 WHEN OTHERS ; |
|---|
| 422 | |
|---|
| 423 | WITH ram_wmd12 SELECT |
|---|
| 424 | sig_ram12 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 425 | ram_s_r12 WHEN OTHERS ; |
|---|
| 426 | |
|---|
| 427 | WITH ram_wmd13 SELECT |
|---|
| 428 | sig_ram13 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 429 | ram_s_r13 WHEN OTHERS ; |
|---|
| 430 | |
|---|
| 431 | WITH ram_wmd14 SELECT |
|---|
| 432 | sig_ram14 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 433 | ram_s_r14 WHEN OTHERS ; |
|---|
| 434 | |
|---|
| 435 | WITH ram_wmd15 SELECT |
|---|
| 436 | sig_ram15 <= ram_d WHEN B"1" , -- Mode ecriture |
|---|
| 437 | ram_s_r15 WHEN OTHERS ; |
|---|
| 438 | |
|---|
| 439 | -- Write registers description. |
|---|
| 440 | |
|---|
| 441 | -- Echantillonnage lorsque ck=0 et memorisation sur front montant |
|---|
| 442 | wm0 :BLOCK(ram_ws0 = '1') BEGIN ram_m_r0 <= GUARDED sig_ram0 ; END BLOCK wm0 ; |
|---|
| 443 | wm1 :BLOCK(ram_ws1 = '1') BEGIN ram_m_r1 <= GUARDED sig_ram1 ; END BLOCK wm1 ; |
|---|
| 444 | wm2 :BLOCK(ram_ws2 = '1') BEGIN ram_m_r2 <= GUARDED sig_ram2 ; END BLOCK wm2 ; |
|---|
| 445 | wm3 :BLOCK(ram_ws3 = '1') BEGIN ram_m_r3 <= GUARDED sig_ram3 ; END BLOCK wm3 ; |
|---|
| 446 | wm4 :BLOCK(ram_ws4 = '1') BEGIN ram_m_r4 <= GUARDED sig_ram4 ; END BLOCK wm4 ; |
|---|
| 447 | wm5 :BLOCK(ram_ws5 = '1') BEGIN ram_m_r5 <= GUARDED sig_ram5 ; END BLOCK wm5 ; |
|---|
| 448 | wm6 :BLOCK(ram_ws6 = '1') BEGIN ram_m_r6 <= GUARDED sig_ram6 ; END BLOCK wm6 ; |
|---|
| 449 | wm7 :BLOCK(ram_ws7 = '1') BEGIN ram_m_r7 <= GUARDED sig_ram7 ; END BLOCK wm7 ; |
|---|
| 450 | wm8 :BLOCK(ram_ws8 = '1') BEGIN ram_m_r8 <= GUARDED sig_ram8 ; END BLOCK wm8 ; |
|---|
| 451 | wm9 :BLOCK(ram_ws9 = '1') BEGIN ram_m_r9 <= GUARDED sig_ram9 ; END BLOCK wm9 ; |
|---|
| 452 | wm10:BLOCK(ram_ws10 = '1') BEGIN ram_m_r10 <= GUARDED sig_ram10 ; END BLOCK wm10; |
|---|
| 453 | wm11:BLOCK(ram_ws11 = '1') BEGIN ram_m_r11 <= GUARDED sig_ram11 ; END BLOCK wm11; |
|---|
| 454 | wm12:BLOCK(ram_ws12 = '1') BEGIN ram_m_r12 <= GUARDED sig_ram12 ; END BLOCK wm12; |
|---|
| 455 | wm13:BLOCK(ram_ws13 = '1') BEGIN ram_m_r13 <= GUARDED sig_ram13 ; END BLOCK wm13; |
|---|
| 456 | wm14:BLOCK(ram_ws14 = '1') BEGIN ram_m_r14 <= GUARDED sig_ram14 ; END BLOCK wm14; |
|---|
| 457 | wm15:BLOCK(ram_ws15 = '1') BEGIN ram_m_r15 <= GUARDED sig_ram15 ; END BLOCK wm15; |
|---|
| 458 | |
|---|
| 459 | -- Write slave registers description. |
|---|
| 460 | -- Echantillonnage lorsque ck=1 et memorisation sur front descendant |
|---|
| 461 | ws0 :BLOCK(ram_ck0 = '1') BEGIN ram_s_r0 <= GUARDED ram_m_r0 ; END BLOCK ws0 ; |
|---|
| 462 | ws1 :BLOCK(ram_ck1 = '1') BEGIN ram_s_r1 <= GUARDED ram_m_r1 ; END BLOCK ws1 ; |
|---|
| 463 | ws2 :BLOCK(ram_ck2 = '1') BEGIN ram_s_r2 <= GUARDED ram_m_r2 ; END BLOCK ws2 ; |
|---|
| 464 | ws3 :BLOCK(ram_ck3 = '1') BEGIN ram_s_r3 <= GUARDED ram_m_r3 ; END BLOCK ws3 ; |
|---|
| 465 | ws4 :BLOCK(ram_ck4 = '1') BEGIN ram_s_r4 <= GUARDED ram_m_r4 ; END BLOCK ws4 ; |
|---|
| 466 | ws5 :BLOCK(ram_ck5 = '1') BEGIN ram_s_r5 <= GUARDED ram_m_r5 ; END BLOCK ws5 ; |
|---|
| 467 | ws6 :BLOCK(ram_ck6 = '1') BEGIN ram_s_r6 <= GUARDED ram_m_r6 ; END BLOCK ws6 ; |
|---|
| 468 | ws7 :BLOCK(ram_ck7 = '1') BEGIN ram_s_r7 <= GUARDED ram_m_r7 ; END BLOCK ws7 ; |
|---|
| 469 | ws8 :BLOCK(ram_ck8 = '1') BEGIN ram_s_r8 <= GUARDED ram_m_r8 ; END BLOCK ws8 ; |
|---|
| 470 | ws9 :BLOCK(ram_ck9 = '1') BEGIN ram_s_r9 <= GUARDED ram_m_r9 ; END BLOCK ws9 ; |
|---|
| 471 | ws10:BLOCK(ram_ck10 = '1') BEGIN ram_s_r10 <= GUARDED ram_m_r10; END BLOCK ws10; |
|---|
| 472 | ws11:BLOCK(ram_ck11 = '1') BEGIN ram_s_r11 <= GUARDED ram_m_r11; END BLOCK ws11; |
|---|
| 473 | ws12:BLOCK(ram_ck12 = '1') BEGIN ram_s_r12 <= GUARDED ram_m_r12; END BLOCK ws12; |
|---|
| 474 | ws13:BLOCK(ram_ck13 = '1') BEGIN ram_s_r13 <= GUARDED ram_m_r13; END BLOCK ws13; |
|---|
| 475 | ws14:BLOCK(ram_ck14 = '1') BEGIN ram_s_r14 <= GUARDED ram_m_r14; END BLOCK ws14; |
|---|
| 476 | ws15:BLOCK(ram_ck15 = '1') BEGIN ram_s_r15 <= GUARDED ram_m_r15; END BLOCK ws15; |
|---|
| 477 | |
|---|
| 478 | -- Select register to write on tristate bus RA. |
|---|
| 479 | wa0 :BLOCK(ram_adra(0 )) BEGIN ram_ra <= GUARDED ram_s_r0 ; END BLOCK wa0 ; |
|---|
| 480 | wa1 :BLOCK(ram_adra(1 )) BEGIN ram_ra <= GUARDED ram_s_r1 ; END BLOCK wa1 ; |
|---|
| 481 | wa2 :BLOCK(ram_adra(2 )) BEGIN ram_ra <= GUARDED ram_s_r2 ; END BLOCK wa2 ; |
|---|
| 482 | wa3 :BLOCK(ram_adra(3 )) BEGIN ram_ra <= GUARDED ram_s_r3 ; END BLOCK wa3 ; |
|---|
| 483 | wa4 :BLOCK(ram_adra(4 )) BEGIN ram_ra <= GUARDED ram_s_r4 ; END BLOCK wa4 ; |
|---|
| 484 | wa5 :BLOCK(ram_adra(5 )) BEGIN ram_ra <= GUARDED ram_s_r5 ; END BLOCK wa5 ; |
|---|
| 485 | wa6 :BLOCK(ram_adra(6 )) BEGIN ram_ra <= GUARDED ram_s_r6 ; END BLOCK wa6 ; |
|---|
| 486 | wa7 :BLOCK(ram_adra(7 )) BEGIN ram_ra <= GUARDED ram_s_r7 ; END BLOCK wa7 ; |
|---|
| 487 | wa8 :BLOCK(ram_adra(8 )) BEGIN ram_ra <= GUARDED ram_s_r8 ; END BLOCK wa8 ; |
|---|
| 488 | wa9 :BLOCK(ram_adra(9 )) BEGIN ram_ra <= GUARDED ram_s_r9 ; END BLOCK wa9 ; |
|---|
| 489 | wa10:BLOCK(ram_adra(10)) BEGIN ram_ra <= GUARDED ram_s_r10; END BLOCK wa10; |
|---|
| 490 | wa11:BLOCK(ram_adra(11)) BEGIN ram_ra <= GUARDED ram_s_r11; END BLOCK wa11; |
|---|
| 491 | wa12:BLOCK(ram_adra(12)) BEGIN ram_ra <= GUARDED ram_s_r12; END BLOCK wa12; |
|---|
| 492 | wa13:BLOCK(ram_adra(13)) BEGIN ram_ra <= GUARDED ram_s_r13; END BLOCK wa13; |
|---|
| 493 | wa14:BLOCK(ram_adra(14)) BEGIN ram_ra <= GUARDED ram_s_r14; END BLOCK wa14; |
|---|
| 494 | wa15:BLOCK(ram_adra(15)) BEGIN ram_ra <= GUARDED ram_s_r15; END BLOCK wa15; |
|---|
| 495 | |
|---|
| 496 | -- Select register to write on tristate bus RB. |
|---|
| 497 | wb0 :BLOCK(ram_adrb(0 )) BEGIN ram_rb <= GUARDED ram_s_r0 ; END BLOCK wb0 ; |
|---|
| 498 | wb1 :BLOCK(ram_adrb(1 )) BEGIN ram_rb <= GUARDED ram_s_r1 ; END BLOCK wb1 ; |
|---|
| 499 | wb2 :BLOCK(ram_adrb(2 )) BEGIN ram_rb <= GUARDED ram_s_r2 ; END BLOCK wb2 ; |
|---|
| 500 | wb3 :BLOCK(ram_adrb(3 )) BEGIN ram_rb <= GUARDED ram_s_r3 ; END BLOCK wb3 ; |
|---|
| 501 | wb4 :BLOCK(ram_adrb(4 )) BEGIN ram_rb <= GUARDED ram_s_r4 ; END BLOCK wb4 ; |
|---|
| 502 | wb5 :BLOCK(ram_adrb(5 )) BEGIN ram_rb <= GUARDED ram_s_r5 ; END BLOCK wb5 ; |
|---|
| 503 | wb6 :BLOCK(ram_adrb(6 )) BEGIN ram_rb <= GUARDED ram_s_r6 ; END BLOCK wb6 ; |
|---|
| 504 | wb7 :BLOCK(ram_adrb(7 )) BEGIN ram_rb <= GUARDED ram_s_r7 ; END BLOCK wb7 ; |
|---|
| 505 | wb8 :BLOCK(ram_adrb(8 )) BEGIN ram_rb <= GUARDED ram_s_r8 ; END BLOCK wb8 ; |
|---|
| 506 | wb9 :BLOCK(ram_adrb(9 )) BEGIN ram_rb <= GUARDED ram_s_r9 ; END BLOCK wb9 ; |
|---|
| 507 | wb10:BLOCK(ram_adrb(10)) BEGIN ram_rb <= GUARDED ram_s_r10; END BLOCK wb10; |
|---|
| 508 | wb11:BLOCK(ram_adrb(11)) BEGIN ram_rb <= GUARDED ram_s_r11; END BLOCK wb11; |
|---|
| 509 | wb12:BLOCK(ram_adrb(12)) BEGIN ram_rb <= GUARDED ram_s_r12; END BLOCK wb12; |
|---|
| 510 | wb13:BLOCK(ram_adrb(13)) BEGIN ram_rb <= GUARDED ram_s_r13; END BLOCK wb13; |
|---|
| 511 | wb14:BLOCK(ram_adrb(14)) BEGIN ram_rb <= GUARDED ram_s_r14; END BLOCK wb14; |
|---|
| 512 | wb15:BLOCK(ram_adrb(15)) BEGIN ram_rb <= GUARDED ram_s_r15; END BLOCK wb15; |
|---|
| 513 | |
|---|
| 514 | -- ********************* Power supply check ********************** |
|---|
| 515 | ASSERT(vss = '0') |
|---|
| 516 | REPORT "Power supply VSS badly connected." SEVERITY WARNING; |
|---|
| 517 | ASSERT(vdd = '1') |
|---|
| 518 | REPORT "Power supply VDD badly connected." SEVERITY WARNING; |
|---|
| 519 | |
|---|
| 520 | END behavior_data_flow; |
|---|