⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shifter.vhd

📁 Plasma IP Core 你可以利用这个组件在FPGA中设计MIPS结构的CPU
💻 VHD
字号:
----------------------------------------------------------------------- TITLE: Shifter Unit-- AUTHOR: Steve Rhoads (rhoadss@yahoo.com)--         Matthias Gruenewald-- DATE CREATED: 2/2/01-- FILENAME: shifter.vhd-- PROJECT: Plasma CPU core-- COPYRIGHT: Software placed into the public domain by the author.--    Software 'as is' without warranty.  Author liable for nothing.-- DESCRIPTION:--    Implements the 32-bit shifter unit.---------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;use work.mlite_pack.all;entity shifter is   generic(shifter_type : string := "DEFAULT");   port(value        : in  std_logic_vector(31 downto 0);        shift_amount : in  std_logic_vector(4 downto 0);        shift_func   : in  shift_function_type;        c_shift      : out std_logic_vector(31 downto 0));end; --entity shifterarchitecture logic of shifter is--   type shift_function_type is (--      shift_nothing, shift_left_unsigned, --      shift_right_signed, shift_right_unsigned);signal shift1L, shift2L, shift4L, shift8L, shift16L : std_logic_vector(31 downto 0);signal shift1R, shift2R, shift4R, shift8R, shift16R : std_logic_vector(31 downto 0);signal fills : std_logic_vector(31 downto 16);begin   fills <= "1111111111111111" when shift_func = SHIFT_RIGHT_SIGNED 	                            and value(31) = '1' 										 else "0000000000000000";   shift1L  <= value(30 downto 0) & '0' when shift_amount(0) = '1' else value;   shift2L  <= shift1L(29 downto 0) & "00" when shift_amount(1) = '1' else shift1L;   shift4L  <= shift2L(27 downto 0) & "0000" when shift_amount(2) = '1' else shift2L;   shift8L  <= shift4L(23 downto 0) & "00000000" when shift_amount(3) = '1' else shift4L;   shift16L <= shift8L(15 downto 0) & ZERO(15 downto 0) when shift_amount(4) = '1' else shift8L;   shift1R  <= fills(31) & value(31 downto 1) when shift_amount(0) = '1' else value;   shift2R  <= fills(31 downto 30) & shift1R(31 downto 2) when shift_amount(1) = '1' else shift1R;   shift4R  <= fills(31 downto 28) & shift2R(31 downto 4) when shift_amount(2) = '1' else shift2R;   shift8R  <= fills(31 downto 24) & shift4R(31 downto 8)  when shift_amount(3) = '1' else shift4R;   shift16R <= fills(31 downto 16) & shift8R(31 downto 16) when shift_amount(4) = '1' else shift8R;GENERIC_SHIFTER: if shifter_type = "DEFAULT" generate   c_shift <= shift16L when shift_func = SHIFT_LEFT_UNSIGNED else               shift16R when shift_func = SHIFT_RIGHT_UNSIGNED or 				                shift_func = SHIFT_RIGHT_SIGNED else              ZERO;end generate;                 AREA_OPTIMIZED_SHIFTER: if shifter_type /= "DEFAULT" generate   c_shift <= shift16L when shift_func = SHIFT_LEFT_UNSIGNED else (others => 'Z');   c_shift <= shift16R when shift_func = SHIFT_RIGHT_UNSIGNED or                             shift_func = SHIFT_RIGHT_SIGNED else (others => 'Z');   c_shift <= ZERO     when shift_func = SHIFT_NOTHING else (others => 'Z');end generate;end; --architecture logic

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -