📄 hy5ps121621f_pack.vhd
字号:
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 + -