-- -- **************************************************************************** -- -- -- Copyright @ 1999 -- -- -- -- Tetraedre SARL, chenes 19, 2072 Saint-Blaise, Switzerland -- -- -- -- **************************************************************************** -- -- -- Filename : tctf64_bench.vhd -- -- -- -- **************************************************************************** -- -- -- WARNING: This file is the property of Tetraedre SARL, Switzerland. This -- -- file is protected by a copyright. The reading, copying, compilation, -- -- synthesis and other use of this file is forbidden without a written -- -- agreement signed by Tetraedre SARL, Switzerland. -- -- -- -- IN NO EVENT SHALL TETRAEDRE SARL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER-- -- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- -- FROM, OUT OF OR IN CONNECTION WITH THIS DESCRIPTION OR THE USE OF IT. -- -- -- -- **************************************************************************** ---------- Entity bench_tctf64 ---------- library ieee; use ieee.std_logic_1164.all; entity tctf64_bench is end; ---------- Architecture bench_tctf64 ---------- library ieee, work; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; architecture simple of tctf64_bench is signal iv : std_logic_vector(63 downto 0); signal key1 : std_logic_vector(63 downto 0); signal key2 : std_logic_vector(63 downto 0); signal key3 : std_logic_vector(63 downto 0); signal first : std_logic; signal do_next : std_logic; signal crypt : std_logic; signal clk : std_logic; signal d : std_logic_vector(63 downto 0); signal q : std_logic_vector(63 downto 0); signal done : std_logic; signal erreur : std_logic; signal nreset : std_logic; component tctf64 port ( iv : in std_logic_vector(63 downto 0); key1 : in std_logic_vector(63 downto 0); key2 : in std_logic_vector(63 downto 0); key3 : in std_logic_vector(63 downto 0); first : in std_logic; do_next : in std_logic; crypt : in std_logic; clk : in std_logic; nreset : in std_logic; d : in std_logic_vector(63 downto 0); q : out std_logic_vector(63 downto 0); done : out std_logic ); end component; begin i_tctf64 : tctf64 port map ( iv => iv, key1 => key1, key2 => key2, key3 => key3, first => first, do_next => do_next, crypt => crypt, clk => clk, nreset => nreset, d => d, q => q, done => done ); process begin nreset <= '0'; wait for 100 ns; nreset <= '1'; wait; end process; P45 : process begin clk <= '0'; wait for 500 ns; clk <= '1'; wait for 500 ns; end process; -- ******************************************************** -- **** TEST PROCEDURE **** -- ******************************************************** P46 : process procedure tctf_test(constant xdatain : in bit_vector(63 downto 0); constant xexpect : in bit_vector(63 downto 0); constant xfirst : in std_logic; constant xcrypt : in std_logic ) is variable expect : std_logic_vector(63 downto 0); begin crypt <= xcrypt; first <= xfirst; d <= to_stdlogicvector(xdatain); do_next <= '1'; wait for 1000 ns; do_next <= '0'; d <= (others=>'0'); wait on done; wait for 400 ns; expect := to_stdlogicvector(xexpect); assert q=expect report "------- !!! ERROR !!! " severity error; if (q/=expect) then erreur <= '1'; end if; wait for 50 ns; end tctf_test; -- ----------------------------------------------------------------- -- ******************************************************** -- **** TEST VECTORS **** -- ******************************************************** begin erreur <= '0'; do_next <= '0'; first <= '0'; wait for 2000 ns; --------------- ************************************** key1 <= to_stdlogicvector(X"0123456789ABCDEF"); key2 <= to_stdlogicvector(X"23456789ABCDEF01"); key3 <= to_stdlogicvector(X"456789ABCDEF0123"); iv <= to_stdlogicvector(X"1234567890ABCDEF"); tctf_test(X"4E6F772069732074",X"EE7EC75C1A101301",'1','1'); wait for 5 us; tctf_test(X"68652074696d6520",X"C4AB2F10462E5DD4",'0','1'); tctf_test(X"666F7220616C6C20",X"17400B445B5F2A72",'0','1'); tctf_test(X"EE7EC75C1A101301",X"4E6F772069732074",'1','0'); tctf_test(X"C4AB2F10462E5DD4",X"68652074696d6520",'0','0'); tctf_test(X"17400B445B5F2A72",X"666F7220616C6C20",'0','0'); --------------- ************************************** key1 <= to_stdlogicvector(X"B63ADFD042D8A232"); key2 <= to_stdlogicvector(X"71549DAE7248ECAF"); key3 <= to_stdlogicvector(X"44A19D427A54CAED"); iv <= to_stdlogicvector(X"9F76DC32BF32BD06"); tctf_test(X"45F483C0018945F4",X"2413B8DEB54C9CEB",'1','1'); tctf_test(X"837DF4087D69C745",X"1635B70075A48FD1",'0','1'); tctf_test(X"F800000000C745F0",X"10E10A5865A68F45",'0','1'); tctf_test(X"00000000EB098B4D",X"7A5C9854363C6347",'0','1'); tctf_test(X"F083C101894DF083",X"EF954A243EC7E208",'0','1'); tctf_test(X"7DF0087D318B55F8",X"2B853AA7A87DC7AF",'0','1'); tctf_test(X"D1E28955F88B45F4",X"7A60EEADEC63368F",'0','1'); tctf_test(X"8B4DF08D54C10152",X"4F12C0F2661A1DFD",'0','1'); tctf_test(X"8B450C50E8B7B3FF",X"B0D746849BF92E18",'0','1'); tctf_test(X"FF83C4080FBEC885",X"061F7D8CE06137BF",'0','1'); tctf_test(X"C974098B55F883C2",X"BB670F5D195BCAAC",'0','1'); tctf_test(X"018955F8EBC08A45",X"8CEFEC1245AD6D8E",'0','1'); tctf_test(X"F88845FC8B4D088A",X"2E00EAD1BB3B6473",'0','1'); tctf_test(X"55FC88118B450883",X"1625C40E5DC27986",'0','1'); tctf_test(X"C001894508EB888B",X"BC61B70F880747E4",'0','1'); tctf_test(X"4D08C601008BE55D",X"32C83909045BD149",'0','1'); tctf_test(X"C3558BEC8B450803",X"7C138CE2E99108F9",'0','1'); tctf_test(X"450C0FBE0083E001",X"4C84EF04BF2B6FE5",'0','1'); tctf_test(X"5DC3558BEC8B4508",X"64975697AA70DC05",'0','1'); tctf_test(X"03450CC600015DC3",X"428EB3418FFD48B3",'0','1'); tctf_test(X"558BEC8B45080345",X"3ABDD7BBA7894DE2",'0','1'); tctf_test(X"0CC600005DC3558B",X"B8169A3872D2783E",'0','1'); tctf_test(X"EC0FBE451083E001",X"6CD1663E64217F69",'0','1'); tctf_test(X"8B4D08034D0C8801",X"BCE360116EE4B048",'0','1'); tctf_test(X"5DC3558BEC5156C7",X"0494503F055BCF8F",'0','1'); tctf_test(X"45FC00000000837D",X"CF633981540F7BF8",'0','1'); tctf_test(X"FC407D418B45FC03",X"0D0AB2F55FDF0DFA",'0','1'); tctf_test(X"450C83F8407F368B",X"2F5FE360CD74723B",'0','1'); tctf_test(X"4DFC034D1483F940",X"DC23C7664EE36A4C",'0','1'); tctf_test(X"7F2B8B55FC3B5518",X"B28EE49F838D6FE7",'0','1'); tctf_test(X"7D238B45FC034514",X"1E0E0689A1771C0A",'0','1'); tctf_test(X"8B4DFC034D0C8B55",X"DFB1E807DE374DB5",'0','1'); --------------- ************************************** key1 <= to_stdlogicvector(X"232A8D240DFDA36B"); key2 <= to_stdlogicvector(X"FACE8427EAD94517"); key3 <= to_stdlogicvector(X"4D4EAA1C94D54A27"); iv <= to_stdlogicvector(X"92FB7562D3C00396"); tctf_test(X"088B75108A040688",X"C194B193E1D36B52",'1','1'); tctf_test(X"040A8B4DFC83C101",X"9B76085FD0665D62",'0','1'); tctf_test(X"894DFCEBB95E8BE5",X"AFE3FB958DC00C2B",'0','1'); tctf_test(X"5DC3558BEC51C745",X"F54D62F8B96DFECF",'0','1'); tctf_test(X"FC01000000EB098B",X"EC75FFC1E323B250",'0','1'); tctf_test(X"45FC83C0018945FC",X"DC34349D121A41F2",'0','1'); tctf_test(X"8B4DFC3B4D147F21",X"3FB9206545D96A61",'0','1'); tctf_test(X"8B55FC03551083FA",X"586C6E03964098C0",'0','1'); tctf_test(X"407D168B45FC0345",X"0EDC15023EAB590B",'0','1'); tctf_test(X"108B4D08034DFC8B",X"25C2DE8BB2F20EE8",'0','1'); tctf_test(X"550C8A04028801EB",X"9EE6EA5755A69323",'0','1'); tctf_test(X"CE8B4D10516A018B",X"9AFCDDB4AB3282A6",'0','1'); tctf_test(X"550C528B45142B45",X"0DFE8DA1FF2D39CC",'0','1'); tctf_test(X"1083C001508B4D08",X"0F9FE1C128D135A0",'0','1'); tctf_test(X"51E8BCB2FFFF83C4",X"6E66488322CE793B",'0','1'); tctf_test(X"148BE55DC3558BEC",X"0775F2868A8E582E",'0','1'); tctf_test(X"837D080A7D088B45",X"4E1742CFA4DF1B93",'0','1'); tctf_test(X"0883C030EB068B45",X"A377CA585A4C299F",'0','1'); tctf_test(X"0883C0375DC3558B",X"6DAC2347D76BAF84",'0','1'); tctf_test(X"EC510FBE450883F8",X"85205F08B2B525EF",'0','1'); tctf_test(X"397F160FBE4D0883",X"7B5D375C28B18A3B",'0','1'); tctf_test(X"F9307C0D0FBE5508",X"C4BF72CE917C0E94",'0','1'); tctf_test(X"83EA3083E20F8955",X"C476C7BB24E25832",'0','1'); tctf_test(X"FC0FBE450883F866",X"855E887E058E2BC3",'0','1'); tctf_test(X"7F160FBE4D0883F9",X"A7BFFB7E92B62DEB",'0','1'); tctf_test(X"617C0D0FBE550883",X"90B15C861C8C5C19",'0','1'); tctf_test(X"EA5783E20F8955FC",X"746513081513A440",'0','1'); tctf_test(X"0FBE450883F8467F",X"3A7CA7CB740C44FC",'0','1'); tctf_test(X"160FBE4D0883F941",X"373B0ECDECDCBB15",'0','1'); tctf_test(X"7C0D0FBE550883EA",X"91AD9050C83D0471",'0','1'); tctf_test(X"3783E20F8955FC8B",X"738114768C085458",'0','1'); tctf_test(X"45FC8BE55DC3CCCC",X"FCA03916B9AC053A",'0','1'); -- //////////////////////////// DECODE ////////////////////////// key1 <= to_stdlogicvector(X"B63ADFD042D8A232"); key2 <= to_stdlogicvector(X"71549DAE7248ECAF"); key3 <= to_stdlogicvector(X"44A19D427A54CAED"); iv <= to_stdlogicvector(X"9F76DC32BF32BD06"); tctf_test(X"2413B8DEB54C9CEB",X"45F483C0018945F4",'1','0'); tctf_test(X"1635B70075A48FD1",X"837DF4087D69C745",'0','0'); tctf_test(X"10E10A5865A68F45",X"F800000000C745F0",'0','0'); tctf_test(X"7A5C9854363C6347",X"00000000EB098B4D",'0','0'); tctf_test(X"EF954A243EC7E208",X"F083C101894DF083",'0','0'); tctf_test(X"2B853AA7A87DC7AF",X"7DF0087D318B55F8",'0','0'); tctf_test(X"7A60EEADEC63368F",X"D1E28955F88B45F4",'0','0'); tctf_test(X"4F12C0F2661A1DFD",X"8B4DF08D54C10152",'0','0'); tctf_test(X"B0D746849BF92E18",X"8B450C50E8B7B3FF",'0','0'); tctf_test(X"061F7D8CE06137BF",X"FF83C4080FBEC885",'0','0'); tctf_test(X"BB670F5D195BCAAC",X"C974098B55F883C2",'0','0'); tctf_test(X"8CEFEC1245AD6D8E",X"018955F8EBC08A45",'0','0'); tctf_test(X"2E00EAD1BB3B6473",X"F88845FC8B4D088A",'0','0'); tctf_test(X"1625C40E5DC27986",X"55FC88118B450883",'0','0'); tctf_test(X"BC61B70F880747E4",X"C001894508EB888B",'0','0'); tctf_test(X"32C83909045BD149",X"4D08C601008BE55D",'0','0'); tctf_test(X"7C138CE2E99108F9",X"C3558BEC8B450803",'0','0'); tctf_test(X"4C84EF04BF2B6FE5",X"450C0FBE0083E001",'0','0'); tctf_test(X"64975697AA70DC05",X"5DC3558BEC8B4508",'0','0'); tctf_test(X"428EB3418FFD48B3",X"03450CC600015DC3",'0','0'); tctf_test(X"3ABDD7BBA7894DE2",X"558BEC8B45080345",'0','0'); tctf_test(X"B8169A3872D2783E",X"0CC600005DC3558B",'0','0'); tctf_test(X"6CD1663E64217F69",X"EC0FBE451083E001",'0','0'); tctf_test(X"BCE360116EE4B048",X"8B4D08034D0C8801",'0','0'); tctf_test(X"0494503F055BCF8F",X"5DC3558BEC5156C7",'0','0'); tctf_test(X"CF633981540F7BF8",X"45FC00000000837D",'0','0'); tctf_test(X"0D0AB2F55FDF0DFA",X"FC407D418B45FC03",'0','0'); tctf_test(X"2F5FE360CD74723B",X"450C83F8407F368B",'0','0'); tctf_test(X"DC23C7664EE36A4C",X"4DFC034D1483F940",'0','0'); tctf_test(X"B28EE49F838D6FE7",X"7F2B8B55FC3B5518",'0','0'); tctf_test(X"1E0E0689A1771C0A",X"7D238B45FC034514",'0','0'); tctf_test(X"DFB1E807DE374DB5",X"8B4DFC034D0C8B55",'0','0'); --------------- ************************************** key1 <= to_stdlogicvector(X"232A8D240DFDA36B"); key2 <= to_stdlogicvector(X"FACE8427EAD94517"); key3 <= to_stdlogicvector(X"4D4EAA1C94D54A27"); iv <= to_stdlogicvector(X"92FB7562D3C00396"); tctf_test(X"C194B193E1D36B52",X"088B75108A040688",'1','0'); tctf_test(X"9B76085FD0665D62",X"040A8B4DFC83C101",'0','0'); tctf_test(X"AFE3FB958DC00C2B",X"894DFCEBB95E8BE5",'0','0'); tctf_test(X"F54D62F8B96DFECF",X"5DC3558BEC51C745",'0','0'); tctf_test(X"EC75FFC1E323B250",X"FC01000000EB098B",'0','0'); tctf_test(X"DC34349D121A41F2",X"45FC83C0018945FC",'0','0'); tctf_test(X"3FB9206545D96A61",X"8B4DFC3B4D147F21",'0','0'); tctf_test(X"586C6E03964098C0",X"8B55FC03551083FA",'0','0'); tctf_test(X"0EDC15023EAB590B",X"407D168B45FC0345",'0','0'); tctf_test(X"25C2DE8BB2F20EE8",X"108B4D08034DFC8B",'0','0'); tctf_test(X"9EE6EA5755A69323",X"550C8A04028801EB",'0','0'); tctf_test(X"9AFCDDB4AB3282A6",X"CE8B4D10516A018B",'0','0'); tctf_test(X"0DFE8DA1FF2D39CC",X"550C528B45142B45",'0','0'); tctf_test(X"0F9FE1C128D135A0",X"1083C001508B4D08",'0','0'); tctf_test(X"6E66488322CE793B",X"51E8BCB2FFFF83C4",'0','0'); tctf_test(X"0775F2868A8E582E",X"148BE55DC3558BEC",'0','0'); tctf_test(X"4E1742CFA4DF1B93",X"837D080A7D088B45",'0','0'); tctf_test(X"A377CA585A4C299F",X"0883C030EB068B45",'0','0'); tctf_test(X"6DAC2347D76BAF84",X"0883C0375DC3558B",'0','0'); tctf_test(X"85205F08B2B525EF",X"EC510FBE450883F8",'0','0'); tctf_test(X"7B5D375C28B18A3B",X"397F160FBE4D0883",'0','0'); tctf_test(X"C4BF72CE917C0E94",X"F9307C0D0FBE5508",'0','0'); tctf_test(X"C476C7BB24E25832",X"83EA3083E20F8955",'0','0'); tctf_test(X"855E887E058E2BC3",X"FC0FBE450883F866",'0','0'); tctf_test(X"A7BFFB7E92B62DEB",X"7F160FBE4D0883F9",'0','0'); tctf_test(X"90B15C861C8C5C19",X"617C0D0FBE550883",'0','0'); tctf_test(X"746513081513A440",X"EA5783E20F8955FC",'0','0'); tctf_test(X"3A7CA7CB740C44FC",X"0FBE450883F8467F",'0','0'); tctf_test(X"373B0ECDECDCBB15",X"160FBE4D0883F941",'0','0'); tctf_test(X"91AD9050C83D0471",X"7C0D0FBE550883EA",'0','0'); tctf_test(X"738114768C085458",X"3783E20F8955FC8B",'0','0'); tctf_test(X"FCA03916B9AC053A",X"45FC8BE55DC3CCCC",'0','0'); ASSERT erreur='0' REPORT "FINAL REPORT : TEST BENCH FAILED !!" SEVERITY error; ASSERT erreur='1' REPORT "FINAL REPORT : TEST BENCH SUCCESSFULL !" SEVERITY note; wait; end process; end simple;