📄 hy5ps121621f.vhd
字号:
end if; if (PrechargeAllFlag'EVENT and PrechargeAllFlag = TRUE) then if BankActivatedFlag (0) = '1' then BkAdd := "00"; RA := RA_Activated_B0; i := 0; loop exit when i >= NUM_OF_COLS; MEM_CELL_ARRAY0(conv_integer (RA))(i) := SA_ARRAY (conv_integer(BkAdd))(i); i := i + 1; end loop; BankActivatedFlag (0) <= '0'; tmp_ref_addr3_B0 <= RA; tmp_ref_addr3_0 <= transport '1', '0' after 1 ns; b0_last_precharge <= transport now after 1 ns; end if; if BankActivatedFlag (1) = '1' then BkAdd := "01"; RA := RA_Activated_B1; i := 0; loop exit when i >= NUM_OF_COLS; MEM_CELL_ARRAY1(conv_integer (RA))(i) := SA_ARRAY (conv_integer(BkAdd))(i); i := i + 1; end loop; BankActivatedFlag (1) <= '0'; tmp_ref_addr3_B1 <= RA; tmp_ref_addr3_1 <= transport '1', '0' after 1 ns; b1_last_precharge <= transport now after 1 ns; end if; if BankActivatedFlag (2) = '1' then BkAdd := "10"; RA := RA_Activated_B2; i := 0; loop exit when i >= NUM_OF_COLS; MEM_CELL_ARRAY2(conv_integer (RA))(i) := SA_ARRAY (conv_integer(BkAdd))(i); i := i + 1; end loop; BankActivatedFlag (2) <= '0'; tmp_ref_addr3_B2 <= RA; tmp_ref_addr3_2 <= transport '1', '0' after 1 ns; b2_last_precharge <= transport now after 1 ns; end if; if BankActivatedFlag (3) = '1' then BkAdd := "11"; RA := RA_Activated_B3; i := 0; loop exit when i >= NUM_OF_COLS; MEM_CELL_ARRAY3(conv_integer (RA))(i) := SA_ARRAY (conv_integer(BkAdd))(i); i := i + 1; end loop; BankActivatedFlag (3) <= '0'; tmp_ref_addr3_B3 <= RA; tmp_ref_addr3_3 <= transport '1', '0' after 1 ns; b3_last_precharge <= transport now after 1 ns; end if; tmp_ref_addr3_trans <= transport '1', '0' after 1 ns; if (BankActivatedFlag = "0000") then if (PUSCheckFinFlag = TRUE) then assert false report "WARNING : (PRECHARGE_ALL) : No Activated Banks, PCGA command ignored." severity WARNING; else BankActivatedFlag (0) <= '0'; BankActivatedFlag (1) <= '0'; BankActivatedFlag (2) <= '0'; BankActivatedFlag (3) <= '0'; end if; end if; PrechargeAllFinFlag <= TRUE, FALSE after 2 ns; end if;end process; -----------------------------------------------------------------------------------------------------SENSE_AMPLIFIER_UPDATE : process (tmp_act_trans0, tmp_act_trans1, tmp_act_trans2, tmp_act_trans3, tmp_w_trans0, tmp_w_trans1, tmp_w_trans2, tmp_w_trans3)begin if (tmp_act_trans0'EVENT and tmp_act_trans0 = '1') then SA_ARRAY(0) <= SA_ARRAY_A0; elsif (tmp_act_trans1'EVENT and tmp_act_trans1 = '1') then SA_ARRAY(1) <= SA_ARRAY_A1; elsif (tmp_act_trans2'EVENT and tmp_act_trans2 = '1') then SA_ARRAY(2) <= SA_ARRAY_A2; elsif (tmp_act_trans3'EVENT and tmp_act_trans3 = '1') then SA_ARRAY(3) <= SA_ARRAY_A3; elsif (tmp_w_trans0'EVENT and tmp_w_trans0 = '1') then SA_ARRAY(0) <= SA_ARRAY_W0; elsif (tmp_w_trans1'EVENT and tmp_w_trans1 = '1') then SA_ARRAY(1) <= SA_ARRAY_W1; elsif (tmp_w_trans2'EVENT and tmp_w_trans2 = '1') then SA_ARRAY(2) <= SA_ARRAY_W2; elsif (tmp_w_trans3'EVENT and tmp_w_trans3 = '1') then SA_ARRAY(3) <= SA_ARRAY_W3; End if;end process; -----------------------------------------------------------------------------------------------------RD_WR_PIPE : process (CLK_DLY1, CLK)variable CA : std_logic_vector ((NUM_OF_COL_ADD - 1) downto 0) := (others => 'X');variable BkAdd : std_logic_vector ((NUM_OF_BANK_ADD - 1) downto 0) := (others => 'X');begin if (CLK'EVENT and CLK = '1') then BkAdd := (BA); CA := ADDR(NUM_OF_COL_ADD - 1 downto 0); end if; if (CLK_DLY1'EVENT and CLK_DLY1 = '1') then RD_PIPE_REG(6 downto 1) <= RD_PIPE_REG(5 downto 0); WT_PIPE_REG(12 downto 1) <= WT_PIPE_REG(11 downto 0); ADD_PIPE_REG(12) <= ADD_PIPE_REG(11); ADD_PIPE_REG(11) <= ADD_PIPE_REG(10); ADD_PIPE_REG(10) <= ADD_PIPE_REG(9); ADD_PIPE_REG(9) <= ADD_PIPE_REG(8); ADD_PIPE_REG(8) <= ADD_PIPE_REG(7); ADD_PIPE_REG(7) <= ADD_PIPE_REG(6); ADD_PIPE_REG(6) <= ADD_PIPE_REG(5); ADD_PIPE_REG(5) <= ADD_PIPE_REG(4); ADD_PIPE_REG(4) <= ADD_PIPE_REG(3); ADD_PIPE_REG(3) <= ADD_PIPE_REG(2); ADD_PIPE_REG(2) <= ADD_PIPE_REG(1); ADD_PIPE_REG(1) <= ADD_PIPE_REG(0); if (Read_CA = '1' or Write_CA = '1') then ADD_PIPE_REG(0) <= BkAdd & CA; if (Read_CA = '1') then RD_PIPE_REG(0) <= '1'; else RD_PIPE_REG(0) <= '0'; end if; if (Write_CA = '1') then WT_PIPE_REG(0) <= '1'; else WT_PIPE_REG(0) <= '0'; end if; else ADD_PIPE_REG(0) <= (others => '0'); RD_PIPE_REG(0) <= '0'; WT_PIPE_REG(0) <= '0'; end if; end if;end process;-----------------------------------------------------------------------------------------------------casp6_XX_Gen : process (RD_PIPE_REG, WT_PIPE_REG)begin if (RD_PIPE_REG'event and RD_PIPE_REG(ExtModeRegister.AL) = '1') then casp6_rd <= transport '1' after 0.5 ns, '0' after 2 ns; elsif (WT_PIPE_REG'event and WT_PIPE_REG(ExtModeRegister.AL + ModeRegister.CAS_LATENCY - 2) = '1') then caspwt <= transport '1', '0' after 2 ns; end if;end process;-----------------------------------------------------------------------------------------------------RD_WT_Flag_GEN : process (caspwt, casp6_rd, ReadFinFlag, WriteFinFlag)begin if (ReadFinFlag'EVENT and ReadFinFlag = TRUE) then ReadFlag <= FALSE; elsif (WriteFinFlag'EVENT and WriteFinFlag = TRUE) then WriteFlag <= FALSE; end if; if (casp6_rd'event and casp6_rd = '1') then ReadFlag <= TRUE; elsif (caspwt'event and caspwt = '1') then WriteFlag <= TRUE; end if;end process;-----------------------------------------------------------------------------------------------------WRITE_ST_GEN : process(CLK_DLY1, caspwt)begin if (caspwt'event and caspwt = '1') then wt_stdby <= '1'; end if; if (CLK_DLY1'event and CLK_DLY1 = '1') then if (casp_wtII = '1') then casp6_wt <= transport '1' after 0.5 ns, '0' after 2 ns; end if; casp_wtII <= casp_wtI; casp_wtI <= wt_stdby; wt_stdby <= '0'; end if;end process;-----------------------------------------------------------------------------------------------------YBURST_GEN : process (casp6_rd, casp6_wt, CLK, ReadFinFlag, WriteFinFlag)begin if ((casp6_rd'event and casp6_rd = '1') or (casp6_wt'event and casp6_wt = '1')) then RD_WR_ST <= '1'; yburst <= '0'; end if; if (CLK'event and CLK = '1') then if (RD_WR_ST = '1' and ModeRegister.BURST_LENGTH = 8) then yburst <= transport '1' after 2.1 ns; end if; RD_WR_ST <= '0'; end if; if ((ReadFinFlag'event and ReadFinFlag = TRUE) or (WriteFinFlag'event and WriteFinFlag = TRUE)) then yburst <= '0'; end if;end process;-----------------------------------------------------------------------------------------------------DQS_PULSE_GEN : process (CLK, casp6_rd) begin if (casp6_rd'EVENT and casp6_rd = '1') then dqs_pulse1 <= '1'; end if; if (CLK'EVENT and CLK = '1') then dqs_pulse6 <= dqs_pulse5; dqs_pulse5 <= dqs_pulse4; dqs_pulse4 <= dqs_pulse3; dqs_pulse3 <= dqs_pulse2; dqs_pulse2 <= dqs_pulse1; dqs_pulse1 <= '0'; end if;end process; -----------------------------------------------------------------------------------------------------DQS_GENERATION : process(CLK, dqs_pulse1, dqs_pulse2, dqs_pulse3, dqs_pulse4, dqs_pulse5, dqs_pulse6)begin if (CLK'event and CLK = '1') then if ((ModeRegister.CAS_LATENCY = 2 and dqs_pulse1 = '1') or (ModeRegister.CAS_LATENCY = 3 and dqs_pulse2 = '1') or (ModeRegister.CAS_LATENCY = 4 and dqs_pulse3 = '1') or (ModeRegister.CAS_LATENCY = 5 and dqs_pulse4 = '1') or (ModeRegister.CAS_LATENCY = 6 and dqs_pulse5 = '1')) then if (DQS_S = 'Z') then DQS_S <= '0'; elsif (dqs_count = ModeRegister.BURST_LENGTH) then DQS_S <= '0'; else DQS_S <= '1'; end if; elsif ((ModeRegister.CAS_LATENCY = 2 and dqs_pulse2 = '1') or (ModeRegister.CAS_LATENCY = 3 and dqs_pulse3 = '1') or (ModeRegister.CAS_LATENCY = 4 and dqs_pulse4 = '1') or (ModeRegister.CAS_LATENCY = 5 and dqs_pulse5 = '1') or (ModeRegister.CAS_LATENCY = 6 and dqs_pulse6 = '1')) then if (DQS_S = '0') then DQS_S <= '1'; end if; dqs_count <= 1; elsif (dqs_count = ModeRegister.BURST_LENGTH) then if (DQS_S = '0') then DQS_S <= 'Z'; end if; dqs_count <= 0; elsif (DQS_S = '0') then DQS_S <= '1'; dqs_count <= dqs_count + 1; end if; elsif (CLK'event and CLK = '0') then if (DQS_S = '1') then DQS_S <= '0'; dqs_count <= dqs_count + 1; end if; end if;end process;-----------------------------------------------------------------------------------------------------DQS_OPERATION : process(DQS_S, ExtModeRegister.OCD_PGM)begin if (ExtModeRegister.QOFF = '0') then if (ExtModeRegister.OCD_PGM'event and ExtModeRegister.OCD_PGM = DRIVE0) then UDQS <= '0'; LDQS <= '0'; if (ExtModeRegister.DQSB_ENB = '1') then UDQSB <= '1'; LDQSB <= '1'; else UDQSB <= 'Z'; LDQSB <= 'Z'; end if; elsif (ExtModeRegister.OCD_PGM'event and ExtModeRegister.OCD_PGM = DRIVE1) then UDQS <= '1'; LDQS <= '1'; if (ExtModeRegister.DQSB_ENB = '1') then UDQSB <= '0'; LDQSB <= '0'; else UDQSB <= 'Z'; LDQSB <= 'Z'; end if; elsif (ExtModeRegister.OCD_PGM'event and ExtModeRegister.OCD_PGM = CAL_EXIT) then UDQS <= 'Z'; LDQS <= 'Z'; UDQSB <= 'Z'; LDQSB <= 'Z'; elsif (DQS_S'event and DQS_S = '1') then UDQS <= '1'; LDQS <= '1'; if (ExtModeRegister.DQSB_ENB = '0') then UDQSB <= '0'; LDQSB <= '0'; else UDQSB <= 'Z'; LDQSB <= 'Z'; end if; elsif (DQS_S'event and DQS_S = '0') then UDQS <= '0'; LDQS <= '0'; if (ExtModeRegister.DQSB_ENB = '0') then UDQSB <= '1'; LDQSB <= '1'; else UDQSB <= 'Z'; LDQSB <= 'Z'; end if; elsif (DQS_S'event and DQS_S = 'Z' and DQS_S /= DQS_S'LAST_VALUE) then UDQS <= 'Z'; LDQS <= 'Z'; UDQSB <= 'Z'; LDQSB <= 'Z'; end if; else UDQS <= 'Z'; LDQS <= 'Z';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -