URL
https://opencores.org/ocsvn/mips_fault_tolerant/mips_fault_tolerant/trunk
Subversion Repositories mips_fault_tolerant
Compare Revisions
- This comparison shows the changes necessary to convert path
/mips_fault_tolerant
- from Rev 12 to Rev 13
- ↔ Reverse comparison
Rev 12 → Rev 13
/trunk/ALu_control.vhd
File deleted
/trunk/source/ALu_control.vhd
0,0 → 1,161
---------------------------------------------------------------------------------- |
-- Company: |
-- Engineer: Lazaridis Dimitris |
-- |
-- Create Date: 03:17:24 07/23/2012 |
-- Design Name: |
-- Module Name: ALu_control - Behavioral |
-- Project Name: |
-- Target Devices: |
-- Tool versions: |
-- Description: |
-- |
-- Dependencies: |
-- |
-- Revision: |
-- Revision 0.01 - File Created |
-- Additional Comments: |
-- |
---------------------------------------------------------------------------------- |
library IEEE; |
use IEEE.STD_LOGIC_1164.ALL; |
|
-- Uncomment the following library declaration if using |
-- arithmetic functions with Signed or Unsigned values |
--use IEEE.NUMERIC_STD.ALL; |
|
-- Uncomment the following library declaration if instantiating |
-- any Xilinx primitives in this code. |
--library UNISIM; |
--use UNISIM.VComponents.all; |
|
entity ALu_control is |
|
PORT |
( --clk : IN std_logic; |
instr_15_0 : IN std_logic_vector(15 downto 0); |
ALUOp : IN std_logic_vector(2 downto 0); |
ALUmux : IN std_logic_vector(1 downto 0); |
From_i_op : IN std_logic_vector(1 downto 0); |
From_i_mux : IN std_logic_vector(1 downto 0); |
sv : out STD_LOGIC := '0'; |
Mul_out_c : out STD_LOGIC_VECTOR(1 downto 0); |
ALUmux_c : OUT std_logic_vector(1 downto 0); |
ALUopcode : OUT std_logic_vector(1 downto 0) |
); |
|
|
end ALu_control; |
|
architecture Behavioral of ALu_control is |
|
begin |
Alu_Control : PROCESS(instr_15_0, ALUOp,ALUmux,From_i_op,From_i_mux) |
CONSTANT ADDr : std_logic_vector(5 downto 0) := "100000"; |
CONSTANT ADDr_u : std_logic_vector(5 downto 0) := "100001"; |
CONSTANT SUBr : std_logic_vector(5 downto 0) := "100010"; |
CONSTANT SUBr_u : std_logic_vector(5 downto 0) := "100011"; |
CONSTANT ANDr : std_logic_vector(5 downto 0) := "100100"; |
CONSTANT ORr : std_logic_vector(5 downto 0) := "100101"; |
CONSTANT XORr : std_logic_vector(5 downto 0) := "100110"; |
CONSTANT NORr : std_logic_vector(5 downto 0) := "100111"; |
CONSTANT SLTr : std_logic_vector(5 downto 0) := "101010"; |
CONSTANT SLTUr : std_logic_vector(5 downto 0) := "101011"; |
CONSTANT MULTr : std_logic_vector(5 downto 0) := "011000"; |
CONSTANT Mtlor : std_logic_vector(5 downto 0) := "010011"; |
CONSTANT Mthir : std_logic_vector(5 downto 0) := "010001"; |
CONSTANT Mflor : std_logic_vector(5 downto 0) := "010010"; |
CONSTANT Mfhir : std_logic_vector(5 downto 0) := "010000"; |
CONSTANT Sllr : std_logic_vector(5 downto 0) := "000000"; |
CONSTANT SLLVr : std_logic_vector(5 downto 0) := "000100"; |
CONSTANT SRLr : std_logic_vector(5 downto 0) := "000010"; |
|
CONSTANT SRLVr : std_logic_vector(5 downto 0) := "000110"; |
CONSTANT SRAVr : std_logic_vector(5 downto 0) := "000111"; |
CONSTANT JRr : std_logic_vector(5 downto 0) := "001000"; |
|
BEGIN |
--if FALLING_EDGE(clk) then |
case ALUOp is |
when "000" => |
ALUopcode <= "00"; -- add I types |
ALUmux_c <= ALUmux; |
when "001" => ALUopcode <= "01"; -- add unsigned |
ALUmux_c <= ALUmux; |
when "010" => ALUopcode <= "01"; -- subtract signed |
ALUmux_c <= ALUmux; |
when "011" => ALUopcode <= "11"; -- subtract unsigned |
ALUmux_c <= ALUmux; |
when "110" => -- operation depends on function field r types |
case instr_15_0(5 downto 0) is -- r types |
when ADDr => ALUopcode <= "00"; -- add signed |
ALUmux_c <= "10"; |
when ADDr_u => ALUopcode <= "01"; -- add unsigned |
ALUmux_c <= "10"; |
when SUBr => ALUopcode <= "10"; -- subtract |
ALUmux_c <= "10"; |
when SUBr_u => ALUopcode <= "11"; --subtract unsigned |
ALUmux_c <= "10"; |
when ANDr => ALUopcode <= "00"; -- AND |
ALUmux_c <= "11"; |
when ORr => ALUopcode <= "01"; -- OR |
ALUmux_c <= "11"; |
when XORr => ALUopcode <= "10"; -- XOR |
ALUmux_c <= "11"; |
when NORr => ALUopcode <= "11"; -- NOR |
ALUmux_c <= "11"; |
when SLTr => ALUopcode <= "10"; -- SLT |
ALUmux_c <= "01"; |
when SLTUr => ALUopcode <= "11"; -- SLTU |
ALUmux_c <= "01"; |
when MULTr => ALUopcode <= "00"; -- MULT |
ALUmux_c <= "00"; |
Mul_out_c <= "00"; |
when Mtlor => ALUopcode <= "00"; -- Mtlo |
ALUmux_c <= "00"; |
Mul_out_c <= "01"; |
when Mthir => ALUopcode <= "00"; -- Mthi |
ALUmux_c <= "00"; |
Mul_out_c <= "10"; |
when Mflor => ALUopcode <= "00"; -- Mflo |
ALUmux_c <= "00"; |
-- Mul_out_c <= "00"; |
when Mfhir => ALUopcode <= "00"; -- Mfhi |
ALUmux_c <= "00"; |
-- Mul_out_c <= "00"; |
when Sllr => ALUopcode <= "00"; --sll |
ALUmux_c <= "00"; |
sv <= '0'; |
when SRLr => ALUopcode <= "10"; --srl |
ALUmux_c <= "00"; |
sv <= '0'; |
|
ALUmux_c <= "00"; |
sv <= '0'; |
when SLLVr => ALUopcode <= "00"; -- sllv |
ALUmux_c <= "00"; |
sv <= '1'; |
when SRLVr => ALUopcode <= "10"; --srlv |
ALUmux_c <= "00"; |
sv <= '1'; |
when SRAVr => ALUopcode <= "11"; --srav |
ALUmux_c <= "00"; |
sv <= '1'; |
when others => ALUopcode <= "00"; |
ALUmux_c <= "00"; |
Mul_out_c <= "00"; |
sv <= '0'; |
end case; |
when "111" => -- I types Aluop from ir |
ALUopcode <= From_i_op; |
ALUmux_c <= From_i_mux; |
when others => ALUopcode <= "00"; |
end case; |
-- end if; |
END PROCESS; |
|
|
|
|
end Behavioral; |
|