Stefan Schuermans commited on 2012-02-05 21:16:11
Showing 1 changed files, with 21 additions and 1 deletions.
... | ... |
@@ -76,6 +76,10 @@ ARCHITECTURE a_mips_core OF e_mips_core IS |
76 | 76 |
SIGNAL s_reg_wr_hi_lo_data: std_logic_vector(31 DOWNTO 0); |
77 | 77 |
SIGNAL s_reg_wr_hi_lo_en: std_logic; |
78 | 78 |
|
79 |
+ SIGNAL s_reg_wr_link_no: std_logic_vector( 4 DOWNTO 0); |
|
80 |
+ SIGNAL s_reg_wr_link_data: std_logic_vector(31 DOWNTO 0); |
|
81 |
+ SIGNAL s_reg_wr_link_en: std_logic; |
|
82 |
+ |
|
79 | 83 |
SIGNAL s_reg_wr_no: std_logic_vector( 4 DOWNTO 0); |
80 | 84 |
SIGNAL s_reg_wr_data: std_logic_vector(31 DOWNTO 0); |
81 | 85 |
SIGNAL s_reg_wr_en: std_logic; |
... | ... |
@@ -361,7 +365,8 @@ BEGIN |
361 | 365 |
p_reg_wr: PROCESS(s_stall, |
362 | 366 |
s_reg_wr_alu_no, s_reg_wr_alu_data, s_reg_wr_alu_en, |
363 | 367 |
s_reg_wr_data_no, s_reg_wr_data_data, s_reg_wr_data_en, |
364 |
- s_reg_wr_hi_lo_no, s_reg_wr_hi_lo_data, s_reg_wr_hi_lo_en) |
|
368 |
+ s_reg_wr_hi_lo_no, s_reg_wr_hi_lo_data, s_reg_wr_hi_lo_en, |
|
369 |
+ s_reg_wr_link_no, s_reg_wr_link_data, s_reg_wr_link_en) |
|
365 | 370 |
BEGIN |
366 | 371 |
s_reg_wr_no <= (OTHERS => '0'); |
367 | 372 |
s_reg_wr_data <= (OTHERS => '0'); |
... | ... |
@@ -379,6 +384,10 @@ BEGIN |
379 | 384 |
s_reg_wr_no <= s_reg_wr_hi_lo_no; |
380 | 385 |
s_reg_wr_data <= s_reg_wr_hi_lo_data; |
381 | 386 |
s_reg_wr_en <= '1'; |
387 |
+ ELSIF s_reg_wr_link_en = '1' THEN |
|
388 |
+ s_reg_wr_no <= s_reg_wr_link_no; |
|
389 |
+ s_reg_wr_data <= s_reg_wr_link_data; |
|
390 |
+ s_reg_wr_en <= '1'; |
|
382 | 391 |
END IF; |
383 | 392 |
END IF; |
384 | 393 |
END PROCESS p_reg_wr; |
... | ... |
@@ -617,4 +626,15 @@ BEGIN |
617 | 626 |
s_div_signed <= '1' WHEN r_op = op_div ELSE '0'; |
618 | 627 |
s_div_start <= '1' WHEN i_stall = '0' AND (r_op = op_div OR r_op = op_divu) ELSE '0'; |
619 | 628 |
|
629 |
+ p_link: PROCESS(r_pc, r_link) |
|
630 |
+ BEGIN |
|
631 |
+ s_reg_wr_link_no <= std_logic_vector(to_unsigned(31, 5)); |
|
632 |
+ s_reg_wr_link_data <= std_logic_vector(signed(r_pc) + to_signed(4, 32)); |
|
633 |
+ IF r_link = link_link THEN |
|
634 |
+ s_reg_wr_link_en <= '1'; |
|
635 |
+ ELSE |
|
636 |
+ s_reg_wr_link_en <= '0'; |
|
637 |
+ END IF; |
|
638 |
+ END PROCESS p_link; |
|
639 |
+ |
|
620 | 640 |
END ARCHITECTURE a_mips_core; |
621 | 641 |