Stefan Schuermans commited on 2012-03-05 22:01:56
Showing 4 changed files, with 405 additions and 73 deletions.
| ... | ... |
@@ -6,7 +6,7 @@ ENTITY e_io_eth IS |
| 6 | 6 |
PORT ( |
| 7 | 7 |
rst: IN std_logic; |
| 8 | 8 |
clk: IN std_logic; |
| 9 |
- i_addr: IN std_logic_vector( 2 DOWNTO 0); |
|
| 9 |
+ i_addr: IN std_logic_vector( 3 DOWNTO 0); |
|
| 10 | 10 |
o_rd_data: OUT std_logic_vector(31 DOWNTO 0); |
| 11 | 11 |
i_rd_en: IN std_logic_vector( 3 DOWNTO 0); |
| 12 | 12 |
i_wr_data: IN std_logic_vector(31 DOWNTO 0); |
| ... | ... |
@@ -48,6 +48,16 @@ ARCHITECTURE a_io_eth OF e_io_eth IS |
| 48 | 48 |
SIGNAL s_txif_data_en: std_logic; |
| 49 | 49 |
SIGNAL s_txif_data_ack: std_logic; |
| 50 | 50 |
|
| 51 |
+ SIGNAL s_txframe_en: std_logic; |
|
| 52 |
+ SIGNAL s_txframe_done: std_logic; |
|
| 53 |
+ |
|
| 54 |
+ SIGNAL s_txbuf_wr_rdy: std_logic; |
|
| 55 |
+ SIGNAL s_txbuf_wr_data: std_logic_vector(31 DOWNTO 0); |
|
| 56 |
+ SIGNAL s_txbuf_wr_en: std_logic; |
|
| 57 |
+ SIGNAL s_txbuf_rd_rdy: std_logic; |
|
| 58 |
+ SIGNAL s_txbuf_rd_data: std_logic_vector(31 DOWNTO 0); |
|
| 59 |
+ SIGNAL s_txbuf_rd_en: std_logic; |
|
| 60 |
+ |
|
| 51 | 61 |
-- RX buffer registers |
| 52 | 62 |
-- start: current buffer begin |
| 53 | 63 |
-- cur: address of next data write |
| ... | ... |
@@ -78,6 +88,23 @@ ARCHITECTURE a_io_eth OF e_io_eth IS |
| 78 | 88 |
SIGNAL r_rx_new_en: std_logic := '0'; |
| 79 | 89 |
SIGNAL n_rx_new_en: std_logic; |
| 80 | 90 |
|
| 91 |
+ -- TX buffer registers |
|
| 92 |
+ -- start: begin of buffer |
|
| 93 |
+ -- end: address just behind buffer |
|
| 94 |
+ -- en: write 1 to start transmission, returns to zero if complete |
|
| 95 |
+ -- all addresses are word-aligned |
|
| 96 |
+ SIGNAL r_tx_start: std_logic_vector(31 DOWNTO 0) := X"00000000"; |
|
| 97 |
+ SIGNAL n_tx_start: std_logic_vector(31 DOWNTO 0); |
|
| 98 |
+ SIGNAL r_tx_end: std_logic_vector(31 DOWNTO 0) := X"00000000"; |
|
| 99 |
+ SIGNAL n_tx_end: std_logic_vector(31 DOWNTO 0); |
|
| 100 |
+ SIGNAL r_tx_en: std_logic := '0'; |
|
| 101 |
+ SIGNAL n_tx_en: std_logic; |
|
| 102 |
+ |
|
| 103 |
+ -- TX busmaster read state machine |
|
| 104 |
+ SIGNAL r_tx_pos: std_logic_vector(31 DOWNTO 0) := X"00000000"; |
|
| 105 |
+ SIGNAL n_tx_pos: std_logic_vector(31 DOWNTO 0); |
|
| 106 |
+ |
|
| 107 |
+ -- busmaster write buffer |
|
| 81 | 108 |
SIGNAL s_wrbuf_wr_rdy: std_logic; |
| 82 | 109 |
SIGNAL s_wrbuf_wr_data: std_logic_vector(63 DOWNTO 0); |
| 83 | 110 |
SIGNAL s_wrbuf_wr_en: std_logic; |
| ... | ... |
@@ -85,6 +112,10 @@ ARCHITECTURE a_io_eth OF e_io_eth IS |
| 85 | 112 |
SIGNAL s_wrbuf_rd_data: std_logic_vector(63 DOWNTO 0); |
| 86 | 113 |
SIGNAL s_wrbuf_rd_en: std_logic; |
| 87 | 114 |
|
| 115 |
+ -- busmaster read flag |
|
| 116 |
+ SIGNAL r_bm_rd: std_logic := '0'; |
|
| 117 |
+ SIGNAL n_bm_rd: std_logic; |
|
| 118 |
+ |
|
| 88 | 119 |
COMPONENT e_io_eth_rst IS |
| 89 | 120 |
PORT ( |
| 90 | 121 |
rst: IN std_logic; |
| ... | ... |
@@ -138,6 +169,21 @@ ARCHITECTURE a_io_eth OF e_io_eth IS |
| 138 | 169 |
); |
| 139 | 170 |
END COMPONENT e_io_eth_txif; |
| 140 | 171 |
|
| 172 |
+ COMPONENT e_io_eth_txframe IS |
|
| 173 |
+ PORT ( |
|
| 174 |
+ rst: IN std_logic; |
|
| 175 |
+ clk: IN std_logic; |
|
| 176 |
+ o_if_data: OUT std_logic_vector(7 DOWNTO 0); |
|
| 177 |
+ o_if_data_en: OUT std_logic; |
|
| 178 |
+ i_if_data_ack: IN std_logic; |
|
| 179 |
+ i_frame_en: IN std_logic; |
|
| 180 |
+ i_frame_data: IN std_logic_vector(31 DOWNTO 0); |
|
| 181 |
+ i_frame_data_en: IN std_logic; |
|
| 182 |
+ o_frame_data_ack: OUT std_logic; |
|
| 183 |
+ o_frame_done: OUT std_logic |
|
| 184 |
+ ); |
|
| 185 |
+ END COMPONENT e_io_eth_txframe; |
|
| 186 |
+ |
|
| 141 | 187 |
COMPONENT e_block_fifo IS |
| 142 | 188 |
GENERIC ( |
| 143 | 189 |
addr_width: natural; |
| ... | ... |
@@ -290,7 +336,49 @@ BEGIN |
| 290 | 336 |
END IF; |
| 291 | 337 |
END PROCESS p_rx_next; |
| 292 | 338 |
|
| 293 |
- p_rx_sync: PROCESS(rst, clk) |
|
| 339 |
+ txif: e_io_eth_txif |
|
| 340 |
+ PORT MAP ( |
|
| 341 |
+ rst => rst, |
|
| 342 |
+ clk => clk, |
|
| 343 |
+ i_data => s_txif_data, |
|
| 344 |
+ i_data_en => s_txif_data_en, |
|
| 345 |
+ o_data_ack => s_txif_data_ack, |
|
| 346 |
+ pin_i_tx_clk => pin_i_tx_clk, |
|
| 347 |
+ pin_o_txd => pin_o_txd, |
|
| 348 |
+ pin_o_tx_en => pin_o_tx_en |
|
| 349 |
+ ); |
|
| 350 |
+ |
|
| 351 |
+ txframe: e_io_eth_txframe |
|
| 352 |
+ PORT MAP ( |
|
| 353 |
+ rst => rst, |
|
| 354 |
+ clk => clk, |
|
| 355 |
+ o_if_data => s_txif_data, |
|
| 356 |
+ o_if_data_en => s_txif_data_en, |
|
| 357 |
+ i_if_data_ack => s_txif_data_ack, |
|
| 358 |
+ i_frame_en => s_txframe_en, |
|
| 359 |
+ i_frame_data => s_txbuf_rd_data, |
|
| 360 |
+ i_frame_data_en => s_txbuf_rd_rdy, |
|
| 361 |
+ o_frame_data_ack => s_txbuf_rd_en, |
|
| 362 |
+ o_frame_done => s_txframe_done |
|
| 363 |
+ ); |
|
| 364 |
+ |
|
| 365 |
+ txbuf: e_block_fifo |
|
| 366 |
+ GENERIC MAP ( |
|
| 367 |
+ addr_width => 2, |
|
| 368 |
+ data_width => 32 |
|
| 369 |
+ ) |
|
| 370 |
+ PORT MAP ( |
|
| 371 |
+ rst => rst, |
|
| 372 |
+ clk => clk, |
|
| 373 |
+ o_wr_rdy => s_txbuf_wr_rdy, |
|
| 374 |
+ i_wr_data => s_txbuf_wr_data, |
|
| 375 |
+ i_wr_en => s_txbuf_wr_en, |
|
| 376 |
+ o_rd_rdy => s_txbuf_rd_rdy, |
|
| 377 |
+ o_rd_data => s_txbuf_rd_data, |
|
| 378 |
+ i_rd_en => s_txbuf_rd_en |
|
| 379 |
+ ); |
|
| 380 |
+ |
|
| 381 |
+ p_reg_sync: PROCESS(rst, clk) |
|
| 294 | 382 |
BEGIN |
| 295 | 383 |
IF rst = '1' THEN |
| 296 | 384 |
r_rx_start <= X"00000000"; |
| ... | ... |
@@ -300,6 +388,9 @@ BEGIN |
| 300 | 388 |
r_rx_new_start <= X"00000000"; |
| 301 | 389 |
r_rx_new_end <= X"00000000"; |
| 302 | 390 |
r_rx_new_en <= '0'; |
| 391 |
+ r_tx_start <= X"00000000"; |
|
| 392 |
+ r_tx_end <= X"00000000"; |
|
| 393 |
+ r_tx_en <= '0'; |
|
| 303 | 394 |
ELSIF rising_edge(clk) THEN |
| 304 | 395 |
r_rx_start <= n_rx_start; |
| 305 | 396 |
r_rx_cur <= n_rx_cur; |
| ... | ... |
@@ -308,46 +399,54 @@ BEGIN |
| 308 | 399 |
r_rx_new_start <= n_rx_new_start; |
| 309 | 400 |
r_rx_new_end <= n_rx_new_end; |
| 310 | 401 |
r_rx_new_en <= n_rx_new_en; |
| 402 |
+ r_tx_start <= n_tx_start; |
|
| 403 |
+ r_tx_end <= n_tx_end; |
|
| 404 |
+ r_tx_en <= n_tx_en; |
|
| 311 | 405 |
END IF; |
| 312 |
- END PROCESS p_rx_sync; |
|
| 406 |
+ END PROCESS p_reg_sync; |
|
| 313 | 407 |
|
| 314 | 408 |
-- register interface write |
| 315 |
- p_write: PROCESS(r_rx_new_start, r_rx_new_end, r_rx_new_en, |
|
| 316 |
- s_rx_new, |
|
| 409 |
+ p_write: PROCESS(r_rx_new_start, r_rx_new_end, r_rx_new_en, s_rx_new, |
|
| 410 |
+ r_tx_start, r_tx_end, r_tx_en, s_txframe_done, |
|
| 317 | 411 |
i_addr, i_wr_data, i_wr_en) |
| 318 | 412 |
BEGIN |
| 319 | 413 |
n_rx_new_start <= r_rx_new_start; |
| 320 | 414 |
n_rx_new_end <= r_rx_new_end; |
| 321 | 415 |
n_rx_new_en <= r_rx_new_en; |
| 416 |
+ n_tx_start <= r_tx_start; |
|
| 417 |
+ n_tx_end <= r_tx_end; |
|
| 418 |
+ n_tx_en <= r_tx_en; |
|
| 419 |
+ s_txframe_en <= '0'; |
|
| 322 | 420 |
IF s_rx_new = '1' THEN |
| 323 |
- n_rx_new_en <= '0'; -- new buffer has been overtaken, reset new_en |
|
| 421 |
+ n_rx_new_en <= '0'; -- new buffer has been overtaken, reset rx_new_en |
|
| 422 |
+ END IF; |
|
| 423 |
+ IF s_txframe_done = '1' THEN |
|
| 424 |
+ n_tx_en <= '0'; -- TX operation completed, reset tx_en |
|
| 324 | 425 |
END IF; |
| 325 | 426 |
IF i_wr_en = "1111" THEN |
| 326 | 427 |
CASE i_addr IS |
| 327 |
- WHEN "100" => n_rx_new_start <= i_wr_data; |
|
| 328 |
- WHEN "101" => n_rx_new_end <= i_wr_data; |
|
| 329 |
- WHEN "110" => n_rx_new_en <= i_wr_data(0); |
|
| 428 |
+ WHEN "0100" => n_rx_new_start <= i_wr_data; |
|
| 429 |
+ WHEN "0101" => n_rx_new_end <= i_wr_data; |
|
| 430 |
+ WHEN "0110" => IF i_wr_data(0) = '1' THEN |
|
| 431 |
+ n_rx_new_en <= '1'; |
|
| 432 |
+ END IF; |
|
| 433 |
+ WHEN "1000" => IF r_tx_en = '0' THEN |
|
| 434 |
+ n_tx_start <= i_wr_data; |
|
| 435 |
+ END IF; |
|
| 436 |
+ WHEN "1001" => IF r_tx_en = '0' THEN |
|
| 437 |
+ n_tx_end <= i_wr_data; |
|
| 438 |
+ END IF; |
|
| 439 |
+ WHEN "1010" => IF i_wr_data(0) = '1' THEN |
|
| 440 |
+ IF r_tx_en = '0' THEN |
|
| 441 |
+ s_txframe_en <= '1'; |
|
| 442 |
+ END IF; |
|
| 443 |
+ n_tx_en <= '1'; |
|
| 444 |
+ END IF; |
|
| 330 | 445 |
WHEN OTHERS => NULL; |
| 331 | 446 |
END CASE; |
| 332 | 447 |
END IF; |
| 333 | 448 |
END PROCESS p_write; |
| 334 | 449 |
|
| 335 |
- txif: e_io_eth_txif |
|
| 336 |
- PORT MAP ( |
|
| 337 |
- rst => rst, |
|
| 338 |
- clk => clk, |
|
| 339 |
- i_data => s_txif_data, |
|
| 340 |
- i_data_en => s_txif_data_en, |
|
| 341 |
- o_data_ack => s_txif_data_ack, |
|
| 342 |
- pin_i_tx_clk => pin_i_tx_clk, |
|
| 343 |
- pin_o_txd => pin_o_txd, |
|
| 344 |
- pin_o_tx_en => pin_o_tx_en |
|
| 345 |
- ); |
|
| 346 |
- |
|
| 347 |
- -- TODO |
|
| 348 |
- s_txif_data <= X"00"; |
|
| 349 |
- s_txif_data_en <= '0'; |
|
| 350 |
- |
|
| 351 | 450 |
-- register interface read |
| 352 | 451 |
p_read: PROCESS(rst, clk) |
| 353 | 452 |
BEGIN |
| ... | ... |
@@ -356,13 +455,16 @@ BEGIN |
| 356 | 455 |
ELSIF rising_edge(clk) THEN |
| 357 | 456 |
o_rd_data <= (OTHERS => '0'); |
| 358 | 457 |
CASE i_addr IS |
| 359 |
- WHEN "000" => o_rd_data <= r_rx_start; |
|
| 360 |
- WHEN "001" => o_rd_data <= r_rx_cur; |
|
| 361 |
- WHEN "010" => o_rd_data <= r_rx_size; |
|
| 362 |
- WHEN "011" => o_rd_data <= r_rx_end; |
|
| 363 |
- WHEN "100" => o_rd_data <= r_rx_new_start; |
|
| 364 |
- WHEN "101" => o_rd_data <= r_rx_new_end; |
|
| 365 |
- WHEN "110" => o_rd_data(0) <= r_rx_new_en; |
|
| 458 |
+ WHEN "0000" => o_rd_data <= r_rx_start; |
|
| 459 |
+ WHEN "0001" => o_rd_data <= r_rx_cur; |
|
| 460 |
+ WHEN "0010" => o_rd_data <= r_rx_size; |
|
| 461 |
+ WHEN "0011" => o_rd_data <= r_rx_end; |
|
| 462 |
+ WHEN "0100" => o_rd_data <= r_rx_new_start; |
|
| 463 |
+ WHEN "0101" => o_rd_data <= r_rx_new_end; |
|
| 464 |
+ WHEN "0110" => o_rd_data(0) <= r_rx_new_en; |
|
| 465 |
+ WHEN "1000" => o_rd_data <= r_tx_start; |
|
| 466 |
+ WHEN "1001" => o_rd_data <= r_tx_end; |
|
| 467 |
+ WHEN "1010" => o_rd_data(0) <= r_tx_en; |
|
| 366 | 468 |
WHEN OTHERS => NULL; |
| 367 | 469 |
END CASE; |
| 368 | 470 |
END IF; |
| ... | ... |
@@ -388,20 +490,67 @@ BEGIN |
| 388 | 490 |
i_rd_en => s_wrbuf_rd_en |
| 389 | 491 |
); |
| 390 | 492 |
|
| 391 |
- pin_o_txd <= "0000"; |
|
| 392 |
- pin_o_tx_en <= '0'; |
|
| 493 |
+ -- TX busmaster read state machine |
|
| 494 |
+ p_tx_rd_next: PROCESS(r_tx_pos, r_tx_start, s_txframe_en, s_txbuf_wr_en) |
|
| 495 |
+ BEGIN |
|
| 496 |
+ n_tx_pos <= r_tx_pos; |
|
| 497 |
+ IF s_txframe_en = '1' THEN |
|
| 498 |
+ n_tx_pos <= r_tx_start; |
|
| 499 |
+ ELSIF s_txbuf_wr_en = '1' THEN |
|
| 500 |
+ n_tx_pos <= std_logic_vector(unsigned(r_tx_pos) + X"00000004"); |
|
| 501 |
+ END IF; |
|
| 502 |
+ END PROCESS p_tx_rd_next; |
|
| 503 |
+ |
|
| 504 |
+ p_tx_rd_sync: PROCESS(clk, rst) |
|
| 505 |
+ BEGIN |
|
| 506 |
+ IF rst = '1' THEN |
|
| 507 |
+ r_tx_pos <= X"00000000"; |
|
| 508 |
+ ELSIF rising_edge(clk) THEN |
|
| 509 |
+ r_tx_pos <= n_tx_pos; |
|
| 510 |
+ END IF; |
|
| 511 |
+ END PROCESS p_tx_rd_sync; |
|
| 393 | 512 |
|
| 394 |
- -- bus master write |
|
| 395 |
- p_bm_wr: PROCESS(s_wrbuf_rd_rdy, s_wrbuf_rd_data, i_bm_grant) |
|
| 513 |
+ -- busmaster read completed |
|
| 514 |
+ p_bm_rd: PROCESS(r_bm_rd, i_bm_rd_data) |
|
| 396 | 515 |
BEGIN |
| 516 |
+ s_txbuf_wr_data <= X"00000000"; |
|
| 517 |
+ s_txbuf_wr_en <= '0'; |
|
| 518 |
+ -- read was just completed |
|
| 519 |
+ IF r_bm_rd = '1' THEN |
|
| 520 |
+ s_txbuf_wr_data <= i_bm_rd_data; |
|
| 521 |
+ s_txbuf_wr_en <= '1'; |
|
| 522 |
+ END IF; |
|
| 523 |
+ END PROCESS p_bm_rd; |
|
| 524 |
+ |
|
| 525 |
+ -- bus master write (and request side of read) |
|
| 526 |
+ p_bm_wr: PROCESS(r_bm_rd, |
|
| 527 |
+ r_tx_en, r_tx_pos, r_tx_end, s_txbuf_wr_rdy, |
|
| 528 |
+ s_wrbuf_rd_rdy, s_wrbuf_rd_data, i_bm_grant) |
|
| 529 |
+ VARIABLE v_read: boolean; |
|
| 530 |
+ VARIABLE v_write: boolean; |
|
| 531 |
+ BEGIN |
|
| 532 |
+ n_bm_rd <= '0'; |
|
| 397 | 533 |
s_wrbuf_rd_en <= '0'; |
| 398 | 534 |
o_bm_req <= '0'; |
| 399 | 535 |
o_bm_addr <= (OTHERS => '0'); |
| 400 | 536 |
o_bm_rd_en <= (OTHERS => '0'); |
| 401 | 537 |
o_bm_wr_data <= (OTHERS => '0'); |
| 402 | 538 |
o_bm_wr_en <= (OTHERS => '0'); |
| 403 |
- -- process write requests from write buffer |
|
| 404 |
- IF s_wrbuf_rd_rdy = '1' THEN |
|
| 539 |
+ -- check for requests |
|
| 540 |
+ -- read: no read just completed, TX running, not reached end, |
|
| 541 |
+ -- space in buffer |
|
| 542 |
+ -- write: write request in write buffer |
|
| 543 |
+ v_read := r_bm_rd = '0' AND r_tx_en = '1' AND |
|
| 544 |
+ r_tx_pos /= r_tx_end AND s_txbuf_wr_rdy = '1'; |
|
| 545 |
+ v_write := s_wrbuf_rd_rdy = '1'; |
|
| 546 |
+ -- read access |
|
| 547 |
+ IF v_read THEN |
|
| 548 |
+ n_bm_rd <= i_bm_grant; |
|
| 549 |
+ o_bm_req <= '1'; |
|
| 550 |
+ o_bm_addr <= r_tx_pos; |
|
| 551 |
+ o_bm_rd_en <= "1111"; |
|
| 552 |
+ -- write access (arbitrate with read) |
|
| 553 |
+ ELSIF v_write THEN |
|
| 405 | 554 |
s_wrbuf_rd_en <= i_bm_grant; |
| 406 | 555 |
o_bm_req <= '1'; |
| 407 | 556 |
o_bm_addr <= s_wrbuf_rd_data(63 DOWNTO 32); |
| ... | ... |
@@ -410,5 +559,13 @@ BEGIN |
| 410 | 559 |
END IF; |
| 411 | 560 |
END PROCESS p_bm_wr; |
| 412 | 561 |
|
| 413 |
-END ARCHITECTURE a_io_eth; |
|
| 562 |
+ p_bm_sync: PROCESS(clk, rst) |
|
| 563 |
+ BEGIN |
|
| 564 |
+ IF rst = '1' THEN |
|
| 565 |
+ r_bm_rd <= '0'; |
|
| 566 |
+ ELSIF rising_edge(clk) THEN |
|
| 567 |
+ r_bm_rd <= n_bm_rd; |
|
| 568 |
+ END IF; |
|
| 569 |
+ END PROCESS p_bm_sync; |
|
| 414 | 570 |
|
| 571 |
+END ARCHITECTURE a_io_eth; |
| ... | ... |
@@ -0,0 +1,171 @@ |
| 1 |
+LIBRARY IEEE; |
|
| 2 |
+USE IEEE.STD_LOGIC_1164.ALL; |
|
| 3 |
+USE IEEE.NUMERIC_STD.ALL; |
|
| 4 |
+ |
|
| 5 |
+ENTITY e_io_eth_txframe IS |
|
| 6 |
+ PORT ( |
|
| 7 |
+ rst: IN std_logic; |
|
| 8 |
+ clk: IN std_logic; |
|
| 9 |
+ o_if_data: OUT std_logic_vector(7 DOWNTO 0); |
|
| 10 |
+ o_if_data_en: OUT std_logic; |
|
| 11 |
+ i_if_data_ack: IN std_logic; |
|
| 12 |
+ i_frame_en: IN std_logic; |
|
| 13 |
+ i_frame_data: IN std_logic_vector(31 DOWNTO 0); |
|
| 14 |
+ i_frame_data_en: IN std_logic; |
|
| 15 |
+ o_frame_data_ack: OUT std_logic; |
|
| 16 |
+ o_frame_done: OUT std_logic |
|
| 17 |
+ ); |
|
| 18 |
+END ENTITY e_io_eth_txframe; |
|
| 19 |
+ |
|
| 20 |
+ARCHITECTURE a_io_eth_txframe OF e_io_eth_txframe IS |
|
| 21 |
+ |
|
| 22 |
+ TYPE t_state IS (st_idle, st_sync, st_start, st_data, st_crc, st_gap); |
|
| 23 |
+ |
|
| 24 |
+ SUBTYPE t_data_cnt IS natural RANGE 0 TO 255; |
|
| 25 |
+ |
|
| 26 |
+ SIGNAL r_state: t_state := st_idle; |
|
| 27 |
+ SIGNAL n_state: t_state; |
|
| 28 |
+ SIGNAL r_data_cnt: t_data_cnt := 0; |
|
| 29 |
+ SIGNAL n_data_cnt: t_data_cnt; |
|
| 30 |
+ SIGNAL r_data: std_logic_vector(31 DOWNTO 0) := (OTHERS => '0'); |
|
| 31 |
+ SIGNAL n_data: std_logic_vector(31 DOWNTO 0); |
|
| 32 |
+ SIGNAL r_crc_start: std_logic := '0'; |
|
| 33 |
+ SIGNAL n_crc_start: std_logic; |
|
| 34 |
+ |
|
| 35 |
+ SIGNAL s_crc_en: std_logic; |
|
| 36 |
+ SIGNAL s_crc_start: std_logic; |
|
| 37 |
+ SIGNAL s_crc_data: std_logic_vector( 7 DOWNTO 0); |
|
| 38 |
+ SIGNAL s_crc_crc: std_logic_vector(31 DOWNTO 0); |
|
| 39 |
+ |
|
| 40 |
+ COMPONENT e_block_crc32 IS |
|
| 41 |
+ PORT ( |
|
| 42 |
+ rst: IN std_logic; |
|
| 43 |
+ clk: IN std_logic; |
|
| 44 |
+ i_en: IN std_logic; |
|
| 45 |
+ i_start: IN std_logic; |
|
| 46 |
+ i_data: IN std_logic_vector( 7 DOWNTO 0); |
|
| 47 |
+ o_crc: OUT std_logic_vector(31 DOWNTO 0) |
|
| 48 |
+ ); |
|
| 49 |
+ END COMPONENT e_block_crc32; |
|
| 50 |
+ |
|
| 51 |
+BEGIN |
|
| 52 |
+ |
|
| 53 |
+ crc32: e_block_crc32 |
|
| 54 |
+ PORT MAP ( |
|
| 55 |
+ rst => rst, |
|
| 56 |
+ clk => clk, |
|
| 57 |
+ i_en => s_crc_en, |
|
| 58 |
+ i_start => s_crc_start, |
|
| 59 |
+ i_data => s_crc_data, |
|
| 60 |
+ o_crc => s_crc_crc |
|
| 61 |
+ ); |
|
| 62 |
+ |
|
| 63 |
+ p_next: PROCESS(r_state, r_data_cnt, r_data, r_crc_start, |
|
| 64 |
+ i_if_data_ack, |
|
| 65 |
+ i_frame_en, i_frame_data, i_frame_data_en, |
|
| 66 |
+ s_crc_crc) |
|
| 67 |
+ BEGIN |
|
| 68 |
+ n_state <= r_state; |
|
| 69 |
+ n_data_cnt <= r_data_cnt; |
|
| 70 |
+ n_data <= r_data; |
|
| 71 |
+ n_crc_start <= '0'; |
|
| 72 |
+ o_if_data <= X"00"; |
|
| 73 |
+ o_if_data_en <= '0'; |
|
| 74 |
+ o_frame_data_ack <= '0'; |
|
| 75 |
+ s_crc_en <= '0'; |
|
| 76 |
+ s_crc_start <= '0'; |
|
| 77 |
+ s_crc_data <= (OTHERS => '0'); |
|
| 78 |
+ CASE r_state IS |
|
| 79 |
+ WHEN st_idle => |
|
| 80 |
+ IF i_frame_en = '1' THEN |
|
| 81 |
+ n_state <= st_sync; |
|
| 82 |
+ n_data_cnt <= 7; |
|
| 83 |
+ END IF; |
|
| 84 |
+ WHEN st_sync => |
|
| 85 |
+ IF i_if_data_ack = '1' THEN |
|
| 86 |
+ IF r_data_cnt = 1 THEN |
|
| 87 |
+ n_state <= st_start; |
|
| 88 |
+ ELSE |
|
| 89 |
+ n_data_cnt <= r_data_cnt - 1; |
|
| 90 |
+ END IF; |
|
| 91 |
+ END IF; |
|
| 92 |
+ o_if_data <= X"55"; |
|
| 93 |
+ o_if_data_en <= '1'; |
|
| 94 |
+ WHEN st_start => |
|
| 95 |
+ IF i_if_data_ack = '1' THEN |
|
| 96 |
+ IF i_frame_data_en = '1' THEN |
|
| 97 |
+ n_state <= st_data; |
|
| 98 |
+ n_data_cnt <= 4; |
|
| 99 |
+ n_data <= i_frame_data; |
|
| 100 |
+ n_crc_start <= '1'; |
|
| 101 |
+ o_frame_data_ack <= '1'; |
|
| 102 |
+ ELSE |
|
| 103 |
+ n_state <= st_gap; |
|
| 104 |
+ n_data_cnt <= 12 * 8 * 2; -- 12 octets, x2 because of clk |
|
| 105 |
+ END IF; |
|
| 106 |
+ END IF; |
|
| 107 |
+ o_if_data <= X"D5"; |
|
| 108 |
+ o_if_data_en <= '1'; |
|
| 109 |
+ WHEN st_data => |
|
| 110 |
+ IF i_if_data_ack = '1' THEN |
|
| 111 |
+ IF r_data_cnt = 1 THEN |
|
| 112 |
+ IF i_frame_data_en = '1' THEN |
|
| 113 |
+ n_state <= st_data; |
|
| 114 |
+ n_data_cnt <= 4; |
|
| 115 |
+ n_data <= i_frame_data; |
|
| 116 |
+ o_frame_data_ack <= '1'; |
|
| 117 |
+ ELSE |
|
| 118 |
+ n_state <= st_crc; |
|
| 119 |
+ n_data_cnt <= 4; |
|
| 120 |
+ n_data <= s_crc_crc; |
|
| 121 |
+ END IF; |
|
| 122 |
+ ELSE |
|
| 123 |
+ n_data_cnt <= r_data_cnt - 1; |
|
| 124 |
+ n_data(23 DOWNTO 0) <= r_data(31 DOWNTO 8); |
|
| 125 |
+ END IF; |
|
| 126 |
+ END IF; |
|
| 127 |
+ o_if_data <= r_data(7 DOWNTO 0); |
|
| 128 |
+ o_if_data_en <= '1'; |
|
| 129 |
+ s_crc_en <= '1'; |
|
| 130 |
+ s_crc_start <= r_crc_start; |
|
| 131 |
+ s_crc_data <= r_data(7 DOWNTO 0); |
|
| 132 |
+ WHEN st_crc => |
|
| 133 |
+ IF i_if_data_ack = '1' THEN |
|
| 134 |
+ IF r_data_cnt = 1 THEN |
|
| 135 |
+ n_state <= st_gap; |
|
| 136 |
+ n_data_cnt <= 12 * 8 * 2; -- 12 octets, x2 because of clk |
|
| 137 |
+ ELSE |
|
| 138 |
+ n_data_cnt <= r_data_cnt - 1; |
|
| 139 |
+ n_data(23 DOWNTO 0) <= r_data(31 DOWNTO 8); |
|
| 140 |
+ END IF; |
|
| 141 |
+ END IF; |
|
| 142 |
+ o_if_data <= r_data(7 DOWNTO 0); |
|
| 143 |
+ o_if_data_en <= '1'; |
|
| 144 |
+ WHEN st_gap => |
|
| 145 |
+ IF r_data_cnt = 1 THEN |
|
| 146 |
+ n_state <= st_idle; |
|
| 147 |
+ o_frame_done <= '1'; |
|
| 148 |
+ ELSE |
|
| 149 |
+ n_data_cnt <= r_data_cnt - 1; |
|
| 150 |
+ END IF; |
|
| 151 |
+ WHEN OTHERS => NULL; |
|
| 152 |
+ END CASE; |
|
| 153 |
+ END PROCESS p_next; |
|
| 154 |
+ |
|
| 155 |
+ p_sync: PROCESS(rst, clk) |
|
| 156 |
+ BEGIN |
|
| 157 |
+ IF rst = '1' THEN |
|
| 158 |
+ r_state <= st_idle; |
|
| 159 |
+ r_data_cnt <= 0; |
|
| 160 |
+ r_data <= (OTHERS => '0'); |
|
| 161 |
+ r_crc_start <= '0'; |
|
| 162 |
+ ELSIF rising_edge(clk) THEN |
|
| 163 |
+ r_state <= n_state; |
|
| 164 |
+ r_data_cnt <= n_data_cnt; |
|
| 165 |
+ r_data <= n_data; |
|
| 166 |
+ r_crc_start <= n_crc_start; |
|
| 167 |
+ END IF; |
|
| 168 |
+ END PROCESS p_sync; |
|
| 169 |
+ |
|
| 170 |
+END ARCHITECTURE a_io_eth_txframe; |
|
| 171 |
+ |
| ... | ... |
@@ -17,43 +17,43 @@ |
| 17 | 17 |
<files> |
| 18 | 18 |
<file xil_pn:name="mips/decoder.vhd" xil_pn:type="FILE_VHDL"> |
| 19 | 19 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="8"/> |
| 20 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 20 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="8"/> |
|
| 21 | 21 |
</file> |
| 22 | 22 |
<file xil_pn:name="mips/types.vhd" xil_pn:type="FILE_VHDL"> |
| 23 | 23 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="1"/> |
| 24 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 24 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="1"/> |
|
| 25 | 25 |
</file> |
| 26 | 26 |
<file xil_pn:name="mips/alu.vhd" xil_pn:type="FILE_VHDL"> |
| 27 | 27 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="10"/> |
| 28 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 28 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="10"/> |
|
| 29 | 29 |
</file> |
| 30 | 30 |
<file xil_pn:name="mips/core.vhd" xil_pn:type="FILE_VHDL"> |
| 31 | 31 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="17"/> |
| 32 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 32 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="19"/> |
|
| 33 | 33 |
</file> |
| 34 | 34 |
<file xil_pn:name="mips/regs.vhd" xil_pn:type="FILE_VHDL"> |
| 35 | 35 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="5"/> |
| 36 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 36 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="5"/> |
|
| 37 | 37 |
</file> |
| 38 | 38 |
<file xil_pn:name="mips/shifter.vhd" xil_pn:type="FILE_VHDL"> |
| 39 | 39 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="2"/> |
| 40 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 40 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="2"/> |
|
| 41 | 41 |
</file> |
| 42 | 42 |
<file xil_pn:name="mips/cmp.vhd" xil_pn:type="FILE_VHDL"> |
| 43 | 43 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="9"/> |
| 44 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 44 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="9"/> |
|
| 45 | 45 |
</file> |
| 46 | 46 |
<file xil_pn:name="mips/div.vhd" xil_pn:type="FILE_VHDL"> |
| 47 | 47 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="7"/> |
| 48 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 48 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="7"/> |
|
| 49 | 49 |
</file> |
| 50 | 50 |
<file xil_pn:name="mips/mul_slow.vhd" xil_pn:type="FILE_VHDL"> |
| 51 | 51 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="6"/> |
| 52 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 52 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="6"/> |
|
| 53 | 53 |
</file> |
| 54 | 54 |
<file xil_pn:name="system/system.vhd" xil_pn:type="FILE_VHDL"> |
| 55 | 55 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="29"/> |
| 56 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 56 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="31"/> |
|
| 57 | 57 |
</file> |
| 58 | 58 |
<file xil_pn:name="test/testbed.vhd" xil_pn:type="FILE_VHDL"> |
| 59 | 59 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="30"/> |
| ... | ... |
@@ -63,11 +63,11 @@ |
| 63 | 63 |
</file> |
| 64 | 64 |
<file xil_pn:name="fw/rom.vhd" xil_pn:type="FILE_VHDL"> |
| 65 | 65 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="24"/> |
| 66 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 66 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="26"/> |
|
| 67 | 67 |
</file> |
| 68 | 68 |
<file xil_pn:name="io/leds.vhd" xil_pn:type="FILE_VHDL"> |
| 69 | 69 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="20"/> |
| 70 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 70 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="22"/> |
|
| 71 | 71 |
</file> |
| 72 | 72 |
<file xil_pn:name="constraints/leds.ucf" xil_pn:type="FILE_UCF"> |
| 73 | 73 |
<association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
| ... | ... |
@@ -77,87 +77,91 @@ |
| 77 | 77 |
</file> |
| 78 | 78 |
<file xil_pn:name="io/cyc_cnt.vhd" xil_pn:type="FILE_VHDL"> |
| 79 | 79 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="23"/> |
| 80 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 80 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="25"/> |
|
| 81 | 81 |
</file> |
| 82 | 82 |
<file xil_pn:name="io/lcd.vhd" xil_pn:type="FILE_VHDL"> |
| 83 | 83 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="21"/> |
| 84 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 84 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="23"/> |
|
| 85 | 85 |
</file> |
| 86 | 86 |
<file xil_pn:name="io/lcd_pins.vhd" xil_pn:type="FILE_VHDL"> |
| 87 | 87 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="12"/> |
| 88 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 88 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="12"/> |
|
| 89 | 89 |
</file> |
| 90 | 90 |
<file xil_pn:name="constraints/lcd.ucf" xil_pn:type="FILE_UCF"> |
| 91 | 91 |
<association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
| 92 | 92 |
</file> |
| 93 | 93 |
<file xil_pn:name="fw/ram.0.vhd" xil_pn:type="FILE_VHDL"> |
| 94 | 94 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="28"/> |
| 95 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 95 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="30"/> |
|
| 96 | 96 |
</file> |
| 97 | 97 |
<file xil_pn:name="fw/ram.1.vhd" xil_pn:type="FILE_VHDL"> |
| 98 | 98 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="27"/> |
| 99 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 99 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="29"/> |
|
| 100 | 100 |
</file> |
| 101 | 101 |
<file xil_pn:name="fw/ram.2.vhd" xil_pn:type="FILE_VHDL"> |
| 102 | 102 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="26"/> |
| 103 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 103 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="28"/> |
|
| 104 | 104 |
</file> |
| 105 | 105 |
<file xil_pn:name="fw/ram.3.vhd" xil_pn:type="FILE_VHDL"> |
| 106 | 106 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="25"/> |
| 107 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 107 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="27"/> |
|
| 108 | 108 |
</file> |
| 109 | 109 |
<file xil_pn:name="io/switches_pins.vhd" xil_pn:type="FILE_VHDL"> |
| 110 | 110 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="11"/> |
| 111 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 111 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="11"/> |
|
| 112 | 112 |
</file> |
| 113 | 113 |
<file xil_pn:name="io/switches.vhd" xil_pn:type="FILE_VHDL"> |
| 114 | 114 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="19"/> |
| 115 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 115 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="21"/> |
|
| 116 | 116 |
</file> |
| 117 | 117 |
<file xil_pn:name="constraints/switches.ucf" xil_pn:type="FILE_UCF"> |
| 118 | 118 |
<association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
| 119 | 119 |
</file> |
| 120 | 120 |
<file xil_pn:name="io/uart.vhd" xil_pn:type="FILE_VHDL"> |
| 121 | 121 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="18"/> |
| 122 |
- <association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
|
| 122 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="20"/> |
|
| 123 | 123 |
</file> |
| 124 | 124 |
<file xil_pn:name="constraints/uart.ucf" xil_pn:type="FILE_UCF"> |
| 125 | 125 |
<association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
| 126 | 126 |
</file> |
| 127 | 127 |
<file xil_pn:name="blocks/fifo.vhd" xil_pn:type="FILE_VHDL"> |
| 128 | 128 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="16"/> |
| 129 |
- <association xil_pn:name="Implementation" xil_pn:seqID="7"/> |
|
| 129 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="18"/> |
|
| 130 | 130 |
</file> |
| 131 | 131 |
<file xil_pn:name="blocks/rwram.vhd" xil_pn:type="FILE_VHDL"> |
| 132 | 132 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="3"/> |
| 133 |
- <association xil_pn:name="Implementation" xil_pn:seqID="1"/> |
|
| 133 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="3"/> |
|
| 134 | 134 |
</file> |
| 135 | 135 |
<file xil_pn:name="io/eth/eth.vhd" xil_pn:type="FILE_VHDL"> |
| 136 | 136 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="22"/> |
| 137 |
- <association xil_pn:name="Implementation" xil_pn:seqID="8"/> |
|
| 137 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="24"/> |
|
| 138 | 138 |
</file> |
| 139 | 139 |
<file xil_pn:name="io/eth/rst.vhd" xil_pn:type="FILE_VHDL"> |
| 140 | 140 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="15"/> |
| 141 |
- <association xil_pn:name="Implementation" xil_pn:seqID="6"/> |
|
| 141 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="17"/> |
|
| 142 | 142 |
</file> |
| 143 | 143 |
<file xil_pn:name="io/eth/rxif.vhd" xil_pn:type="FILE_VHDL"> |
| 144 | 144 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="13"/> |
| 145 |
- <association xil_pn:name="Implementation" xil_pn:seqID="4"/> |
|
| 145 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="15"/> |
|
| 146 | 146 |
</file> |
| 147 | 147 |
<file xil_pn:name="constraints/eth.ucf" xil_pn:type="FILE_UCF"> |
| 148 | 148 |
<association xil_pn:name="Implementation" xil_pn:seqID="0"/> |
| 149 | 149 |
</file> |
| 150 | 150 |
<file xil_pn:name="blocks/crc32.vhd" xil_pn:type="FILE_VHDL"> |
| 151 | 151 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="4"/> |
| 152 |
- <association xil_pn:name="Implementation" xil_pn:seqID="2"/> |
|
| 152 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="4"/> |
|
| 153 | 153 |
</file> |
| 154 | 154 |
<file xil_pn:name="io/eth/rxframe.vhd" xil_pn:type="FILE_VHDL"> |
| 155 | 155 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="14"/> |
| 156 |
- <association xil_pn:name="Implementation" xil_pn:seqID="5"/> |
|
| 156 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="16"/> |
|
| 157 | 157 |
</file> |
| 158 | 158 |
<file xil_pn:name="io/eth/txif.vhd" xil_pn:type="FILE_VHDL"> |
| 159 | 159 |
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="206"/> |
| 160 |
- <association xil_pn:name="Implementation" xil_pn:seqID="3"/> |
|
| 160 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="13"/> |
|
| 161 |
+ </file> |
|
| 162 |
+ <file xil_pn:name="io/eth/txframe.vhd" xil_pn:type="FILE_VHDL"> |
|
| 163 |
+ <association xil_pn:name="BehavioralSimulation" xil_pn:seqID="210"/> |
|
| 164 |
+ <association xil_pn:name="Implementation" xil_pn:seqID="14"/> |
|
| 161 | 165 |
</file> |
| 162 | 166 |
</files> |
| 163 | 167 |
|
| ... | ... |
@@ -74,7 +74,7 @@ ARCHITECTURE a_system OF e_system IS |
| 74 | 74 |
SIGNAL s_uart_rd_en: std_logic_vector( 3 DOWNTO 0); |
| 75 | 75 |
SIGNAL s_uart_wr_data: std_logic_vector(31 DOWNTO 0); |
| 76 | 76 |
SIGNAL s_uart_wr_en: std_logic_vector( 3 DOWNTO 0); |
| 77 |
- SIGNAL s_eth_addr: std_logic_vector( 4 DOWNTO 0); |
|
| 77 |
+ SIGNAL s_eth_addr: std_logic_vector( 5 DOWNTO 0); |
|
| 78 | 78 |
SIGNAL s_eth_rd_data: std_logic_vector(31 DOWNTO 0); |
| 79 | 79 |
SIGNAL s_eth_rd_en: std_logic_vector( 3 DOWNTO 0); |
| 80 | 80 |
SIGNAL s_eth_wr_data: std_logic_vector(31 DOWNTO 0); |
| ... | ... |
@@ -212,7 +212,7 @@ ARCHITECTURE a_system OF e_system IS |
| 212 | 212 |
PORT ( |
| 213 | 213 |
rst: IN std_logic; |
| 214 | 214 |
clk: IN std_logic; |
| 215 |
- i_addr: IN std_logic_vector( 2 DOWNTO 0); |
|
| 215 |
+ i_addr: IN std_logic_vector( 3 DOWNTO 0); |
|
| 216 | 216 |
o_rd_data: OUT std_logic_vector(31 DOWNTO 0); |
| 217 | 217 |
i_rd_en: IN std_logic_vector( 3 DOWNTO 0); |
| 218 | 218 |
i_wr_data: IN std_logic_vector(31 DOWNTO 0); |
| ... | ... |
@@ -393,7 +393,7 @@ BEGIN |
| 393 | 393 |
s_uart_wr_data <= s_dbus_wr_data; |
| 394 | 394 |
s_uart_wr_en <= s_dbus_wr_en; |
| 395 | 395 |
WHEN X"04" => |
| 396 |
- s_eth_addr <= s_dbus_addr(4 DOWNTO 0); |
|
| 396 |
+ s_eth_addr <= s_dbus_addr(5 DOWNTO 0); |
|
| 397 | 397 |
s_eth_rd_en <= s_dbus_rd_en; |
| 398 | 398 |
s_eth_wr_data <= s_dbus_wr_data; |
| 399 | 399 |
s_eth_wr_en <= s_dbus_wr_en; |
| ... | ... |
@@ -499,7 +499,7 @@ BEGIN |
| 499 | 499 |
PORT MAP ( |
| 500 | 500 |
rst => rst, |
| 501 | 501 |
clk => clk, |
| 502 |
- i_addr => s_eth_addr(4 DOWNTO 2), |
|
| 502 |
+ i_addr => s_eth_addr(5 DOWNTO 2), |
|
| 503 | 503 |
o_rd_data => s_eth_rd_data, |
| 504 | 504 |
i_rd_en => s_eth_rd_en, |
| 505 | 505 |
i_wr_data => s_eth_wr_data, |
| 506 | 506 |