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

📄 sdram.txt

📁 sdram控制器 这里考虑将SDRAM控制器结合目前项目开展来做相应的模块
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                          WHEN '1' => TV_REG20<= DQ; 
                          WHEN OTHERS =>NULL;
                     end CASE;           
           
                   ELSIF RE_T(9)='1' THEN
						--------READ DATA 2
                      CMD1<="111";    
						------NOP COMMAND
                     CASE TVREG_SEL IS 
                          WHEN '0' => TV_REG11<= DQ; 
                          WHEN '1' => TV_REG21<= DQ; 
                          WHEN OTHERS =>NULL;
                     end CASE;
  
                   ELSIF RE_T(10)='1' THEN
						--------READ DATA 3 
                      CMD1<="111";    
						------NOP COMMAND
                     CASE TVREG_SEL IS 
                          WHEN '0' => TV_REG12<= DQ; 
                          WHEN '1' => TV_REG22<= DQ; 
                          WHEN OTHERS =>NULL;
                     end CASE;                 
                     
                   ELSIF RE_T(11)='1' THEN
						--------READ DATA 4
                      CMD1<="111";    
						------NOP COMMAND
                      CASE TVREG_SEL IS 
                          WHEN '0' => TV_REG13<= DQ; 
                          WHEN '1' => TV_REG23<= DQ; 
                          WHEN OTHERS =>NULL;
                     end CASE;
                  ELSIF RE_T(12)='1' THEN 
						--------READ DATA 5
                      CMD1<="110";    
						------terminating
                     CASE TVREG_SEL IS 
                          WHEN '0' => TV_REG14<= DQ; 
                          WHEN '1' => TV_REG24<= DQ; 
                          WHEN OTHERS =>NULL;
                     end CASE;

                 ELSIF RE_T(13)='1' THEN     
						--------READ DATA 6
                       CMD1<="110";    
						------ NOP COMMAND  
                     CASE TVREG_SEL IS 
                          WHEN '0' => TV_REG15<= DQ; 
                          WHEN '1' => TV_REG25<= DQ; 
                          WHEN OTHERS =>NULL;
                     end CASE;

                  ELSIF RE_T(14)='1' THEN
						--------READ DATA 7
                      CMD1<="111";    
						------NOP COMMAND
                     CASE TVREG_SEL IS 
                          WHEN '0' => TV_REG16<= DQ; 
                          WHEN '1' => TV_REG26<= DQ; 
                          WHEN OTHERS =>NULL;
                     end CASE;

                  ELSIF RE_T(15)='1' THEN
						--------READ DATA 8
                      CMD1<="111";    
						------NOP COMMAND
                     CASE TVREG_SEL IS 
                          WHEN '0' => TV_REG17<= DQ; 
                          WHEN '1' => TV_REG27<= DQ; 
                          WHEN OTHERS =>NULL;
                     end CASE;  
						                                       
                  ELSIF RE_T(16)='1' THEN
                     CMD1<="111"; 
						------FOR terminating  COMMAND 'S NOP COMMAND
                     SA1(10)        <='1';  
						----PRECHARGE FOR ALL BANKS
                  ELSIF RE_T(17)='1' THEN
                      CMD1<="010";    
						-----PRECHARGE
                      SA1(10)  <='1';  
						----PRECHARGE FOR ALL BANKS
                  ELSE 
                       CMD1<="111";    
						------NOP COMMAND
                        SA1     <= (others => '0');
                  END IF;

              ELSIF COM_VH_B='1' THEN 
                      TV_REG10 <= (others => '0');
                      TV_REG11 <= (others => '0');
                      TV_REG12 <= (others => '0');
                      TV_REG13 <= (others => '0');
                      TV_REG14 <= (others => '0');
                      TV_REG15 <= (others => '0');
                      TV_REG16 <= (others => '0');
                      TV_REG17 <= (others => '0');
                      TV_REG20 <= (others => '0');
                      TV_REG21 <= (others => '0');
                      TV_REG22 <= (others => '0');
                      TV_REG23 <= (others => '0');
                      TV_REG24 <= (others => '0');
                      TV_REG25 <= (others => '0');
                      TV_REG26 <= (others => '0');
                      TV_REG27 <= (others => '0');

                  IF RE_T(2)='1' THEN
                      SA1(10)        <='1';  
						----PRECHARGE FOR ALL BANKS
                  ELSIF RE_T(3)='1' THEN
                      CMD1<="010";    
						------PRECHARGE
                      SA1(10)        <='1';  
						------PRECHARGE FOR ALL BANKS
                  ELSIF RE_T(5)='1' THEN
                      CMD1<="001";    
						-------AUTO REFRESH 
                      SA1(10)        <='0'; 
                  ELSE 
                      CMD1<="111";    
						------NOP COMMAND
                      SA1     <= (others => '0');
                  END IF;
                 END IF; 
              END IF;   
           ELSIF ( RW_START='0'  ) THEN 
						-----WRITE COMMANDAND  INI_END='1'
                 
             RE_T :="00000000000000000001";
         
                  IF WR_T(15)='0' THEN
                   WR_T(15 DOWNTO 1):=WR_T(14 DOWNTO 0);
                   WR_T(0):='0';
                 
                   IF WR_T(1)='1' THEN
                      SA1  <="0000"&WR_SDROWADD;
                      BA  <= WR_BANK;
                      DQM <='0';     

                   ELSIF WR_T(2)='1' THEN
                      CMD1 <="011";    ------ACTIVE
                      SA1  <="0000"&WR_SDROWADD;
                      BA  <= WR_BANK;
                      DQM <='0';     

                   ELSIF WR_T(4)='1' THEN
                      CMD1<="111";    ------NOP
                      WR_COLADD2 <= TEMP;
                      TEMP :=TEMP+1;        
						---------read rom fisrt data 
                      SA1(8 DOWNTO 0)<=WR_COLADD&"000";    
                      SA1(10)        <='0';  
						----WRITE WITHOUT AUTO PRECHARGE
                      BA<=  WR_BANK;   
                      DQM <='0';  

                   ELSIF WR_T(5)='1' THEN
                      CMD1<="100";    ------WRITE
                      DQM<='0'; 
                      SA1(8 DOWNTO 0)<=WR_COLADD&"000";    
                      SA1(10)        <='0';  
						----WRITE WITHOUT AUTO PRECHARGE
                      BA<=  WR_BANK;    
                      WR_COLADD2 <= TEMP;
                      TEMP :=TEMP+1;
                        --WR_DATA<=DATAIN;  -------WRITE DATA 1
                   ELSIF WR_T(6)='1' THEN
                      CMD1<="111";    
                        ------NOP COMMAND
                      DQM<='0'; 
                      WR_COLADD2 <= TEMP;
                      TEMP :=TEMP+1;
                        --WR_DATA<=DATAIN;  --------WRITE DATA 2
                   ELSIF WR_T(7)='1' THEN
                      CMD1<="111";    
					    ------NOP COMMAND
                      DQM<='0'; 
                      WR_COLADD2 <= TEMP;
                      TEMP :=TEMP+1;
                      --WR_DATA<=DATAIN;     --------WRITE DATA 3
                   ELSIF WR_T(8)='1' THEN
                      CMD1<="111";    ------NOP COMMAND
                      DQM<='0'; 
                      WR_COLADD2 <= TEMP;
                      TEMP :=TEMP+1;
                      --WR_DATA<=DATAIN;     --------WRITE DATA 4
                   ELSIF WR_T(9)='1' THEN
                      CMD1<="111";    ------NOP COMMAND
                      DQM<='0'; 
                      WR_COLADD2 <= TEMP;
                      TEMP :=TEMP+1;
                      --WR_DATA<=DATAIN;     --------WRITE DATA5                                       
                   ELSIF WR_T(10)='1' THEN
                      CMD1<="111";    -----NOP COMMAND
                      DQM<='0'; 
                      WR_COLADD2 <= TEMP;
                      TEMP :=TEMP+1;
                      --WR_DATA<=DATAIN;     --------WRITE DATA 6
                   ELSIF WR_T(11)='1' THEN
                      CMD1<="111";    ------NOP COMMAND
                      DQM<='0'; 
                      WR_COLADD2 <= TEMP;
                      TEMP :=TEMP+1;
                      --WR_DATA<=DATAIN;     --------WRITE DATA 7 
                   ELSIF WR_T(12)='1' THEN
                      CMD1<="111";    ------NOP COMMAND
                      DQM<='0'; 
                      --WR_COLADD2 <= TEMP;
                      --TEMP :=TEMP+1;
                      --WR_DATA<=DATAIN;     --------WRITE DATA 8
                   ELSIF WR_T(13)='1' THEN
                      CMD1<="110";    ------BURST TERMINATE COMMAND
                      DQM<='1';                 --------for  tWR=15ns
                      SA1(10)        <='1';----PRECHARGE FOR ALL BANKS
                    ELSIF WR_T(14)='1' THEN
                      CMD1<="010";    -----PRECHARGE
                      DQM<='1'; 
                      SA1(10)        <='1';  ----PRECHARGE FOR ALL BANKS
                   ELSE 
                      CMD1<="111";    ------NOP COMMAND
                      DQM<='0'; 
                      SA1     <= (others => '0');
                   END IF;
              END IF;
         END IF;
    END IF;
  END PROCESS;    

