spartan3e/lcd: (hw) signale per ext.modul rausziehen (sw) rest
[calu.git] / cpu / src / writeback_stage_b.vhd
index acf0f7db2032a88263d11df7b924e9aeac5450a5..8b208b9d123a7b4bd7aef03b2ac093aaf6a8aa38 100755 (executable)
@@ -11,6 +11,7 @@ use work.extension_uart_pkg.all;
 use work.extension_7seg_pkg.all;
 use work.extension_imp_pkg.all;
 use work.extension_timer_pkg.all;
+use work.extension_lcd_pkg.all;
 
 architecture behav of writeback_stage is
 
@@ -19,8 +20,8 @@ signal data_addr : word_t;
 
 signal wb_reg, wb_reg_nxt : writeback_rec;
 
-signal ext_uart,ext_timer,ext_gpmp,ext_7seg,ext_int,ext_imp :  extmod_rec;
-signal ext_uart_out, ext_timer_out, ext_gpmp_out, ext_int_out,ext_imp_out : gp_register_t;
+signal ext_uart,ext_timer,ext_gpmp,ext_7seg,ext_int,ext_imp, ext_lcd :  extmod_rec;
+signal ext_uart_out, ext_timer_out, ext_gpmp_out, ext_int_out,ext_imp_out, ext_lcd_out : gp_register_t;
 
 --signal int_req : interrupt_t;
 signal uart_int : std_logic;
@@ -130,6 +131,10 @@ interrupt : extension_interrupt
 timer : extension_timer
        generic map(RESET_VALUE)
        port map(clk, reset, ext_timer, ext_timer_out);
+
+lcd : extension_lcd
+       generic map(RESET_VALUE)
+       port map(clk, reset, ext_lcd, ext_lcd_out, lcd_data);
        
 syn: process(clk, reset)
 
@@ -341,6 +346,7 @@ begin
   ext_uart.sel <='0';
   ext_7seg.sel <='0';
   ext_timer.sel <='0';
+  ext_lcd.sel <='0';
   ext_gpmp.sel <='0';
   ext_int.sel <= '0';
   ext_imp.sel <= '0';
@@ -348,6 +354,7 @@ begin
   ext_uart.wr_en <= wr_en;
   ext_7seg.wr_en <= wr_en;
   ext_timer.wr_en <= wr_en;
+  ext_lcd.wr_en <= wr_en;
   ext_gpmp.wr_en <= wr_en;
   ext_int.wr_en <= wr_en;  
   ext_imp.wr_en <= wr_en;  
@@ -355,6 +362,7 @@ begin
   ext_uart.byte_en <= byte_en;
   ext_7seg.byte_en <= byte_en;
   ext_timer.byte_en <= byte_en;
+  ext_lcd.byte_en <= byte_en;
   ext_gpmp.byte_en <= byte_en;
   ext_int.byte_en <= byte_en;  
   ext_imp.byte_en <= byte_en; 
@@ -362,6 +370,7 @@ begin
   ext_uart.addr <= addr;
   ext_7seg.addr <= addr;
   ext_timer.addr <= addr;
+  ext_lcd.addr <= addr;
   ext_gpmp.addr <= addr;
   ext_int.addr <= addr;
   ext_imp.addr <= addr;
@@ -369,6 +378,7 @@ begin
   ext_uart.data <= data;
   ext_7seg.data <= data;
   ext_timer.data <= data;
+  ext_lcd.data <= data;
   ext_gpmp.data <= data;
   ext_int.data <= data;
   ext_imp.data <= data;
@@ -453,6 +463,9 @@ begin
                                -- when "11" => ext_timer.byte_en <= "1000";
                                -- when others => null;
                        -- end case;
+       when EXT_LCD_ADDR =>
+               ext_lcd.sel <= enable;
+               ext_anysel <= enable;
 --     when EXT_GPMP_ADDR => 
  --            ext_gpmp.sel <= enable;
 --             ext_anysel <= enable;
@@ -470,7 +483,7 @@ begin
        when others => ext_anysel <= '0';
        end case;
        
-       data_ram_read_ext <= ext_uart_out or ext_gpmp_out or ext_timer_out;
+       data_ram_read_ext <= ext_uart_out or ext_gpmp_out or ext_timer_out or ext_lcd_out;
 end process;
 
 end behav;