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

📄 nandflash.vhd

📁 用VHDL开发的NANDFLASH的读写程序,给出 NANDFLASH的时序正确的读写
💻 VHD
📖 第 1 页 / 共 2 页
字号:
----------------------------------------------------------------------------------------------
--
-- VHDL file generated by X-HDL - Revision 3.2.52  Mar. 28, 2005 
-- Tue Nov 25 16:36:54 2008
--
--      Input file         : D:/3/TEST_NANDFLASH.v
--      Design name        : TEST_NANDFLASH
--      Author             : 
--      Company            : 
--
--      Description        : 
--
--
----------------------------------------------------------------------------------------------
--
library  ieee;
use      ieee.std_logic_1164.all;
use      ieee.std_logic_unsigned.all;
use      ieee.std_logic_arith.all;

ENTITY TEST_NANDFLASH IS
   PORT (
      clk                     : IN std_logic;   
     -- rst_n                   : IN std_logic;   
      ctrl                    : IN std_logic_vector(3 DOWNTO 0);   
      wr_n                    : IN std_logic;   
      NFL_CLE                 : OUT std_logic;   
      NFL_ALE                 : OUT std_logic;   
      NFL_nCE                 : OUT std_logic;   
      NFL_nWE                 : OUT std_logic;   
      NFL_nRE                 : OUT std_logic;   
      NFL_DATA                : INOUT std_logic_vector(7 DOWNTO 0);   
      ID                      : OUT std_logic_vector(31 DOWNTO 0));   
END ENTITY TEST_NANDFLASH;

ARCHITECTURE translated OF TEST_NANDFLASH IS


   SIGNAL NFL_DATA_OUT             :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL NF_CLE                   :  std_logic;   
   SIGNAL NF_ALE                   :  std_logic;   
   SIGNAL NF_nCE                   :  std_logic;   
   SIGNAL NF_nWE                   :  std_logic;   
   SIGNAL NF_nRE                   :  std_logic;   
   SIGNAL NANDFLASHID0             :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL NANDFLASHID1             :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL NANDFLASHID2             :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL NANDFLASHID3             :  std_logic_vector(7 DOWNTO 0);   
   CONSTANT  NFLASH_READID_CMD     :  std_logic_vector(7 DOWNTO 0) := "10010000";    
   CONSTANT  NFLASH_READID_ADDR    :  std_logic_vector(7 DOWNTO 0) := "00000000";    
   SIGNAL nf_ord_read1             :  std_logic;   
   SIGNAL nf_ord_read2             :  std_logic;   
   SIGNAL nf_ord_readid            :  std_logic;   
   SIGNAL nf_ord_reset             :  std_logic;   
   SIGNAL nf_ord_pageprogram       :  std_logic;   
   SIGNAL nf_ord_blockerase        :  std_logic;   
   SIGNAL nf_ord_blockprotect1     :  std_logic;   
   SIGNAL nf_ord_blockprotect2     :  std_logic;   
   SIGNAL nf_ord_blockprotect3     :  std_logic;   
   SIGNAL nf_ord_readstatus        :  std_logic;   
   SIGNAL nf_ord_readprotectionstate      :  std_logic;   
  -- SIGNAL DF_state                 :  std_logic_vector(1 DOWNTO 0);   
   SIGNAL delayCNT                 :  std_logic_vector(2 DOWNTO 0);   
   SIGNAL delay_maxCNT             :  std_logic_vector(2 DOWNTO 0);   
   SIGNAL LoadDFcnt                :  std_logic;   
   --SIGNAL incDFcnt                 :  std_logic;   
   SIGNAL delay_ok                 :  std_logic;   
   SIGNAL repeat_addr_CNT          :  std_logic_vector(2 DOWNTO 0);   
   SIGNAL repeat_addr_maxCNT       :  std_logic_vector(2 DOWNTO 0);   
   SIGNAL LoadRPcnt_addr           :  std_logic;   
   --SIGNAL incRPcnt_addr            :  std_logic;   
   SIGNAL repeat_addr_ok           :  std_logic;   
   SIGNAL repeat_addr_en           :  std_logic;   
   SIGNAL repeat_rdata_CNT         :  std_logic_vector(2 DOWNTO 0);   
   SIGNAL repeat_rdata_maxCNT      :  std_logic_vector(2 DOWNTO 0);   
   SIGNAL LoadRPcnt_rdata          :  std_logic;   
   --SIGNAL incRPcnt_rdata           :  std_logic;   
   SIGNAL repeat_rdata_ok          :  std_logic;   
   SIGNAL repeat_rdata_en          :  std_logic;   
   SIGNAL temp_xhdl7               :  std_logic_vector(7 DOWNTO 0);   
   CONSTANT  OP_IDLE               :  integer := 0;    
   CONSTANT  OP_START              :  integer := 1;    
   CONSTANT  OP_CLE                :  integer := 2;    
   CONSTANT  OP_WRITE_CLE          :  integer := 3;    
   CONSTANT  OP_NULL0              :  integer := 4;    
   CONSTANT  OP_ALE                :  integer := 5;    
   CONSTANT  OP_WRITE_ALE_L        :  integer := 6;    
   CONSTANT  OP_WRITE_ALE_H        :  integer := 7;    
   CONSTANT  OP_NULL1              :  integer := 8;    
   CONSTANT  OP_READ_DATA_L        :  integer := 9;    
   CONSTANT  OP_READ_DATA_H        :  integer := 10;    
   SIGNAL OP_STATE                 :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL NFL_CLE_xhdl1            :  std_logic;   
   SIGNAL NFL_ALE_xhdl2            :  std_logic;   
   SIGNAL NFL_nCE_xhdl3            :  std_logic;   
   SIGNAL NFL_nWE_xhdl4            :  std_logic;   
   SIGNAL NFL_nRE_xhdl5            :  std_logic;   
   SIGNAL ID_xhdl6                 :  std_logic_vector(31 DOWNTO 0);   

