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

📄 testbench.vhd

📁 在逻辑的系统仿真中使用的FLASH模型(AMD的Am29lv160d)
💻 VHD
📖 第 1 页 / 共 5 页
字号:
                -- read Autoselect codes                WHEN rd_AS =>                    RAddr := to_nat(T_A(14 downto 0));   --x16 addressing                    toggle := false;                    Check_AS (                        DQ       => T_DQ,                        addr     => RAddr,                        ProtSecNum=>ProtSecNum,                        secProt  => Sec_Prot(RSect),                        FactoryProt=>FactoryProt ,                        Byte     => T_BYTENeg,                        AS_E     => to_slv(16#0C#,8),                        AS_F     => to_slv(1,8),                        check_err=>check_err);                WHEN rd_HiZ   =>                    toggle:=false;                    Check_Z (                        DQ       => T_DQ,                        check_err=>check_err);                WHEN readX   =>                    toggle:=false;                    Check_X (                        DQ       => T_DQ,                        check_err=>check_err);                WHEN erase_na  | erase_active  =>                    IF toggle THEN                        Check_Erase (                            DQ       => T_DQ(7 downto 0),                            sts      => status,                            toggle   => toggle_sts,                            sts_check=>sts_check,                            RY       => T_RY,                            check_err=>check_err);                        toggle_sts := T_DQ(7 downto 0); --update toggle check                    END IF;                WHEN ers_susp_e  =>                    IF toggle THEN                        Check_Ers_Susp (                            DQ       => T_DQ(7 downto 0),                            sts      => status,                            toggle   => toggle_sts,                            sts_check=>sts_check,                            RY       => T_RY,                            check_err=>check_err);                        toggle_sts := T_DQ(7 downto 0); --update toggle check                    END IF;--                WHEN ers_susp_prog_na  | ers_susp_prog  =>                    IF toggle THEN                        Check_Ers_Susp_Prog (                            DQ       => T_DQ(7 downto 0),                            sts      => status,                            toggle   => toggle_sts,                            sts_check=>sts_check,                            RY       => T_RY,                            check_err=>check_err);                        toggle_sts := T_DQ(7 downto 0); --update toggle check                    END IF;--                WHEN prog_na  | prog_active  =>                    IF toggle THEN                        Check_Progr (                            DQ       => T_DQ(7 downto 0),                            sts      => status,                            toggle   => toggle_sts,                            sts_check=>sts_check,                            RY       => T_RY,                            check_err=>check_err);                        toggle_sts := T_DQ(7 downto 0); --update toggle check                    END IF;                WHEN buff_wr_busy  | buff_wr_N_busy  =>                    IF toggle THEN                        Check_Buff_Busy (                            DQ       => T_DQ(7 downto 0),                            sts      => status,                            toggle   => toggle_sts,                            sts_check=>sts_check,                            RY       => T_RY,                            check_err=>check_err);                        toggle_sts := T_DQ(7 downto 0); --update toggle check                    END IF;                WHEN buff_abort =>                    IF toggle THEN                        Check_Abort (                            DQ       => T_DQ(7 downto 0),                            sts      => status,                            toggle   => toggle_sts,                            sts_check=>sts_check,                            RY       => T_RY,                            check_err=>check_err);                        toggle_sts := T_DQ(7 downto 0); --update toggle check                    END IF;                WHEN OTHERS     =>  null;            END CASE;            -- get firs data for toggle check            CASE status IS                WHEN prog_active      | prog_na      |                     erase_active     | erase_na     |                     ers_susp_e       |                     ers_susp_prog    | ers_susp_prog_na |                     buff_wr_busy     | buff_wr_N_busy |                     buff_abort       | get_toggle   =>                     IF (NOT toggle) OR (status=get_toggle) THEN                        toggle:=true;                        toggle_sts := T_DQ(7 downto 0);                     END IF;                WHEN OTHERS => null;            END CASE;        END IF;    END IF;    WAIT ON T_A, T_CENeg, T_OENeg, T_WENeg, T_DQ(15), T_BYTENeg;END PROCESS checker;default:    PROCESS        -- text file input variables        FILE mem_f          : text  is  mem_file;        FILE prot_f         : text  is  prot_file;        FILE secsi_f        : text  is  secsi_file;        VARIABLE S_ind         : NATURAL RANGE 0 TO SecNum:= 0;        VARIABLE ind           : NATURAL RANGE 0 TO SecSize:= 0;        VARIABLE buf           : line;BEGIN    --Preload Control    -----------------------------------------------------------------------    -- File Read Section    -----------------------------------------------------------------------    IF UserPreload THEN            --- Sector protection preload            IF (prot_file /= "none" ) THEN                ind   := 0;                FactoryProt := '0';                Sec_Prot := (OTHERS => '0');                WHILE (not ENDFILE (prot_f)) LOOP                    READLINE (prot_f, buf);                    IF buf(1) = '/' THEN                        NEXT;                    ELSIF buf(1) = '@' THEN                        ind := h(buf(2 to 3)); --address                    ELSE                        IF ind > SecNum THEN                            --SecSi Factory protect preload                            IF buf(1)='1' THEN                                FactoryProt := '1';                            END IF;                        ELSE                            -- Standard Sector prload                            IF buf(1)='1' THEN                                Sec_Prot(ind):= '1';                            END IF;                            ind := ind + 1;                        END IF;                    END IF;                END LOOP;            END IF;            -- Secure Silicon Sector Region preload            IF (SecSi_file /= "none" ) THEN                SecSi := (OTHERS => MaxData);                ind := 0;                WHILE (not ENDFILE (SecSi_f)) LOOP                    READLINE (SecSi_f, buf);                    IF buf(1) = '/' THEN                        NEXT;                    ELSIF buf(1) = '@' THEN                        ind := h(buf(2 to 3)); --address                    ELSE                        IF ind <= SecSiSize THEN                            SecSi(ind) := h(buf(1 TO 2));                            ind := ind + 1;                        END IF;                    END IF;                END LOOP;            END IF;            --- Memory Preload            IF (mem_file /= "none" ) THEN                ind   := 0;                Mem := (OTHERS => (OTHERS => MaxData));                -- load sector 0                WHILE (not ENDFILE (mem_f)) LOOP                    READLINE (mem_f, buf);                    IF buf(1) = '/' THEN                        NEXT;                    ELSIF buf(1) = '@' THEN                        ind := h(buf(2 to 5)); --address                    ELSE                        IF ind <= SecSize THEN                            Mem(0)(ind) := h(buf(1 to 2));                            ind := ind + 1;                        END IF;                    END IF;                END LOOP;                -- load other sectors                FOR i IN 1 TO SecNum LOOP                    Mem(i) := Mem(0);                END LOOP;            END IF;    END IF;    -----------------------------------------------------------------------    --CFI array data / AM29LV640MH90R !!! DEVICE SPECIFIC    -----------------------------------------------------------------------    --CFI query identification string    -- !!!!!! WORD ADDRESSES (x16) - for x8 addressing double addr    --CFI query identification string    CFI_array(16#10#) := 16#51#;    CFI_array(16#11#) := 16#52#;    CFI_array(16#12#) := 16#59#;    CFI_array(16#13#) := 16#02#;    CFI_array(16#14#) := 16#00#;    CFI_array(16#15#) := 16#40#;    CFI_array(16#16#) := 16#00#;    CFI_array(16#17#) := 16#00#;    CFI_array(16#18#) := 16#00#;    CFI_array(16#19#) := 16#00#;    CFI_array(16#1A#) := 16#00#;    --system interface string    CFI_array(16#1B#) := 16#27#;    CFI_array(16#1C#) := 16#36#;    CFI_array(16#1D#) := 16#00#;    CFI_array(16#1E#) := 16#00#;    CFI_array(16#1F#) := 16#07#;    CFI_array(16#20#) := 16#07#;    CFI_array(16#21#) := 16#0A#;    CFI_array(16#22#) := 16#00#;    CFI_array(16#23#) := 16#01#;    CFI_array(16#24#) := 16#05#;    CFI_array(16#25#) := 16#04#;    CFI_array(16#26#) := 16#00#;    --device geometry definition    CFI_array(16#27#) := 16#17#;    CFI_array(16#28#) := 16#02#;    CFI_array(16#29#) := 16#00#;    CFI_array(16#2A#) := 16#05#;    CFI_array(16#2B#) := 16#00#;    CFI_array(16#2C#) := 16#01#;    CFI_array(16#2D#) := 16#7F#;    CFI_array(16#2E#) := 16#00#;    CFI_array(16#2F#) := 16#00#;    CFI_array(16#30#) := 16#01#;    CFI_array(16#31#) := 16#00#;    CFI_array(16#32#) := 16#00#;    CFI_array(16#33#) := 16#00#;    CFI_array(16#34#) := 16#00#;    CFI_array(16#35#) := 16#00#;    CFI_array(16#36#) := 16#00#;    CFI_array(16#37#) := 16#00#;    CFI_array(16#38#) := 16#00#;    CFI_array(16#39#) := 16#00#;    CFI_array(16#3A#) := 16#00#;    CFI_array(16#3B#) := 16#00#;    CFI_array(16#3C#) := 16#00#;    --primary vendor-specific extended query    CFI_array(16#40#) := 16#50#;    CFI_array(16#41#) := 16#52#;    CFI_array(16#42#) := 16#49#;    CFI_array(16#43#) := 16#31#;    CFI_array(16#44#) := 16#33#;    CFI_array(16#45#) := 16#08#;    CFI_array(16#46#) := 16#02#;    CFI_array(16#47#) := 16#01#;    CFI_array(16#48#) := 16#01#;    CFI_array(16#49#) := 16#04#;    CFI_array(16#4A#) := 16#00#;    CFI_array(16#4B#) := 16#00#;    CFI_array(16#4C#) := 16#01#;    CFI_array(16#4D#) := 16#B5#;    CFI_array(16#4E#) := 16#C5#;    IF TimingModel(11) = 'L' THEN        CFI_array(16#4F#) := 16#04#;    ELSE        CFI_array(16#4F#) := 16#05#; --uniform sectors top protect    END IF;    CFI_array(16#50#) := 16#01#;    WAIT;END PROCESS default;END vhdl_behavioral;

⌨️ 快捷键说明

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