- deleted
Committed on the Free edition of March Hare Software CVSNT Server. Upgrade to CVS Suite for more features and support: http://march-hare.com/cvsnt/ git-svn-id: http://moon:8086/svn/vhdl/trunk@396 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
@@ -1,101 +0,0 @@
|
||||
--------------------------------------------------------------------------
|
||||
-- Project: JIPS, a portable 32-bit RISC CPU written in VHDL
|
||||
-- This file: The datapath controller
|
||||
--
|
||||
-- Copyright (C) 2008 J. Ahrensfeld
|
||||
--
|
||||
-- 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 <http://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- For questions and ideas, please contact the author at jens@jayfield.org
|
||||
--
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.ALL;
|
||||
use IEEE.numeric_std.ALL;
|
||||
|
||||
library work;
|
||||
use work.mips_types.all;
|
||||
use work.mips_instr.all;
|
||||
|
||||
entity idecode_rom is
|
||||
Port
|
||||
(
|
||||
nop : in std_logic;
|
||||
inst_in : in word_t;
|
||||
ctrl_out : out ctrl_lines_t
|
||||
);
|
||||
end idecode_rom;
|
||||
|
||||
architecture Behavioral of idecode_rom is
|
||||
|
||||
signal ctrl_special : ctrl_lines_t;
|
||||
signal ctrl_regimm : ctrl_lines_t;
|
||||
signal ctrl_opcode : ctrl_lines_t;
|
||||
|
||||
signal rom_special : rom_special_t := gen_rom_special;
|
||||
signal rom_regimm : rom_regimm_t := gen_rom_regimm;
|
||||
signal rom_opcode : rom_opcode_t := gen_rom_opcode;
|
||||
|
||||
attribute rom_style : string;
|
||||
|
||||
attribute rom_style of rom_special: signal is "distributed";
|
||||
attribute rom_style of rom_regimm: signal is "distributed";
|
||||
attribute rom_style of rom_opcode: signal is "distributed";
|
||||
|
||||
begin
|
||||
|
||||
i_dec_special:
|
||||
process(inst_in, rom_special)
|
||||
variable func : func_t;
|
||||
begin
|
||||
func := extract_func(inst_in);
|
||||
ctrl_special <= rom_special(to_integer(func));
|
||||
end process;
|
||||
|
||||
i_dec_regimm:
|
||||
process(inst_in, rom_regimm)
|
||||
variable rt : reg_ptr_t;
|
||||
begin
|
||||
rt := extract_rt(inst_in);
|
||||
ctrl_regimm <= rom_regimm(to_integer(rt));
|
||||
end process;
|
||||
|
||||
i_dec_opcode:
|
||||
process(inst_in, rom_opcode)
|
||||
variable opc : opcode_t;
|
||||
begin
|
||||
opc := extract_opc(inst_in);
|
||||
ctrl_opcode <= rom_opcode(to_integer(opc));
|
||||
end process;
|
||||
|
||||
proc_decode:
|
||||
process(inst_in, ctrl_special, ctrl_regimm, ctrl_opcode, nop)
|
||||
variable opclass : opcode_t;
|
||||
begin
|
||||
opclass := extract_opc(inst_in);
|
||||
ctrl_out <= ctrl_lines_default after 2 ns;
|
||||
if nop = '0' then
|
||||
case opclass is
|
||||
when "000000" =>
|
||||
ctrl_out <= ctrl_special after 2 ns;
|
||||
when "000001" =>
|
||||
ctrl_out <= ctrl_regimm after 2 ns;
|
||||
when others =>
|
||||
ctrl_out <= ctrl_opcode after 2 ns;
|
||||
end case;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
end Behavioral;
|
||||
Reference in New Issue
Block a user