Stefan Schuermans commited on 2012-02-05 16:25:55
Showing 1 changed files, with 22 additions and 1 deletions.
| ... | ... |
@@ -337,9 +337,10 @@ BEGIN |
| 337 | 337 |
|
| 338 | 338 |
o_data_addr <= s_data_addr(31 DOWNTO 2) & "00"; |
| 339 | 339 |
|
| 340 |
- p_data_rd: PROCESS(r_data_rd, r_op, r_ldst, s_data_addr, r_reg_t, i_data_rd_data) |
|
| 340 |
+ p_data_rd: PROCESS(r_data_rd, r_op, r_ldst, s_data_addr, r_reg_t, i_data_rd_data, s_val_t) |
|
| 341 | 341 |
VARIABLE v_b: std_logic_vector( 7 DOWNTO 0); |
| 342 | 342 |
VARIABLE v_h: std_logic_vector(15 DOWNTO 0); |
| 343 |
+ VARIABLE v_w: std_logic_vector(31 DOWNTO 0); |
|
| 343 | 344 |
BEGIN |
| 344 | 345 |
s_stall_data_rd <= '0'; |
| 345 | 346 |
n_data_rd <= data_rd_idle; |
| ... | ... |
@@ -378,6 +379,26 @@ BEGIN |
| 378 | 379 |
END IF; |
| 379 | 380 |
WHEN ldst_w => |
| 380 | 381 |
s_reg_wr_data_data <= i_data_rd_data; |
| 382 |
+ WHEN ldst_wl => |
|
| 383 |
+ v_w := s_val_t; |
|
| 384 |
+ CASE s_data_addr(1 DOWNTO 0) IS |
|
| 385 |
+ WHEN "00" => v_w(31 DOWNTO 24) := i_data_rd_data( 7 DOWNTO 0); |
|
| 386 |
+ WHEN "01" => v_w(31 DOWNTO 16) := i_data_rd_data(15 DOWNTO 0); |
|
| 387 |
+ WHEN "10" => v_w(31 DOWNTO 8) := i_data_rd_data(23 DOWNTO 0); |
|
| 388 |
+ WHEN "11" => v_w(31 DOWNTO 0) := i_data_rd_data(31 DOWNTO 0); |
|
| 389 |
+ WHEN OTHERS => NULL; |
|
| 390 |
+ END CASE; |
|
| 391 |
+ s_reg_wr_data_data <= v_w; |
|
| 392 |
+ WHEN ldst_wr => |
|
| 393 |
+ v_w := s_val_t; |
|
| 394 |
+ CASE s_data_addr(1 DOWNTO 0) IS |
|
| 395 |
+ WHEN "00" => v_w(31 DOWNTO 0) := i_data_rd_data(31 DOWNTO 0); |
|
| 396 |
+ WHEN "01" => v_w(23 DOWNTO 0) := i_data_rd_data(31 DOWNTO 8); |
|
| 397 |
+ WHEN "10" => v_w(15 DOWNTO 0) := i_data_rd_data(31 DOWNTO 16); |
|
| 398 |
+ WHEN "11" => v_w( 7 DOWNTO 0) := i_data_rd_data(31 DOWNTO 24); |
|
| 399 |
+ WHEN OTHERS => NULL; |
|
| 400 |
+ END CASE; |
|
| 401 |
+ s_reg_wr_data_data <= v_w; |
|
| 381 | 402 |
WHEN OTHERS => NULL; |
| 382 | 403 |
END CASE; |
| 383 | 404 |
s_reg_wr_data_no <= r_reg_t; |
| 384 | 405 |