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

📄 mlite_pack.vhd

📁 Plasma IP Core 你可以利用这个组件在FPGA中设计MIPS结构的CPU
💻 VHD
📖 第 1 页 / 共 2 页
字号:
   component control       port(opcode       : in  std_logic_vector(31 downto 0);           intr_signal  : in  std_logic;           rs_index     : out std_logic_vector(5 downto 0);           rt_index     : out std_logic_vector(5 downto 0);           rd_index     : out std_logic_vector(5 downto 0);           imm_out      : out std_logic_vector(15 downto 0);           alu_func     : out alu_function_type;           shift_func   : out shift_function_type;           mult_func    : out mult_function_type;           branch_func  : out branch_function_type;           a_source_out : out a_source_type;           b_source_out : out b_source_type;           c_source_out : out c_source_type;           pc_source_out: out pc_source_type;           mem_source_out:out mem_source_type;           exception_out: out std_logic);   end component;   component reg_bank      generic(memory_type : string := "XILINX_16X");      port(clk            : in  std_logic;           reset_in       : in  std_logic;           pause          : in  std_logic;           rs_index       : in  std_logic_vector(5 downto 0);           rt_index       : in  std_logic_vector(5 downto 0);           rd_index       : in  std_logic_vector(5 downto 0);           reg_source_out : out std_logic_vector(31 downto 0);           reg_target_out : out std_logic_vector(31 downto 0);           reg_dest_new   : in  std_logic_vector(31 downto 0);           intr_enable    : out std_logic);   end component;   component bus_mux       port(imm_in       : in  std_logic_vector(15 downto 0);           reg_source   : in  std_logic_vector(31 downto 0);           a_mux        : in  a_source_type;           a_out        : out std_logic_vector(31 downto 0);           reg_target   : in  std_logic_vector(31 downto 0);           b_mux        : in  b_source_type;           b_out        : out std_logic_vector(31 downto 0);           c_bus        : in  std_logic_vector(31 downto 0);           c_memory     : in  std_logic_vector(31 downto 0);           c_pc         : in  std_logic_vector(31 downto 2);           c_pc_plus4   : in  std_logic_vector(31 downto 2);           c_mux        : in  c_source_type;           reg_dest_out : out std_logic_vector(31 downto 0);           branch_func  : in  branch_function_type;           take_branch  : out std_logic);   end component;   component alu      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 component;   component shifter      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 component;   component mult      generic(mult_type  : string := "DEFAULT");       port(clk       : in  std_logic;           reset_in  : in  std_logic;           a, b      : in  std_logic_vector(31 downto 0);           mult_func : in  mult_function_type;           c_mult    : out std_logic_vector(31 downto 0);           pause_out : out std_logic);    end component;   component pipeline      port(clk            : in  std_logic;           reset          : in  std_logic;           a_bus          : in  std_logic_vector(31 downto 0);           a_busD         : out std_logic_vector(31 downto 0);           b_bus          : in  std_logic_vector(31 downto 0);           b_busD         : out std_logic_vector(31 downto 0);           alu_func       : in  alu_function_type;           alu_funcD      : out alu_function_type;           shift_func     : in  shift_function_type;           shift_funcD    : out shift_function_type;           mult_func      : in  mult_function_type;           mult_funcD     : out mult_function_type;           reg_dest       : in  std_logic_vector(31 downto 0);           reg_destD      : out std_logic_vector(31 downto 0);           rd_index       : in  std_logic_vector(5 downto 0);           rd_indexD      : out std_logic_vector(5 downto 0);           rs_index       : in  std_logic_vector(5 downto 0);           rt_index       : in  std_logic_vector(5 downto 0);           pc_source      : in  pc_source_type;           mem_source     : in  mem_source_type;           a_source       : in  a_source_type;           b_source       : in  b_source_type;           c_source       : in  c_source_type;           c_bus          : in  std_logic_vector(31 downto 0);           pause_any      : in  std_logic;           pause_pipeline : out std_logic);   end component;   component mlite_cpu      generic(memory_type     : string := "XILINX_16X"; --ALTERA_LPM, or DUAL_PORT_              mult_type       : string := "DEFAULT";              shifter_type    : string := "DEFAULT";              alu_type        : string := "DEFAULT";              pipeline_stages : natural := 2); --2 or 3      port(clk         : in std_logic;           reset_in    : in std_logic;           intr_in     : in std_logic;           mem_address : out std_logic_vector(31 downto 0);           mem_data_w  : out std_logic_vector(31 downto 0);           mem_data_r  : in std_logic_vector(31 downto 0);           mem_byte_we : out std_logic_vector(3 downto 0);            mem_pause   : in std_logic);   end component;   component ram      generic(memory_type : string := "DEFAULT");      port(clk               : in std_logic;           enable            : in std_logic;           write_byte_enable : in std_logic_vector(3 downto 0);           address           : in std_logic_vector(31 downto 2);           data_write        : in std_logic_vector(31 downto 0);           data_read         : out std_logic_vector(31 downto 0));   end component; --ram   component uart      generic(log_file : string := "UNUSED");      port(clk          : in std_logic;           reset        : in std_logic;           enable_read  : in std_logic;           enable_write : in std_logic;           data_in      : in std_logic_vector(7 downto 0);           data_out     : out std_logic_vector(7 downto 0);           uart_read    : in std_logic;           uart_write   : out std_logic;           busy_write   : out std_logic;           data_avail   : out std_logic);   end component; --uart   component plasma      generic(memory_type : string := "XILINX_X16"; --"DUAL_PORT_" "ALTERA_LPM";              log_file    : string := "UNUSED");      port(clk               : in std_logic;           reset             : in std_logic;           uart_write        : out std_logic;           uart_read         : in std_logic;              address           : out std_logic_vector(31 downto 2);           data_write        : out std_logic_vector(31 downto 0);           data_read         : in std_logic_vector(31 downto 0);           write_byte_enable : out std_logic_vector(3 downto 0);            mem_pause_in      : in std_logic;                   gpio0_out         : out std_logic_vector(31 downto 0);           gpioA_in          : in std_logic_vector(31 downto 0));   end component; --plasmaend; --package mlite_packpackage body mlite_pack isfunction bv_adder(a     : in std_logic_vector;                  b     : in std_logic_vector;                  do_add: in std_logic) return std_logic_vector is   variable carry_in : std_logic;   variable bb       : std_logic_vector(a'length-1 downto 0);   variable result   : std_logic_vector(a'length downto 0);begin   if do_add = '1' then      bb := b;      carry_in := '0';   else      bb := not b;      carry_in := '1';   end if;   for index in 0 to a'length-1 loop      result(index) := a(index) xor bb(index) xor carry_in;      carry_in := (carry_in and (a(index) or bb(index))) or                  (a(index) and bb(index));   end loop;   result(a'length) := carry_in xnor do_add;   return result;end; --functionfunction bv_negate(a : in std_logic_vector) return std_logic_vector is   variable carry_in : std_logic;   variable not_a    : std_logic_vector(a'length-1 downto 0);   variable result   : std_logic_vector(a'length-1 downto 0);begin   not_a := not a;   carry_in := '1';   for index in a'reverse_range loop      result(index) := not_a(index) xor carry_in;      carry_in := carry_in and not_a(index);   end loop;   return result;end; --functionfunction bv_increment(a : in std_logic_vector(31 downto 2)                     ) return std_logic_vector is   variable carry_in : std_logic;   variable result   : std_logic_vector(31 downto 2);begin   carry_in := '1';   for index in 2 to 31 loop      result(index) := a(index) xor carry_in;      carry_in := a(index) and carry_in;   end loop;   return result;end; --functionfunction bv_inc(a : in std_logic_vector                ) return std_logic_vector is   variable carry_in : std_logic;   variable result   : std_logic_vector(a'length-1 downto 0);begin   carry_in := '1';   for index in 0 to a'length-1 loop      result(index) := a(index) xor carry_in;      carry_in := a(index) and carry_in;   end loop;   return result;end; --functionend; --package body

⌨️ 快捷键说明

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