OpenCores
URL https://opencores.org/ocsvn/des/des/trunk

Subversion Repositories des

[/] [des/] [trunk/] [bench/] [verilog/] [des_test_ao.v] - Rev 5

Go to most recent revision | Compare with Previous | Blame | View Log

/////////////////////////////////////////////////////////////////////
////                                                             ////
////  DES TEST BENCH                                             ////
////                                                             ////
////  Author: Rudolf Usselmann                                   ////
////          rudi@asics.ws                                      ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
////                                                             ////
//// Copyright (C) 2001 Rudolf Usselmann                         ////
////                    rudi@asics.ws                            ////
////                                                             ////
//// This source file may be used and distributed without        ////
//// restriction provided that this copyright statement is not   ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer.////
////                                                             ////
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
 
module test;
 
reg		clk;
reg	[191:0]	x[128:0];
 
reg	[191:0]	tmp;
 
reg	[3:0]	cnt;
integer		select;
integer		decrypt;
wire	[63:0]	desOut;
wire	[63:0]	des_in;
wire	[63:0]	exp_out;
wire	[55:0]	key;
 
initial
   begin
	$display("\n\n");
	$display("*********************************************************");
	$display("* Area Optimized DES core simulation started ...        *");
	$display("*********************************************************");
	$display("\n");
 
