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

📄 i2c_drive_ms_pkg.vhd

📁 Vhdl cod for a bus.For sp2e
💻 VHD
📖 第 1 页 / 共 4 页
字号:
                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        command_seq(3) :=(dev0     ,write    ,2#1010_1110#,0,0 ns);                        -- restart for read to another slave                        command_seq(4) :=(dev0     ,req_bus  ,slv1_r,0,0 ns);                        command_seq(5) :=(dev0     ,read     ,0,2,0 ns);                        command_seq(6) :=(all_dev  ,idle     ,0,0,t+500 us);                        command_seq(7) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN OTHERS => NULL;                END CASE;            WHEN 13  =>-- COMBINED FORMAT, first is READ, 10 bit addressing                CASE Testcase IS                    WHEN 1  =>                        -- bus is free, 10 bit addressing,                        -- read from slave, restart, read form same slave                        REPORT "10 bit addressing, read from slave, restart, read from same slave";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        -- restart for read                        command_seq(3) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(4) :=(dev0     ,read     ,0,4,0 ns);                        command_seq(5) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(6) :=(dev0     ,read     ,0,4,0 ns);                        command_seq(7) :=(all_dev  ,idle     ,0,0,t+1100 us);                        command_seq(8) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN 2  =>                        -- bus is free, 10 bit addressing,                        -- read from slave, write to same slave                        REPORT "10 bit addressing, read from slave, write to same slave";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        -- restart for read                        command_seq(3) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(4) :=(dev0     ,read     ,0,3,0 ns);                        -- restart write to slave4                        command_seq(5) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(6) :=(dev0     ,write    ,slv2,0,0 ns);                        command_seq(7) :=(all_dev  ,idle     ,0,0,t+1000 us);                        command_seq(8) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN 3  =>                        -- bus is free, 10 bit addressing,                        -- read from slave, write to another slave                        REPORT "10 bit addressing, read from slave, write to another slave";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        -- restart for read                        command_seq(3) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(4) :=(dev0     ,read     ,0,4,0 ns);                        -- restart write to slave4                        command_seq(5) :=(dev0     ,req_bus  ,2#1111_0100#,0,0 ns);                        command_seq(6) :=(dev0     ,write    ,slv3,0,0 ns);                        command_seq(7) :=(all_dev  ,idle     ,0,0,t+800 us);                        command_seq(8) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN 4  =>                        -- bus is free, 10 bit addressing,                        -- read from slave                        -- repeat write request for another slave - 7 bit addressing                        REPORT "10 bit addressing, read from slave, write to another 7-bit slave";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        -- restart for read                        command_seq(3) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(4) :=(dev0     ,read     ,0,4,0 ns);                        -- restart write to slv2                        command_seq(5) :=(dev0     ,req_bus  ,slv1_w,0,0 ns);                        command_seq(6) :=(dev0     ,write    ,slv3,0,0 ns);                        command_seq(7) :=(dev0     ,write    ,2#0010_1111#,0,0 ns);                        command_seq(8) :=(all_dev  ,idle     ,0,0,t+800 us);                        command_seq(9) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN 5  =>                        -- bus is free, 10 bit addressing,                        -- read from slave                        -- repeat read request for another slave - 7 bit addressing                        REPORT "10 bit addressing, read from slave, read from another 7-bit slave";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        -- restart for read                        command_seq(3) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(4) :=(dev0     ,read     ,0,4,0 ns);                        -- restart to read from slv2                        command_seq(5) :=(dev0     ,req_bus  ,slv1_r,0,0 ns);                        command_seq(6) :=(dev0     ,read     ,0,2,0 ns);                        command_seq(7) :=(all_dev  ,idle     ,0,0,t+800 us);                        command_seq(8) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN OTHERS => null;                END CASE;            WHEN 14  =>-- COMBINED FORMAT, NEGATIVE,                CASE Testcase IS                    WHEN 1  =>                        -- bus is free, 10 bit addressing,                        -- read from slave, restart, try to read from another slave                        REPORT "Negative, 10 bit addressing, read from slave, restart, read from another slave";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        -- restart for read                        command_seq(3) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(4) :=(dev0     ,read     ,0,4,0 ns);                        command_seq(5) :=(dev0     ,req_bus  ,2#1111_0101#,0,0 ns);                        command_seq(6) :=(all_dev  ,idle     ,0,0,t+600 us);                        command_seq(7) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN 2  =>                        -- bus is free, 10 bit addressing,                        -- write to slave,restart, try to read from another slave                        REPORT "NEGATIVE, 10 bit addressing, write to slave, read from another slave";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        command_seq(3) :=(dev0     ,write    ,2#1010_1110#,0,0 ns);                        -- restart for read from not addressed slave                        command_seq(4) :=(dev0     ,req_bus  ,2#1111_0101#,0,0 ns);                        command_seq(5) :=(all_dev  ,idle     ,0,0,t+500 us);                        command_seq(6) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN OTHERS => null;                END CASE;            WHEN 15  => -- NO RESPONSE, NEGATIVE            -- initial byte only            -- no response                CASE Testcase IS                    WHEN 1  =>                        -- bus is free                        -- 10 bit addressing,                        -- master address 1111_0000, no response                        REPORT "Negative, 10 bit addressing, no response";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0000#,0,0 ns);                        command_seq(2) :=(all_dev  ,idle     ,0,0,t+300 us);                        command_seq(3) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN 2  =>                        -- bus is free                        -- 10 bit addressing,                        -- addressed slave is unabble to response                        REPORT "Negative, 10 bit addressing, slave is not enabled to response";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        command_seq(3) :=(dev2     ,idle     ,0,0,t_curr+150 us);                        command_seq(4) :=(dev2     ,dis_sl_resp     ,0,0,50 us);                        command_seq(5) :=(all_dev  ,idle     ,0,0,t+300 us);                        command_seq(6) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN 3  =>                        -- bus is free                        -- 10 bit addressing,                        -- addressed slave is unabble to response                        REPORT "Negative, 10 bit addressing, slave is not enabled to response for read";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        -- restart for read                        command_seq(3) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(4) :=(dev2     ,idle     ,0,0,t_curr+200 us);                        command_seq(5) :=(dev2     ,dis_sl_resp     ,0,0,50 us);                        command_seq(6) :=(all_dev  ,idle     ,0,0,t+300 us);                    WHEN 4  =>                        -- bus is free, invalid 10 bit addressing, r/w bit is 1                        REPORT "Negative, invalid 10 bit addressing, r/w bit is 1";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0111#,0,0 ns);                        command_seq(2) :=(all_dev  ,idle     ,0,0,t+300 us);                        command_seq(3) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN OTHERS => NULL;                END CASE;            WHEN 16  => -- START BYTE                CASE Testcase IS                    WHEN 1  =>                        REPORT "Master writes start byte, writes data to slv1";                        -- no device is allowed to ACK                        command_seq(1) :=(dev0     ,req_bus  ,start,0,0 ns);                        command_seq(2) :=(dev0     ,req_bus  ,slv1_w,0,0 ns);                        command_seq(3) :=(dev0     ,write    ,0,0,0 ns);                        command_seq(4) :=(all_dev  ,idle     ,0,0,t+300 us);                        command_seq(5) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN OTHERS => NULL;                END CASE;            WHEN 20  => -- LOSE ARBITRATION                CASE Testcase IS                    WHEN 1  =>                        REPORT "Lose arbitration ";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        command_seq(3) :=(dev0     ,write    ,slv2,0,0 ns);                        command_seq(4) :=(dev1     ,req_bus  ,gen_call,0,0 ns);                        command_seq(5) :=(dev1     ,write    ,2#1111_0000#,0,0 ns);                        command_seq(6) :=(all_dev  ,idle     ,0,0,t+300 us);                        command_seq(7) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN 2  =>                        REPORT "Lose arbitration ";                        command_seq(1) :=(dev0     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(2) :=(dev0     ,write    ,slv2,0,0 ns);                        command_seq(3) :=(dev0     ,write    ,slv2,0,0 ns);                        command_seq(4) :=(dev1     ,req_bus  ,2#1111_0110#,0,0 ns);                        command_seq(5) :=(dev1     ,write    ,2#1111_0000#,0,0 ns);                        command_seq(6) :=(all_dev  ,idle     ,0,0,t+300 us);                        command_seq(7) :=(all_dev  ,done     ,0,0,0 ns);                    WHEN OTHERS => NULL;                END CASE;            WHEN OTHERS => null;        END CASE;        IF device_id = dev0 THEN            REPORT "------------------------------------------------------";        END IF;    END PROCEDURE Generate_TC;END PACKAGE BODY i2c_drive_ms_pkg;

⌨️ 快捷键说明

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