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

📄 hy5ps121621f_pack.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 2 页
字号:
                  COMMAND := ILLEGAL;                end if;              elsif ((CSB = '1') or (CSB = '0' and RASB = '1' and CASB = '1' and WEB = '1')) then                COMMAND := PDEN;              else                COMMAND := ILLEGAL;              end if;            when '1' =>              if (CSB = '1') then                COMMAND := DSEL;              elsif (CSB = '0' and RASB = '1' and CASB = '1' and WEB ='1') then                COMMAND := NOP;              elsif (CSB = '0' and RASB = '1' and CASB = '0' and WEB ='1') then                if (A10 = '0') then                  COMMAND := RD;                else                  COMMAND := RDAP;                end if;              elsif (CSB = '0' and RASB = '1' and CASB = '0' and WEB ='0') then                 if (A10 = '0') then                  COMMAND := WR;                else                  COMMAND := WRAP;                end if;              elsif (CSB = '0' and RASB = '0' and CASB = '1' and WEB ='1') then                COMMAND := ACT;              elsif (CSB = '0' and RASB = '0' and CASB = '1' and WEB ='0') then                if (A10 = '0') then                  COMMAND := PCG;                else                  COMMAND := PCGA;                end if;              elsif (CSB = '0' and RASB = '0' and CASB = '0' and WEB ='1') then                COMMAND := AREF;              elsif (CSB = '0' and RASB = '0' and CASB = '0' and WEB ='0') then                if (BankState = "0000") then		  if (Bank_Add = "00") then                    COMMAND := MRS;		  elsif (Bank_Add = "01") then                    COMMAND := EMRS1;		  elsif (Bank_Add = "10") then                    COMMAND := EMRS2;		  elsif (Bank_Add = "11") then                    COMMAND := EMRS3;		  end if;                else                  COMMAND := ILLEGAL;                end if;              end if;            when others =>              COMMAND := ERROR;            end case;        when '0' =>          case CKE (0) is            when '0' =>              COMMAND := NOP;            when '1' =>              if (State = PWRUP) then                COMMAND := NOP;              elsif (CSB = '1') then                if (State = SLFREF) then                  COMMAND := SREX;                elsif (State = PWRDN) then                  COMMAND := PDEX;                end if;              elsif (CSB = '0' and RASB = '1' and CASB = '1' and WEB ='1') then                if (State = SLFREF) then                  COMMAND := SREX;                elsif (State = PWRDN) then                  COMMAND := PDEX;                end if;              else                COMMAND := ERROR;              end if;            when others =>              COMMAND := ERROR;          end case;        when others =>          COMMAND := ERROR;        end case;    end COMMAND_DECODE;------------------------------------------------------------------------------------------------  procedure MODE_REGISTER_SET (    MROPCODE : in MROPCODE_TYPE;    MR : out MODE_REGISTER) is  begin    if (MROPCODE(6) = '0' and MROPCODE(5) = '1' and MROPCODE(4) = '0')then      MR.CAS_LATENCY := 2;    elsif (MROPCODE(6) = '0' and MROPCODE(5) = '1' and MROPCODE(4) = '1')then      MR.CAS_LATENCY := 3;    elsif (MROPCODE(6) = '1' and MROPCODE(5) = '0' and MROPCODE(4) = '0')then      MR.CAS_LATENCY := 4;    elsif (MROPCODE(6) = '1' and MROPCODE(5) = '0' and MROPCODE(4) = '1')then      MR.CAS_LATENCY := 5;    elsif (MROPCODE(6) = '1' and MROPCODE(5) = '1' and MROPCODE(4) = '0')then      MR.CAS_LATENCY := 6;    else      assert false report      "ERROR : (MODE_REGISTER_SET_PROCEDURE) : Invalid Cas_Latency Encountered!"      severity WARNING;    end if;    if MROPCODE(3) = '0' then      MR.BURST_MODE := SEQUENTIAL;    elsif MROPCODE(3) = '1' then      MR.BURST_MODE := INTERLEAVE;    end if;    if MROPCODE(8) = '0' then      MR.DLL_STATE := NORST;    elsif MROPCODE(8) = '1' then      MR.DLL_STATE := RST;    end if;    if MROPCODE(2) = '0' and MROPCODE(1) = '1' and MROPCODE(0) = '0' then      MR.BURST_LENGTH := 4;    elsif MROPCODE(2) = '0' and MROPCODE(1) = '1' and MROPCODE(0) = '1' then      MR.BURST_LENGTH := 8;    else      assert false report      "ERROR : (MODE_REGISTER_SET_PROCEDURE) : Invalid Burst_Length Encountered!"      severity ERROR;    end if;    if MROPCODE(12) = '0' then      MR.SAPD := '0';    elsif MROPCODE(12) = '1' then      MR.SAPD := '1';    end if;    if MROPCODE(11) = '0' and MROPCODE(10) = '0' and MROPCODE(9) = '1' then      MR.TWR := 2;    elsif MROPCODE(11) = '0' and MROPCODE(10) = '1' and MROPCODE(9) = '0' then      MR.TWR := 3;    elsif MROPCODE(11) = '0' and MROPCODE(10) = '1' and MROPCODE(9) = '1' then      MR.TWR := 4;    elsif MROPCODE(11) = '1' and MROPCODE(10) = '0' and MROPCODE(9) = '0' then      MR.TWR := 5;    elsif MROPCODE(11) = '1' and MROPCODE(10) = '0' and MROPCODE(9) = '1' then      MR.TWR := 6;    else      assert false report      "ERROR : (MODE_REGISTER_SET_PROCEDURE) : Invalid Write Recovery Value Encountered!"      severity ERROR;    end if;  end MODE_REGISTER_SET;------------------------------------------------------------------------------------------------  procedure EXT_MODE_REGISTER_SET (    MROPCODE : in MROPCODE_TYPE;    EMR : out EMR_TYPE) is  begin    if (MROPCODE(0) = '0') then      EMR.DLL_EN := '1';    elsif (MROPCODE(0) = '1') then      EMR.DLL_EN := '0';    end if;    if (MROPCODE(5) = '0' and MROPCODE(4) = '0' and MROPCODE(3) = '0')then      EMR.AL := 0;    elsif (MROPCODE(5) = '0' and MROPCODE(4) = '0' and MROPCODE(3) = '1')then      EMR.AL := 1;    elsif (MROPCODE(5) = '0' and MROPCODE(4) = '1' and MROPCODE(3) = '0')then      EMR.AL := 2;    elsif (MROPCODE(5) = '0' and MROPCODE(4) = '1' and MROPCODE(3) = '1')then      EMR.AL := 3;    elsif (MROPCODE(5) = '1' and MROPCODE(4) = '0' and MROPCODE(3) = '0')then      EMR.AL := 4;    elsif (MROPCODE(5) = '1' and MROPCODE(4) = '0' and MROPCODE(3) = '1')then      EMR.AL := 5;    else      assert false report      "ERROR : (EXT_MODE_REGISTER_SET_PROCEDURE) : Invalid Additive_Latency Encountered!"      severity WARNING;    end if;    if MROPCODE(12) = '0' then      EMR.QOFF := '0';    elsif MROPCODE(12) = '1' then      EMR.QOFF := '1';    end if;    if MROPCODE(10) = '0' then      EMR.DQSB_ENB := '0';    elsif MROPCODE(10) = '1' then      EMR.DQSB_ENB := '1';    end if;    if MROPCODE(11) = '0' then      EMR.RDQS_EN := '0';    elsif MROPCODE(11) = '1' then      EMR.RDQS_EN := '1';    end if;    if MROPCODE(9) = '0' and MROPCODE(8) = '0' and MROPCODE(7) = '0' then      EMR.OCD_PGM := CAL_EXIT;    elsif MROPCODE(9) = '0' and MROPCODE(8) = '0' and MROPCODE(7) = '1' then      EMR.OCD_PGM := DRIVE1;    elsif MROPCODE(9) = '0' and MROPCODE(8) = '1' and MROPCODE(7) = '0' then      EMR.OCD_PGM := DRIVE0;    elsif MROPCODE(9) = '1' and MROPCODE(8) = '0' and MROPCODE(7) = '0' then      EMR.OCD_PGM := ADJUST;    elsif MROPCODE(9) = '1' and MROPCODE(8) = '1' and MROPCODE(7) = '1' then      EMR.OCD_PGM := CAL_DEFAULT;    else      assert false report      "ERROR : (EXT_MODE_REGISTER_SET_PROCEDURE) : Invalid OCD Calibration Program Encountered!"      severity ERROR;    end if;  end EXT_MODE_REGISTER_SET;------------------------------------------------------------------------------------------------  procedure EXT_MODE_REGISTER_SET2 (    MROPCODE : in MROPCODE_TYPE;    EMR : out EMR2_TYPE) is  begin    if (MROPCODE(7) = '0') then      EMR.SREF_HOT := '0';    elsif (MROPCODE(7) = '1') then      EMR.SREF_HOT := '1';    end if;  end EXT_MODE_REGISTER_SET2;------------------------------------------------------------------------------------------------  function REMAINDER (val0 : in integer; val1 : in integer) return integer is    variable Result : integer;  begin    Result := val0;    loop      exit when Result < val1;      Result := Result - val1;    end loop;    return Result;  end REMAINDER;------------------------------------------------------------------------------------------------  function XOR_FUNC (val0 : in std_logic_vector; val1 : in std_logic_vector) return std_logic_vector is    variable Result : std_logic_vector(2 downto 0);    variable j : integer := 0;  begin    for i in val0'RANGE LOOP      if (val0(i) /= val1(i)) then        Result(i) := '1';      else        Result(i) := '0';      end if;      j := j + 1;    end loop;    return Result((j - 1) downto 0);  end XOR_FUNC;------------------------------------------------------------------------------------------------  function CHAR_TO_STD_LOGIC (    c : in character)    return std_logic is    variable r : std_logic;  begin    case c is      when '0' => r := '0';      when 'L' => r := 'L';      when '1' => r := '1';      when 'H' => r := 'H';      when 'W' => r := 'W';      when 'Z' => r := 'Z';      when 'U' => r := 'U';      when '-' => r := '-';      when others => r := 'X';    end case;    return r;  end CHAR_TO_STD_LOGIC;------------------------------------------------------------------------------------------------  function STD_LOGIC_TO_BIT (V: STD_LOGIC) return BIT is    variable Result: BIT;  begin    case V is      when '0' | 'L' =>        Result := '0';      when '1' | 'H' =>        Result := '1';      when 'X' | 'W' | 'Z' | 'U' | '-' =>        Result := '0';    end case;    return Result;  end STD_LOGIC_TO_BIT;------------------------------------------------------------------------------------------------ end HY5PS121621F_PACK;

⌨️ 快捷键说明

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