BEGIN
   NFL_CLE <= NFL_CLE_xhdl1;
   NFL_ALE <= NFL_ALE_xhdl2;
   NFL_nCE <= NFL_nCE_xhdl3;
   NFL_nWE <= NFL_nWE_xhdl4;
   NFL_nRE <= NFL_nRE_xhdl5;
   ID <= ID_xhdl6;
   nf_ord_read1 <= (((NOT ctrl(3) AND NOT ctrl(2)) AND NOT ctrl(1)) AND NOT ctrl(0)) AND NOT wr_n ;
   nf_ord_read2 <= (((NOT ctrl(3) AND NOT ctrl(2)) AND NOT ctrl(1)) AND ctrl(0)) AND NOT wr_n ;
   nf_ord_readid <= (((NOT ctrl(3) AND NOT ctrl(2)) AND ctrl(1)) AND NOT ctrl(0)) AND NOT wr_n ;
   nf_ord_reset <= (((NOT ctrl(3) AND NOT ctrl(2)) AND ctrl(1)) AND ctrl(0)) AND NOT wr_n ;
   nf_ord_pageprogram <= (((NOT ctrl(3) AND ctrl(2)) AND NOT ctrl(1)) AND NOT ctrl(0)) AND NOT wr_n ;
   nf_ord_blockerase <= (((NOT ctrl(3) AND ctrl(2)) AND NOT ctrl(1)) AND ctrl(0)) AND NOT wr_n ;
   nf_ord_blockprotect1 <= (((NOT ctrl(3) AND ctrl(2)) AND ctrl(1)) AND NOT ctrl(0)) AND NOT wr_n ;
   nf_ord_blockprotect2 <= (((NOT ctrl(3) AND ctrl(2)) AND ctrl(1)) AND ctrl(0)) AND NOT wr_n ;
   nf_ord_blockprotect3 <= (((ctrl(3) AND NOT ctrl(2)) AND NOT ctrl(1)) AND NOT ctrl(0)) AND NOT wr_n ;
   nf_ord_readstatus <= (((ctrl(3) AND NOT ctrl(2)) AND NOT ctrl(1)) AND ctrl(0)) AND NOT wr_n ;
   nf_ord_readprotectionstate <= (((ctrl(3) AND NOT ctrl(2)) AND ctrl(1)) AND NOT ctrl(0)) AND NOT wr_n ;
   ID_xhdl6 <= NANDFLASHID0 & NANDFLASHID1 & NANDFLASHID2 & NANDFLASHID3 ;

   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
         NFL_CLE_xhdl1 <= NF_CLE;    
         NFL_ALE_xhdl2 <= NF_ALE;    
         NFL_nCE_xhdl3 <= NF_nCE;    
         NFL_nWE_xhdl4 <= NF_nWE;    
         NFL_nRE_xhdl5 <= NF_nRE;    
      END IF;
   END PROCESS;

   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '1') THEN
         IF (LoadDFcnt = '1') THEN
            delayCNT <= delay_maxCNT;    
            delay_ok <= '0';    
         ELSE
            IF (delayCNT > "000") THEN
               delayCNT <= delayCNT - "001";    
               delay_ok <= '0';    
            ELSE
               IF (delayCNT = "000") THEN
                  delayCNT <= "000";    
                  delay_ok <= '1';    
               END IF;
            END IF;
         END IF;
      END IF;
   END PROCESS;

   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '0') THEN
         IF (LoadRPcnt_addr = '1') THEN
            repeat_addr_CNT <= repeat_addr_maxCNT;    
            repeat_addr_ok <= '0';    
         ELSE
            IF (repeat_addr_CNT = "000") THEN
               repeat_addr_CNT <= "000";    
               repeat_addr_ok <= '1';    
            ELSE
               IF ((repeat_addr_CNT > "000") AND (repeat_addr_en = '1')) THEN
                  repeat_addr_CNT <= repeat_addr_CNT - "001";    
                  repeat_addr_ok <= '0';    
               END IF;
            END IF;
         END IF;
      END IF;
   END PROCESS;

   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '0') THEN
         IF (LoadRPcnt_rdata = '1') THEN
            repeat_rdata_CNT <= repeat_rdata_maxCNT;    
            repeat_rdata_ok <= '0';    
         ELSE
            IF (repeat_rdata_CNT = "000") THEN
               repeat_rdata_CNT <= "000";    
               repeat_rdata_ok <= '1';    
            ELSE
               IF ((repeat_rdata_CNT > "000") AND (repeat_rdata_en = '1')) THEN
                  repeat_rdata_CNT <= repeat_rdata_CNT - "001";    
                  repeat_rdata_ok <= '0';    
               END IF;
            END IF;
         END IF;
      END IF;
   END PROCESS;
   temp_xhdl7 <= "ZZZZZZZZ" WHEN NFL_nWE_xhdl4 = '1' ELSE NFL_DATA_OUT;
   NFL_DATA <= temp_xhdl7 ;

   PROCESS (clk)
   BEGIN
      IF (clk'EVENT AND clk = '0') THEN
         IF (NOT NFL_nWE_xhdl4 = '1') THEN
            IF (NFL_CLE_xhdl1 = '1') THEN

⌨️ 快捷键说明

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