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

📄 alu.vhd

📁 Plasma IP Core 你可以利用这个组件在FPGA中设计MIPS结构的CPU
💻 VHD
字号:
----------------------------------------------------------------------- TITLE: Arithmetic Logic Unit-- AUTHOR: Steve Rhoads (rhoadss@yahoo.com)-- DATE CREATED: 2/8/01-- FILENAME: alu.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 ALU.---------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;use work.mlite_pack.all;entity alu is   generic(alu_type  : string := "DEFAULT");   port(a_in         : in  std_logic_vector(31 downto 0);        b_in         : in  std_logic_vector(31 downto 0);        alu_function : in  alu_function_type;        c_alu        : out std_logic_vector(31 downto 0));end; --aluarchitecture logic of alu is   signal do_add    : std_logic;   signal sum       : std_logic_vector(32 downto 0);   signal less_than : std_logic;begin   do_add <= '1' when alu_function = ALU_ADD else '0';   sum <= bv_adder(a_in, b_in, do_add);   less_than <= sum(32) when a_in(31) = b_in(31) or alu_function = ALU_LESS_THAN                 else a_in(31);   GENERIC_ALU: if alu_type = "DEFAULT" generate      c_alu <= sum(31 downto 0) when alu_function=ALU_ADD or		                               alu_function=ALU_SUBTRACT else               ZERO(31 downto 1) & less_than when alu_function=ALU_LESS_THAN or                                 alu_function=ALU_LESS_THAN_SIGNED else               a_in or  b_in    when alu_function=ALU_OR else               a_in and b_in    when alu_function=ALU_AND else               a_in xor b_in    when alu_function=ALU_XOR else               a_in nor b_in    when alu_function=ALU_NOR else               ZERO;   end generate;   AREA_OPTIMIZED_ALU: if alu_type/="DEFAULT" generate      c_alu <= sum(31 downto 0) when alu_function=ALU_ADD or 		                          alu_function=ALU_SUBTRACT else (others => 'Z');      c_alu <= ZERO(31 downto 1) & less_than when alu_function=ALU_LESS_THAN or 		                          alu_function=ALU_LESS_THAN_SIGNED else 										  (others => 'Z');      c_alu <= a_in or  b_in    when alu_function=ALU_OR else (others => 'Z');      c_alu <= a_in and b_in    when alu_function=ALU_AND else (others => 'Z');      c_alu <= a_in xor b_in    when alu_function=ALU_XOR else (others => 'Z');      c_alu <= a_in nor b_in    when alu_function=ALU_NOR else (others => 'Z');      c_alu <= ZERO             when alu_function=ALU_NOTHING else (others => 'Z');   end generate;    end; --architecture logic

⌨️ 快捷键说明

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