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

📄 hy5ps121621f.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
📖 第 1 页 / 共 5 页
字号:
  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 + -