X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=cpu%2Fsrc%2Fwriteback_stage_b.vhd;h=f5933678b48accabdc73eae09368b96afca9fc3a;hb=1968f329b10681b760faec9369aa893cd2af8d44;hp=78a17a451984710d71b39cd511b66c135d9e9903;hpb=ea11b8a1f00f62aed7584f257f0a8a90e982a707;p=calu.git diff --git a/cpu/src/writeback_stage_b.vhd b/cpu/src/writeback_stage_b.vhd index 78a17a4..f593367 100755 --- a/cpu/src/writeback_stage_b.vhd +++ b/cpu/src/writeback_stage_b.vhd @@ -1,3 +1,24 @@ +-- `Deep Thought', a softcore CPU implemented on a FPGA +-- +-- Copyright (C) 2010 Markus Hofstaetter +-- Copyright (C) 2010 Martin Perner +-- Copyright (C) 2010 Stefan Rebernig +-- Copyright (C) 2010 Manfred Schwarz +-- Copyright (C) 2010 Bernhard Urban +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; @@ -10,6 +31,7 @@ use work.extension_pkg.all; use work.extension_uart_pkg.all; use work.extension_7seg_pkg.all; use work.extension_imp_pkg.all; +use work.extension_timer_pkg.all; architecture behav of writeback_stage is @@ -30,8 +52,6 @@ signal sel_nxt, dmem_we, ext_anysel : std_logic; signal calc_mem_res : gp_register_t; begin - - ext_timer_out <= (others => '0'); --TODO: delete when timer is connected ext_gpmp_out <= (others => '0'); --TODO: delete when gpm is connected spartan3e: if FPGATYPE = "s3e" generate @@ -96,6 +116,8 @@ imp : extension_imp new_im_data_out ); + rem7seg: if "a" /= "a" generate + altera_7seg: if FPGATYPE /= "s3e" generate sseg : extension_7seg generic map( @@ -104,13 +126,15 @@ sseg : extension_7seg port map( clk, reset, - ext_7seg, - sseg0, - sseg1, - sseg2, - sseg3 + --ext_7seg, + ext_7seg + --sseg0, + --sseg1, + --sseg2, + --sseg3 ); end generate; + end generate; interrupt : extension_interrupt generic map( @@ -127,6 +151,10 @@ interrupt : extension_interrupt int_req ); + +timer : extension_timer + generic map(RESET_VALUE) + port map(clk, reset, ext_timer, ext_timer_out); syn: process(clk, reset) @@ -231,7 +259,7 @@ begin if (alu_jmp = '1' and wb_reg.dmem_en = '1' and wb_reg.dmem_write_en = '0' and write_en = '0') then jump_addr <= data_ram_read; else - jump_addr <= result; + jump_addr <= result; end if; -- if alu_jmp = '0' and br_pred = '1' and write_en = '0' then @@ -266,10 +294,10 @@ begin data_addr <= (others => '0'); dmem_we <= '0'; - if (wb_reg.address(DATA_ADDR_WIDTH+2) /= '1') then + if (wb_reg.address(DATA_ADDR_WIDTH+3) /= '1') then data_out := data_ram_read; else - reg_we_v := reg_we_v and ext_anysel; + reg_we_v := reg_we_v and (ext_anysel or not(wb_reg.dmem_en)); data_out := data_ram_read_ext; end if; @@ -303,7 +331,7 @@ begin data_out := to_stdlogicvector(to_bitvector(data_out) srl to_integer(unsigned(wb_reg.address(BYTEADDR-1 downto 0)))*byte_t'length); - if (wb_reg_nxt.address(DATA_ADDR_WIDTH+2) /= '1') then + if (wb_reg_nxt.address(DATA_ADDR_WIDTH+3) /= '1') then data_addr(DATA_ADDR_WIDTH+1 downto 0) <= wb_reg_nxt.address(DATA_ADDR_WIDTH+1 downto 0); dmem_we <= wb_reg_nxt.dmem_write_en; end if; @@ -450,9 +478,9 @@ begin -- when "11" => ext_timer.byte_en <= "1000"; -- when others => null; -- end case; - when EXT_GPMP_ADDR => - ext_gpmp.sel <= enable; - ext_anysel <= enable; +-- when EXT_GPMP_ADDR => + -- ext_gpmp.sel <= enable; +-- ext_anysel <= enable; -- ext_gpmp.wr_en <= wb_reg_nxt.dmem_write_en; -- ext_gpmp.data <= ram_data; -- ext_gpmp.addr <= wb_reg_nxt.address(wb_reg_nxt.address'high downto BYTEADDR);