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

📄 xc18v04.vhd

📁 vhdl cod for ram.For sp3e
💻 VHD
📖 第 1 页 / 共 4 页
字号:
                                    BYTmp := TDI;                                    Shift := true;                                WHEN idcode =>                                    TDOTmp := IDTmp(0);                                    FOR I IN 0 TO 30 LOOP                                        IDTmp(i) := IDTmp(i+1);                                    END LOOP;                                    IDTmp(31) := TDI;                                    Shift := true;                                WHEN usercode =>                                    TDOTmp := USETmp(0);                                    FOR I IN 0 TO 30 LOOP                                        USETmp(i) := USETmp(i+1);                                    END LOOP;                                    USETmp(31) := TDI;                                    Shift := true;                                WHEN faddr      =>                                    TDOTmp := AddrTmp(0);                                    FOR I IN 0 TO 14 LOOP                                        AddrTmp(i) := AddrTmp(i+1);                                    END LOOP;                                    AddrTmp(15) := TDI;                                    Shift := true;                                WHEN fdata0     =>                                    TDOTmp := Data0Tmp(0);                                    FOR I IN 0 TO 4094 LOOP                                        Data0Tmp(i) := Data0Tmp(i+1);                                    END LOOP;                                    Data0Tmp(4095) := TDI;                                    Shift := true;                                WHEN fdata3     =>                                    TDOTmp := ConfTmp(0);                                    FOR I IN 0 TO 1 LOOP                                        ConfTmp(i) := ConfTmp(i+1);                                    END LOOP;                                    ConfTmp(2) := TDI;                                    Shift := true;                                WHEN others =>                                    NULL;                            END CASE;                        END IF;                    WHEN Shift_DR =>                        IF TMS = '1' THEN                            TAP_state := Exit1_DR;                            Shift := false;                        ELSE                            TAP_state := Shift_DR;                            CASE Instruct IS                                WHEN bypass =>                                    TDOTmp := BYTmp;                                    BYTmp  := TDI;                                    Shift  := true;                                WHEN sample_preload =>                                    TDOTmp := BSTmp(24);                                    FOR I IN 24 DOWNTO 1 LOOP                                        BSTmp(i) := BSTmp(i-1);                                    END LOOP;                                    BSTmp(0) := TDI;                                    Shift := true;                                WHEN extest =>                                    TDOTmp := BSTmp(24);                                    FOR I IN 24 DOWNTO 1 LOOP                                        BSTmp(i) := BSTmp(i-1);                                    END LOOP;                                    BSTmp(0) := TDI;                                    Shift := true;                                WHEN clamp =>                                    TDOTmp := BYTmp;                                    BYTmp := TDI;                                    Shift := true;                                WHEN highz =>                                    TDOTmp := BYTmp;                                    BYTmp := TDI;                                    Shift := true;                                WHEN idcode =>                                    TDOTmp := IDTmp(0);                                    FOR I IN 0 TO 30 LOOP                                        IDTmp(i) := IDTmp(i+1);                                    END LOOP;                                    IDTmp(31) := TDI;                                    Shift := true;                                WHEN usercode =>                                    TDOTmp := USETmp(0);                                    FOR I IN 0 TO 30 LOOP                                        USETmp(i) := USETmp(i+1);                                    END LOOP;                                    USETmp(31) := TDI;                                    Shift := true;                                WHEN faddr      =>                                    TDOTmp := AddrTmp(0);                                    FOR I IN 0 TO 14 LOOP                                        AddrTmp(i) := AddrTmp(i+1);                                    END LOOP;                                    AddrTmp(15) := TDI;                                    Shift := true;                                WHEN fdata0     =>                                    TDOTmp := Data0Tmp(0);                                    FOR I IN 0 TO 4094 LOOP                                        Data0Tmp(i) := Data0Tmp(i+1);                                    END LOOP;                                    Data0Tmp(4095) := TDI;                                    Shift := true;                                WHEN fdata3     =>                                    TDOTmp := ConfTmp(0);                                    FOR I IN 0 TO 1 LOOP                                        ConfTmp(i) := ConfTmp(i+1);                                    END LOOP;                                    ConfTmp(2) := TDI;                                    Shift := true;                                WHEN others =>                                    NULL;                            END CASE;                        END IF;                    WHEN Exit1_DR =>                        IF TMS = '1' THEN                            TAP_state := Update_DR;                            UpdateDR := true;                        ELSE                            TAP_state := Pause_DR;                        END IF;                    WHEN Pause_DR =>                        IF TMS = '1' THEN                            TAP_state := Exit2_DR;                        ELSE                            TAP_state := Pause_DR;                        END IF;                    WHEN Exit2_DR =>                        IF TMS = '1' THEN                            TAP_state := Update_DR;                            UpdateDR  := true;                        ELSE                            TAP_state := Shift_DR;                            Shift     := false;                        END IF;                    WHEN Update_DR =>                        IF TMS = '1' THEN                            TAP_state := Select_DR_Scan;                        ELSE                            TAP_state := Run_Test_Idle;                        END IF;                    WHEN Select_IR_Scan =>                        IF TMS = '1' THEN                            TAP_state := Test_Logic_Reset;                            IReg := "11111110";                            IDReg := to_slv(DeviceID,32);                            Instruct <= idcode;                        ELSE                            TAP_state := Capture_IR;                            IF ISP AND ReadProt THEN                                ITmp := "00011001";                            ELSIF ISP AND NOT ReadProt THEN                                ITmp := "00010001";                            ELSE                                ITmp := "00000001";                            END IF;                            TDO_zd   <= 'Z';                        END IF;                    WHEN Capture_IR =>                        IF TMS = '1' THEN                            TAP_state := Exit1_IR;                            Shift := false;                        ELSE                            TAP_state := Shift_IR;                            TDOTmp := ITmp(0);                            FOR I IN 0 TO 6 LOOP                                ITmp(i) := ITmp(i+1);                            END LOOP;                            ITmp(7) := TDI;                            Shift := true;                        END IF;                    WHEN Shift_IR =>                        IF TMS = '1' THEN                            TAP_state := Exit1_IR;                            Shift := false;                        ELSE                            TAP_state := Shift_IR;                            TDOTmp := ITmp(0);                            FOR I IN 0 TO 6 LOOP                                ITmp(i) := ITmp(i+1);                            END LOOP;                            ITmp(7) := TDI;                            Shift := true;                        END IF;                    WHEN Exit1_IR =>                        IF TMS = '1' THEN                            TAP_state := Update_IR;                            UpdateIR := true;                        ELSE                            TAP_state := Pause_IR;                        END IF;                    WHEN Pause_IR =>                        IF TMS = '1' THEN                            TAP_state := Exit2_IR;                        ELSE                            TAP_state := Pause_IR;                        END IF;                    WHEN Exit2_IR =>                        IF TMS = '1' THEN                            TAP_state := Update_IR;                            UpdateIR := true;                        ELSE                            TAP_state := Shift_IR;                            Shift := false;                        END IF;                    WHEN Update_IR =>                        IF TMS = '1' THEN                            TAP_state := Select_DR_Scan;                        ELSE                            TAP_state := Run_Test_Idle;                        END IF;                END CASE;            END IF;            IF falling_edge(TCK) THEN                IF Shift = true THEN                    TDO_zd <= TDOTmp;                ELSIF UpdateIR = true THEN                    TDO_zd   <= 'Z';                    IReg:= ITmp;                    CASE IReg IS                        WHEN "11111111" =>                            Instruct <= bypass;                            BYPSS <= '1';                        WHEN "00000001" =>                            Instruct <= sample_preload;                            BYPSS <= '0';                        WHEN "00000000" =>                            Instruct <= extest;                            BYPSS <= '0';                        WHEN "11111010" =>                            Instruct <= clamp;                            BYPSS <= '0';                        WHEN "11111100" =>                            Instruct <= highz;                            BYPSS <= '0';                        WHEN "11111110" =>                            Instruct <= idcode;                            BYPSS <= '0';                            IDReg := to_slv(DeviceID,32);                        WHEN "11111101" =>                            Instruct <= usercode;                            BYPSS <= '0';                        WHEN "11101110" =>                            Instruct <= config;                            BSReg(21) <= '0', '1' AFTER 400 ns;                            BYPSS <= '0';                        WHEN "11101000" =>                            Instruct <= ispen;                            ISP <= TRUE;                            BYPSS <= '0';                        WHEN "11101100" =>                            Instruct <= ferase;                            ConfReg <= (OTHERS => '1');                            BYPSS <= '0';                        WHEN "11101010" =>                            Instruct <= fpgm;                            BYPSS <= '0';                        WHEN "11101001" =>                            Instruct <= ispex;                            ISP <= FALSE;                            BYPSS <= '0';                        WHEN "11101011" =>                            Instruct <= faddr;                            BYPSS <= '0';                        WHEN "11101101" =>                            Instruct <= fdata0;                            BYPSS <= '0';                        WHEN "11110011" =>                            Instruct <= fdata3;                            BYPSS <= '0';                        WHEN others =>                            NULL;                    END CASE;                    UpdateIR := false;                ELSIF UpdateDR = true THEN                    TDO_zd   <= 'Z';                    UpdateDR := false;                    CASE Instruct IS                        WHEN bypass =>                            BYReg := BYTmp;                        WHEN sample_preload =>                            BSReg <= BSTmp;                        WHEN extest =>                            BSReg <= BSTmp;                        WHEN clamp =>                            BYReg   := BYTmp;                        WHEN highz =>                            BYReg   := BYTmp;                        WHEN idcode =>                            IDReg   := IDTmp;                        WHEN usercode =>                            USEReg1 := USETmp(15 downto 0);                            USEReg2 := USETmp(31 downto 16);                        WHEN faddr      =>                            AddrReg     := to_nat(AddrTmp);                            Address     <= AddrReg;                            change_addr <= '1','0' AFTER 1 ns;                        WHEN fdata0     =>                            Data0Reg := Data0Tmp;                            FOR I IN 0 TO RowSize LOOP                                FOR J IN 7 DOWNTO 0 LOOP                                    Byte_slv(j) :=                                    Data0Reg((i*8) + (7-j));                                END LOOP;                                WByte(i) <= to_nat(Byte_slv);                            END LOOP;                        WHEN fdata3     =>                            ConfReg  <= ConfTmp;                        WHEN others =>                            NULL;                    END CASE;                ELSE                    TDO_zd   <= 'Z';                END IF;            END IF;        END PROCESS JTAG;    ----------------------------------------------------------------------------    -- sequential process for FSM state transition    ----------------------------------------------------------------------------        StateTransition : PROCESS(next_state)        BEGIN            IF RESETIn = '0' THEN                    current_state <= next_state;            ELSE                    current_state <= IDLE;            END IF;        END PROCESS StateTransition;    ---------------------------------------------------------------------------    -- Timing control for Program All Addresses    ---------------------------------------------------------------------------        ProgTime : PROCESS(PSTART)        BEGIN            IF PSTART = '0' THEN                PDONE <= '0';            ELSE                IF LongTiming THEN                    PDONE <= '1' AFTER (tdevice_ISP - 1 ns);                ELSE                    PDONE <= '1' AFTER (tdevice_ISP/1000 - 1 ns);                END IF;            END IF;        END PROCESS ProgTime;    ---------------------------------------------------------------------------    -- Timing control for the Erase    ---------------------------------------------------------------------------        ErsTime : PROCESS(ESTART)        BEGIN

⌨️ 快捷键说明

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