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

📄 ahbstat.vhd

📁 宇航级微处理器LEON2 2.2 VHDL源代码,很难找的.
💻 VHD
字号:
------------------------------------------------------------------------------  This file is a part of the LEON VHDL model--  Copyright (C) 1999  European Space Agency (ESA)----  This library is free software; you can redistribute it and/or--  modify it under the terms of the GNU Lesser General Public--  License as published by the Free Software Foundation; either--  version 2 of the License, or (at your option) any later version.----  See the file COPYING.LGPL for the full details of the license.------------------------------------------------------------------------------- Entity: 	ahbstat-- File:	ahbstat.vhd-- Author:	Jiri Gaisler - ESA/ESTEC-- Description:	AHB status register. Latches the address and bus--		parameters when an error is signalled on the AHB bus.------------------------------------------------------------------------------library IEEE;use IEEE.std_logic_1164.all;use work.config.all;use work.iface.all;use work.amba.all;entity ahbstat is  port (    rst    : in  rst_type;    clk    : in  clk_type;    ahbmi  : in  ahb_mst_in_type;    ahbsi  : in  ahb_slv_in_type;    apbi   : in  apb_slv_in_type;    apbo   : out apb_slv_out_type;    ahbsto : out ahbstat_out_type  );end; architecture rtl of ahbstat istype memstattype is record  hsize            : std_logic_vector(2 downto 0);  hmaster          : std_logic_vector(3 downto 0);  address          : std_logic_vector(31 downto 0);  -- failed address  read             : std_logic;  newerr           : std_logic;  hresp 	   : std_logic_vector(1 downto 0);end record;signal r, rin : memstattype;begin  ctrl : process(rst, ahbmi, ahbsi, apbi, r)  variable v : memstattype;  variable regsd : std_logic_vector(31 downto 0);   -- data from registers  begin    v := r; regsd := (others => '0');    case apbi.paddr(2 downto 2) is    when "1" => regsd := r.address;    when "0" => 	  regsd := "00000000000000000000000" &  r.newerr & r.read & 	    	   r.hmaster & r.hsize  ;    when others => regsd := (others => '-');    end case;    apbo.prdata <= regsd;    if (apbi.psel and apbi.penable and apbi.pwrite) = '1' then      case apbi.paddr(2 downto 2) is      when "1" => v.address := apbi.pwdata;      when "0" => 	v.newerr  := apbi.pwdata(8);	v.read    := apbi.pwdata(7);	v.hmaster := apbi.pwdata(6 downto 3);	v.hsize   := apbi.pwdata(2 downto 0);      when others => null;      end case;    end if;    v.hresp := ahbmi.hresp;    if (ahbsi.hready = '1') then      if (r.newerr = '0') then 	if (r.hresp = HRESP_ERROR) then v.newerr := '1';	else      	  v.hmaster := ahbsi.hmaster; v.address := ahbsi.haddr;       	  v.read := not ahbsi.hwrite; v.hsize := ahbsi.hsize;	end if;      end if;      v.hresp := HRESP_OKAY;    end if;    if rst.syncrst = '0' then      v.newerr := '0'; v.hresp := HRESP_OKAY;    end if;    rin <= v;    ahbsto.ahberr <= r.newerr;  end process;  memstatregs : process(clk)  begin if rising_edge(clk) then r <= rin; end if; end process;end;

⌨️ 快捷键说明

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