use work.core_pkg.all;
use work.mem_pkg.all;
+use work.extension_pkg.all;
architecture behav of writeback_stage is
-
signal data_ram_read : word_t;
signal wb_reg, wb_reg_nxt : writeback_rec;
+signal ext_uart,ext_timer,ext_gpm : extmod_rec;
+
+
begin
reg_addr <= result_addr;
end process;
+
+addr_de_mult: process(wb_reg_nxt.address)
+
+begin
+
+ ext_uart.sel <='0';
+ ext_uart.wr_en <= '0';
+ ext_uart.byte_en <= (others => '0');
+ ext_uart.data <= (others => '0');
+ ext_uart.addr <= (others => '0');
+ -- wenn ich hier statt dem 4rer die konstante nehme dann gibts an fehler wegen nicht lokaler variable -.-
+ case wb_reg_nxt.address(wb_reg_nxt.address'high downto 4) is
+ when EXT_UART_ADDR =>
+ ext_uart.sel <='1';
+ ext_uart.wr_en <= wb_reg_nxt.dmem_write_en;
+ ext_uart.data <= ram_data;
+ ext_uart.addr <= wb_reg_nxt.address(wb_reg_nxt.address'high downto BYTEADDR);
+ case wb_reg.address(1 downto 0) is
+ when "00" => ext_uart.byte_en <= "0001";
+ when "01" => ext_uart.byte_en <= "0010";
+ when "10" => ext_uart.byte_en <= "0100";
+ when "11" => ext_uart.byte_en <= "1000";
+ when others => null;
+ end case;
+ when EXT_TIMER_ADDR =>
+ ext_timer.sel <='1';
+ ext_timer.wr_en <= wb_reg_nxt.dmem_write_en;
+ ext_timer.data <= ram_data;
+ ext_timer.addr <= wb_reg_nxt.address(wb_reg_nxt.address'high downto BYTEADDR);
+ case wb_reg.address(1 downto 0) is
+ when "00" => ext_timer.byte_en <= "0001";
+ when "01" => ext_timer.byte_en <= "0010";
+ when "10" => ext_timer.byte_en <= "0100";
+ when "11" => ext_timer.byte_en <= "1000";
+ when others => null;
+ end case;
+ when EXT_GPM_ADDR =>
+ ext_gpm.sel <='1';
+ ext_gpm.wr_en <= wb_reg_nxt.dmem_write_en;
+ ext_gpm.data <= ram_data;
+ ext_gpm.addr <= wb_reg_nxt.address(wb_reg_nxt.address'high downto BYTEADDR);
+ case wb_reg.address(1 downto 0) is
+ when "00" => ext_gpm.byte_en <= "0001";
+ when "01" => ext_gpm.byte_en <= "0010";
+ when "10" => ext_gpm.byte_en <= "0100";
+ when "11" => ext_gpm.byte_en <= "1000";
+ when others => null;
+ end case;
+ -- hier kann man weiter extensions adden :) Konstanten sind im extension pkg definiert
+ when others => null;
+ end case;
+
+end process;
+
end behav;