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

📄 nandflash.vhd

📁 用VHDL开发的NANDFLASH的读写程序,给出 NANDFLASH的时序正确的读写
💻 VHD
📖 第 1 页 / 共 2 页
字号:
               NFL_DATA_OUT <= "10010000";    
            ELSE
               IF (NFL_ALE_xhdl2 = '1') THEN
                  NFL_DATA_OUT <= "00000000";    
               ELSE
                  NFL_DATA_OUT <= "ZZZZZZZZ";    
               END IF;
            END IF;
         END IF;
      END IF;
   END PROCESS;

   PROCESS (NFL_nRE_xhdl5)
   BEGIN
      IF (NFL_nRE_xhdl5'EVENT AND NFL_nRE_xhdl5 = '1') THEN
         IF (repeat_rdata_CNT = "011") THEN
            NANDFLASHID0 <= NFL_DATA;    
         ELSE
            IF (repeat_rdata_CNT = "010") THEN
               NANDFLASHID1 <= NFL_DATA;    
            ELSE
               IF (repeat_rdata_CNT = "001") THEN
                  NANDFLASHID2 <= NFL_DATA;    
               ELSE
                  NANDFLASHID3 <= NFL_DATA;    
               END IF;
            END IF;
         END IF;
      END IF;
   END PROCESS;

   PROCESS (clk)
      VARIABLE repeat_addr_en_xhdl8  : std_logic;
      VARIABLE repeat_rdata_en_xhdl9  : std_logic;
   BEGIN
      IF (clk'EVENT AND clk = '0') THEN
         IF (nf_ord_readid = '1') THEN
            OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_START, 8);    
            repeat_addr_maxCNT <= "000";    
            LoadRPcnt_addr <= '1';    
            repeat_rdata_maxCNT <= "011";    
            LoadRPcnt_rdata <= '1';    
         ELSE
            LoadRPcnt_addr <= '0';    
            LoadRPcnt_rdata <= '0';    
            CASE OP_STATE IS
               WHEN CONV_STD_LOGIC_VECTOR(OP_IDLE, 8) =>
                        OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_IDLE, 8);    
               WHEN CONV_STD_LOGIC_VECTOR(OP_START, 8) =>
                        OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_CLE, 8);    
                        delay_maxCNT <= "010";    
                        LoadDFcnt <= '1';    
               WHEN CONV_STD_LOGIC_VECTOR(OP_CLE, 8) =>
                        LoadDFcnt <= '0';    
                        IF (delay_ok = '1') THEN
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_WRITE_CLE, 8);    
                        ELSE
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_CLE, 8);    
                        END IF;
               WHEN CONV_STD_LOGIC_VECTOR(OP_WRITE_CLE, 8) =>
                        OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_NULL0, 8);    
               WHEN CONV_STD_LOGIC_VECTOR(OP_NULL0, 8) =>
                        OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_ALE, 8);    
               WHEN CONV_STD_LOGIC_VECTOR(OP_ALE, 8) =>
                        OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_WRITE_ALE_L, 8);    
                        delay_maxCNT <= "001";    
                        LoadDFcnt <= '1';    
               WHEN CONV_STD_LOGIC_VECTOR(OP_WRITE_ALE_L, 8) =>
                        repeat_addr_en_xhdl8 := '0';    
                        LoadDFcnt <= '0';    
                        IF (delay_ok = '1') THEN
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_WRITE_ALE_H, 8);    
                        ELSE
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_WRITE_ALE_L, 8);    
                        END IF;
               WHEN CONV_STD_LOGIC_VECTOR(OP_WRITE_ALE_H, 8) =>
                        repeat_addr_en_xhdl8 := '1';    
                        IF (repeat_addr_ok = '1') THEN
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_NULL1, 8);    
                        ELSE
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_WRITE_ALE_L, 8);    
                           delay_maxCNT <= "001";    
                           LoadDFcnt <= '1';    
                        END IF;
               WHEN CONV_STD_LOGIC_VECTOR(OP_NULL1, 8) =>
                        repeat_addr_en_xhdl8 := '0';    
                        OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_READ_DATA_L, 8);    
                        delay_maxCNT <= "001";    
                        LoadDFcnt <= '1';    
               WHEN CONV_STD_LOGIC_VECTOR(OP_READ_DATA_L, 8) =>
                        repeat_rdata_en_xhdl9 := '0';    
                        LoadDFcnt <= '0';    
                        IF (delay_ok = '1') THEN
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_READ_DATA_H, 8);    
                        ELSE
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_READ_DATA_L, 8);    
                        END IF;
               WHEN CONV_STD_LOGIC_VECTOR(OP_READ_DATA_H, 8) =>
                        repeat_rdata_en_xhdl9 := '1';    
                        IF (repeat_rdata_ok = '1') THEN
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_IDLE, 8);    
                        ELSE
                           OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_READ_DATA_L, 8);    
                           delay_maxCNT <= "001";    
                           LoadDFcnt <= '1';    
                        END IF;
               WHEN OTHERS  =>
                        OP_STATE <= CONV_STD_LOGIC_VECTOR(OP_IDLE, 8);    
               
            END CASE;
         END IF;
      END IF;
      repeat_addr_en <= repeat_addr_en_xhdl8;
      repeat_rdata_en <= repeat_rdata_en_xhdl9;
   END PROCESS;

   PROCESS (OP_STATE)
   BEGIN
      CASE OP_STATE IS
         WHEN CONV_STD_LOGIC_VECTOR(OP_IDLE, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '0';    
                  NF_nCE <= '1';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_START, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '0';    
                  NF_nCE <= '0';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_CLE, 8) =>
                  NF_CLE <= '1';    
                  NF_ALE <= '0';    
                  NF_nCE <= '0';    
                  NF_nWE <= '0';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_WRITE_CLE, 8) =>
                  NF_CLE <= '1';    
                  NF_ALE <= '0';    
                  NF_nCE <= '0';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_NULL0, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '0';    
                  NF_nCE <= '0';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_ALE, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '1';    
                  NF_nCE <= '0';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_WRITE_ALE_L, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '1';    
                  NF_nCE <= '0';    
                  NF_nWE <= '0';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_WRITE_ALE_H, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '1';    
                  NF_nCE <= '0';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_NULL1, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '0';    
                  NF_nCE <= '0';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_READ_DATA_L, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '0';    
                  NF_nCE <= '0';    
                  NF_nWE <= '1';    
                  NF_nRE <= '0';    
         WHEN CONV_STD_LOGIC_VECTOR(OP_READ_DATA_H, 8) =>
                  NF_CLE <= '0';    
                  NF_ALE <= '0';    
                  NF_nCE <= '0';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         WHEN OTHERS  =>
                  NF_CLE <= '0';    
                  NF_ALE <= '0';    
                  NF_nCE <= '1';    
                  NF_nWE <= '1';    
                  NF_nRE <= '1';    
         
      END CASE;
   END PROCESS;

END ARCHITECTURE translated;

⌨️ 快捷键说明

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