| 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;
|
|---|