use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
+use work.common_pkg.all;
use work.core_pkg.all;
-architecture behav of writeback_stage is
+use work.mem_pkg.all;
+architecture behav of writeback_stage is
-begin
signal data_ram_read : word_t;
signal wb_reg, wb_reg_nxt : writeback_rec;
+begin
+
+
data_ram : r_w_ram
generic map (
- PHYS_DATA_ADDR_WIDTH,
+ DATA_ADDR_WIDTH,
WORD_WIDTH
)
port map (
clk,
- wb_reg_nxt.address(PHYS_DATA_ADDR_WIDTH+1 downto 2),
- wb_reg_nxt.address(PHYS_DATA_ADDR_WIDTH+1 downto 2),
+ wb_reg_nxt.address(DATA_ADDR_WIDTH+1 downto 2),
+ wb_reg_nxt.address(DATA_ADDR_WIDTH+1 downto 2),
wb_reg_nxt.dmem_write_en,
ram_data,
data_ram_read
);
-syn: process(sys_clk, reset)
+syn: process(clk, reset)
begin
if (reset = RESET_VALUE) then
-
- elsif rising_edge(sys_clk) then
+ wb_reg_nxt.address <= (others => '0');
+ wb_reg_nxt.dmem_en <= '0';
+ wb_reg_nxt.dmem_write_en <= '0';
+ wb_reg_nxt.hword <= '0';
+ wb_reg_nxt.byte_s <= '0';
+ elsif rising_edge(clk) then
wb_reg <= wb_reg_nxt;
end if;
-shift_input: process(data_ram_read, address, dmem_en, dmem_write_en, hword_hl, wb_reg, result)
+shift_input: process(data_ram_read, address, dmem_en, dmem_write_en, hword, wb_reg, result)
begin
wb_reg_nxt.address <= address;
when "01" => regfile_val(7 downto 0) <= data_ram_read(15 downto 8);
when "10" => regfile_val(7 downto 0) <= data_ram_read(23 downto 16);
when "11" => regfile_val(7 downto 0) <= data_ram_read(31 downto 24);
+ when others => null;
end case;
end if;
end if;