📄 i2c_drive_ms_pkg.vhd
字号:
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 + -