---------------------------------------------------------------------------
---------------------------------------------------------------------------
-- for tv data out .
Ptv_out: PROCESS (CLK66)
VARIABLE TEMP2           : STD_LOGIC_VECTOR ( 3 DOWNTO 0);
VARIABLE DATA_O          : STD_LOGIC_VECTOR ( 7 DOWNTO 0);
VARIABLE TEMP            : STD_LOGIC_VECTOR ( 4 DOWNTO 0);
BEGIN        
						---- EVERY LINE COUNT FOR 912 bytes DATA,
IF CLK66'EVENT AND CLK66='1' THEN  
        IF COM_VH_B='1' THEN
             TEMP:=(OTHERS=>'0');
             TEMP2:="0100";
						--(OTHERS=>'0');--"0001";-
             DATA_O:=(OTHERS=>'0');
        ELSE
            IF CLK165='1' THEN
              TEMP :=TVREG_SEL& TEMP2;
                  CASE TEMP IS
                    WHEN "00000" => DATA_O :=TV_REG20(15 DOWNTO 8);
                    WHEN "00001" => DATA_O :=TV_REG20( 7 DOWNTO 0);
                    WHEN "00010" => DATA_O :=TV_REG21(15 DOWNTO 8);
                    WHEN "00011" => DATA_O :=TV_REG21( 7 DOWNTO 0);
                    WHEN "00100" => DATA_O :=TV_REG22(15 DOWNTO 8);
                    WHEN "00101" => DATA_O :=TV_REG22( 7 DOWNTO 0);
                    WHEN "00110" => DATA_O :=TV_REG23(15 DOWNTO 8);
                    WHEN "00111" => DATA_O :=TV_REG23( 7 DOWNTO 0);
                    WHEN "01000" => DATA_O :=TV_REG24(15 DOWNTO 8);
                    WHEN "01001" => DATA_O :=TV_REG24( 7 DOWNTO 0);
                    WHEN "01010" => DATA_O :=TV_REG25(15 DOWNTO 8);
                    WHEN "01011" => DATA_O :=TV_REG25( 7 DOWNTO 0);
                    WHEN "01100" => DATA_O :=TV_REG26(15 DOWNTO 8);
                    WHEN "01101" => DATA_O :=TV_REG26( 7 DOWNTO 0);
                    WHEN "01110" => DATA_O :=TV_REG27(15 DOWNTO 8);
                    WHEN "01111" => DATA_O :=TV_REG27( 7 DOWNTO 0);
                    WHEN "10000" => DATA_O :=TV_REG10(15 DOWNTO 8);
                    WHEN "10001" => DATA_O :=TV_REG10( 7 DOWNTO 0);
                    WHEN "10010" => DATA_O :=TV_REG11(15 DOWNTO 8);
                    WHEN "10011" => DATA_O :=TV_REG11( 7 DOWNTO 0);
                    WHEN "10100" => DATA_O :=TV_REG12(15 DOWNTO 8);
                    WHEN "10101" => DATA_O :=TV_REG12( 7 DOWNTO 0);
                    WHEN "10110" => DATA_O :=TV_REG13(15 DOWNTO 8);
                    WHEN "10111" => DATA_O :=TV_REG13( 7 DOWNTO 0);
                    WHEN "11000" => DATA_O :=TV_REG14(15 DOWNTO 8);
                    WHEN "11001" => DATA_O :=TV_REG14( 7 DOWNTO 0);
                    WHEN "11010" => DATA_O :=TV_REG15(15 DOWNTO 8);
                    WHEN "11011" => DATA_O :=TV_REG15( 7 DOWNTO 0);
                    WHEN "11100" => DATA_O :=TV_REG16(15 DOWNTO 8);
                    WHEN "11101" => DATA_O :=TV_REG16( 7 DOWNTO 0);
                    WHEN "11110" => DATA_O :=TV_REG17(15 DOWNTO 8);
                    WHEN "11111" => DATA_O :=TV_REG17( 7 DOWNTO 0);
                    WHEN OTHERS  => DATA_O :=(OTHERS=>'0');
                  END CASE;
                TEMP2:= TEMP2+1;
            END IF;
      END IF;        
       IF COM_VH_B='0' THEN
            DATA_OUT<=(NOT COM_VH)&'1'&(DATA_O );
       ELSIF COM_VH_B='1' THEN
            DATA_OUT<=(NOT COM_VH)&"000000000"; 
       END IF;
END IF;
END PROCESS;
end RTL; 

⌨️ 快捷键说明

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