Repository navigation
Expand file tree
/
Copy pathdecoder.vhd
More file actions
98 lines (93 loc) · 3.02 KB
/
Copy pathdecoder.vhd
File metadata and controls
98 lines (93 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
----------------------------------------------------------------------------------
-- Company:
-- Engineer: Oumar Kone
--
-- Create Date: 02/26/2026 06:58:29 PM
-- Design Name:
-- Module Name: decoder - 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;
use IEEE.NUMERIC_STD.ALL;
entity decoder is
port(
op : in std_logic_vector(1 downto 0);
func0, func5 : in std_logic;
Rd : in std_logic_vector(3 downto 0);
Memtoreg, MemWrite, ALUSrc,
RegWrite, ALUOp, PCS,
Branch : out std_logic;
ImmSrc, RegSrc : out std_logic_vector(1 downto 0)
);
end decoder;
architecture Behavioral of decoder is
begin
process(op, func0, func5) begin
if op = "00" and func5 = '0' and func0 = '0' then
Branch <= '0';
Memtoreg <= '0';
MemWrite <= '0';
ALUSrc <= '0';
RegWrite <= '1';
ALUOp <= '1';
ImmSrc <= "00";
RegSrc <= "00";
elsif op = "00" and func5 = '1' and func0 = '0'then
Branch <= '0';
Memtoreg <= '0';
MemWrite <= '0';
ALUSrc <= '1';
RegWrite <= '1';
ALUOp <= '1';
ImmSrc <= "00";
RegSrc <= "00";
elsif op = "01" and func5 = '0' and func0 = '0' then
Branch <= '0';
Memtoreg <= '0';
MemWrite <= '1';
ALUSrc <= '1';
RegWrite <= '0';
ALUOp <= '0';
ImmSrc <= "01";
RegSrc <= "10";
elsif op = "01" and func5 = '0' and func0 = '1' then
Branch <= '0';
Memtoreg <= '1';
MemWrite <= '0';
ALUSrc <= '1';
RegWrite <= '1';
ALUOp <= '0';
ImmSrc <= "01";
RegSrc <= "00";
elsif op = "10" and func5 = '0' and func0 = '0' then
Branch <= '1';
Memtoreg <= '0';
MemWrite <= '0';
ALUSrc <= '1';
RegWrite <= '0';
ALUOp <= '0';
ImmSrc <= "10";
RegSrc <= "01";
else
Memtoreg <= '0';
MemWrite <= '0';
ALUSrc <= '0';
RegWrite <= '0';
ALUOp <= '0';
ImmSrc <= "00";
RegSrc <= "00";
end if;
PCS <= '1' when (to_integer(unsigned(Rd)) = 15 and RegWrite = '1') or Branch = '1' else '0';
end Process;
end Behavioral;