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

📄 std8980.vhd

📁 TDS510USB2.0接口DSP仿真器.rar
💻 VHD
📖 第 1 页 / 共 4 页
字号:
                        tdiincnt  := 0;                        tdioutcnt := 0;                        tdibitcnt := 0;                        tdoincnt  := 0;                        tdooutcnt := 0;                        tdobitcnt := 0;                        TDOS := '0';                        TDIS := '0';                        OP_done := false;                    END IF;                ELSIF addr = 7 AND MODE = "010" THEN                    Reg(addr) := DataIn;                    TCKint := '0';                ELSE                    Reg(addr) := DataIn;                END IF;            ELSE                        -- error                ASSERT false                    REPORT "Attempted access when not RDY"                    SEVERITY ERROR;            END IF;        END IF;        -- TCK control        IF CDIV = 0 AND clkrun THEN            TCKint := to_UX01(CLKIN);        ELSIF rising_edge(CLKIN) AND clkrun THEN            IF CDIV /= prev_CDIV THEN                tck_div := (2**CDIV)/2;                prev_CDIV := CDIV;            END IF;            tck_cnt := tck_cnt + 1;            IF tck_cnt >= tck_div THEN                TCKint := not TCKint;                tck_cnt := 0;            END IF;        END IF;        -- TAP State Machine        IF rising_edge(TCKsig) AND                OPCOD /= 0 AND MODE /= "010" THEN            CASE TAP_state IS                WHEN Test_Logic_Reset =>                    IF OPCOD = 3 THEN                        prev_state := Test_Logic_Reset;                        TAP_state := ASP_in;                        TDI_on := true;                    ELSIF OPCOD = 4 THEN                        prev_state := Test_Logic_Reset;                        TAP_state := ASP;                        TDI_on := true;                    ELSIF OPCOD = 5 THEN                        prev_state := Test_Logic_Reset;                        TAP_state := ASP_out;                    ELSE                        TMSint := '0';                        TAP_state := Run_Test_Idle;                    END IF;                WHEN Run_Test_Idle =>                    TDI_on := false;                    IF OPCOD = 2 THEN                        IF Count = 0 THEN                            OP_done := true;                            IF ENDST = "01" THEN                                command(3 downto 0) := "0000";                                RDYint := '1';                            ELSE                                TMSint := '1';                                TAP_state := Select_DR_Scan;                            END IF;                        ELSE                            Count := Count - 1;                        END IF;                    ELSIF OP_done AND ENDST = "01" THEN                        command(3 downto 0) := "0000";                        RDYint := '1';                    ELSIF OPCOD = 3 THEN                        prev_state := Run_Test_Idle;                        TAP_state := ASP_in;                        TDI_on := true;                    ELSIF OPCOD = 4 THEN                        prev_state := Run_Test_Idle;                        TAP_state := ASP;                        TDI_on := true;                    ELSIF OPCOD = 5 THEN                        prev_state := Run_Test_Idle;                        TAP_state := ASP_out;                    ELSE                        TMSint := '1';                        TAP_state := Select_DR_Scan;                    END IF;                WHEN Select_DR_Scan =>                    IF OP_done THEN                        IF ENDST = "00" OR ENDST = "11" THEN                            TMSint := '1';                            TAP_state := Select_IR_Scan;                        ELSE                            TMSint := '0';                            TAP_state := Capture_DR;                        END IF;                    ELSE                        IF OPCOD = 2 OR OPCOD = 8 OR OPCOD = 10 OR OPCOD = 12 OR                               OPCOD = 14 THEN                            TMSint := '1';                            TAP_state := Select_IR_Scan;                        ELSE                            TMSint := '0';                            TAP_state := Capture_DR;                        END IF;                    END IF;                WHEN Capture_DR =>                    IF OPCOD = 2 AND ENDST = "10" THEN                        TMSint := '1';                        TAP_state := Exit1_DR;                    ELSE                        TMSint := '0';                        TAP_state := Shift_DR;                        IF OPCOD = 9 THEN                            TDOint := TDO_fifo(tdooutcnt)(tdobitcnt);                                tdobitcnt := tdobitcnt + 1;                            TDI_on := true;                        ELSIF OPCOD = 11 THEN                            TDI_on := true;                            TDOint := '1';                        ELSIF OPCOD = 13 THEN                            TDOint := TDO_fifo(tdooutcnt)(tdobitcnt);                                tdobitcnt := tdobitcnt + 1;                            TDI_on := false;                        ELSIF OPCOD = 15 THEN                            TDI_on := true;                            TDOint := TDI_nwv;                        END IF;                    END IF;                WHEN Shift_DR =>                    IF Count = 0 THEN                        TMSint := '1';                        TAP_state := Exit1_DR;                        OP_done := true;                        TDI_on := false;                        TDOint := 'Z';                    ELSE                        Count := Count - 1;                        IF OPCOD = 9 OR OPCOD = 13 THEN                            IF OPCOD = 9 THEN                                TDI_on := true;                            END IF;                            TDOint := TDO_fifo(tdooutcnt)(tdobitcnt);                            IF tdobitcnt = 7 THEN                                TDOS := '0';                                tdobitcnt := 0;                                IF tdooutcnt = tdoincnt - 1 OR (tdooutcnt = 3 AND                                          tdoincnt = 0) THEN                                    IF MODE = "000" THEN                                        TAP_state := Exit1_DR;                                        TDO_empty := true;                                    ELSE                                        clkrun := false;                                    END IF;                                ELSE                                    IF tdooutcnt = 3 THEN                                        tdooutcnt := 0;                                    ELSE                                        tdooutcnt := tdooutcnt + 1;                                    END IF;                                END IF;                            ELSE                                tdobitcnt := tdobitcnt + 1;                            END IF;                        ELSIF OPCOD = 11 THEN                            TDI_on := true;                            TDOint := '1';                        END IF;                    END IF;                WHEN Exit1_DR =>                    IF OP_done AND ENDST = "10" THEN                        TMSint := '0';                        TAP_state := Pause_DR;                        command(3 downto 0) := "0000";                        RDYint := '1';                    ELSE                        TMSint := '1';                        TAP_state := Update_DR;                    END IF;                WHEN Pause_DR =>                    IF OPCOD = 3 THEN                        prev_state := Pause_DR;                        TAP_state := ASP_in;                        TDI_on := true;                    ELSIF OPCOD = 4 THEN                        prev_state := Pause_DR;                        TAP_state := ASP;                        TDI_on := true;                    ELSIF OPCOD = 5 THEN                        prev_state := Pause_DR;                        TAP_state := ASP_out;                    ELSIF OPCOD /= 0 AND not TDO_empty THEN                        TMSint := '1';                        TAP_state := Exit2_DR;                    ELSE                        TMSint := '0';                    END IF;                WHEN Exit2_DR =>                    IF OPCOD = 9 OR OPCOD = 11 OR OPCOD = 13 OR OPCOD = 15 THEN                        TMSint := '0';                        TAP_state := Shift_DR;                        TDI_on := true;                    ELSE                        TMSint := '1';                        TAP_state := Update_DR;                    END IF;                WHEN Update_DR =>                    IF OPCOD = 2 THEN                        TMSint := '0';                        TAP_state := Run_Test_Idle;                    ELSIF ENDST = "01" THEN                        TMSint := '0';                        TAP_state := Run_Test_Idle;                        command(3 downto 0) := "0000";                        RDYint := '1';                    ELSE                        TMSint := '1';                        TAP_state := Select_DR_Scan;                    END IF;                WHEN Select_IR_Scan =>                    IF OP_done AND ENDST = "00" THEN                        TMSint := '1';                        TAP_state := Test_Logic_Reset;                        command(3 downto 0) := "0000";                        RDYint := '1';                    ELSE                        TMSint := '0';                        TAP_state := Capture_IR;                    END IF;                WHEN Capture_IR =>                    IF OPCOD = 2 AND ENDST = "11" THEN                        TMSint := '1';                        TAP_state := Exit1_IR;                    ELSE                        TMSint := '0';                        TAP_state := Shift_IR;                        IF OPCOD = 8 THEN                            TDOint := TDO_fifo(tdooutcnt)(tdobitcnt);                                tdobitcnt := tdobitcnt + 1;                            TDI_on := true;                        ELSIF OPCOD = 12 THEN                            TDOint := TDO_fifo(tdooutcnt)(tdobitcnt);                                tdobitcnt := tdobitcnt + 1;                        ELSIF OPCOD = 14 THEN                            TDOint := TDI_nwv;                        ELSIF OPCOD = 10 THEN                            TDOint := '1';                            TDI_on := true;                        END IF;                    END IF;                WHEN Shift_IR =>                    IF Count = 0 THEN                        TMSint := '1';                        TAP_state := Exit1_IR;                        OP_done := true;                        TDI_on := false;                        TDOint := 'Z';                    ELSE                        Count := Count - 1;                        IF OPCOD = 8 OR OPCOD = 12 THEN                            IF OPCOD = 8 THEN                                TDI_on := true;                            END IF;                            TDOint := TDO_fifo(tdooutcnt)(tdobitcnt);                            IF tdobitcnt = 7 THEN                                TDOS := '0';                                tdobitcnt := 0;                                IF tdooutcnt = tdoincnt - 1 OR (tdooutcnt = 3 AND                                          tdoincnt = 0) THEN                                    IF MODE = "000" THEN                                        TAP_state := Exit1_IR;                                        TDO_empty := true;                                    ELSE                                        clkrun := false;                                    END IF;                                ELSE                                    IF tdooutcnt = 3 THEN                                        tdooutcnt := 0;                                    ELSE                                        tdooutcnt := tdooutcnt + 1;                                    END IF;                                END IF;                            ELSE                                tdobitcnt := tdobitcnt + 1;                            END IF;                        ELSIF OPCOD = 10 THEN                            TDI_on := true;                            TDOint := '1';                        END IF;                    END IF;                WHEN Exit1_IR =>                    IF OP_done AND ENDST = "11" THEN                        TMSint := '0';                        TAP_state := Pause_IR;                        command(3 downto 0) := "0000";                        RDYint := '1';                    ELSE                        TMSint := '1';                        TAP_state := Update_IR;                    END IF;                WHEN Pause_IR =>                    IF OPCOD = 3 THEN                        prev_state := Pause_IR;                        TAP_state := ASP_in;                        TDI_on := true;                    ELSIF OPCOD = 4 THEN                        prev_state := Pause_IR;                        TAP_state := ASP;                        TDI_on := true;                    ELSIF OPCOD = 5 THEN                        prev_state := Pause_IR;                        TAP_state := ASP_out;                    ELSIF OPCOD /= 0 THEN                        TMSint := '1';                        TAP_state := Exit2_IR;                    END IF;                WHEN Exit2_IR =>                    IF OPCOD = 8 OR OPCOD = 10 OR OPCOD = 12 OR OPCOD = 14 THEN                        TMSint := '0';                        TAP_state := Shift_IR;                        TDI_on := true;                    ELSE                        TMSint := '1';                        TAP_state := Update_IR;                    END IF;                WHEN Update_IR =>                    IF OPCOD = 2 OR (OP_done AND ENDST = "01") THEN                        TMSint := '0';                        TAP_state := Run_Test_Idle;                    ELSE                        TMSint := '1';                        TAP_state := Select_DR_Scan;                    END IF;                WHEN ASP =>                    IF Count = 0 THEN                        TAP_state := prev_state;                        OP_done := true;                        TDI_on := false;                        TDOint := 'Z';                        command(3 downto 0) := "0000";                        RDYint := '1';                    ELSE                        Count := Count - 1;                        TDOint := TDO_fifo(tdooutcnt)(tdobitcnt);                        IF tdobitcnt = 7 THEN                            TDOS := '0';                            tdobitcnt := 0;

⌨️ 快捷键说明

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