`ifdef WAVES
  	$shm_open("waves");
	$shm_probe("AS",test,"AS");
	$display("INFO: Signal dump enabled ...\n\n");
`endif
 
	clk=0;
	//           Key              Test data        Out data
	x[00]=192'h8001010101010101_0000000000000000_95A8D72813DAA94D;
	x[01]=192'h4001010101010101_0000000000000000_0EEC1487DD8C26D5;
	x[02]=192'h2001010101010101_0000000000000000_7AD16FFB79C45926;
	x[03]=192'h1001010101010101_0000000000000000_D3746294CA6A6CF3;
	x[04]=192'h0801010101010101_0000000000000000_809F5F873C1FD761;
	x[05]=192'h0401010101010101_0000000000000000_C02FAFFEC989D1FC;
	x[06]=192'h0201010101010101_0000000000000000_4615AA1D33E72F10;
	x[07]=192'h0180010101010101_0000000000000000_2055123350C00858;
	x[08]=192'h0140010101010101_0000000000000000_DF3B99D6577397C8;
	x[09]=192'h0120010101010101_0000000000000000_31FE17369B5288C9;
	x[10]=192'h0110010101010101_0000000000000000_DFDD3CC64DAE1642;
	x[11]=192'h0108010101010101_0000000000000000_178C83CE2B399D94;
	x[12]=192'h0104010101010101_0000000000000000_50F636324A9B7F80;
	x[13]=192'h0102010101010101_0000000000000000_A8468EE3BC18F06D;
	x[14]=192'h0101800101010101_0000000000000000_A2DC9E92FD3CDE92;
	x[15]=192'h0101400101010101_0000000000000000_CAC09F797D031287;
	x[16]=192'h0101200101010101_0000000000000000_90BA680B22AEB525;
	x[17]=192'h0101100101010101_0000000000000000_CE7A24F350E280B6;
	x[18]=192'h0101080101010101_0000000000000000_882BFF0AA01A0B87;
	x[19]=192'h0101040101010101_0000000000000000_25610288924511C2;
	x[20]=192'h0101020101010101_0000000000000000_C71516C29C75D170;
	x[21]=192'h0101018001010101_0000000000000000_5199C29A52C9F059;
	x[22]=192'h0101014001010101_0000000000000000_C22F0A294A71F29F;
	x[23]=192'h0101012001010101_0000000000000000_EE371483714C02EA;
	x[24]=192'h0101011001010101_0000000000000000_A81FBD448F9E522F;
	x[25]=192'h0101010801010101_0000000000000000_4F644C92E192DFED;
	x[26]=192'h0101010401010101_0000000000000000_1AFA9A66A6DF92AE;
	x[27]=192'h0101010201010101_0000000000000000_B3C1CC715CB879D8;
	x[28]=192'h0101010180010101_0000000000000000_19D032E64AB0BD8B;
	x[29]=192'h0101010140010101_0000000000000000_3CFAA7A7DC8720DC;
	x[30]=192'h0101010120010101_0000000000000000_B7265F7F447AC6F3;
	x[31]=192'h0101010110010101_0000000000000000_9DB73B3C0D163F54;
	x[32]=192'h0101010108010101_0000000000000000_8181B65BABF4A975;
	x[33]=192'h0101010104010101_0000000000000000_93C9B64042EAA240;
	x[34]=192'h0101010102010101_0000000000000000_5570530829705592;
	x[35]=192'h0101010101800101_0000000000000000_8638809E878787A0;
	x[36]=192'h0101010101400101_0000000000000000_41B9A79AF79AC208;
	x[37]=192'h0101010101200101_0000000000000000_7A9BE42F2009A892;
	x[38]=192'h0101010101100101_0000000000000000_29038D56BA6D2745;
	x[39]=192'h0101010101080101_0000000000000000_5495C6ABF1E5DF51;
	x[40]=192'h0101010101040101_0000000000000000_AE13DBD561488933;
	x[41]=192'h0101010101020101_0000000000000000_024D1FFA8904E389;
	x[42]=192'h0101010101018001_0000000000000000_D1399712F99BF02E;
	x[43]=192'h0101010101014001_0000000000000000_14C1D7C1CFFEC79E;
	x[44]=192'h0101010101012001_0000000000000000_1DE5279DAE3BED6F;
	x[45]=192'h0101010101011001_0000000000000000_E941A33F85501303;
	x[46]=192'h0101010101010801_0000000000000000_DA99DBBC9A03F379;
	x[47]=192'h0101010101010401_0000000000000000_B7FC92F91D8E92E9;
	x[48]=192'h0101010101010201_0000000000000000_AE8E5CAA3CA04E85;
	x[49]=192'h0101010101010180_0000000000000000_9CC62DF43B6EED74;
	x[50]=192'h0101010101010140_0000000000000000_D863DBB5C59A91A0;
	x[51]=192'h0101010101010120_0000000000000000_A1AB2190545B91D7;
	x[52]=192'h0101010101010110_0000000000000000_0875041E64C570F7;
	x[53]=192'h0101010101010108_0000000000000000_5A594528BEBEF1CC;
	x[54]=192'h0101010101010104_0000000000000000_FCDB3291DE21F0C0;
	x[55]=192'h0101010101010102_0000000000000000_869EFD7F9F265A09;
	x[56]=192'h0000000000000000_0000000000000000_8CA64DE9C1B123A7;
	x[57]=192'hFFFFFFFFFFFFFFFF_FFFFFFFFFFFFFFFF_7359B2163E4EDC58;
	x[58]=192'h3000000000000000_1000000000000001_958E6E627A05557B;
	x[59]=192'h1111111111111111_1111111111111111_F40379AB9E0EC533;
	x[60]=192'h0123456789ABCDEF_1111111111111111_17668DFC7292532D;
	x[61]=192'h1111111111111111_0123456789ABCDEF_8A5AE1F81AB8F2DD;
	x[62]=192'h0000000000000000_0000000000000000_8CA64DE9C1B123A7;
	x[63]=192'hFEDCBA9876543210_0123456789ABCDEF_ED39D950FA74BCC4;
	x[64]=192'h7CA110454A1A6E57_01A1D6D039776742_690F5B0D9A26939B;
	x[65]=192'h0131D9619DC1376E_5CD54CA83DEF57DA_7A389D10354BD271;
	x[66]=192'h07A1133E4A0B2686_0248D43806F67172_868EBB51CAB4599A;
	x[67]=192'h3849674C2602319E_51454B582DDF440A_7178876E01F19B2A;
	x[68]=192'h04B915BA43FEB5B6_42FD443059577FA2_AF37FB421F8C4095;
	x[69]=192'h0113B970FD34F2CE_059B5E0851CF143A_86A560F10EC6D85B;
	x[70]=192'h0170F175468FB5E6_0756D8E0774761D2_0CD3DA020021DC09;
	x[71]=192'h43297FAD38E373FE_762514B829BF486A_EA676B2CB7DB2B7A;
	x[72]=192'h07A7137045DA2A16_3BDD119049372802_DFD64A815CAF1A0F;
	x[73]=192'h04689104C2FD3B2F_26955F6835AF609A_5C513C9C4886C088;
	x[74]=192'h37D06BB516CB7546_164D5E404F275232_0A2AEEAE3FF4AB77;
	x[75]=192'h1F08260D1AC2465E_6B056E18759F5CCA_EF1BF03E5DFA575A;
	x[76]=192'h584023641ABA6176_004BD6EF09176062_88BF0DB6D70DEE56;
	x[77]=192'h025816164629B007_480D39006EE762F2_A1F9915541020B56;
	x[78]=192'h49793EBC79B3258F_437540C8698F3CFA_6FBF1CAFCFFD0556;
	x[79]=192'h4FB05E1515AB73A7_072D43A077075292_2F22E49BAB7CA1AC;
	x[80]=192'h49E95D6D4CA229BF_02FE55778117F12A_5A6B612CC26CCE4A;
	x[81]=192'h018310DC409B26D6_1D9D5C5018F728C2_5F4C038ED12B2E41;
	x[82]=192'h1C587F1C13924FEF_305532286D6F295A_63FAC0D034D9F793;
	x[83]=192'h0101010101010101_0123456789ABCDEF_617B3A0CE8F07100;
	x[84]=192'h1F1F1F1F0E0E0E0E_0123456789ABCDEF_DB958605F8C8C606;
	x[85]=192'hE0FEE0FEF1FEF1FE_0123456789ABCDEF_EDBFD1C66C29CCC7;
	x[86]=192'h0000000000000000_FFFFFFFFFFFFFFFF_355550B2150E2451;
	x[87]=192'hFFFFFFFFFFFFFFFF_0000000000000000_CAAAAF4DEAF1DBAE;
	x[88]=192'h0123456789ABCDEF_0000000000000000_D5D44FF720683D0D;
	x[89]=192'hFEDCBA9876543210_FFFFFFFFFFFFFFFF_2A2BB008DF97C2F2;
 
	decrypt = 0;
	@(posedge clk);
 
	$display("");
	$display("**************************************");
	$display("* Starting DES Test ...              *");
	$display("**************************************");
	$display("");
 
	for(decrypt=0;decrypt<2;decrypt=decrypt+1)
	begin
	if(decrypt)	$display("Running Encrypt test ...\n");
	else		$display("Running Decrypt test ...\n");
 
	for(select=0;select<90;select=select+1)
	   begin
	   	tmp=x[select];
		for(cnt=0;cnt<15;cnt=cnt+1)	@(posedge clk);
 
		#10;
		//if(desOut !== exp_out)
		if((exp_out !== desOut) | (^exp_out===1'bx) | (^desOut===1'bx)) 
 
			$display("ERROR: (%0d) Expected %x Got %x", select, exp_out, desOut);
		 //else
		   //	$display("PASS : (%0d) Expected %x Got %x", select, exp_out, desOut);
 
		@(posedge clk);
	   end
	end
 
	$display("");
	$display("**************************************");
	$display("* DES Test done ...                  *");
	$display("**************************************");
	$display("");
 
	$finish;
   end // end of innitial
 
always #100 clk=~clk;
 
assign #1 key =	{tmp[191:185],tmp[183:177],tmp[175:169],tmp[167:161],
			tmp[159:153],tmp[151:145],tmp[143:137],tmp[135:129]};
 
assign #1 des_in = decrypt ? tmp[63:0]   : tmp[127:64];
assign   exp_out = decrypt ? tmp[127:64] : tmp[63:0];
 
des u0( .clk(		clk		),
	.desOut(	desOut		),
	.desIn(		des_in		),
	.key(		key		),
	.roundSel(	cnt		),
	.decrypt(	decrypt[0]	)
	);
 
endmodule
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.