/*------------------------------------------------------------------------- Hash function Keccak File name : Keccak_onehot.v Version : Version 0.1 Created : APR/01/2010 Last update : APR/01/2010 Desgined by : Takeshi Sugawara Copyright (C) 2010 AIST/Tohoku Univ. By using this code, you agree to the following terms and conditions. This code is copyrighted by AIST/Tohoku Univ. ("us"). Permission is hereby granted to copy, reproduce, redistribute or otherwise use this code as long as: there is no monetary profit gained specifically from the use or reproduction of this code, it is not sold, rented, traded or otherwise marketed, and this copyright notice is included prominently in any copy made. We shall not be liable for any damages, including without limitation direct, indirect, incidental, special or consequential damages arising from the use of this code. When you publish any results arising from the use of this code, we will appreciate it if you can cite our webpage (http://www.rcis.aist.go.jp/special/SASEBO/index-en.html). -------------------------------------------------------------------------*/ `define lane 64 // s[ 64(5y+x)+z ] -> s[ 25*z + 5y + x ] module index_relocation_in(in, out); input [1599:0] in; output [1599:0] out; assign out = { in[1599], in[1535], in[1471], in[1407], in[1343], in[1279], in[1215], in[1151], in[1087], in[1023], in[ 959], in[ 895], in[ 831], in[ 767], in[ 703], in[ 639], in[ 575], in[ 511], in[ 447], in[ 383], in[ 319], in[ 255], in[ 191], in[ 127], in[ 63], in[1598], in[1534], in[1470], in[1406], in[1342], in[1278], in[1214], in[1150], in[1086], in[1022], in[ 958], in[ 894], in[ 830], in[ 766], in[ 702], in[ 638], in[ 574], in[ 510], in[ 446], in[ 382], in[ 318], in[ 254], in[ 190], in[ 126], in[ 62], in[1597], in[1533], in[1469], in[1405], in[1341], in[1277], in[1213], in[1149], in[1085], in[1021], in[ 957], in[ 893], in[ 829], in[ 765], in[ 701], in[ 637], in[ 573], in[ 509], in[ 445], in[ 381], in[ 317], in[ 253], in[ 189], in[ 125], in[ 61], in[1596], in[1532], in[1468], in[1404], in[1340], in[1276], in[1212], in[1148], in[1084], in[1020], in[ 956], in[ 892], in[ 828], in[ 764], in[ 700], in[ 636], in[ 572], in[ 508], in[ 444], in[ 380], in[ 316], in[ 252], in[ 188], in[ 124], in[ 60], in[1595], in[1531], in[1467], in[1403], in[1339], in[1275], in[1211], in[1147], in[1083], in[1019], in[ 955], in[ 891], in[ 827], in[ 763], in[ 699], in[ 635], in[ 571], in[ 507], in[ 443], in[ 379], in[ 315], in[ 251], in[ 187], in[ 123], in[ 59], in[1594], in[1530], in[1466], in[1402], in[1338], in[1274], in[1210], in[1146], in[1082], in[1018], in[ 954], in[ 890], in[ 826], in[ 762], in[ 698], in[ 634], in[ 570], in[ 506], in[ 442], in[ 378], in[ 314], in[ 250], in[ 186], in[ 122], in[ 58], in[1593], in[1529], in[1465], in[1401], in[1337], in[1273], in[1209], in[1145], in[1081], in[1017], in[ 953], in[ 889], in[ 825], in[ 761], in[ 697], in[ 633], in[ 569], in[ 505], in[ 441], in[ 377], in[ 313], in[ 249], in[ 185], in[ 121], in[ 57], in[1592], in[1528], in[1464], in[1400], in[1336], in[1272], in[1208], in[1144], in[1080], in[1016], in[ 952], in[ 888], in[ 824], in[ 760], in[ 696], in[ 632], in[ 568], in[ 504], in[ 440], in[ 376], in[ 312], in[ 248], in[ 184], in[ 120], in[ 56], in[1591], in[1527], in[1463], in[1399], in[1335], in[1271], in[1207], in[1143], in[1079], in[1015], in[ 951], in[ 887], in[ 823], in[ 759], in[ 695], in[ 631], in[ 567], in[ 503], in[ 439], in[ 375], in[ 311], in[ 247], in[ 183], in[ 119], in[ 55], in[1590], in[1526], in[1462], in[1398], in[1334], in[1270], in[1206], in[1142], in[1078], in[1014], in[ 950], in[ 886], in[ 822], in[ 758], in[ 694], in[ 630], in[ 566], in[ 502], in[ 438], in[ 374], in[ 310], in[ 246], in[ 182], in[ 118], in[ 54], in[1589], in[1525], in[1461], in[1397], in[1333], in[1269], in[1205], in[1141], in[1077], in[1013], in[ 949], in[ 885], in[ 821], in[ 757], in[ 693], in[ 629], in[ 565], in[ 501], in[ 437], in[ 373], in[ 309], in[ 245], in[ 181], in[ 117], in[ 53], in[1588], in[1524], in[1460], in[1396], in[1332], in[1268], in[1204], in[1140], in[1076], in[1012], in[ 948], in[ 884], in[ 820], in[ 756], in[ 692], in[ 628], in[ 564], in[ 500], in[ 436], in[ 372], in[ 308], in[ 244], in[ 180], in[ 116], in[ 52], in[1587], in[1523], in[1459], in[1395], in[1331], in[1267], in[1203], in[1139], in[1075], in[1011], in[ 947], in[ 883], in[ 819], in[ 755], in[ 691], in[ 627], in[ 563], in[ 499], in[ 435], in[ 371], in[ 307], in[ 243], in[ 179], in[ 115], in[ 51], in[1586], in[1522], in[1458], in[1394], in[1330], in[1266], in[1202], in[1138], in[1074], in[1010], in[ 946], in[ 882], in[ 818], in[ 754], in[ 690], in[ 626], in[ 562], in[ 498], in[ 434], in[ 370], in[ 306], in[ 242], in[ 178], in[ 114], in[ 50], in[1585], in[1521], in[1457], in[1393], in[1329], in[1265], in[1201], in[1137], in[1073], in[1009], in[ 945], in[ 881], in[ 817], in[ 753], in[ 689], in[ 625], in[ 561], in[ 497], in[ 433], in[ 369], in[ 305], in[ 241], in[ 177], in[ 113], in[ 49], in[1584], in[1520], in[1456], in[1392], in[1328], in[1264], in[1200], in[1136], in[1072], in[1008], in[ 944], in[ 880], in[ 816], in[ 752], in[ 688], in[ 624], in[ 560], in[ 496], in[ 432], in[ 368], in[ 304], in[ 240], in[ 176], in[ 112], in[ 48], in[1583], in[1519], in[1455], in[1391], in[1327], in[1263], in[1199], in[1135], in[1071], in[1007], in[ 943], in[ 879], in[ 815], in[ 751], in[ 687], in[ 623], in[ 559], in[ 495], in[ 431], in[ 367], in[ 303], in[ 239], in[ 175], in[ 111], in[ 47], in[1582], in[1518], in[1454], in[1390], in[1326], in[1262], in[1198], in[1134], in[1070], in[1006], in[ 942], in[ 878], in[ 814], in[ 750], in[ 686], in[ 622], in[ 558], in[ 494], in[ 430], in[ 366], in[ 302], in[ 238], in[ 174], in[ 110], in[ 46], in[1581], in[1517], in[1453], in[1389], in[1325], in[1261], in[1197], in[1133], in[1069], in[1005], in[ 941], in[ 877], in[ 813], in[ 749], in[ 685], in[ 621], in[ 557], in[ 493], in[ 429], in[ 365], in[ 301], in[ 237], in[ 173], in[ 109], in[ 45], in[1580], in[1516], in[1452], in[1388], in[1324], in[1260], in[1196], in[1132], in[1068], in[1004], in[ 940], in[ 876], in[ 812], in[ 748], in[ 684], in[ 620], in[ 556], in[ 492], in[ 428], in[ 364], in[ 300], in[ 236], in[ 172], in[ 108], in[ 44], in[1579], in[1515], in[1451], in[1387], in[1323], in[1259], in[1195], in[1131], in[1067], in[1003], in[ 939], in[ 875], in[ 811], in[ 747], in[ 683], in[ 619], in[ 555], in[ 491], in[ 427], in[ 363], in[ 299], in[ 235], in[ 171], in[ 107], in[ 43], in[1578], in[1514], in[1450], in[1386], in[1322], in[1258], in[1194], in[1130], in[1066], in[1002], in[ 938], in[ 874], in[ 810], in[ 746], in[ 682], in[ 618], in[ 554], in[ 490], in[ 426], in[ 362], in[ 298], in[ 234], in[ 170], in[ 106], in[ 42], in[1577], in[1513], in[1449], in[1385], in[1321], in[1257], in[1193], in[1129], in[1065], in[1001], in[ 937], in[ 873], in[ 809], in[ 745], in[ 681], in[ 617], in[ 553], in[ 489], in[ 425], in[ 361], in[ 297], in[ 233], in[ 169], in[ 105], in[ 41], in[1576], in[1512], in[1448], in[1384], in[1320], in[1256], in[1192], in[1128], in[1064], in[1000], in[ 936], in[ 872], in[ 808], in[ 744], in[ 680], in[ 616], in[ 552], in[ 488], in[ 424], in[ 360], in[ 296], in[ 232], in[ 168], in[ 104], in[ 40], in[1575], in[1511], in[1447], in[1383], in[1319], in[1255], in[1191], in[1127], in[1063], in[ 999], in[ 935], in[ 871], in[ 807], in[ 743], in[ 679], in[ 615], in[ 551], in[ 487], in[ 423], in[ 359], in[ 295], in[ 231], in[ 167], in[ 103], in[ 39], in[1574], in[1510], in[1446], in[1382], in[1318], in[1254], in[1190], in[1126], in[1062], in[ 998], in[ 934], in[ 870], in[ 806], in[ 742], in[ 678], in[ 614], in[ 550], in[ 486], in[ 422], in[ 358], in[ 294], in[ 230], in[ 166], in[ 102], in[ 38], in[1573], in[1509], in[1445], in[1381], in[1317], in[1253], in[1189], in[1125], in[1061], in[ 997], in[ 933], in[ 869], in[ 805], in[ 741], in[ 677], in[ 613], in[ 549], in[ 485], in[ 421], in[ 357], in[ 293], in[ 229], in[ 165], in[ 101], in[ 37], in[1572], in[1508], in[1444], in[1380], in[1316], in[1252], in[1188], in[1124], in[1060], in[ 996], in[ 932], in[ 868], in[ 804], in[ 740], in[ 676], in[ 612], in[ 548], in[ 484], in[ 420], in[ 356], in[ 292], in[ 228], in[ 164], in[ 100], in[ 36], in[1571], in[1507], in[1443], in[1379], in[1315], in[1251], in[1187], in[1123], in[1059], in[ 995], in[ 931], in[ 867], in[ 803], in[ 739], in[ 675], in[ 611], in[ 547], in[ 483], in[ 419], in[ 355], in[ 291], in[ 227], in[ 163], in[ 99], in[ 35], in[1570], in[1506], in[1442], in[1378], in[1314], in[1250], in[1186], in[1122], in[1058], in[ 994], in[ 930], in[ 866], in[ 802], in[ 738], in[ 674], in[ 610], in[ 546], in[ 482], in[ 418], in[ 354], in[ 290], in[ 226], in[ 162], in[ 98], in[ 34], in[1569], in[1505], in[1441], in[1377], in[1313], in[1249], in[1185], in[1121], in[1057], in[ 993], in[ 929], in[ 865], in[ 801], in[ 737], in[ 673], in[ 609], in[ 545], in[ 481], in[ 417], in[ 353], in[ 289], in[ 225], in[ 161], in[ 97], in[ 33], in[1568], in[1504], in[1440], in[1376], in[1312], in[1248], in[1184], in[1120], in[1056], in[ 992], in[ 928], in[ 864], in[ 800], in[ 736], in[ 672], in[ 608], in[ 544], in[ 480], in[ 416], in[ 352], in[ 288], in[ 224], in[ 160], in[ 96], in[ 32], in[1567], in[1503], in[1439], in[1375], in[1311], in[1247], in[1183], in[1119], in[1055], in[ 991], in[ 927], in[ 863], in[ 799], in[ 735], in[ 671], in[ 607], in[ 543], in[ 479], in[ 415], in[ 351], in[ 287], in[ 223], in[ 159], in[ 95], in[ 31], in[1566], in[1502], in[1438], in[1374], in[1310], in[1246], in[1182], in[1118], in[1054], in[ 990], in[ 926], in[ 862], in[ 798], in[ 734], in[ 670], in[ 606], in[ 542], in[ 478], in[ 414], in[ 350], in[ 286], in[ 222], in[ 158], in[ 94], in[ 30], in[1565], in[1501], in[1437], in[1373], in[1309], in[1245], in[1181], in[1117], in[1053], in[ 989], in[ 925], in[ 861], in[ 797], in[ 733], in[ 669], in[ 605], in[ 541], in[ 477], in[ 413], in[ 349], in[ 285], in[ 221], in[ 157], in[ 93], in[ 29], in[1564], in[1500], in[1436], in[1372], in[1308], in[1244], in[1180], in[1116], in[1052], in[ 988], in[ 924], in[ 860], in[ 796], in[ 732], in[ 668], in[ 604], in[ 540], in[ 476], in[ 412], in[ 348], in[ 284], in[ 220], in[ 156], in[ 92], in[ 28], in[1563], in[1499], in[1435], in[1371], in[1307], in[1243], in[1179], in[1115], in[1051], in[ 987], in[ 923], in[ 859], in[ 795], in[ 731], in[ 667], in[ 603], in[ 539], in[ 475], in[ 411], in[ 347], in[ 283], in[ 219], in[ 155], in[ 91], in[ 27], in[1562], in[1498], in[1434], in[1370], in[1306], in[1242], in[1178], in[1114], in[1050], in[ 986], in[ 922], in[ 858], in[ 794], in[ 730], in[ 666], in[ 602], in[ 538], in[ 474], in[ 410], in[ 346], in[ 282], in[ 218], in[ 154], in[ 90], in[ 26], in[1561], in[1497], in[1433], in[1369], in[1305], in[1241], in[1177], in[1113], in[1049], in[ 985], in[ 921], in[ 857], in[ 793], in[ 729], in[ 665], in[ 601], in[ 537], in[ 473], in[ 409], in[ 345], in[ 281], in[ 217], in[ 153], in[ 89], in[ 25], in[1560], in[1496], in[1432], in[1368], in[1304], in[1240], in[1176], in[1112], in[1048], in[ 984], in[ 920], in[ 856], in[ 792], in[ 728], in[ 664], in[ 600], in[ 536], in[ 472], in[ 408], in[ 344], in[ 280], in[ 216], in[ 152], in[ 88], in[ 24], in[1559], in[1495], in[1431], in[1367], in[1303], in[1239], in[1175], in[1111], in[1047], in[ 983], in[ 919], in[ 855], in[ 791], in[ 727], in[ 663], in[ 599], in[ 535], in[ 471], in[ 407], in[ 343], in[ 279], in[ 215], in[ 151], in[ 87], in[ 23], in[1558], in[1494], in[1430], in[1366], in[1302], in[1238], in[1174], in[1110], in[1046], in[ 982], in[ 918], in[ 854], in[ 790], in[ 726], in[ 662], in[ 598], in[ 534], in[ 470], in[ 406], in[ 342], in[ 278], in[ 214], in[ 150], in[ 86], in[ 22], in[1557], in[1493], in[1429], in[1365], in[1301], in[1237], in[1173], in[1109], in[1045], in[ 981], in[ 917], in[ 853], in[ 789], in[ 725], in[ 661], in[ 597], in[ 533], in[ 469], in[ 405], in[ 341], in[ 277], in[ 213], in[ 149], in[ 85], in[ 21], in[1556], in[1492], in[1428], in[1364], in[1300], in[1236], in[1172], in[1108], in[1044], in[ 980], in[ 916], in[ 852], in[ 788], in[ 724], in[ 660], in[ 596], in[ 532], in[ 468], in[ 404], in[ 340], in[ 276], in[ 212], in[ 148], in[ 84], in[ 20], in[1555], in[1491], in[1427], in[1363], in[1299], in[1235], in[1171], in[1107], in[1043], in[ 979], in[ 915], in[ 851], in[ 787], in[ 723], in[ 659], in[ 595], in[ 531], in[ 467], in[ 403], in[ 339], in[ 275], in[ 211], in[ 147], in[ 83], in[ 19], in[1554], in[1490], in[1426], in[1362], in[1298], in[1234], in[1170], in[1106], in[1042], in[ 978], in[ 914], in[ 850], in[ 786], in[ 722], in[ 658], in[ 594], in[ 530], in[ 466], in[ 402], in[ 338], in[ 274], in[ 210], in[ 146], in[ 82], in[ 18], in[1553], in[1489], in[1425], in[1361], in[1297], in[1233], in[1169], in[1105], in[1041], in[ 977], in[ 913], in[ 849], in[ 785], in[ 721], in[ 657], in[ 593], in[ 529], in[ 465], in[ 401], in[ 337], in[ 273], in[ 209], in[ 145], in[ 81], in[ 17], in[1552], in[1488], in[1424], in[1360], in[1296], in[1232], in[1168], in[1104], in[1040], in[ 976], in[ 912], in[ 848], in[ 784], in[ 720], in[ 656], in[ 592], in[ 528], in[ 464], in[ 400], in[ 336], in[ 272], in[ 208], in[ 144], in[ 80], in[ 16], in[1551], in[1487], in[1423], in[1359], in[1295], in[1231], in[1167], in[1103], in[1039], in[ 975], in[ 911], in[ 847], in[ 783], in[ 719], in[ 655], in[ 591], in[ 527], in[ 463], in[ 399], in[ 335], in[ 271], in[ 207], in[ 143], in[ 79], in[ 15], in[1550], in[1486], in[1422], in[1358], in[1294], in[1230], in[1166], in[1102], in[1038], in[ 974], in[ 910], in[ 846], in[ 782], in[ 718], in[ 654], in[ 590], in[ 526], in[ 462], in[ 398], in[ 334], in[ 270], in[ 206], in[ 142], in[ 78], in[ 14], in[1549], in[1485], in[1421], in[1357], in[1293], in[1229], in[1165], in[1101], in[1037], in[ 973], in[ 909], in[ 845], in[ 781], in[ 717], in[ 653], in[ 589], in[ 525], in[ 461], in[ 397], in[ 333], in[ 269], in[ 205], in[ 141], in[ 77], in[ 13], in[1548], in[1484], in[1420], in[1356], in[1292], in[1228], in[1164], in[1100], in[1036], in[ 972], in[ 908], in[ 844], in[ 780], in[ 716], in[ 652], in[ 588], in[ 524], in[ 460], in[ 396], in[ 332], in[ 268], in[ 204], in[ 140], in[ 76], in[ 12], in[1547], in[1483], in[1419], in[1355], in[1291], in[1227], in[1163], in[1099], in[1035], in[ 971], in[ 907], in[ 843], in[ 779], in[ 715], in[ 651], in[ 587], in[ 523], in[ 459], in[ 395], in[ 331], in[ 267], in[ 203], in[ 139], in[ 75], in[ 11], in[1546], in[1482], in[1418], in[1354], in[1290], in[1226], in[1162], in[1098], in[1034], in[ 970], in[ 906], in[ 842], in[ 778], in[ 714], in[ 650], in[ 586], in[ 522], in[ 458], in[ 394], in[ 330], in[ 266], in[ 202], in[ 138], in[ 74], in[ 10], in[1545], in[1481], in[1417], in[1353], in[1289], in[1225], in[1161], in[1097], in[1033], in[ 969], in[ 905], in[ 841], in[ 777], in[ 713], in[ 649], in[ 585], in[ 521], in[ 457], in[ 393], in[ 329], in[ 265], in[ 201], in[ 137], in[ 73], in[ 9], in[1544], in[1480], in[1416], in[1352], in[1288], in[1224], in[1160], in[1096], in[1032], in[ 968], in[ 904], in[ 840], in[ 776], in[ 712], in[ 648], in[ 584], in[ 520], in[ 456], in[ 392], in[ 328], in[ 264], in[ 200], in[ 136], in[ 72], in[ 8], in[1543], in[1479], in[1415], in[1351], in[1287], in[1223], in[1159], in[1095], in[1031], in[ 967], in[ 903], in[ 839], in[ 775], in[ 711], in[ 647], in[ 583], in[ 519], in[ 455], in[ 391], in[ 327], in[ 263], in[ 199], in[ 135], in[ 71], in[ 7], in[1542], in[1478], in[1414], in[1350], in[1286], in[1222], in[1158], in[1094], in[1030], in[ 966], in[ 902], in[ 838], in[ 774], in[ 710], in[ 646], in[ 582], in[ 518], in[ 454], in[ 390], in[ 326], in[ 262], in[ 198], in[ 134], in[ 70], in[ 6], in[1541], in[1477], in[1413], in[1349], in[1285], in[1221], in[1157], in[1093], in[1029], in[ 965], in[ 901], in[ 837], in[ 773], in[ 709], in[ 645], in[ 581], in[ 517], in[ 453], in[ 389], in[ 325], in[ 261], in[ 197], in[ 133], in[ 69], in[ 5], in[1540], in[1476], in[1412], in[1348], in[1284], in[1220], in[1156], in[1092], in[1028], in[ 964], in[ 900], in[ 836], in[ 772], in[ 708], in[ 644], in[ 580], in[ 516], in[ 452], in[ 388], in[ 324], in[ 260], in[ 196], in[ 132], in[ 68], in[ 4], in[1539], in[1475], in[1411], in[1347], in[1283], in[1219], in[1155], in[1091], in[1027], in[ 963], in[ 899], in[ 835], in[ 771], in[ 707], in[ 643], in[ 579], in[ 515], in[ 451], in[ 387], in[ 323], in[ 259], in[ 195], in[ 131], in[ 67], in[ 3], in[1538], in[1474], in[1410], in[1346], in[1282], in[1218], in[1154], in[1090], in[1026], in[ 962], in[ 898], in[ 834], in[ 770], in[ 706], in[ 642], in[ 578], in[ 514], in[ 450], in[ 386], in[ 322], in[ 258], in[ 194], in[ 130], in[ 66], in[ 2], in[1537], in[1473], in[1409], in[1345], in[1281], in[1217], in[1153], in[1089], in[1025], in[ 961], in[ 897], in[ 833], in[ 769], in[ 705], in[ 641], in[ 577], in[ 513], in[ 449], in[ 385], in[ 321], in[ 257], in[ 193], in[ 129], in[ 65], in[ 1], in[1536], in[1472], in[1408], in[1344], in[1280], in[1216], in[1152], in[1088], in[1024], in[ 960], in[ 896], in[ 832], in[ 768], in[ 704], in[ 640], in[ 576], in[ 512], in[ 448], in[ 384], in[ 320], in[ 256], in[ 192], in[ 128], in[ 64], in[ 0] }; endmodule // index_relocation_in // s[ 25*z + 5y + x ] -> s[ 64(5y+x)+z ] module index_relocation_out(in, out); input [1599:0] in; output [1599:0] out; assign out = { in[1599], in[1574], in[1549], in[1524], in[1499], in[1474], in[1449], in[1424], in[1399], in[1374], in[1349], in[1324], in[1299], in[1274], in[1249], in[1224], in[1199], in[1174], in[1149], in[1124], in[1099], in[1074], in[1049], in[1024], in[ 999], in[ 974], in[ 949], in[ 924], in[ 899], in[ 874], in[ 849], in[ 824], in[ 799], in[ 774], in[ 749], in[ 724], in[ 699], in[ 674], in[ 649], in[ 624], in[ 599], in[ 574], in[ 549], in[ 524], in[ 499], in[ 474], in[ 449], in[ 424], in[ 399], in[ 374], in[ 349], in[ 324], in[ 299], in[ 274], in[ 249], in[ 224], in[ 199], in[ 174], in[ 149], in[ 124], in[ 99], in[ 74], in[ 49], in[ 24], in[1598], in[1573], in[1548], in[1523], in[1498], in[1473], in[1448], in[1423], in[1398], in[1373], in[1348], in[1323], in[1298], in[1273], in[1248], in[1223], in[1198], in[1173], in[1148], in[1123], in[1098], in[1073], in[1048], in[1023], in[ 998], in[ 973], in[ 948], in[ 923], in[ 898], in[ 873], in[ 848], in[ 823], in[ 798], in[ 773], in[ 748], in[ 723], in[ 698], in[ 673], in[ 648], in[ 623], in[ 598], in[ 573], in[ 548], in[ 523], in[ 498], in[ 473], in[ 448], in[ 423], in[ 398], in[ 373], in[ 348], in[ 323], in[ 298], in[ 273], in[ 248], in[ 223], in[ 198], in[ 173], in[ 148], in[ 123], in[ 98], in[ 73], in[ 48], in[ 23], in[1597], in[1572], in[1547], in[1522], in[1497], in[1472], in[1447], in[1422], in[1397], in[1372], in[1347], in[1322], in[1297], in[1272], in[1247], in[1222], in[1197], in[1172], in[1147], in[1122], in[1097], in[1072], in[1047], in[1022], in[ 997], in[ 972], in[ 947], in[ 922], in[ 897], in[ 872], in[ 847], in[ 822], in[ 797], in[ 772], in[ 747], in[ 722], in[ 697], in[ 672], in[ 647], in[ 622], in[ 597], in[ 572], in[ 547], in[ 522], in[ 497], in[ 472], in[ 447], in[ 422], in[ 397], in[ 372], in[ 347], in[ 322], in[ 297], in[ 272], in[ 247], in[ 222], in[ 197], in[ 172], in[ 147], in[ 122], in[ 97], in[ 72], in[ 47], in[ 22], in[1596], in[1571], in[1546], in[1521], in[1496], in[1471], in[1446], in[1421], in[1396], in[1371], in[1346], in[1321], in[1296], in[1271], in[1246], in[1221], in[1196], in[1171], in[1146], in[1121], in[1096], in[1071], in[1046], in[1021], in[ 996], in[ 971], in[ 946], in[ 921], in[ 896], in[ 871], in[ 846], in[ 821], in[ 796], in[ 771], in[ 746], in[ 721], in[ 696], in[ 671], in[ 646], in[ 621], in[ 596], in[ 571], in[ 546], in[ 521], in[ 496], in[ 471], in[ 446], in[ 421], in[ 396], in[ 371], in[ 346], in[ 321], in[ 296], in[ 271], in[ 246], in[ 221], in[ 196], in[ 171], in[ 146], in[ 121], in[ 96], in[ 71], in[ 46], in[ 21], in[1595], in[1570], in[1545], in[1520], in[1495], in[1470], in[1445], in[1420], in[1395], in[1370], in[1345], in[1320], in[1295], in[1270], in[1245], in[1220], in[1195], in[1170], in[1145], in[1120], in[1095], in[1070], in[1045], in[1020], in[ 995], in[ 970], in[ 945], in[ 920], in[ 895], in[ 870], in[ 845], in[ 820], in[ 795], in[ 770], in[ 745], in[ 720], in[ 695], in[ 670], in[ 645], in[ 620], in[ 595], in[ 570], in[ 545], in[ 520], in[ 495], in[ 470], in[ 445], in[ 420], in[ 395], in[ 370], in[ 345], in[ 320], in[ 295], in[ 270], in[ 245], in[ 220], in[ 195], in[ 170], in[ 145], in[ 120], in[ 95], in[ 70], in[ 45], in[ 20], in[1594], in[1569], in[1544], in[1519], in[1494], in[1469], in[1444], in[1419], in[1394], in[1369], in[1344], in[1319], in[1294], in[1269], in[1244], in[1219], in[1194], in[1169], in[1144], in[1119], in[1094], in[1069], in[1044], in[1019], in[ 994], in[ 969], in[ 944], in[ 919], in[ 894], in[ 869], in[ 844], in[ 819], in[ 794], in[ 769], in[ 744], in[ 719], in[ 694], in[ 669], in[ 644], in[ 619], in[ 594], in[ 569], in[ 544], in[ 519], in[ 494], in[ 469], in[ 444], in[ 419], in[ 394], in[ 369], in[ 344], in[ 319], in[ 294], in[ 269], in[ 244], in[ 219], in[ 194], in[ 169], in[ 144], in[ 119], in[ 94], in[ 69], in[ 44], in[ 19], in[1593], in[1568], in[1543], in[1518], in[1493], in[1468], in[1443], in[1418], in[1393], in[1368], in[1343], in[1318], in[1293], in[1268], in[1243], in[1218], in[1193], in[1168], in[1143], in[1118], in[1093], in[1068], in[1043], in[1018], in[ 993], in[ 968], in[ 943], in[ 918], in[ 893], in[ 868], in[ 843], in[ 818], in[ 793], in[ 768], in[ 743], in[ 718], in[ 693], in[ 668], in[ 643], in[ 618], in[ 593], in[ 568], in[ 543], in[ 518], in[ 493], in[ 468], in[ 443], in[ 418], in[ 393], in[ 368], in[ 343], in[ 318], in[ 293], in[ 268], in[ 243], in[ 218], in[ 193], in[ 168], in[ 143], in[ 118], in[ 93], in[ 68], in[ 43], in[ 18], in[1592], in[1567], in[1542], in[1517], in[1492], in[1467], in[1442], in[1417], in[1392], in[1367], in[1342], in[1317], in[1292], in[1267], in[1242], in[1217], in[1192], in[1167], in[1142], in[1117], in[1092], in[1067], in[1042], in[1017], in[ 992], in[ 967], in[ 942], in[ 917], in[ 892], in[ 867], in[ 842], in[ 817], in[ 792], in[ 767], in[ 742], in[ 717], in[ 692], in[ 667], in[ 642], in[ 617], in[ 592], in[ 567], in[ 542], in[ 517], in[ 492], in[ 467], in[ 442], in[ 417], in[ 392], in[ 367], in[ 342], in[ 317], in[ 292], in[ 267], in[ 242], in[ 217], in[ 192], in[ 167], in[ 142], in[ 117], in[ 92], in[ 67], in[ 42], in[ 17], in[1591], in[1566], in[1541], in[1516], in[1491], in[1466], in[1441], in[1416], in[1391], in[1366], in[1341], in[1316], in[1291], in[1266], in[1241], in[1216], in[1191], in[1166], in[1141], in[1116], in[1091], in[1066], in[1041], in[1016], in[ 991], in[ 966], in[ 941], in[ 916], in[ 891], in[ 866], in[ 841], in[ 816], in[ 791], in[ 766], in[ 741], in[ 716], in[ 691], in[ 666], in[ 641], in[ 616], in[ 591], in[ 566], in[ 541], in[ 516], in[ 491], in[ 466], in[ 441], in[ 416], in[ 391], in[ 366], in[ 341], in[ 316], in[ 291], in[ 266], in[ 241], in[ 216], in[ 191], in[ 166], in[ 141], in[ 116], in[ 91], in[ 66], in[ 41], in[ 16], in[1590], in[1565], in[1540], in[1515], in[1490], in[1465], in[1440], in[1415], in[1390], in[1365], in[1340], in[1315], in[1290], in[1265], in[1240], in[1215], in[1190], in[1165], in[1140], in[1115], in[1090], in[1065], in[1040], in[1015], in[ 990], in[ 965], in[ 940], in[ 915], in[ 890], in[ 865], in[ 840], in[ 815], in[ 790], in[ 765], in[ 740], in[ 715], in[ 690], in[ 665], in[ 640], in[ 615], in[ 590], in[ 565], in[ 540], in[ 515], in[ 490], in[ 465], in[ 440], in[ 415], in[ 390], in[ 365], in[ 340], in[ 315], in[ 290], in[ 265], in[ 240], in[ 215], in[ 190], in[ 165], in[ 140], in[ 115], in[ 90], in[ 65], in[ 40], in[ 15], in[1589], in[1564], in[1539], in[1514], in[1489], in[1464], in[1439], in[1414], in[1389], in[1364], in[1339], in[1314], in[1289], in[1264], in[1239], in[1214], in[1189], in[1164], in[1139], in[1114], in[1089], in[1064], in[1039], in[1014], in[ 989], in[ 964], in[ 939], in[ 914], in[ 889], in[ 864], in[ 839], in[ 814], in[ 789], in[ 764], in[ 739], in[ 714], in[ 689], in[ 664], in[ 639], in[ 614], in[ 589], in[ 564], in[ 539], in[ 514], in[ 489], in[ 464], in[ 439], in[ 414], in[ 389], in[ 364], in[ 339], in[ 314], in[ 289], in[ 264], in[ 239], in[ 214], in[ 189], in[ 164], in[ 139], in[ 114], in[ 89], in[ 64], in[ 39], in[ 14], in[1588], in[1563], in[1538], in[1513], in[1488], in[1463], in[1438], in[1413], in[1388], in[1363], in[1338], in[1313], in[1288], in[1263], in[1238], in[1213], in[1188], in[1163], in[1138], in[1113], in[1088], in[1063], in[1038], in[1013], in[ 988], in[ 963], in[ 938], in[ 913], in[ 888], in[ 863], in[ 838], in[ 813], in[ 788], in[ 763], in[ 738], in[ 713], in[ 688], in[ 663], in[ 638], in[ 613], in[ 588], in[ 563], in[ 538], in[ 513], in[ 488], in[ 463], in[ 438], in[ 413], in[ 388], in[ 363], in[ 338], in[ 313], in[ 288], in[ 263], in[ 238], in[ 213], in[ 188], in[ 163], in[ 138], in[ 113], in[ 88], in[ 63], in[ 38], in[ 13], in[1587], in[1562], in[1537], in[1512], in[1487], in[1462], in[1437], in[1412], in[1387], in[1362], in[1337], in[1312], in[1287], in[1262], in[1237], in[1212], in[1187], in[1162], in[1137], in[1112], in[1087], in[1062], in[1037], in[1012], in[ 987], in[ 962], in[ 937], in[ 912], in[ 887], in[ 862], in[ 837], in[ 812], in[ 787], in[ 762], in[ 737], in[ 712], in[ 687], in[ 662], in[ 637], in[ 612], in[ 587], in[ 562], in[ 537], in[ 512], in[ 487], in[ 462], in[ 437], in[ 412], in[ 387], in[ 362], in[ 337], in[ 312], in[ 287], in[ 262], in[ 237], in[ 212], in[ 187], in[ 162], in[ 137], in[ 112], in[ 87], in[ 62], in[ 37], in[ 12], in[1586], in[1561], in[1536], in[1511], in[1486], in[1461], in[1436], in[1411], in[1386], in[1361], in[1336], in[1311], in[1286], in[1261], in[1236], in[1211], in[1186], in[1161], in[1136], in[1111], in[1086], in[1061], in[1036], in[1011], in[ 986], in[ 961], in[ 936], in[ 911], in[ 886], in[ 861], in[ 836], in[ 811], in[ 786], in[ 761], in[ 736], in[ 711], in[ 686], in[ 661], in[ 636], in[ 611], in[ 586], in[ 561], in[ 536], in[ 511], in[ 486], in[ 461], in[ 436], in[ 411], in[ 386], in[ 361], in[ 336], in[ 311], in[ 286], in[ 261], in[ 236], in[ 211], in[ 186], in[ 161], in[ 136], in[ 111], in[ 86], in[ 61], in[ 36], in[ 11], in[1585], in[1560], in[1535], in[1510], in[1485], in[1460], in[1435], in[1410], in[1385], in[1360], in[1335], in[1310], in[1285], in[1260], in[1235], in[1210], in[1185], in[1160], in[1135], in[1110], in[1085], in[1060], in[1035], in[1010], in[ 985], in[ 960], in[ 935], in[ 910], in[ 885], in[ 860], in[ 835], in[ 810], in[ 785], in[ 760], in[ 735], in[ 710], in[ 685], in[ 660], in[ 635], in[ 610], in[ 585], in[ 560], in[ 535], in[ 510], in[ 485], in[ 460], in[ 435], in[ 410], in[ 385], in[ 360], in[ 335], in[ 310], in[ 285], in[ 260], in[ 235], in[ 210], in[ 185], in[ 160], in[ 135], in[ 110], in[ 85], in[ 60], in[ 35], in[ 10], in[1584], in[1559], in[1534], in[1509], in[1484], in[1459], in[1434], in[1409], in[1384], in[1359], in[1334], in[1309], in[1284], in[1259], in[1234], in[1209], in[1184], in[1159], in[1134], in[1109], in[1084], in[1059], in[1034], in[1009], in[ 984], in[ 959], in[ 934], in[ 909], in[ 884], in[ 859], in[ 834], in[ 809], in[ 784], in[ 759], in[ 734], in[ 709], in[ 684], in[ 659], in[ 634], in[ 609], in[ 584], in[ 559], in[ 534], in[ 509], in[ 484], in[ 459], in[ 434], in[ 409], in[ 384], in[ 359], in[ 334], in[ 309], in[ 284], in[ 259], in[ 234], in[ 209], in[ 184], in[ 159], in[ 134], in[ 109], in[ 84], in[ 59], in[ 34], in[ 9], in[1583], in[1558], in[1533], in[1508], in[1483], in[1458], in[1433], in[1408], in[1383], in[1358], in[1333], in[1308], in[1283], in[1258], in[1233], in[1208], in[1183], in[1158], in[1133], in[1108], in[1083], in[1058], in[1033], in[1008], in[ 983], in[ 958], in[ 933], in[ 908], in[ 883], in[ 858], in[ 833], in[ 808], in[ 783], in[ 758], in[ 733], in[ 708], in[ 683], in[ 658], in[ 633], in[ 608], in[ 583], in[ 558], in[ 533], in[ 508], in[ 483], in[ 458], in[ 433], in[ 408], in[ 383], in[ 358], in[ 333], in[ 308], in[ 283], in[ 258], in[ 233], in[ 208], in[ 183], in[ 158], in[ 133], in[ 108], in[ 83], in[ 58], in[ 33], in[ 8], in[1582], in[1557], in[1532], in[1507], in[1482], in[1457], in[1432], in[1407], in[1382], in[1357], in[1332], in[1307], in[1282], in[1257], in[1232], in[1207], in[1182], in[1157], in[1132], in[1107], in[1082], in[1057], in[1032], in[1007], in[ 982], in[ 957], in[ 932], in[ 907], in[ 882], in[ 857], in[ 832], in[ 807], in[ 782], in[ 757], in[ 732], in[ 707], in[ 682], in[ 657], in[ 632], in[ 607], in[ 582], in[ 557], in[ 532], in[ 507], in[ 482], in[ 457], in[ 432], in[ 407], in[ 382], in[ 357], in[ 332], in[ 307], in[ 282], in[ 257], in[ 232], in[ 207], in[ 182], in[ 157], in[ 132], in[ 107], in[ 82], in[ 57], in[ 32], in[ 7], in[1581], in[1556], in[1531], in[1506], in[1481], in[1456], in[1431], in[1406], in[1381], in[1356], in[1331], in[1306], in[1281], in[1256], in[1231], in[1206], in[1181], in[1156], in[1131], in[1106], in[1081], in[1056], in[1031], in[1006], in[ 981], in[ 956], in[ 931], in[ 906], in[ 881], in[ 856], in[ 831], in[ 806], in[ 781], in[ 756], in[ 731], in[ 706], in[ 681], in[ 656], in[ 631], in[ 606], in[ 581], in[ 556], in[ 531], in[ 506], in[ 481], in[ 456], in[ 431], in[ 406], in[ 381], in[ 356], in[ 331], in[ 306], in[ 281], in[ 256], in[ 231], in[ 206], in[ 181], in[ 156], in[ 131], in[ 106], in[ 81], in[ 56], in[ 31], in[ 6], in[1580], in[1555], in[1530], in[1505], in[1480], in[1455], in[1430], in[1405], in[1380], in[1355], in[1330], in[1305], in[1280], in[1255], in[1230], in[1205], in[1180], in[1155], in[1130], in[1105], in[1080], in[1055], in[1030], in[1005], in[ 980], in[ 955], in[ 930], in[ 905], in[ 880], in[ 855], in[ 830], in[ 805], in[ 780], in[ 755], in[ 730], in[ 705], in[ 680], in[ 655], in[ 630], in[ 605], in[ 580], in[ 555], in[ 530], in[ 505], in[ 480], in[ 455], in[ 430], in[ 405], in[ 380], in[ 355], in[ 330], in[ 305], in[ 280], in[ 255], in[ 230], in[ 205], in[ 180], in[ 155], in[ 130], in[ 105], in[ 80], in[ 55], in[ 30], in[ 5], in[1579], in[1554], in[1529], in[1504], in[1479], in[1454], in[1429], in[1404], in[1379], in[1354], in[1329], in[1304], in[1279], in[1254], in[1229], in[1204], in[1179], in[1154], in[1129], in[1104], in[1079], in[1054], in[1029], in[1004], in[ 979], in[ 954], in[ 929], in[ 904], in[ 879], in[ 854], in[ 829], in[ 804], in[ 779], in[ 754], in[ 729], in[ 704], in[ 679], in[ 654], in[ 629], in[ 604], in[ 579], in[ 554], in[ 529], in[ 504], in[ 479], in[ 454], in[ 429], in[ 404], in[ 379], in[ 354], in[ 329], in[ 304], in[ 279], in[ 254], in[ 229], in[ 204], in[ 179], in[ 154], in[ 129], in[ 104], in[ 79], in[ 54], in[ 29], in[ 4], in[1578], in[1553], in[1528], in[1503], in[1478], in[1453], in[1428], in[1403], in[1378], in[1353], in[1328], in[1303], in[1278], in[1253], in[1228], in[1203], in[1178], in[1153], in[1128], in[1103], in[1078], in[1053], in[1028], in[1003], in[ 978], in[ 953], in[ 928], in[ 903], in[ 878], in[ 853], in[ 828], in[ 803], in[ 778], in[ 753], in[ 728], in[ 703], in[ 678], in[ 653], in[ 628], in[ 603], in[ 578], in[ 553], in[ 528], in[ 503], in[ 478], in[ 453], in[ 428], in[ 403], in[ 378], in[ 353], in[ 328], in[ 303], in[ 278], in[ 253], in[ 228], in[ 203], in[ 178], in[ 153], in[ 128], in[ 103], in[ 78], in[ 53], in[ 28], in[ 3], in[1577], in[1552], in[1527], in[1502], in[1477], in[1452], in[1427], in[1402], in[1377], in[1352], in[1327], in[1302], in[1277], in[1252], in[1227], in[1202], in[1177], in[1152], in[1127], in[1102], in[1077], in[1052], in[1027], in[1002], in[ 977], in[ 952], in[ 927], in[ 902], in[ 877], in[ 852], in[ 827], in[ 802], in[ 777], in[ 752], in[ 727], in[ 702], in[ 677], in[ 652], in[ 627], in[ 602], in[ 577], in[ 552], in[ 527], in[ 502], in[ 477], in[ 452], in[ 427], in[ 402], in[ 377], in[ 352], in[ 327], in[ 302], in[ 277], in[ 252], in[ 227], in[ 202], in[ 177], in[ 152], in[ 127], in[ 102], in[ 77], in[ 52], in[ 27], in[ 2], in[1576], in[1551], in[1526], in[1501], in[1476], in[1451], in[1426], in[1401], in[1376], in[1351], in[1326], in[1301], in[1276], in[1251], in[1226], in[1201], in[1176], in[1151], in[1126], in[1101], in[1076], in[1051], in[1026], in[1001], in[ 976], in[ 951], in[ 926], in[ 901], in[ 876], in[ 851], in[ 826], in[ 801], in[ 776], in[ 751], in[ 726], in[ 701], in[ 676], in[ 651], in[ 626], in[ 601], in[ 576], in[ 551], in[ 526], in[ 501], in[ 476], in[ 451], in[ 426], in[ 401], in[ 376], in[ 351], in[ 326], in[ 301], in[ 276], in[ 251], in[ 226], in[ 201], in[ 176], in[ 151], in[ 126], in[ 101], in[ 76], in[ 51], in[ 26], in[ 1], in[1575], in[1550], in[1525], in[1500], in[1475], in[1450], in[1425], in[1400], in[1375], in[1350], in[1325], in[1300], in[1275], in[1250], in[1225], in[1200], in[1175], in[1150], in[1125], in[1100], in[1075], in[1050], in[1025], in[1000], in[ 975], in[ 950], in[ 925], in[ 900], in[ 875], in[ 850], in[ 825], in[ 800], in[ 775], in[ 750], in[ 725], in[ 700], in[ 675], in[ 650], in[ 625], in[ 600], in[ 575], in[ 550], in[ 525], in[ 500], in[ 475], in[ 450], in[ 425], in[ 400], in[ 375], in[ 350], in[ 325], in[ 300], in[ 275], in[ 250], in[ 225], in[ 200], in[ 175], in[ 150], in[ 125], in[ 100], in[ 75], in[ 50], in[ 25], in[ 0] }; endmodule // index_relocation_out module chi_slice(in, out); input [24:0] in; output [24:0] out; wire [24:0] tmp; assign tmp[24:20] = in[24:20] ^ (~{in[20], in[24:21]}) & {in[21:20], in[24:22]}; assign tmp[19:15] = in[19:15] ^ (~{in[15], in[19:16]}) & {in[16:15], in[19:17]}; assign tmp[14:10] = in[14:10] ^ (~{in[10], in[14:11]}) & {in[11:10], in[14:12]}; assign tmp[ 9: 5] = in[ 9: 5] ^ (~{in[ 5], in[ 9: 6]}) & {in[ 6: 5], in[ 9: 7]}; assign tmp[ 4: 0] = in[ 4: 0] ^ (~{in[ 0], in[ 4: 1]}) & {in[ 1: 0], in[ 4: 2]}; assign out = tmp; endmodule // chi_slice module chi(in, out); input [1599:0] in; output [1599:0] out; //wire [1599:0] tmp; //genvar y; integer offset; // generate for(y=0; y<64; y=y+1) begin: chi0 // assign tmp[y*25+24:y*25] = chi_slice( in[y*25+24:y*25] ); // end // endgenerate //assign out = tmp; assign out[ 24: 0] = chi_slice( in[ 24: 0] ); assign out[ 49: 25] = chi_slice( in[ 49: 25] ); assign out[ 74: 50] = chi_slice( in[ 74: 50] ); assign out[ 99: 75] = chi_slice( in[ 99: 75] ); assign out[ 124: 100] = chi_slice( in[ 124: 100] ); assign out[ 149: 125] = chi_slice( in[ 149: 125] ); assign out[ 174: 150] = chi_slice( in[ 174: 150] ); assign out[ 199: 175] = chi_slice( in[ 199: 175] ); assign out[ 224: 200] = chi_slice( in[ 224: 200] ); assign out[ 249: 225] = chi_slice( in[ 249: 225] ); assign out[ 274: 250] = chi_slice( in[ 274: 250] ); assign out[ 299: 275] = chi_slice( in[ 299: 275] ); assign out[ 324: 300] = chi_slice( in[ 324: 300] ); assign out[ 349: 325] = chi_slice( in[ 349: 325] ); assign out[ 374: 350] = chi_slice( in[ 374: 350] ); assign out[ 399: 375] = chi_slice( in[ 399: 375] ); assign out[ 424: 400] = chi_slice( in[ 424: 400] ); assign out[ 449: 425] = chi_slice( in[ 449: 425] ); assign out[ 474: 450] = chi_slice( in[ 474: 450] ); assign out[ 499: 475] = chi_slice( in[ 499: 475] ); assign out[ 524: 500] = chi_slice( in[ 524: 500] ); assign out[ 549: 525] = chi_slice( in[ 549: 525] ); assign out[ 574: 550] = chi_slice( in[ 574: 550] ); assign out[ 599: 575] = chi_slice( in[ 599: 575] ); assign out[ 624: 600] = chi_slice( in[ 624: 600] ); assign out[ 649: 625] = chi_slice( in[ 649: 625] ); assign out[ 674: 650] = chi_slice( in[ 674: 650] ); assign out[ 699: 675] = chi_slice( in[ 699: 675] ); assign out[ 724: 700] = chi_slice( in[ 724: 700] ); assign out[ 749: 725] = chi_slice( in[ 749: 725] ); assign out[ 774: 750] = chi_slice( in[ 774: 750] ); assign out[ 799: 775] = chi_slice( in[ 799: 775] ); assign out[ 824: 800] = chi_slice( in[ 824: 800] ); assign out[ 849: 825] = chi_slice( in[ 849: 825] ); assign out[ 874: 850] = chi_slice( in[ 874: 850] ); assign out[ 899: 875] = chi_slice( in[ 899: 875] ); assign out[ 924: 900] = chi_slice( in[ 924: 900] ); assign out[ 949: 925] = chi_slice( in[ 949: 925] ); assign out[ 974: 950] = chi_slice( in[ 974: 950] ); assign out[ 999: 975] = chi_slice( in[ 999: 975] ); assign out[1024:1000] = chi_slice( in[1024:1000] ); assign out[1049:1025] = chi_slice( in[1049:1025] ); assign out[1074:1050] = chi_slice( in[1074:1050] ); assign out[1099:1075] = chi_slice( in[1099:1075] ); assign out[1124:1100] = chi_slice( in[1124:1100] ); assign out[1149:1125] = chi_slice( in[1149:1125] ); assign out[1174:1150] = chi_slice( in[1174:1150] ); assign out[1199:1175] = chi_slice( in[1199:1175] ); assign out[1224:1200] = chi_slice( in[1224:1200] ); assign out[1249:1225] = chi_slice( in[1249:1225] ); assign out[1274:1250] = chi_slice( in[1274:1250] ); assign out[1299:1275] = chi_slice( in[1299:1275] ); assign out[1324:1300] = chi_slice( in[1324:1300] ); assign out[1349:1325] = chi_slice( in[1349:1325] ); assign out[1374:1350] = chi_slice( in[1374:1350] ); assign out[1399:1375] = chi_slice( in[1399:1375] ); assign out[1424:1400] = chi_slice( in[1424:1400] ); assign out[1449:1425] = chi_slice( in[1449:1425] ); assign out[1474:1450] = chi_slice( in[1474:1450] ); assign out[1499:1475] = chi_slice( in[1499:1475] ); assign out[1524:1500] = chi_slice( in[1524:1500] ); assign out[1549:1525] = chi_slice( in[1549:1525] ); assign out[1574:1550] = chi_slice( in[1574:1550] ); assign out[1599:1575] = chi_slice( in[1599:1575] ); // ビット順 逆かも function [4:0] chi_row; input [4:0] in; begin chi_row = in ^ (~{in[0], in[4:1]}) & {in[1:0], in[4:2]}; end //assign chi_row = ~{in[3:0], in[1]}; endfunction // chi_row function [24:0] chi_slice; input [24:0] in; reg [4:0] tmp0, tmp1, tmp2, tmp3, tmp4; begin chi_slice[24:20] = chi_row( in[24:20] ); chi_slice[19:15] = chi_row( in[19:15] ); chi_slice[14:10] = chi_row( in[14:10] ); chi_slice[ 9: 5] = chi_row( in[ 9: 5] ); chi_slice[ 4: 0] = chi_row( in[ 4: 0] ); end endfunction // chi_slice //function [24:0] chi_slice; // input [24:0] in; // reg [4:0] tmp0, tmp1, tmp2, tmp3, tmp4; // begin // tmp4 = chi_row( in[24:20] ); // tmp3 = chi_row( in[19:15] ); // tmp2 = chi_row( in[14:10] ); // tmp1 = chi_row( in[ 9: 5] ); // tmp0 = chi_row( in[ 4: 0] ); // chi_slice = {tmp4, tmp3, tmp2, tmp1, tmp0}; // end //endfunction // chi_slice endmodule // chi module theta(in, out); input [1599:0] in; output [1599:0] out; genvar z; wire [5 * 64 - 1 : 0] aplane; //generate // // Press the state down to a plane // for(z=0; z<64; z=z+1) begin: asdf // assign aplane[5*z+4 : 5*z] = slice2row(in[25*z+24 : 25*z]); // end //endgenerate assign aplane[ 4: 0] = slice2row( in[ 24: 0]); assign aplane[ 9: 5] = slice2row( in[ 49: 25]); assign aplane[ 14: 10] = slice2row( in[ 74: 50]); assign aplane[ 19: 15] = slice2row( in[ 99: 75]); assign aplane[ 24: 20] = slice2row( in[ 124: 100]); assign aplane[ 29: 25] = slice2row( in[ 149: 125]); assign aplane[ 34: 30] = slice2row( in[ 174: 150]); assign aplane[ 39: 35] = slice2row( in[ 199: 175]); assign aplane[ 44: 40] = slice2row( in[ 224: 200]); assign aplane[ 49: 45] = slice2row( in[ 249: 225]); assign aplane[ 54: 50] = slice2row( in[ 274: 250]); assign aplane[ 59: 55] = slice2row( in[ 299: 275]); assign aplane[ 64: 60] = slice2row( in[ 324: 300]); assign aplane[ 69: 65] = slice2row( in[ 349: 325]); assign aplane[ 74: 70] = slice2row( in[ 374: 350]); assign aplane[ 79: 75] = slice2row( in[ 399: 375]); assign aplane[ 84: 80] = slice2row( in[ 424: 400]); assign aplane[ 89: 85] = slice2row( in[ 449: 425]); assign aplane[ 94: 90] = slice2row( in[ 474: 450]); assign aplane[ 99: 95] = slice2row( in[ 499: 475]); assign aplane[104:100] = slice2row( in[ 524: 500]); assign aplane[109:105] = slice2row( in[ 549: 525]); assign aplane[114:110] = slice2row( in[ 574: 550]); assign aplane[119:115] = slice2row( in[ 599: 575]); assign aplane[124:120] = slice2row( in[ 624: 600]); assign aplane[129:125] = slice2row( in[ 649: 625]); assign aplane[134:130] = slice2row( in[ 674: 650]); assign aplane[139:135] = slice2row( in[ 699: 675]); assign aplane[144:140] = slice2row( in[ 724: 700]); assign aplane[149:145] = slice2row( in[ 749: 725]); assign aplane[154:150] = slice2row( in[ 774: 750]); assign aplane[159:155] = slice2row( in[ 799: 775]); assign aplane[164:160] = slice2row( in[ 824: 800]); assign aplane[169:165] = slice2row( in[ 849: 825]); assign aplane[174:170] = slice2row( in[ 874: 850]); assign aplane[179:175] = slice2row( in[ 899: 875]); assign aplane[184:180] = slice2row( in[ 924: 900]); assign aplane[189:185] = slice2row( in[ 949: 925]); assign aplane[194:190] = slice2row( in[ 974: 950]); assign aplane[199:195] = slice2row( in[ 999: 975]); assign aplane[204:200] = slice2row( in[1024:1000]); assign aplane[209:205] = slice2row( in[1049:1025]); assign aplane[214:210] = slice2row( in[1074:1050]); assign aplane[219:215] = slice2row( in[1099:1075]); assign aplane[224:220] = slice2row( in[1124:1100]); assign aplane[229:225] = slice2row( in[1149:1125]); assign aplane[234:230] = slice2row( in[1174:1150]); assign aplane[239:235] = slice2row( in[1199:1175]); assign aplane[244:240] = slice2row( in[1224:1200]); assign aplane[249:245] = slice2row( in[1249:1225]); assign aplane[254:250] = slice2row( in[1274:1250]); assign aplane[259:255] = slice2row( in[1299:1275]); assign aplane[264:260] = slice2row( in[1324:1300]); assign aplane[269:265] = slice2row( in[1349:1325]); assign aplane[274:270] = slice2row( in[1374:1350]); assign aplane[279:275] = slice2row( in[1399:1375]); assign aplane[284:280] = slice2row( in[1424:1400]); assign aplane[289:285] = slice2row( in[1449:1425]); assign aplane[294:290] = slice2row( in[1474:1450]); assign aplane[299:295] = slice2row( in[1499:1475]); assign aplane[304:300] = slice2row( in[1524:1500]); assign aplane[309:305] = slice2row( in[1549:1525]); assign aplane[314:310] = slice2row( in[1574:1550]); assign aplane[319:315] = slice2row( in[1599:1575]); // Rearrange the order of aplane wire [319:0] xm_plane; assign xm_plane = { aplane[318], aplane[317], aplane[316], aplane[315], aplane[319], aplane[313], aplane[312], aplane[311], aplane[310], aplane[314], aplane[308], aplane[307], aplane[306], aplane[305], aplane[309], aplane[303], aplane[302], aplane[301], aplane[300], aplane[304], aplane[298], aplane[297], aplane[296], aplane[295], aplane[299], aplane[293], aplane[292], aplane[291], aplane[290], aplane[294], aplane[288], aplane[287], aplane[286], aplane[285], aplane[289], aplane[283], aplane[282], aplane[281], aplane[280], aplane[284], aplane[278], aplane[277], aplane[276], aplane[275], aplane[279], aplane[273], aplane[272], aplane[271], aplane[270], aplane[274], aplane[268], aplane[267], aplane[266], aplane[265], aplane[269], aplane[263], aplane[262], aplane[261], aplane[260], aplane[264], aplane[258], aplane[257], aplane[256], aplane[255], aplane[259], aplane[253], aplane[252], aplane[251], aplane[250], aplane[254], aplane[248], aplane[247], aplane[246], aplane[245], aplane[249], aplane[243], aplane[242], aplane[241], aplane[240], aplane[244], aplane[238], aplane[237], aplane[236], aplane[235], aplane[239], aplane[233], aplane[232], aplane[231], aplane[230], aplane[234], aplane[228], aplane[227], aplane[226], aplane[225], aplane[229], aplane[223], aplane[222], aplane[221], aplane[220], aplane[224], aplane[218], aplane[217], aplane[216], aplane[215], aplane[219], aplane[213], aplane[212], aplane[211], aplane[210], aplane[214], aplane[208], aplane[207], aplane[206], aplane[205], aplane[209], aplane[203], aplane[202], aplane[201], aplane[200], aplane[204], aplane[198], aplane[197], aplane[196], aplane[195], aplane[199], aplane[193], aplane[192], aplane[191], aplane[190], aplane[194], aplane[188], aplane[187], aplane[186], aplane[185], aplane[189], aplane[183], aplane[182], aplane[181], aplane[180], aplane[184], aplane[178], aplane[177], aplane[176], aplane[175], aplane[179], aplane[173], aplane[172], aplane[171], aplane[170], aplane[174], aplane[168], aplane[167], aplane[166], aplane[165], aplane[169], aplane[163], aplane[162], aplane[161], aplane[160], aplane[164], aplane[158], aplane[157], aplane[156], aplane[155], aplane[159], aplane[153], aplane[152], aplane[151], aplane[150], aplane[154], aplane[148], aplane[147], aplane[146], aplane[145], aplane[149], aplane[143], aplane[142], aplane[141], aplane[140], aplane[144], aplane[138], aplane[137], aplane[136], aplane[135], aplane[139], aplane[133], aplane[132], aplane[131], aplane[130], aplane[134], aplane[128], aplane[127], aplane[126], aplane[125], aplane[129], aplane[123], aplane[122], aplane[121], aplane[120], aplane[124], aplane[118], aplane[117], aplane[116], aplane[115], aplane[119], aplane[113], aplane[112], aplane[111], aplane[110], aplane[114], aplane[108], aplane[107], aplane[106], aplane[105], aplane[109], aplane[103], aplane[102], aplane[101], aplane[100], aplane[104], aplane[ 98], aplane[ 97], aplane[ 96], aplane[ 95], aplane[ 99], aplane[ 93], aplane[ 92], aplane[ 91], aplane[ 90], aplane[ 94], aplane[ 88], aplane[ 87], aplane[ 86], aplane[ 85], aplane[ 89], aplane[ 83], aplane[ 82], aplane[ 81], aplane[ 80], aplane[ 84], aplane[ 78], aplane[ 77], aplane[ 76], aplane[ 75], aplane[ 79], aplane[ 73], aplane[ 72], aplane[ 71], aplane[ 70], aplane[ 74], aplane[ 68], aplane[ 67], aplane[ 66], aplane[ 65], aplane[ 69], aplane[ 63], aplane[ 62], aplane[ 61], aplane[ 60], aplane[ 64], aplane[ 58], aplane[ 57], aplane[ 56], aplane[ 55], aplane[ 59], aplane[ 53], aplane[ 52], aplane[ 51], aplane[ 50], aplane[ 54], aplane[ 48], aplane[ 47], aplane[ 46], aplane[ 45], aplane[ 49], aplane[ 43], aplane[ 42], aplane[ 41], aplane[ 40], aplane[ 44], aplane[ 38], aplane[ 37], aplane[ 36], aplane[ 35], aplane[ 39], aplane[ 33], aplane[ 32], aplane[ 31], aplane[ 30], aplane[ 34], aplane[ 28], aplane[ 27], aplane[ 26], aplane[ 25], aplane[ 29], aplane[ 23], aplane[ 22], aplane[ 21], aplane[ 20], aplane[ 24], aplane[ 18], aplane[ 17], aplane[ 16], aplane[ 15], aplane[ 19], aplane[ 13], aplane[ 12], aplane[ 11], aplane[ 10], aplane[ 14], aplane[ 8], aplane[ 7], aplane[ 6], aplane[ 5], aplane[ 9], aplane[ 3], aplane[ 2], aplane[ 1], aplane[ 0], aplane[ 4] }; wire [319:0] zm_plane; assign zm_plane = { aplane[310], aplane[314], aplane[313], aplane[312], aplane[311], aplane[305], aplane[309], aplane[308], aplane[307], aplane[306], aplane[300], aplane[304], aplane[303], aplane[302], aplane[301], aplane[295], aplane[299], aplane[298], aplane[297], aplane[296], aplane[290], aplane[294], aplane[293], aplane[292], aplane[291], aplane[285], aplane[289], aplane[288], aplane[287], aplane[286], aplane[280], aplane[284], aplane[283], aplane[282], aplane[281], aplane[275], aplane[279], aplane[278], aplane[277], aplane[276], aplane[270], aplane[274], aplane[273], aplane[272], aplane[271], aplane[265], aplane[269], aplane[268], aplane[267], aplane[266], aplane[260], aplane[264], aplane[263], aplane[262], aplane[261], aplane[255], aplane[259], aplane[258], aplane[257], aplane[256], aplane[250], aplane[254], aplane[253], aplane[252], aplane[251], aplane[245], aplane[249], aplane[248], aplane[247], aplane[246], aplane[240], aplane[244], aplane[243], aplane[242], aplane[241], aplane[235], aplane[239], aplane[238], aplane[237], aplane[236], aplane[230], aplane[234], aplane[233], aplane[232], aplane[231], aplane[225], aplane[229], aplane[228], aplane[227], aplane[226], aplane[220], aplane[224], aplane[223], aplane[222], aplane[221], aplane[215], aplane[219], aplane[218], aplane[217], aplane[216], aplane[210], aplane[214], aplane[213], aplane[212], aplane[211], aplane[205], aplane[209], aplane[208], aplane[207], aplane[206], aplane[200], aplane[204], aplane[203], aplane[202], aplane[201], aplane[195], aplane[199], aplane[198], aplane[197], aplane[196], aplane[190], aplane[194], aplane[193], aplane[192], aplane[191], aplane[185], aplane[189], aplane[188], aplane[187], aplane[186], aplane[180], aplane[184], aplane[183], aplane[182], aplane[181], aplane[175], aplane[179], aplane[178], aplane[177], aplane[176], aplane[170], aplane[174], aplane[173], aplane[172], aplane[171], aplane[165], aplane[169], aplane[168], aplane[167], aplane[166], aplane[160], aplane[164], aplane[163], aplane[162], aplane[161], aplane[155], aplane[159], aplane[158], aplane[157], aplane[156], aplane[150], aplane[154], aplane[153], aplane[152], aplane[151], aplane[145], aplane[149], aplane[148], aplane[147], aplane[146], aplane[140], aplane[144], aplane[143], aplane[142], aplane[141], aplane[135], aplane[139], aplane[138], aplane[137], aplane[136], aplane[130], aplane[134], aplane[133], aplane[132], aplane[131], aplane[125], aplane[129], aplane[128], aplane[127], aplane[126], aplane[120], aplane[124], aplane[123], aplane[122], aplane[121], aplane[115], aplane[119], aplane[118], aplane[117], aplane[116], aplane[110], aplane[114], aplane[113], aplane[112], aplane[111], aplane[105], aplane[109], aplane[108], aplane[107], aplane[106], aplane[100], aplane[104], aplane[103], aplane[102], aplane[101], aplane[ 95], aplane[ 99], aplane[ 98], aplane[ 97], aplane[ 96], aplane[ 90], aplane[ 94], aplane[ 93], aplane[ 92], aplane[ 91], aplane[ 85], aplane[ 89], aplane[ 88], aplane[ 87], aplane[ 86], aplane[ 80], aplane[ 84], aplane[ 83], aplane[ 82], aplane[ 81], aplane[ 75], aplane[ 79], aplane[ 78], aplane[ 77], aplane[ 76], aplane[ 70], aplane[ 74], aplane[ 73], aplane[ 72], aplane[ 71], aplane[ 65], aplane[ 69], aplane[ 68], aplane[ 67], aplane[ 66], aplane[ 60], aplane[ 64], aplane[ 63], aplane[ 62], aplane[ 61], aplane[ 55], aplane[ 59], aplane[ 58], aplane[ 57], aplane[ 56], aplane[ 50], aplane[ 54], aplane[ 53], aplane[ 52], aplane[ 51], aplane[ 45], aplane[ 49], aplane[ 48], aplane[ 47], aplane[ 46], aplane[ 40], aplane[ 44], aplane[ 43], aplane[ 42], aplane[ 41], aplane[ 35], aplane[ 39], aplane[ 38], aplane[ 37], aplane[ 36], aplane[ 30], aplane[ 34], aplane[ 33], aplane[ 32], aplane[ 31], aplane[ 25], aplane[ 29], aplane[ 28], aplane[ 27], aplane[ 26], aplane[ 20], aplane[ 24], aplane[ 23], aplane[ 22], aplane[ 21], aplane[ 15], aplane[ 19], aplane[ 18], aplane[ 17], aplane[ 16], aplane[ 10], aplane[ 14], aplane[ 13], aplane[ 12], aplane[ 11], aplane[ 5], aplane[ 9], aplane[ 8], aplane[ 7], aplane[ 6], aplane[ 0], aplane[ 4], aplane[ 3], aplane[ 2], aplane[ 1], aplane[315], aplane[319], aplane[318], aplane[317], aplane[316] }; // Add aplane to the state, generate for(z=0; z<64; z=z+1) begin: hoge assign out[25*z+24 : 25*z+20] = in[25*z+24 : 25*z+20] ^ xm_plane[5*z+4 : 5*z] ^ zm_plane[5*z+4 : 5*z]; assign out[25*z+19 : 25*z+15] = in[25*z+19 : 25*z+15] ^ xm_plane[5*z+4 : 5*z] ^ zm_plane[5*z+4 : 5*z]; assign out[25*z+14 : 25*z+10] = in[25*z+14 : 25*z+10] ^ xm_plane[5*z+4 : 5*z] ^ zm_plane[5*z+4 : 5*z]; assign out[25*z+ 9 : 25*z+ 5] = in[25*z+ 9 : 25*z+ 5] ^ xm_plane[5*z+4 : 5*z] ^ zm_plane[5*z+4 : 5*z]; assign out[25*z+ 4 : 25*z+ 0] = in[25*z+ 4 : 25*z+ 0] ^ xm_plane[5*z+4 : 5*z] ^ zm_plane[5*z+4 : 5*z]; end endgenerate function [4:0] slice2row; input [24:0] slice; slice2row = slice[24:20] ^ slice[19:15] ^ slice[14:10] ^ slice[9:5] ^ slice[4:0]; endfunction // slice2row endmodule // theta module pi(in, out); input [1599:0] in; output [1599:0] out; //genvar zz; // generate // for(zz=0; zz < 25*64; zz=zz+25) begin: pi0 // assign out[zz+24:zz] = pi_slice(in[zz+24:zz]); // end // endgenerate assign out[ 24: 0] = pi_slice(in[ 24: 0]); assign out[ 49: 25] = pi_slice(in[ 49: 25]); assign out[ 74: 50] = pi_slice(in[ 74: 50]); assign out[ 99: 75] = pi_slice(in[ 99: 75]); assign out[ 124: 100] = pi_slice(in[ 124: 100]); assign out[ 149: 125] = pi_slice(in[ 149: 125]); assign out[ 174: 150] = pi_slice(in[ 174: 150]); assign out[ 199: 175] = pi_slice(in[ 199: 175]); assign out[ 224: 200] = pi_slice(in[ 224: 200]); assign out[ 249: 225] = pi_slice(in[ 249: 225]); assign out[ 274: 250] = pi_slice(in[ 274: 250]); assign out[ 299: 275] = pi_slice(in[ 299: 275]); assign out[ 324: 300] = pi_slice(in[ 324: 300]); assign out[ 349: 325] = pi_slice(in[ 349: 325]); assign out[ 374: 350] = pi_slice(in[ 374: 350]); assign out[ 399: 375] = pi_slice(in[ 399: 375]); assign out[ 424: 400] = pi_slice(in[ 424: 400]); assign out[ 449: 425] = pi_slice(in[ 449: 425]); assign out[ 474: 450] = pi_slice(in[ 474: 450]); assign out[ 499: 475] = pi_slice(in[ 499: 475]); assign out[ 524: 500] = pi_slice(in[ 524: 500]); assign out[ 549: 525] = pi_slice(in[ 549: 525]); assign out[ 574: 550] = pi_slice(in[ 574: 550]); assign out[ 599: 575] = pi_slice(in[ 599: 575]); assign out[ 624: 600] = pi_slice(in[ 624: 600]); assign out[ 649: 625] = pi_slice(in[ 649: 625]); assign out[ 674: 650] = pi_slice(in[ 674: 650]); assign out[ 699: 675] = pi_slice(in[ 699: 675]); assign out[ 724: 700] = pi_slice(in[ 724: 700]); assign out[ 749: 725] = pi_slice(in[ 749: 725]); assign out[ 774: 750] = pi_slice(in[ 774: 750]); assign out[ 799: 775] = pi_slice(in[ 799: 775]); assign out[ 824: 800] = pi_slice(in[ 824: 800]); assign out[ 849: 825] = pi_slice(in[ 849: 825]); assign out[ 874: 850] = pi_slice(in[ 874: 850]); assign out[ 899: 875] = pi_slice(in[ 899: 875]); assign out[ 924: 900] = pi_slice(in[ 924: 900]); assign out[ 949: 925] = pi_slice(in[ 949: 925]); assign out[ 974: 950] = pi_slice(in[ 974: 950]); assign out[ 999: 975] = pi_slice(in[ 999: 975]); assign out[1024:1000] = pi_slice(in[1024:1000]); assign out[1049:1025] = pi_slice(in[1049:1025]); assign out[1074:1050] = pi_slice(in[1074:1050]); assign out[1099:1075] = pi_slice(in[1099:1075]); assign out[1124:1100] = pi_slice(in[1124:1100]); assign out[1149:1125] = pi_slice(in[1149:1125]); assign out[1174:1150] = pi_slice(in[1174:1150]); assign out[1199:1175] = pi_slice(in[1199:1175]); assign out[1224:1200] = pi_slice(in[1224:1200]); assign out[1249:1225] = pi_slice(in[1249:1225]); assign out[1274:1250] = pi_slice(in[1274:1250]); assign out[1299:1275] = pi_slice(in[1299:1275]); assign out[1324:1300] = pi_slice(in[1324:1300]); assign out[1349:1325] = pi_slice(in[1349:1325]); assign out[1374:1350] = pi_slice(in[1374:1350]); assign out[1399:1375] = pi_slice(in[1399:1375]); assign out[1424:1400] = pi_slice(in[1424:1400]); assign out[1449:1425] = pi_slice(in[1449:1425]); assign out[1474:1450] = pi_slice(in[1474:1450]); assign out[1499:1475] = pi_slice(in[1499:1475]); assign out[1524:1500] = pi_slice(in[1524:1500]); assign out[1549:1525] = pi_slice(in[1549:1525]); assign out[1574:1550] = pi_slice(in[1574:1550]); assign out[1599:1575] = pi_slice(in[1599:1575]); function [24:0] pi_slice; input [24:0] in; pi_slice = { in[21], in[15], in[14], in[ 8], in[ 2], in[23], in[17], in[11], in[ 5], in[ 4], in[20], in[19], in[13], in[ 7], in[ 1], in[22], in[16], in[10], in[ 9], in[ 3], in[24], in[18], in[12], in[ 6], in[ 0] }; endfunction // pi_slice endmodule // pi module rho(in, out); input [25 * `lane - 1:0] in; output [25 * `lane - 1:0] out; assign out = { in[1249], in[ 198], in[ 72], in[1546], in[1145], in[1394], in[1068], in[1217], in[ 466], in[ 565], in[ 614], in[ 963], in[ 512], in[1336], in[1510], in[1084], in[ 208], in[1432], in[ 481], in[ 680], in[ 904], in[ 878], in[ 27], in[1551], in[1575], in[1224], in[ 173], in[ 47], in[1521], in[1120], in[1369], in[1043], in[1192], in[ 441], in[ 540], in[ 589], in[ 938], in[ 487], in[1311], in[1485], in[1059], in[ 183], in[1407], in[ 456], in[ 655], in[ 879], in[ 853], in[ 2], in[1526], in[1550], in[1199], in[ 148], in[ 22], in[1496], in[1095], in[1344], in[1018], in[1167], in[ 416], in[ 515], in[ 564], in[ 913], in[ 462], in[1286], in[1460], in[1034], in[ 158], in[1382], in[ 431], in[ 630], in[ 854], in[ 828], in[1577], in[1501], in[1525], in[1174], in[ 123], in[1597], in[1471], in[1070], in[1319], in[ 993], in[1142], in[ 391], in[ 490], in[ 539], in[ 888], in[ 437], in[1261], in[1435], in[1009], in[ 133], in[1357], in[ 406], in[ 605], in[ 829], in[ 803], in[1552], in[1476], in[1500], in[1149], in[ 98], in[1572], in[1446], in[1045], in[1294], in[ 968], in[1117], in[ 366], in[ 465], in[ 514], in[ 863], in[ 412], in[1236], in[1410], in[ 984], in[ 108], in[1332], in[ 381], in[ 580], in[ 804], in[ 778], in[1527], in[1451], in[1475], in[1124], in[ 73], in[1547], in[1421], in[1020], in[1269], in[ 943], in[1092], in[ 341], in[ 440], in[ 489], in[ 838], in[ 387], in[1211], in[1385], in[ 959], in[ 83], in[1307], in[ 356], in[ 555], in[ 779], in[ 753], in[1502], in[1426], in[1450], in[1099], in[ 48], in[1522], in[1396], in[ 995], in[1244], in[ 918], in[1067], in[ 316], in[ 415], in[ 464], in[ 813], in[ 362], in[1186], in[1360], in[ 934], in[ 58], in[1282], in[ 331], in[ 530], in[ 754], in[ 728], in[1477], in[1401], in[1425], in[1074], in[ 23], in[1497], in[1371], in[ 970], in[1219], in[ 893], in[1042], in[ 291], in[ 390], in[ 439], in[ 788], in[ 337], in[1161], in[1335], in[ 909], in[ 33], in[1257], in[ 306], in[ 505], in[ 729], in[ 703], in[1452], in[1376], in[1400], in[1049], in[1598], in[1472], in[1346], in[ 945], in[1194], in[ 868], in[1017], in[ 266], in[ 365], in[ 414], in[ 763], in[ 312], in[1136], in[1310], in[ 884], in[ 8], in[1232], in[ 281], in[ 480], in[ 704], in[ 678], in[1427], in[1351], in[1375], in[1024], in[1573], in[1447], in[1321], in[ 920], in[1169], in[ 843], in[ 992], in[ 241], in[ 340], in[ 389], in[ 738], in[ 287], in[1111], in[1285], in[ 859], in[1583], in[1207], in[ 256], in[ 455], in[ 679], in[ 653], in[1402], in[1326], in[1350], in[ 999], in[1548], in[1422], in[1296], in[ 895], in[1144], in[ 818], in[ 967], in[ 216], in[ 315], in[ 364], in[ 713], in[ 262], in[1086], in[1260], in[ 834], in[1558], in[1182], in[ 231], in[ 430], in[ 654], in[ 628], in[1377], in[1301], in[1325], in[ 974], in[1523], in[1397], in[1271], in[ 870], in[1119], in[ 793], in[ 942], in[ 191], in[ 290], in[ 339], in[ 688], in[ 237], in[1061], in[1235], in[ 809], in[1533], in[1157], in[ 206], in[ 405], in[ 629], in[ 603], in[1352], in[1276], in[1300], in[ 949], in[1498], in[1372], in[1246], in[ 845], in[1094], in[ 768], in[ 917], in[ 166], in[ 265], in[ 314], in[ 663], in[ 212], in[1036], in[1210], in[ 784], in[1508], in[1132], in[ 181], in[ 380], in[ 604], in[ 578], in[1327], in[1251], in[1275], in[ 924], in[1473], in[1347], in[1221], in[ 820], in[1069], in[ 743], in[ 892], in[ 141], in[ 240], in[ 289], in[ 638], in[ 187], in[1011], in[1185], in[ 759], in[1483], in[1107], in[ 156], in[ 355], in[ 579], in[ 553], in[1302], in[1226], in[1250], in[ 899], in[1448], in[1322], in[1196], in[ 795], in[1044], in[ 718], in[ 867], in[ 116], in[ 215], in[ 264], in[ 613], in[ 162], in[ 986], in[1160], in[ 734], in[1458], in[1082], in[ 131], in[ 330], in[ 554], in[ 528], in[1277], in[1201], in[1225], in[ 874], in[1423], in[1297], in[1171], in[ 770], in[1019], in[ 693], in[ 842], in[ 91], in[ 190], in[ 239], in[ 588], in[ 137], in[ 961], in[1135], in[ 709], in[1433], in[1057], in[ 106], in[ 305], in[ 529], in[ 503], in[1252], in[1176], in[1200], in[ 849], in[1398], in[1272], in[1146], in[ 745], in[ 994], in[ 668], in[ 817], in[ 66], in[ 165], in[ 214], in[ 563], in[ 112], in[ 936], in[1110], in[ 684], in[1408], in[1032], in[ 81], in[ 280], in[ 504], in[ 478], in[1227], in[1151], in[1175], in[ 824], in[1373], in[1247], in[1121], in[ 720], in[ 969], in[ 643], in[ 792], in[ 41], in[ 140], in[ 189], in[ 538], in[ 87], in[ 911], in[1085], in[ 659], in[1383], in[1007], in[ 56], in[ 255], in[ 479], in[ 453], in[1202], in[1126], in[1150], in[ 799], in[1348], in[1222], in[1096], in[ 695], in[ 944], in[ 618], in[ 767], in[ 16], in[ 115], in[ 164], in[ 513], in[ 62], in[ 886], in[1060], in[ 634], in[1358], in[ 982], in[ 31], in[ 230], in[ 454], in[ 428], in[1177], in[1101], in[1125], in[ 774], in[1323], in[1197], in[1071], in[ 670], in[ 919], in[ 593], in[ 742], in[1591], in[ 90], in[ 139], in[ 488], in[ 37], in[ 861], in[1035], in[ 609], in[1333], in[ 957], in[ 6], in[ 205], in[ 429], in[ 403], in[1152], in[1076], in[1100], in[ 749], in[1298], in[1172], in[1046], in[ 645], in[ 894], in[ 568], in[ 717], in[1566], in[ 65], in[ 114], in[ 463], in[ 12], in[ 836], in[1010], in[ 584], in[1308], in[ 932], in[1581], in[ 180], in[ 404], in[ 378], in[1127], in[1051], in[1075], in[ 724], in[1273], in[1147], in[1021], in[ 620], in[ 869], in[ 543], in[ 692], in[1541], in[ 40], in[ 89], in[ 438], in[1587], in[ 811], in[ 985], in[ 559], in[1283], in[ 907], in[1556], in[ 155], in[ 379], in[ 353], in[1102], in[1026], in[1050], in[ 699], in[1248], in[1122], in[ 996], in[ 595], in[ 844], in[ 518], in[ 667], in[1516], in[ 15], in[ 64], in[ 413], in[1562], in[ 786], in[ 960], in[ 534], in[1258], in[ 882], in[1531], in[ 130], in[ 354], in[ 328], in[1077], in[1001], in[1025], in[ 674], in[1223], in[1097], in[ 971], in[ 570], in[ 819], in[ 493], in[ 642], in[1491], in[1590], in[ 39], in[ 388], in[1537], in[ 761], in[ 935], in[ 509], in[1233], in[ 857], in[1506], in[ 105], in[ 329], in[ 303], in[1052], in[ 976], in[1000], in[ 649], in[1198], in[1072], in[ 946], in[ 545], in[ 794], in[ 468], in[ 617], in[1466], in[1565], in[ 14], in[ 363], in[1512], in[ 736], in[ 910], in[ 484], in[1208], in[ 832], in[1481], in[ 80], in[ 304], in[ 278], in[1027], in[ 951], in[ 975], in[ 624], in[1173], in[1047], in[ 921], in[ 520], in[ 769], in[ 443], in[ 592], in[1441], in[1540], in[1589], in[ 338], in[1487], in[ 711], in[ 885], in[ 459], in[1183], in[ 807], in[1456], in[ 55], in[ 279], in[ 253], in[1002], in[ 926], in[ 950], in[ 599], in[1148], in[1022], in[ 896], in[ 495], in[ 744], in[ 418], in[ 567], in[1416], in[1515], in[1564], in[ 313], in[1462], in[ 686], in[ 860], in[ 434], in[1158], in[ 782], in[1431], in[ 30], in[ 254], in[ 228], in[ 977], in[ 901], in[ 925], in[ 574], in[1123], in[ 997], in[ 871], in[ 470], in[ 719], in[ 393], in[ 542], in[1391], in[1490], in[1539], in[ 288], in[1437], in[ 661], in[ 835], in[ 409], in[1133], in[ 757], in[1406], in[ 5], in[ 229], in[ 203], in[ 952], in[ 876], in[ 900], in[ 549], in[1098], in[ 972], in[ 846], in[ 445], in[ 694], in[ 368], in[ 517], in[1366], in[1465], in[1514], in[ 263], in[1412], in[ 636], in[ 810], in[ 384], in[1108], in[ 732], in[1381], in[1580], in[ 204], in[ 178], in[ 927], in[ 851], in[ 875], in[ 524], in[1073], in[ 947], in[ 821], in[ 420], in[ 669], in[ 343], in[ 492], in[1341], in[1440], in[1489], in[ 238], in[1387], in[ 611], in[ 785], in[ 359], in[1083], in[ 707], in[1356], in[1555], in[ 179], in[ 153], in[ 902], in[ 826], in[ 850], in[ 499], in[1048], in[ 922], in[ 796], in[ 395], in[ 644], in[ 318], in[ 467], in[1316], in[1415], in[1464], in[ 213], in[1362], in[ 586], in[ 760], in[ 334], in[1058], in[ 682], in[1331], in[1530], in[ 154], in[ 128], in[ 877], in[ 801], in[ 825], in[ 474], in[1023], in[ 897], in[ 771], in[ 370], in[ 619], in[ 293], in[ 442], in[1291], in[1390], in[1439], in[ 188], in[1337], in[ 561], in[ 735], in[ 309], in[1033], in[ 657], in[1306], in[1505], in[ 129], in[ 103], in[ 852], in[ 776], in[ 800], in[ 449], in[ 998], in[ 872], in[ 746], in[ 345], in[ 594], in[ 268], in[ 417], in[1266], in[1365], in[1414], in[ 163], in[1312], in[ 536], in[ 710], in[ 284], in[1008], in[ 632], in[1281], in[1480], in[ 104], in[ 78], in[ 827], in[ 751], in[ 775], in[ 424], in[ 973], in[ 847], in[ 721], in[ 320], in[ 569], in[ 243], in[ 392], in[1241], in[1340], in[1389], in[ 138], in[1287], in[ 511], in[ 685], in[ 259], in[ 983], in[ 607], in[1256], in[1455], in[ 79], in[ 53], in[ 802], in[ 726], in[ 750], in[ 399], in[ 948], in[ 822], in[ 696], in[ 295], in[ 544], in[ 218], in[ 367], in[1216], in[1315], in[1364], in[ 113], in[1262], in[ 486], in[ 660], in[ 234], in[ 958], in[ 582], in[1231], in[1430], in[ 54], in[ 28], in[ 777], in[ 701], in[ 725], in[ 374], in[ 923], in[ 797], in[ 671], in[ 270], in[ 519], in[ 193], in[ 342], in[1191], in[1290], in[1339], in[ 88], in[1237], in[ 461], in[ 635], in[ 209], in[ 933], in[ 557], in[1206], in[1405], in[ 29], in[ 3], in[ 752], in[ 676], in[ 700], in[ 349], in[ 898], in[ 772], in[ 646], in[ 245], in[ 494], in[ 168], in[ 317], in[1166], in[1265], in[1314], in[ 63], in[1212], in[ 436], in[ 610], in[ 184], in[ 908], in[ 532], in[1181], in[1380], in[ 4], in[1578], in[ 727], in[ 651], in[ 675], in[ 324], in[ 873], in[ 747], in[ 621], in[ 220], in[ 469], in[ 143], in[ 292], in[1141], in[1240], in[1289], in[ 38], in[1187], in[ 411], in[ 585], in[ 159], in[ 883], in[ 507], in[1156], in[1355], in[1579], in[1553], in[ 702], in[ 626], in[ 650], in[ 299], in[ 848], in[ 722], in[ 596], in[ 195], in[ 444], in[ 118], in[ 267], in[1116], in[1215], in[1264], in[ 13], in[1162], in[ 386], in[ 560], in[ 134], in[ 858], in[ 482], in[1131], in[1330], in[1554], in[1528], in[ 677], in[ 601], in[ 625], in[ 274], in[ 823], in[ 697], in[ 571], in[ 170], in[ 419], in[ 93], in[ 242], in[1091], in[1190], in[1239], in[1588], in[1137], in[ 361], in[ 535], in[ 109], in[ 833], in[ 457], in[1106], in[1305], in[1529], in[1503], in[ 652], in[ 576], in[ 600], in[ 249], in[ 798], in[ 672], in[ 546], in[ 145], in[ 394], in[ 68], in[ 217], in[1066], in[1165], in[1214], in[1563], in[1112], in[ 336], in[ 510], in[ 84], in[ 808], in[ 432], in[1081], in[1280], in[1504], in[1478], in[ 627], in[ 551], in[ 575], in[ 224], in[ 773], in[ 647], in[ 521], in[ 120], in[ 369], in[ 43], in[ 192], in[1041], in[1140], in[1189], in[1538], in[1087], in[ 311], in[ 485], in[ 59], in[ 783], in[ 407], in[1056], in[1255], in[1479], in[1453], in[ 602], in[ 526], in[ 550], in[ 199], in[ 748], in[ 622], in[ 496], in[ 95], in[ 344], in[ 18], in[ 167], in[1016], in[1115], in[1164], in[1513], in[1062], in[ 286], in[ 460], in[ 34], in[ 758], in[ 382], in[1031], in[1230], in[1454], in[1428], in[ 577], in[ 501], in[ 525], in[ 174], in[ 723], in[ 597], in[ 471], in[ 70], in[ 319], in[1593], in[ 142], in[ 991], in[1090], in[1139], in[1488], in[1037], in[ 261], in[ 435], in[ 9], in[ 733], in[ 357], in[1006], in[1205], in[1429], in[1403], in[ 552], in[ 476], in[ 500], in[ 149], in[ 698], in[ 572], in[ 446], in[ 45], in[ 294], in[1568], in[ 117], in[ 966], in[1065], in[1114], in[1463], in[1012], in[ 236], in[ 410], in[1584], in[ 708], in[ 332], in[ 981], in[1180], in[1404], in[1378], in[ 527], in[ 451], in[ 475], in[ 124], in[ 673], in[ 547], in[ 421], in[ 20], in[ 269], in[1543], in[ 92], in[ 941], in[1040], in[1089], in[1438], in[ 987], in[ 211], in[ 385], in[1559], in[ 683], in[ 307], in[ 956], in[1155], in[1379], in[1353], in[ 502], in[ 426], in[ 450], in[ 99], in[ 648], in[ 522], in[ 396], in[1595], in[ 244], in[1518], in[ 67], in[ 916], in[1015], in[1064], in[1413], in[ 962], in[ 186], in[ 360], in[1534], in[ 658], in[ 282], in[ 931], in[1130], in[1354], in[1328], in[ 477], in[ 401], in[ 425], in[ 74], in[ 623], in[ 497], in[ 371], in[1570], in[ 219], in[1493], in[ 42], in[ 891], in[ 990], in[1039], in[1388], in[ 937], in[ 161], in[ 335], in[1509], in[ 633], in[ 257], in[ 906], in[1105], in[1329], in[1303], in[ 452], in[ 376], in[ 400], in[ 49], in[ 598], in[ 472], in[ 346], in[1545], in[ 194], in[1468], in[ 17], in[ 866], in[ 965], in[1014], in[1363], in[ 912], in[ 136], in[ 310], in[1484], in[ 608], in[ 232], in[ 881], in[1080], in[1304], in[1278], in[ 427], in[ 351], in[ 375], in[ 24], in[ 573], in[ 447], in[ 321], in[1520], in[ 169], in[1443], in[1592], in[ 841], in[ 940], in[ 989], in[1338], in[ 887], in[ 111], in[ 285], in[1459], in[ 583], in[ 207], in[ 856], in[1055], in[1279], in[1253], in[ 402], in[ 326], in[ 350], in[1599], in[ 548], in[ 422], in[ 296], in[1495], in[ 144], in[1418], in[1567], in[ 816], in[ 915], in[ 964], in[1313], in[ 862], in[ 86], in[ 260], in[1434], in[ 558], in[ 182], in[ 831], in[1030], in[1254], in[1228], in[ 377], in[ 301], in[ 325], in[1574], in[ 523], in[ 397], in[ 271], in[1470], in[ 119], in[1393], in[1542], in[ 791], in[ 890], in[ 939], in[1288], in[ 837], in[ 61], in[ 235], in[1409], in[ 533], in[ 157], in[ 806], in[1005], in[1229], in[1203], in[ 352], in[ 276], in[ 300], in[1549], in[ 498], in[ 372], in[ 246], in[1445], in[ 94], in[1368], in[1517], in[ 766], in[ 865], in[ 914], in[1263], in[ 812], in[ 36], in[ 210], in[1384], in[ 508], in[ 132], in[ 781], in[ 980], in[1204], in[1178], in[ 327], in[ 251], in[ 275], in[1524], in[ 473], in[ 347], in[ 221], in[1420], in[ 69], in[1343], in[1492], in[ 741], in[ 840], in[ 889], in[1238], in[ 787], in[ 11], in[ 185], in[1359], in[ 483], in[ 107], in[ 756], in[ 955], in[1179], in[1153], in[ 302], in[ 226], in[ 250], in[1499], in[ 448], in[ 322], in[ 196], in[1395], in[ 44], in[1318], in[1467], in[ 716], in[ 815], in[ 864], in[1213], in[ 762], in[1586], in[ 160], in[1334], in[ 458], in[ 82], in[ 731], in[ 930], in[1154], in[1128], in[ 277], in[ 201], in[ 225], in[1474], in[ 423], in[ 297], in[ 171], in[1370], in[ 19], in[1293], in[1442], in[ 691], in[ 790], in[ 839], in[1188], in[ 737], in[1561], in[ 135], in[1309], in[ 433], in[ 57], in[ 706], in[ 905], in[1129], in[1103], in[ 252], in[ 176], in[ 200], in[1449], in[ 398], in[ 272], in[ 146], in[1345], in[1594], in[1268], in[1417], in[ 666], in[ 765], in[ 814], in[1163], in[ 712], in[1536], in[ 110], in[1284], in[ 408], in[ 32], in[ 681], in[ 880], in[1104], in[1078], in[ 227], in[ 151], in[ 175], in[1424], in[ 373], in[ 247], in[ 121], in[1320], in[1569], in[1243], in[1392], in[ 641], in[ 740], in[ 789], in[1138], in[ 687], in[1511], in[ 85], in[1259], in[ 383], in[ 7], in[ 656], in[ 855], in[1079], in[1053], in[ 202], in[ 126], in[ 150], in[1399], in[ 348], in[ 222], in[ 96], in[1295], in[1544], in[1218], in[1367], in[ 616], in[ 715], in[ 764], in[1113], in[ 662], in[1486], in[ 60], in[1234], in[ 358], in[1582], in[ 631], in[ 830], in[1054], in[1028], in[ 177], in[ 101], in[ 125], in[1374], in[ 323], in[ 197], in[ 71], in[1270], in[1519], in[1193], in[1342], in[ 591], in[ 690], in[ 739], in[1088], in[ 637], in[1461], in[ 35], in[1209], in[ 333], in[1557], in[ 606], in[ 805], in[1029], in[1003], in[ 152], in[ 76], in[ 100], in[1349], in[ 298], in[ 172], in[ 46], in[1245], in[1494], in[1168], in[1317], in[ 566], in[ 665], in[ 714], in[1063], in[ 612], in[1436], in[ 10], in[1184], in[ 308], in[1532], in[ 581], in[ 780], in[1004], in[ 978], in[ 127], in[ 51], in[ 75], in[1324], in[ 273], in[ 147], in[ 21], in[1220], in[1469], in[1143], in[1292], in[ 541], in[ 640], in[ 689], in[1038], in[ 587], in[1411], in[1585], in[1159], in[ 283], in[1507], in[ 556], in[ 755], in[ 979], in[ 953], in[ 102], in[ 26], in[ 50], in[1299], in[ 248], in[ 122], in[1596], in[1195], in[1444], in[1118], in[1267], in[ 516], in[ 615], in[ 664], in[1013], in[ 562], in[1386], in[1560], in[1134], in[ 258], in[1482], in[ 531], in[ 730], in[ 954], in[ 928], in[ 77], in[ 1], in[ 25], in[1274], in[ 223], in[ 97], in[1571], in[1170], in[1419], in[1093], in[1242], in[ 491], in[ 590], in[ 639], in[ 988], in[ 537], in[1361], in[1535], in[1109], in[ 233], in[1457], in[ 506], in[ 705], in[ 929], in[ 903], in[ 52], in[1576], in[ 0] }; endmodule // rho module iota(in, out, round); input [1599:0] in; input [23:0] round; output [1599:0] out; wire [6:0] tmp; assign tmp[6:0] = RC(round); assign out[1599:1576] = in[1599:1576]; assign out[1574: 776] = in[1574: 776]; assign out[ 774: 376] = in[ 774: 376]; assign out[ 374: 176] = in[ 374: 176]; assign out[ 174: 76] = in[ 174: 76]; assign out[ 74: 26] = in[ 74: 26]; assign out[ 24: 1] = in[ 24: 1]; assign out[1575] = in[1575] ^ tmp[6]; assign out[ 775] = in[ 775] ^ tmp[5]; assign out[ 375] = in[ 375] ^ tmp[4]; assign out[ 175] = in[ 175] ^ tmp[3]; assign out[ 75] = in[ 75] ^ tmp[2]; assign out[ 25] = in[ 25] ^ tmp[1]; assign out[ 0] = in[ 0] ^ tmp[0]; function [6:0] RC; input [23:0] round; case(round) // synopsys full_case parallel_case 24'b000000000000000000000001: RC= 7'b0000001; 24'b000000000000000000000010: RC= 7'b0011010; 24'b000000000000000000000100: RC= 7'b1011110; 24'b000000000000000000001000: RC= 7'b1110000; 24'b000000000000000000010000: RC= 7'b0011111; 24'b000000000000000000100000: RC= 7'b0100001; 24'b000000000000000001000000: RC= 7'b1111001; 24'b000000000000000010000000: RC= 7'b1010101; 24'b000000000000000100000000: RC= 7'b0001110; 24'b000000000000001000000000: RC= 7'b0001100; 24'b000000000000010000000000: RC= 7'b0110101; 24'b000000000000100000000000: RC= 7'b0100110; 24'b000000000001000000000000: RC= 7'b0111111; 24'b000000000010000000000000: RC= 7'b1001111; 24'b000000000100000000000000: RC= 7'b1011101; 24'b000000001000000000000000: RC= 7'b1010011; 24'b000000010000000000000000: RC= 7'b1010010; 24'b000000100000000000000000: RC= 7'b1001000; 24'b000001000000000000000000: RC= 7'b0010110; 24'b000010000000000000000000: RC= 7'b1100110; 24'b000100000000000000000000: RC= 7'b1111001; 24'b001000000000000000000000: RC= 7'b1011000; 24'b010000000000000000000000: RC= 7'b0100001; 24'b100000000000000000000000: RC= 7'b1110100; endcase // case (round) endfunction // RC endmodule // iota module round_f(in, out, round); input [1599:0] in; input [23:0] round; output [1599:0] out; wire [1599:0] theta_in, theta_out; wire [1599:0] rho_in, rho_out; wire [1599:0] pi_in, pi_out; wire [1599:0] chi_in, chi_out; wire [1599:0] iota_in, iota_out; assign theta_in = in; assign rho_in = theta_out; assign pi_in = rho_out; assign chi_in = pi_out; assign iota_in = chi_out; assign out = iota_out; theta theta(.in(theta_in), .out(theta_out)); rho rho (.in(rho_in), .out(rho_out)); pi pi (.in(pi_in), .out(pi_out)); chi chi (.in(chi_in), .out(chi_out)); iota iota (.in(iota_in), .out(iota_out), .round(round)); endmodule // round_f module keccak_fun(in, out); input [1599:0] in; output [1599:0] out; wire [1599:0] round00_in, round00_out; wire [1599:0] round01_in, round01_out; wire [1599:0] round02_in, round02_out; wire [1599:0] round03_in, round03_out; wire [1599:0] round04_in, round04_out; wire [1599:0] round05_in, round05_out; wire [1599:0] round06_in, round06_out; wire [1599:0] round07_in, round07_out; wire [1599:0] round08_in, round08_out; wire [1599:0] round09_in, round09_out; wire [1599:0] round10_in, round10_out; wire [1599:0] round11_in, round11_out; wire [1599:0] round12_in, round12_out; wire [1599:0] round13_in, round13_out; wire [1599:0] round14_in, round14_out; wire [1599:0] round15_in, round15_out; wire [1599:0] round16_in, round16_out; wire [1599:0] round17_in, round17_out; wire [1599:0] round18_in, round18_out; wire [1599:0] round19_in, round19_out; wire [1599:0] round20_in, round20_out; wire [1599:0] round21_in, round21_out; wire [1599:0] round22_in, round22_out; wire [1599:0] round23_in, round23_out; assign round00_in = in; assign round01_in = round00_out; assign round02_in = round01_out; assign round03_in = round02_out; assign round04_in = round03_out; assign round05_in = round04_out; assign round06_in = round05_out; assign round07_in = round06_out; assign round08_in = round07_out; assign round09_in = round08_out; assign round10_in = round09_out; assign round11_in = round10_out; assign round12_in = round11_out; assign round13_in = round12_out; assign round14_in = round13_out; assign round15_in = round14_out; assign round16_in = round15_out; assign round17_in = round16_out; assign round18_in = round17_out; assign round19_in = round18_out; assign round20_in = round19_out; assign round21_in = round20_out; assign round22_in = round21_out; assign round23_in = round22_out; assign out = round23_out; round_f round_f00( .in(round00_in), .out(round00_out), .round(5'd0) ); round_f round_f01( .in(round01_in), .out(round01_out), .round(5'd1) ); round_f round_f02( .in(round02_in), .out(round02_out), .round(5'd2) ); round_f round_f03( .in(round03_in), .out(round03_out), .round(5'd3) ); round_f round_f04( .in(round04_in), .out(round04_out), .round(5'd4) ); round_f round_f05( .in(round05_in), .out(round05_out), .round(5'd5) ); round_f round_f06( .in(round06_in), .out(round06_out), .round(5'd6) ); round_f round_f07( .in(round07_in), .out(round07_out), .round(5'd7) ); round_f round_f08( .in(round08_in), .out(round08_out), .round(5'd8) ); round_f round_f09( .in(round09_in), .out(round09_out), .round(5'd9) ); round_f round_f10( .in(round10_in), .out(round10_out), .round(5'd10) ); round_f round_f11( .in(round11_in), .out(round11_out), .round(5'd11) ); round_f round_f12( .in(round12_in), .out(round12_out), .round(5'd12) ); round_f round_f13( .in(round13_in), .out(round13_out), .round(5'd13) ); round_f round_f14( .in(round14_in), .out(round14_out), .round(5'd14) ); round_f round_f15( .in(round15_in), .out(round15_out), .round(5'd15) ); round_f round_f16( .in(round16_in), .out(round16_out), .round(5'd16) ); round_f round_f17( .in(round17_in), .out(round17_out), .round(5'd17) ); round_f round_f18( .in(round18_in), .out(round18_out), .round(5'd18) ); round_f round_f19( .in(round19_in), .out(round19_out), .round(5'd19) ); round_f round_f20( .in(round20_in), .out(round20_out), .round(5'd20) ); round_f round_f21( .in(round21_in), .out(round21_out), .round(5'd21) ); round_f round_f22( .in(round22_in), .out(round22_out), .round(5'd22) ); round_f round_f23( .in(round23_in), .out(round23_out), .round(5'd23) ); endmodule // keccak_fun module keccak(CLK, RSTn, EN, Mrdy, Init, EoM, M, BSY, H); input CLK; // System clock input RSTn; // Negative reset input EN; // Enable input Mrdy; // Set High for message input input Init; // Set High for the first message input input EoM; // Set High for the last message input input [1599:0] M; // Message input output BSY; // Busy flag output [1599:0] H; // Hash output reg [1599:0] state; reg fsm; reg [4:0] counter; reg [23:0] onehot_counter; wire [1599:0] M_reloc; wire [1599:0] round_f_out; round_f round_f(.in(state), .out(round_f_out), .round(onehot_counter)); index_relocation_out index_relocation_out(.in(M), .out(M_reloc)); index_relocation_in index_relocation_in (.in(state), .out(H)); // always @(posedge CLK) begin // if (RSTn == 0) begin // state <= 1600'h0; // fsm <= 1'b0; // counter <= 5'h0; // end // else if (EN == 1) begin // if (fsm == 1'b0) begin // if( Mrdy == 1'b1 ) begin // state <= M; // fsm <= 1'b1; // end // end // else begin // fsm == 1'b1 // if(counter == 5'd24) begin // fsm <= 1'b0; // counter <= 5'h0; // end // else begin // $display("round%.2d", counter); // pretty_print(state, ""); // state <= round_f_out; // counter <= counter + 1; // end // end // end // end always @(posedge CLK) begin if (RSTn == 0) begin state <= 1600'h0; fsm <= 1'b0; counter <= 5'h0; onehot_counter <= 24'h1; end else if (EN == 1) begin if (fsm == 1'b0) begin if( Mrdy == 1'b1 ) begin state <= M; fsm <= 1'b1; end end else begin // fsm == 1'b1 $display("round%b", onehot_counter); pretty_print(round_f_out, ""); if(onehot_counter[23] == 1'b1) begin if(EoM == 1'b1) begin fsm <= 1'b0; onehot_counter <= {onehot_counter[22:0], onehot_counter[23]}; end else if (Mrdy == 1'b1) begin // $display("*** Mrdy ***"); // pretty_print(state, "state"); // pretty_print(round_f_out, "round_f_out"); // pretty_print(M_reloc, "mreloc"); // $display("*** Mrdy end ***"); // state <= round_f_out ^ M_reloc; onehot_counter <= {onehot_counter[22:0], onehot_counter[23]}; end end else begin state <= round_f_out; onehot_counter <= {onehot_counter[22:0], onehot_counter[23]}; end end end end task pretty_print; input [1599:0] in; input [128:0] comment; reg [1599:0] out; begin out = { in[1599], in[1574], in[1549], in[1524], in[1499], in[1474], in[1449], in[1424], in[1399], in[1374], in[1349], in[1324], in[1299], in[1274], in[1249], in[1224], in[1199], in[1174], in[1149], in[1124], in[1099], in[1074], in[1049], in[1024], in[ 999], in[ 974], in[ 949], in[ 924], in[ 899], in[ 874], in[ 849], in[ 824], in[ 799], in[ 774], in[ 749], in[ 724], in[ 699], in[ 674], in[ 649], in[ 624], in[ 599], in[ 574], in[ 549], in[ 524], in[ 499], in[ 474], in[ 449], in[ 424], in[ 399], in[ 374], in[ 349], in[ 324], in[ 299], in[ 274], in[ 249], in[ 224], in[ 199], in[ 174], in[ 149], in[ 124], in[ 99], in[ 74], in[ 49], in[ 24], in[1598], in[1573], in[1548], in[1523], in[1498], in[1473], in[1448], in[1423], in[1398], in[1373], in[1348], in[1323], in[1298], in[1273], in[1248], in[1223], in[1198], in[1173], in[1148], in[1123], in[1098], in[1073], in[1048], in[1023], in[ 998], in[ 973], in[ 948], in[ 923], in[ 898], in[ 873], in[ 848], in[ 823], in[ 798], in[ 773], in[ 748], in[ 723], in[ 698], in[ 673], in[ 648], in[ 623], in[ 598], in[ 573], in[ 548], in[ 523], in[ 498], in[ 473], in[ 448], in[ 423], in[ 398], in[ 373], in[ 348], in[ 323], in[ 298], in[ 273], in[ 248], in[ 223], in[ 198], in[ 173], in[ 148], in[ 123], in[ 98], in[ 73], in[ 48], in[ 23], in[1597], in[1572], in[1547], in[1522], in[1497], in[1472], in[1447], in[1422], in[1397], in[1372], in[1347], in[1322], in[1297], in[1272], in[1247], in[1222], in[1197], in[1172], in[1147], in[1122], in[1097], in[1072], in[1047], in[1022], in[ 997], in[ 972], in[ 947], in[ 922], in[ 897], in[ 872], in[ 847], in[ 822], in[ 797], in[ 772], in[ 747], in[ 722], in[ 697], in[ 672], in[ 647], in[ 622], in[ 597], in[ 572], in[ 547], in[ 522], in[ 497], in[ 472], in[ 447], in[ 422], in[ 397], in[ 372], in[ 347], in[ 322], in[ 297], in[ 272], in[ 247], in[ 222], in[ 197], in[ 172], in[ 147], in[ 122], in[ 97], in[ 72], in[ 47], in[ 22], in[1596], in[1571], in[1546], in[1521], in[1496], in[1471], in[1446], in[1421], in[1396], in[1371], in[1346], in[1321], in[1296], in[1271], in[1246], in[1221], in[1196], in[1171], in[1146], in[1121], in[1096], in[1071], in[1046], in[1021], in[ 996], in[ 971], in[ 946], in[ 921], in[ 896], in[ 871], in[ 846], in[ 821], in[ 796], in[ 771], in[ 746], in[ 721], in[ 696], in[ 671], in[ 646], in[ 621], in[ 596], in[ 571], in[ 546], in[ 521], in[ 496], in[ 471], in[ 446], in[ 421], in[ 396], in[ 371], in[ 346], in[ 321], in[ 296], in[ 271], in[ 246], in[ 221], in[ 196], in[ 171], in[ 146], in[ 121], in[ 96], in[ 71], in[ 46], in[ 21], in[1595], in[1570], in[1545], in[1520], in[1495], in[1470], in[1445], in[1420], in[1395], in[1370], in[1345], in[1320], in[1295], in[1270], in[1245], in[1220], in[1195], in[1170], in[1145], in[1120], in[1095], in[1070], in[1045], in[1020], in[ 995], in[ 970], in[ 945], in[ 920], in[ 895], in[ 870], in[ 845], in[ 820], in[ 795], in[ 770], in[ 745], in[ 720], in[ 695], in[ 670], in[ 645], in[ 620], in[ 595], in[ 570], in[ 545], in[ 520], in[ 495], in[ 470], in[ 445], in[ 420], in[ 395], in[ 370], in[ 345], in[ 320], in[ 295], in[ 270], in[ 245], in[ 220], in[ 195], in[ 170], in[ 145], in[ 120], in[ 95], in[ 70], in[ 45], in[ 20], in[1594], in[1569], in[1544], in[1519], in[1494], in[1469], in[1444], in[1419], in[1394], in[1369], in[1344], in[1319], in[1294], in[1269], in[1244], in[1219], in[1194], in[1169], in[1144], in[1119], in[1094], in[1069], in[1044], in[1019], in[ 994], in[ 969], in[ 944], in[ 919], in[ 894], in[ 869], in[ 844], in[ 819], in[ 794], in[ 769], in[ 744], in[ 719], in[ 694], in[ 669], in[ 644], in[ 619], in[ 594], in[ 569], in[ 544], in[ 519], in[ 494], in[ 469], in[ 444], in[ 419], in[ 394], in[ 369], in[ 344], in[ 319], in[ 294], in[ 269], in[ 244], in[ 219], in[ 194], in[ 169], in[ 144], in[ 119], in[ 94], in[ 69], in[ 44], in[ 19], in[1593], in[1568], in[1543], in[1518], in[1493], in[1468], in[1443], in[1418], in[1393], in[1368], in[1343], in[1318], in[1293], in[1268], in[1243], in[1218], in[1193], in[1168], in[1143], in[1118], in[1093], in[1068], in[1043], in[1018], in[ 993], in[ 968], in[ 943], in[ 918], in[ 893], in[ 868], in[ 843], in[ 818], in[ 793], in[ 768], in[ 743], in[ 718], in[ 693], in[ 668], in[ 643], in[ 618], in[ 593], in[ 568], in[ 543], in[ 518], in[ 493], in[ 468], in[ 443], in[ 418], in[ 393], in[ 368], in[ 343], in[ 318], in[ 293], in[ 268], in[ 243], in[ 218], in[ 193], in[ 168], in[ 143], in[ 118], in[ 93], in[ 68], in[ 43], in[ 18], in[1592], in[1567], in[1542], in[1517], in[1492], in[1467], in[1442], in[1417], in[1392], in[1367], in[1342], in[1317], in[1292], in[1267], in[1242], in[1217], in[1192], in[1167], in[1142], in[1117], in[1092], in[1067], in[1042], in[1017], in[ 992], in[ 967], in[ 942], in[ 917], in[ 892], in[ 867], in[ 842], in[ 817], in[ 792], in[ 767], in[ 742], in[ 717], in[ 692], in[ 667], in[ 642], in[ 617], in[ 592], in[ 567], in[ 542], in[ 517], in[ 492], in[ 467], in[ 442], in[ 417], in[ 392], in[ 367], in[ 342], in[ 317], in[ 292], in[ 267], in[ 242], in[ 217], in[ 192], in[ 167], in[ 142], in[ 117], in[ 92], in[ 67], in[ 42], in[ 17], in[1591], in[1566], in[1541], in[1516], in[1491], in[1466], in[1441], in[1416], in[1391], in[1366], in[1341], in[1316], in[1291], in[1266], in[1241], in[1216], in[1191], in[1166], in[1141], in[1116], in[1091], in[1066], in[1041], in[1016], in[ 991], in[ 966], in[ 941], in[ 916], in[ 891], in[ 866], in[ 841], in[ 816], in[ 791], in[ 766], in[ 741], in[ 716], in[ 691], in[ 666], in[ 641], in[ 616], in[ 591], in[ 566], in[ 541], in[ 516], in[ 491], in[ 466], in[ 441], in[ 416], in[ 391], in[ 366], in[ 341], in[ 316], in[ 291], in[ 266], in[ 241], in[ 216], in[ 191], in[ 166], in[ 141], in[ 116], in[ 91], in[ 66], in[ 41], in[ 16], in[1590], in[1565], in[1540], in[1515], in[1490], in[1465], in[1440], in[1415], in[1390], in[1365], in[1340], in[1315], in[1290], in[1265], in[1240], in[1215], in[1190], in[1165], in[1140], in[1115], in[1090], in[1065], in[1040], in[1015], in[ 990], in[ 965], in[ 940], in[ 915], in[ 890], in[ 865], in[ 840], in[ 815], in[ 790], in[ 765], in[ 740], in[ 715], in[ 690], in[ 665], in[ 640], in[ 615], in[ 590], in[ 565], in[ 540], in[ 515], in[ 490], in[ 465], in[ 440], in[ 415], in[ 390], in[ 365], in[ 340], in[ 315], in[ 290], in[ 265], in[ 240], in[ 215], in[ 190], in[ 165], in[ 140], in[ 115], in[ 90], in[ 65], in[ 40], in[ 15], in[1589], in[1564], in[1539], in[1514], in[1489], in[1464], in[1439], in[1414], in[1389], in[1364], in[1339], in[1314], in[1289], in[1264], in[1239], in[1214], in[1189], in[1164], in[1139], in[1114], in[1089], in[1064], in[1039], in[1014], in[ 989], in[ 964], in[ 939], in[ 914], in[ 889], in[ 864], in[ 839], in[ 814], in[ 789], in[ 764], in[ 739], in[ 714], in[ 689], in[ 664], in[ 639], in[ 614], in[ 589], in[ 564], in[ 539], in[ 514], in[ 489], in[ 464], in[ 439], in[ 414], in[ 389], in[ 364], in[ 339], in[ 314], in[ 289], in[ 264], in[ 239], in[ 214], in[ 189], in[ 164], in[ 139], in[ 114], in[ 89], in[ 64], in[ 39], in[ 14], in[1588], in[1563], in[1538], in[1513], in[1488], in[1463], in[1438], in[1413], in[1388], in[1363], in[1338], in[1313], in[1288], in[1263], in[1238], in[1213], in[1188], in[1163], in[1138], in[1113], in[1088], in[1063], in[1038], in[1013], in[ 988], in[ 963], in[ 938], in[ 913], in[ 888], in[ 863], in[ 838], in[ 813], in[ 788], in[ 763], in[ 738], in[ 713], in[ 688], in[ 663], in[ 638], in[ 613], in[ 588], in[ 563], in[ 538], in[ 513], in[ 488], in[ 463], in[ 438], in[ 413], in[ 388], in[ 363], in[ 338], in[ 313], in[ 288], in[ 263], in[ 238], in[ 213], in[ 188], in[ 163], in[ 138], in[ 113], in[ 88], in[ 63], in[ 38], in[ 13], in[1587], in[1562], in[1537], in[1512], in[1487], in[1462], in[1437], in[1412], in[1387], in[1362], in[1337], in[1312], in[1287], in[1262], in[1237], in[1212], in[1187], in[1162], in[1137], in[1112], in[1087], in[1062], in[1037], in[1012], in[ 987], in[ 962], in[ 937], in[ 912], in[ 887], in[ 862], in[ 837], in[ 812], in[ 787], in[ 762], in[ 737], in[ 712], in[ 687], in[ 662], in[ 637], in[ 612], in[ 587], in[ 562], in[ 537], in[ 512], in[ 487], in[ 462], in[ 437], in[ 412], in[ 387], in[ 362], in[ 337], in[ 312], in[ 287], in[ 262], in[ 237], in[ 212], in[ 187], in[ 162], in[ 137], in[ 112], in[ 87], in[ 62], in[ 37], in[ 12], in[1586], in[1561], in[1536], in[1511], in[1486], in[1461], in[1436], in[1411], in[1386], in[1361], in[1336], in[1311], in[1286], in[1261], in[1236], in[1211], in[1186], in[1161], in[1136], in[1111], in[1086], in[1061], in[1036], in[1011], in[ 986], in[ 961], in[ 936], in[ 911], in[ 886], in[ 861], in[ 836], in[ 811], in[ 786], in[ 761], in[ 736], in[ 711], in[ 686], in[ 661], in[ 636], in[ 611], in[ 586], in[ 561], in[ 536], in[ 511], in[ 486], in[ 461], in[ 436], in[ 411], in[ 386], in[ 361], in[ 336], in[ 311], in[ 286], in[ 261], in[ 236], in[ 211], in[ 186], in[ 161], in[ 136], in[ 111], in[ 86], in[ 61], in[ 36], in[ 11], in[1585], in[1560], in[1535], in[1510], in[1485], in[1460], in[1435], in[1410], in[1385], in[1360], in[1335], in[1310], in[1285], in[1260], in[1235], in[1210], in[1185], in[1160], in[1135], in[1110], in[1085], in[1060], in[1035], in[1010], in[ 985], in[ 960], in[ 935], in[ 910], in[ 885], in[ 860], in[ 835], in[ 810], in[ 785], in[ 760], in[ 735], in[ 710], in[ 685], in[ 660], in[ 635], in[ 610], in[ 585], in[ 560], in[ 535], in[ 510], in[ 485], in[ 460], in[ 435], in[ 410], in[ 385], in[ 360], in[ 335], in[ 310], in[ 285], in[ 260], in[ 235], in[ 210], in[ 185], in[ 160], in[ 135], in[ 110], in[ 85], in[ 60], in[ 35], in[ 10], in[1584], in[1559], in[1534], in[1509], in[1484], in[1459], in[1434], in[1409], in[1384], in[1359], in[1334], in[1309], in[1284], in[1259], in[1234], in[1209], in[1184], in[1159], in[1134], in[1109], in[1084], in[1059], in[1034], in[1009], in[ 984], in[ 959], in[ 934], in[ 909], in[ 884], in[ 859], in[ 834], in[ 809], in[ 784], in[ 759], in[ 734], in[ 709], in[ 684], in[ 659], in[ 634], in[ 609], in[ 584], in[ 559], in[ 534], in[ 509], in[ 484], in[ 459], in[ 434], in[ 409], in[ 384], in[ 359], in[ 334], in[ 309], in[ 284], in[ 259], in[ 234], in[ 209], in[ 184], in[ 159], in[ 134], in[ 109], in[ 84], in[ 59], in[ 34], in[ 9], in[1583], in[1558], in[1533], in[1508], in[1483], in[1458], in[1433], in[1408], in[1383], in[1358], in[1333], in[1308], in[1283], in[1258], in[1233], in[1208], in[1183], in[1158], in[1133], in[1108], in[1083], in[1058], in[1033], in[1008], in[ 983], in[ 958], in[ 933], in[ 908], in[ 883], in[ 858], in[ 833], in[ 808], in[ 783], in[ 758], in[ 733], in[ 708], in[ 683], in[ 658], in[ 633], in[ 608], in[ 583], in[ 558], in[ 533], in[ 508], in[ 483], in[ 458], in[ 433], in[ 408], in[ 383], in[ 358], in[ 333], in[ 308], in[ 283], in[ 258], in[ 233], in[ 208], in[ 183], in[ 158], in[ 133], in[ 108], in[ 83], in[ 58], in[ 33], in[ 8], in[1582], in[1557], in[1532], in[1507], in[1482], in[1457], in[1432], in[1407], in[1382], in[1357], in[1332], in[1307], in[1282], in[1257], in[1232], in[1207], in[1182], in[1157], in[1132], in[1107], in[1082], in[1057], in[1032], in[1007], in[ 982], in[ 957], in[ 932], in[ 907], in[ 882], in[ 857], in[ 832], in[ 807], in[ 782], in[ 757], in[ 732], in[ 707], in[ 682], in[ 657], in[ 632], in[ 607], in[ 582], in[ 557], in[ 532], in[ 507], in[ 482], in[ 457], in[ 432], in[ 407], in[ 382], in[ 357], in[ 332], in[ 307], in[ 282], in[ 257], in[ 232], in[ 207], in[ 182], in[ 157], in[ 132], in[ 107], in[ 82], in[ 57], in[ 32], in[ 7], in[1581], in[1556], in[1531], in[1506], in[1481], in[1456], in[1431], in[1406], in[1381], in[1356], in[1331], in[1306], in[1281], in[1256], in[1231], in[1206], in[1181], in[1156], in[1131], in[1106], in[1081], in[1056], in[1031], in[1006], in[ 981], in[ 956], in[ 931], in[ 906], in[ 881], in[ 856], in[ 831], in[ 806], in[ 781], in[ 756], in[ 731], in[ 706], in[ 681], in[ 656], in[ 631], in[ 606], in[ 581], in[ 556], in[ 531], in[ 506], in[ 481], in[ 456], in[ 431], in[ 406], in[ 381], in[ 356], in[ 331], in[ 306], in[ 281], in[ 256], in[ 231], in[ 206], in[ 181], in[ 156], in[ 131], in[ 106], in[ 81], in[ 56], in[ 31], in[ 6], in[1580], in[1555], in[1530], in[1505], in[1480], in[1455], in[1430], in[1405], in[1380], in[1355], in[1330], in[1305], in[1280], in[1255], in[1230], in[1205], in[1180], in[1155], in[1130], in[1105], in[1080], in[1055], in[1030], in[1005], in[ 980], in[ 955], in[ 930], in[ 905], in[ 880], in[ 855], in[ 830], in[ 805], in[ 780], in[ 755], in[ 730], in[ 705], in[ 680], in[ 655], in[ 630], in[ 605], in[ 580], in[ 555], in[ 530], in[ 505], in[ 480], in[ 455], in[ 430], in[ 405], in[ 380], in[ 355], in[ 330], in[ 305], in[ 280], in[ 255], in[ 230], in[ 205], in[ 180], in[ 155], in[ 130], in[ 105], in[ 80], in[ 55], in[ 30], in[ 5], in[1579], in[1554], in[1529], in[1504], in[1479], in[1454], in[1429], in[1404], in[1379], in[1354], in[1329], in[1304], in[1279], in[1254], in[1229], in[1204], in[1179], in[1154], in[1129], in[1104], in[1079], in[1054], in[1029], in[1004], in[ 979], in[ 954], in[ 929], in[ 904], in[ 879], in[ 854], in[ 829], in[ 804], in[ 779], in[ 754], in[ 729], in[ 704], in[ 679], in[ 654], in[ 629], in[ 604], in[ 579], in[ 554], in[ 529], in[ 504], in[ 479], in[ 454], in[ 429], in[ 404], in[ 379], in[ 354], in[ 329], in[ 304], in[ 279], in[ 254], in[ 229], in[ 204], in[ 179], in[ 154], in[ 129], in[ 104], in[ 79], in[ 54], in[ 29], in[ 4], in[1578], in[1553], in[1528], in[1503], in[1478], in[1453], in[1428], in[1403], in[1378], in[1353], in[1328], in[1303], in[1278], in[1253], in[1228], in[1203], in[1178], in[1153], in[1128], in[1103], in[1078], in[1053], in[1028], in[1003], in[ 978], in[ 953], in[ 928], in[ 903], in[ 878], in[ 853], in[ 828], in[ 803], in[ 778], in[ 753], in[ 728], in[ 703], in[ 678], in[ 653], in[ 628], in[ 603], in[ 578], in[ 553], in[ 528], in[ 503], in[ 478], in[ 453], in[ 428], in[ 403], in[ 378], in[ 353], in[ 328], in[ 303], in[ 278], in[ 253], in[ 228], in[ 203], in[ 178], in[ 153], in[ 128], in[ 103], in[ 78], in[ 53], in[ 28], in[ 3], in[1577], in[1552], in[1527], in[1502], in[1477], in[1452], in[1427], in[1402], in[1377], in[1352], in[1327], in[1302], in[1277], in[1252], in[1227], in[1202], in[1177], in[1152], in[1127], in[1102], in[1077], in[1052], in[1027], in[1002], in[ 977], in[ 952], in[ 927], in[ 902], in[ 877], in[ 852], in[ 827], in[ 802], in[ 777], in[ 752], in[ 727], in[ 702], in[ 677], in[ 652], in[ 627], in[ 602], in[ 577], in[ 552], in[ 527], in[ 502], in[ 477], in[ 452], in[ 427], in[ 402], in[ 377], in[ 352], in[ 327], in[ 302], in[ 277], in[ 252], in[ 227], in[ 202], in[ 177], in[ 152], in[ 127], in[ 102], in[ 77], in[ 52], in[ 27], in[ 2], in[1576], in[1551], in[1526], in[1501], in[1476], in[1451], in[1426], in[1401], in[1376], in[1351], in[1326], in[1301], in[1276], in[1251], in[1226], in[1201], in[1176], in[1151], in[1126], in[1101], in[1076], in[1051], in[1026], in[1001], in[ 976], in[ 951], in[ 926], in[ 901], in[ 876], in[ 851], in[ 826], in[ 801], in[ 776], in[ 751], in[ 726], in[ 701], in[ 676], in[ 651], in[ 626], in[ 601], in[ 576], in[ 551], in[ 526], in[ 501], in[ 476], in[ 451], in[ 426], in[ 401], in[ 376], in[ 351], in[ 326], in[ 301], in[ 276], in[ 251], in[ 226], in[ 201], in[ 176], in[ 151], in[ 126], in[ 101], in[ 76], in[ 51], in[ 26], in[ 1], in[1575], in[1550], in[1525], in[1500], in[1475], in[1450], in[1425], in[1400], in[1375], in[1350], in[1325], in[1300], in[1275], in[1250], in[1225], in[1200], in[1175], in[1150], in[1125], in[1100], in[1075], in[1050], in[1025], in[1000], in[ 975], in[ 950], in[ 925], in[ 900], in[ 875], in[ 850], in[ 825], in[ 800], in[ 775], in[ 750], in[ 725], in[ 700], in[ 675], in[ 650], in[ 625], in[ 600], in[ 575], in[ 550], in[ 525], in[ 500], in[ 475], in[ 450], in[ 425], in[ 400], in[ 375], in[ 350], in[ 325], in[ 300], in[ 275], in[ 250], in[ 225], in[ 200], in[ 175], in[ 150], in[ 125], in[ 100], in[ 75], in[ 50], in[ 25], in[ 0] }; $display("%s", comment); $display("%16x %16x %16x %16x %16x", out[ 63: 0], out[ 127: 64], out[ 191: 128], out[ 255: 192], out[ 319: 256]); $display("%16x %16x %16x %16x %16x", out[ 383: 320], out[ 447: 384], out[ 511: 448], out[ 575: 512], out[ 639: 576]); $display("%16x %16x %16x %16x %16x", out[ 703: 640], out[ 767: 704], out[ 831: 768], out[ 895: 832], out[ 959: 896]); $display("%16x %16x %16x %16x %16x", out[1023: 960], out[1087:1024], out[1151:1088], out[1215:1152], out[1279:1216]); $display("%16x %16x %16x %16x %16x", out[1343:1280], out[1407:1344], out[1471:1408], out[1535:1472], out[1599:1536]); $display("================================================================================"); end endtask // pretty_print endmodule // keccak module keccak_tb(); reg CLK; // System clock reg RSTn; // Negative reset reg EN; // Enable reg Mrdy; // Set High for message input reg Init; // Set High for the first message input reg EoM; // Set High for the last message input reg [1599:0] M; // Message input wire BSY; // Busy flag wire [1599:0] H; // Hash output keccak keccak(.CLK(CLK), .RSTn(RSTn), .EN(EN), .Mrdy(Mrdy), .Init(Init), .EoM(EoM), .M(M), .BSY(BSY), .H(H)); parameter PERIOD = 10; initial CLK <= 1'b1; always #(PERIOD/2) CLK <= ~CLK; initial begin #(PERIOD/2) RSTn <= 1'b0; EN <= 1'b1; Mrdy <= 1'b0; M <= 1600'h0; EoM <= 1'b0; #(PERIOD) RSTn <= 1'b1; #(PERIOD) Mrdy <= 1'b1; #(PERIOD) Mrdy <= 1'b0; #(PERIOD*30) Mrdy <= 1'b1; #(PERIOD) Mrdy <= 1'b0; end endmodule // keccak_tb module keccak_unroll_tb(); reg [1599:0] in; wire [1599:0] out; keccak_fun keccak_fun(.in(in), .out(out)); initial begin in <= 1600'h0; # 10 //pretty_print(keccak_fun.round00_in, "round00_in"); //pretty_print(keccak_fun.round_f00.theta_out, "round00_theta_out"); //pretty_print(keccak_fun.round_f00.rho_out, "round00_rho_out"); //pretty_print(keccak_fun.round_f00.pi_out, "round00_pi_out"); //pretty_print(keccak_fun.round_f00.chi_out, "round00_chi_out"); //pretty_print(keccak_fun.round_f00.iota_out, "round00_iota_out"); //pretty_print(keccak_fun.round01_in, "round01_in"); //pretty_print(keccak_fun.round_f01.theta_out, "round01_theta_out"); //pretty_print(keccak_fun.round_f01.rho_out, "round01_rho_out"); //pretty_print(keccak_fun.round_f01.pi_out, "round01_pi_out"); //pretty_print(keccak_fun.round_f01.chi_out, "round01_chi_out"); //pretty_print(keccak_fun.round_f01.iota_out, "round01_iota_out"); //pretty_print(keccak_fun.round02_in, "round02_in"); //pretty_print(keccak_fun.round03_in, "round03_in"); //pretty_print(keccak_fun.round04_in, "round04_in"); //pretty_print(keccak_fun.round05_in, "round05_in"); pretty_print(keccak_fun.round10_in, "round10_in"); pretty_print(keccak_fun.round23_out, "round23_out"); # 10 in <= out; # 10 pretty_print(keccak_fun.round00_in, "round00_in"); pretty_print(keccak_fun.round23_out, "round23_out"); $display("%x", out); end task pretty_print_plane; input [319:0] in; input [128:0] comment; reg [319:0] out; begin out = { in[ 0], in[ 5], in[ 10], in[ 15], in[ 20], in[ 25], in[ 30], in[ 35], in[ 40], in[ 45], in[ 50], in[ 55], in[ 60], in[ 65], in[ 70], in[ 75], in[ 80], in[ 85], in[ 90], in[ 95], in[100], in[105], in[110], in[115], in[120], in[125], in[130], in[135], in[140], in[145], in[150], in[155], in[160], in[165], in[170], in[175], in[180], in[185], in[190], in[195], in[200], in[205], in[210], in[215], in[220], in[225], in[230], in[235], in[240], in[245], in[250], in[255], in[260], in[265], in[270], in[275], in[280], in[285], in[290], in[295], in[300], in[305], in[310], in[315], in[ 1], in[ 6], in[ 11], in[ 16], in[ 21], in[ 26], in[ 31], in[ 36], in[ 41], in[ 46], in[ 51], in[ 56], in[ 61], in[ 66], in[ 71], in[ 76], in[ 81], in[ 86], in[ 91], in[ 96], in[101], in[106], in[111], in[116], in[121], in[126], in[131], in[136], in[141], in[146], in[151], in[156], in[161], in[166], in[171], in[176], in[181], in[186], in[191], in[196], in[201], in[206], in[211], in[216], in[221], in[226], in[231], in[236], in[241], in[246], in[251], in[256], in[261], in[266], in[271], in[276], in[281], in[286], in[291], in[296], in[301], in[306], in[311], in[316], in[ 2], in[ 7], in[ 12], in[ 17], in[ 22], in[ 27], in[ 32], in[ 37], in[ 42], in[ 47], in[ 52], in[ 57], in[ 62], in[ 67], in[ 72], in[ 77], in[ 82], in[ 87], in[ 92], in[ 97], in[102], in[107], in[112], in[117], in[122], in[127], in[132], in[137], in[142], in[147], in[152], in[157], in[162], in[167], in[172], in[177], in[182], in[187], in[192], in[197], in[202], in[207], in[212], in[217], in[222], in[227], in[232], in[237], in[242], in[247], in[252], in[257], in[262], in[267], in[272], in[277], in[282], in[287], in[292], in[297], in[302], in[307], in[312], in[317], in[ 3], in[ 8], in[ 13], in[ 18], in[ 23], in[ 28], in[ 33], in[ 38], in[ 43], in[ 48], in[ 53], in[ 58], in[ 63], in[ 68], in[ 73], in[ 78], in[ 83], in[ 88], in[ 93], in[ 98], in[103], in[108], in[113], in[118], in[123], in[128], in[133], in[138], in[143], in[148], in[153], in[158], in[163], in[168], in[173], in[178], in[183], in[188], in[193], in[198], in[203], in[208], in[213], in[218], in[223], in[228], in[233], in[238], in[243], in[248], in[253], in[258], in[263], in[268], in[273], in[278], in[283], in[288], in[293], in[298], in[303], in[308], in[313], in[318], in[ 4], in[ 9], in[ 14], in[ 19], in[ 24], in[ 29], in[ 34], in[ 39], in[ 44], in[ 49], in[ 54], in[ 59], in[ 64], in[ 69], in[ 74], in[ 79], in[ 84], in[ 89], in[ 94], in[ 99], in[104], in[109], in[114], in[119], in[124], in[129], in[134], in[139], in[144], in[149], in[154], in[159], in[164], in[169], in[174], in[179], in[184], in[189], in[194], in[199], in[204], in[209], in[214], in[219], in[224], in[229], in[234], in[239], in[244], in[249], in[254], in[259], in[264], in[269], in[274], in[279], in[284], in[289], in[294], in[299], in[304], in[309], in[314], in[319] }; $display("%s", comment); $display("%16x", out[ 63: 0]); $display("%16x", out[ 127: 64]); $display("%16x", out[ 191: 128]); $display("%16x", out[ 255: 192]); $display("%16x", out[ 319: 256]); $display(""); end endtask // pretty_print task pretty_print; input [1599:0] in; input [128:0] comment; reg [1599:0] out; begin out = { in[1599], in[1574], in[1549], in[1524], in[1499], in[1474], in[1449], in[1424], in[1399], in[1374], in[1349], in[1324], in[1299], in[1274], in[1249], in[1224], in[1199], in[1174], in[1149], in[1124], in[1099], in[1074], in[1049], in[1024], in[ 999], in[ 974], in[ 949], in[ 924], in[ 899], in[ 874], in[ 849], in[ 824], in[ 799], in[ 774], in[ 749], in[ 724], in[ 699], in[ 674], in[ 649], in[ 624], in[ 599], in[ 574], in[ 549], in[ 524], in[ 499], in[ 474], in[ 449], in[ 424], in[ 399], in[ 374], in[ 349], in[ 324], in[ 299], in[ 274], in[ 249], in[ 224], in[ 199], in[ 174], in[ 149], in[ 124], in[ 99], in[ 74], in[ 49], in[ 24], in[1598], in[1573], in[1548], in[1523], in[1498], in[1473], in[1448], in[1423], in[1398], in[1373], in[1348], in[1323], in[1298], in[1273], in[1248], in[1223], in[1198], in[1173], in[1148], in[1123], in[1098], in[1073], in[1048], in[1023], in[ 998], in[ 973], in[ 948], in[ 923], in[ 898], in[ 873], in[ 848], in[ 823], in[ 798], in[ 773], in[ 748], in[ 723], in[ 698], in[ 673], in[ 648], in[ 623], in[ 598], in[ 573], in[ 548], in[ 523], in[ 498], in[ 473], in[ 448], in[ 423], in[ 398], in[ 373], in[ 348], in[ 323], in[ 298], in[ 273], in[ 248], in[ 223], in[ 198], in[ 173], in[ 148], in[ 123], in[ 98], in[ 73], in[ 48], in[ 23], in[1597], in[1572], in[1547], in[1522], in[1497], in[1472], in[1447], in[1422], in[1397], in[1372], in[1347], in[1322], in[1297], in[1272], in[1247], in[1222], in[1197], in[1172], in[1147], in[1122], in[1097], in[1072], in[1047], in[1022], in[ 997], in[ 972], in[ 947], in[ 922], in[ 897], in[ 872], in[ 847], in[ 822], in[ 797], in[ 772], in[ 747], in[ 722], in[ 697], in[ 672], in[ 647], in[ 622], in[ 597], in[ 572], in[ 547], in[ 522], in[ 497], in[ 472], in[ 447], in[ 422], in[ 397], in[ 372], in[ 347], in[ 322], in[ 297], in[ 272], in[ 247], in[ 222], in[ 197], in[ 172], in[ 147], in[ 122], in[ 97], in[ 72], in[ 47], in[ 22], in[1596], in[1571], in[1546], in[1521], in[1496], in[1471], in[1446], in[1421], in[1396], in[1371], in[1346], in[1321], in[1296], in[1271], in[1246], in[1221], in[1196], in[1171], in[1146], in[1121], in[1096], in[1071], in[1046], in[1021], in[ 996], in[ 971], in[ 946], in[ 921], in[ 896], in[ 871], in[ 846], in[ 821], in[ 796], in[ 771], in[ 746], in[ 721], in[ 696], in[ 671], in[ 646], in[ 621], in[ 596], in[ 571], in[ 546], in[ 521], in[ 496], in[ 471], in[ 446], in[ 421], in[ 396], in[ 371], in[ 346], in[ 321], in[ 296], in[ 271], in[ 246], in[ 221], in[ 196], in[ 171], in[ 146], in[ 121], in[ 96], in[ 71], in[ 46], in[ 21], in[1595], in[1570], in[1545], in[1520], in[1495], in[1470], in[1445], in[1420], in[1395], in[1370], in[1345], in[1320], in[1295], in[1270], in[1245], in[1220], in[1195], in[1170], in[1145], in[1120], in[1095], in[1070], in[1045], in[1020], in[ 995], in[ 970], in[ 945], in[ 920], in[ 895], in[ 870], in[ 845], in[ 820], in[ 795], in[ 770], in[ 745], in[ 720], in[ 695], in[ 670], in[ 645], in[ 620], in[ 595], in[ 570], in[ 545], in[ 520], in[ 495], in[ 470], in[ 445], in[ 420], in[ 395], in[ 370], in[ 345], in[ 320], in[ 295], in[ 270], in[ 245], in[ 220], in[ 195], in[ 170], in[ 145], in[ 120], in[ 95], in[ 70], in[ 45], in[ 20], in[1594], in[1569], in[1544], in[1519], in[1494], in[1469], in[1444], in[1419], in[1394], in[1369], in[1344], in[1319], in[1294], in[1269], in[1244], in[1219], in[1194], in[1169], in[1144], in[1119], in[1094], in[1069], in[1044], in[1019], in[ 994], in[ 969], in[ 944], in[ 919], in[ 894], in[ 869], in[ 844], in[ 819], in[ 794], in[ 769], in[ 744], in[ 719], in[ 694], in[ 669], in[ 644], in[ 619], in[ 594], in[ 569], in[ 544], in[ 519], in[ 494], in[ 469], in[ 444], in[ 419], in[ 394], in[ 369], in[ 344], in[ 319], in[ 294], in[ 269], in[ 244], in[ 219], in[ 194], in[ 169], in[ 144], in[ 119], in[ 94], in[ 69], in[ 44], in[ 19], in[1593], in[1568], in[1543], in[1518], in[1493], in[1468], in[1443], in[1418], in[1393], in[1368], in[1343], in[1318], in[1293], in[1268], in[1243], in[1218], in[1193], in[1168], in[1143], in[1118], in[1093], in[1068], in[1043], in[1018], in[ 993], in[ 968], in[ 943], in[ 918], in[ 893], in[ 868], in[ 843], in[ 818], in[ 793], in[ 768], in[ 743], in[ 718], in[ 693], in[ 668], in[ 643], in[ 618], in[ 593], in[ 568], in[ 543], in[ 518], in[ 493], in[ 468], in[ 443], in[ 418], in[ 393], in[ 368], in[ 343], in[ 318], in[ 293], in[ 268], in[ 243], in[ 218], in[ 193], in[ 168], in[ 143], in[ 118], in[ 93], in[ 68], in[ 43], in[ 18], in[1592], in[1567], in[1542], in[1517], in[1492], in[1467], in[1442], in[1417], in[1392], in[1367], in[1342], in[1317], in[1292], in[1267], in[1242], in[1217], in[1192], in[1167], in[1142], in[1117], in[1092], in[1067], in[1042], in[1017], in[ 992], in[ 967], in[ 942], in[ 917], in[ 892], in[ 867], in[ 842], in[ 817], in[ 792], in[ 767], in[ 742], in[ 717], in[ 692], in[ 667], in[ 642], in[ 617], in[ 592], in[ 567], in[ 542], in[ 517], in[ 492], in[ 467], in[ 442], in[ 417], in[ 392], in[ 367], in[ 342], in[ 317], in[ 292], in[ 267], in[ 242], in[ 217], in[ 192], in[ 167], in[ 142], in[ 117], in[ 92], in[ 67], in[ 42], in[ 17], in[1591], in[1566], in[1541], in[1516], in[1491], in[1466], in[1441], in[1416], in[1391], in[1366], in[1341], in[1316], in[1291], in[1266], in[1241], in[1216], in[1191], in[1166], in[1141], in[1116], in[1091], in[1066], in[1041], in[1016], in[ 991], in[ 966], in[ 941], in[ 916], in[ 891], in[ 866], in[ 841], in[ 816], in[ 791], in[ 766], in[ 741], in[ 716], in[ 691], in[ 666], in[ 641], in[ 616], in[ 591], in[ 566], in[ 541], in[ 516], in[ 491], in[ 466], in[ 441], in[ 416], in[ 391], in[ 366], in[ 341], in[ 316], in[ 291], in[ 266], in[ 241], in[ 216], in[ 191], in[ 166], in[ 141], in[ 116], in[ 91], in[ 66], in[ 41], in[ 16], in[1590], in[1565], in[1540], in[1515], in[1490], in[1465], in[1440], in[1415], in[1390], in[1365], in[1340], in[1315], in[1290], in[1265], in[1240], in[1215], in[1190], in[1165], in[1140], in[1115], in[1090], in[1065], in[1040], in[1015], in[ 990], in[ 965], in[ 940], in[ 915], in[ 890], in[ 865], in[ 840], in[ 815], in[ 790], in[ 765], in[ 740], in[ 715], in[ 690], in[ 665], in[ 640], in[ 615], in[ 590], in[ 565], in[ 540], in[ 515], in[ 490], in[ 465], in[ 440], in[ 415], in[ 390], in[ 365], in[ 340], in[ 315], in[ 290], in[ 265], in[ 240], in[ 215], in[ 190], in[ 165], in[ 140], in[ 115], in[ 90], in[ 65], in[ 40], in[ 15], in[1589], in[1564], in[1539], in[1514], in[1489], in[1464], in[1439], in[1414], in[1389], in[1364], in[1339], in[1314], in[1289], in[1264], in[1239], in[1214], in[1189], in[1164], in[1139], in[1114], in[1089], in[1064], in[1039], in[1014], in[ 989], in[ 964], in[ 939], in[ 914], in[ 889], in[ 864], in[ 839], in[ 814], in[ 789], in[ 764], in[ 739], in[ 714], in[ 689], in[ 664], in[ 639], in[ 614], in[ 589], in[ 564], in[ 539], in[ 514], in[ 489], in[ 464], in[ 439], in[ 414], in[ 389], in[ 364], in[ 339], in[ 314], in[ 289], in[ 264], in[ 239], in[ 214], in[ 189], in[ 164], in[ 139], in[ 114], in[ 89], in[ 64], in[ 39], in[ 14], in[1588], in[1563], in[1538], in[1513], in[1488], in[1463], in[1438], in[1413], in[1388], in[1363], in[1338], in[1313], in[1288], in[1263], in[1238], in[1213], in[1188], in[1163], in[1138], in[1113], in[1088], in[1063], in[1038], in[1013], in[ 988], in[ 963], in[ 938], in[ 913], in[ 888], in[ 863], in[ 838], in[ 813], in[ 788], in[ 763], in[ 738], in[ 713], in[ 688], in[ 663], in[ 638], in[ 613], in[ 588], in[ 563], in[ 538], in[ 513], in[ 488], in[ 463], in[ 438], in[ 413], in[ 388], in[ 363], in[ 338], in[ 313], in[ 288], in[ 263], in[ 238], in[ 213], in[ 188], in[ 163], in[ 138], in[ 113], in[ 88], in[ 63], in[ 38], in[ 13], in[1587], in[1562], in[1537], in[1512], in[1487], in[1462], in[1437], in[1412], in[1387], in[1362], in[1337], in[1312], in[1287], in[1262], in[1237], in[1212], in[1187], in[1162], in[1137], in[1112], in[1087], in[1062], in[1037], in[1012], in[ 987], in[ 962], in[ 937], in[ 912], in[ 887], in[ 862], in[ 837], in[ 812], in[ 787], in[ 762], in[ 737], in[ 712], in[ 687], in[ 662], in[ 637], in[ 612], in[ 587], in[ 562], in[ 537], in[ 512], in[ 487], in[ 462], in[ 437], in[ 412], in[ 387], in[ 362], in[ 337], in[ 312], in[ 287], in[ 262], in[ 237], in[ 212], in[ 187], in[ 162], in[ 137], in[ 112], in[ 87], in[ 62], in[ 37], in[ 12], in[1586], in[1561], in[1536], in[1511], in[1486], in[1461], in[1436], in[1411], in[1386], in[1361], in[1336], in[1311], in[1286], in[1261], in[1236], in[1211], in[1186], in[1161], in[1136], in[1111], in[1086], in[1061], in[1036], in[1011], in[ 986], in[ 961], in[ 936], in[ 911], in[ 886], in[ 861], in[ 836], in[ 811], in[ 786], in[ 761], in[ 736], in[ 711], in[ 686], in[ 661], in[ 636], in[ 611], in[ 586], in[ 561], in[ 536], in[ 511], in[ 486], in[ 461], in[ 436], in[ 411], in[ 386], in[ 361], in[ 336], in[ 311], in[ 286], in[ 261], in[ 236], in[ 211], in[ 186], in[ 161], in[ 136], in[ 111], in[ 86], in[ 61], in[ 36], in[ 11], in[1585], in[1560], in[1535], in[1510], in[1485], in[1460], in[1435], in[1410], in[1385], in[1360], in[1335], in[1310], in[1285], in[1260], in[1235], in[1210], in[1185], in[1160], in[1135], in[1110], in[1085], in[1060], in[1035], in[1010], in[ 985], in[ 960], in[ 935], in[ 910], in[ 885], in[ 860], in[ 835], in[ 810], in[ 785], in[ 760], in[ 735], in[ 710], in[ 685], in[ 660], in[ 635], in[ 610], in[ 585], in[ 560], in[ 535], in[ 510], in[ 485], in[ 460], in[ 435], in[ 410], in[ 385], in[ 360], in[ 335], in[ 310], in[ 285], in[ 260], in[ 235], in[ 210], in[ 185], in[ 160], in[ 135], in[ 110], in[ 85], in[ 60], in[ 35], in[ 10], in[1584], in[1559], in[1534], in[1509], in[1484], in[1459], in[1434], in[1409], in[1384], in[1359], in[1334], in[1309], in[1284], in[1259], in[1234], in[1209], in[1184], in[1159], in[1134], in[1109], in[1084], in[1059], in[1034], in[1009], in[ 984], in[ 959], in[ 934], in[ 909], in[ 884], in[ 859], in[ 834], in[ 809], in[ 784], in[ 759], in[ 734], in[ 709], in[ 684], in[ 659], in[ 634], in[ 609], in[ 584], in[ 559], in[ 534], in[ 509], in[ 484], in[ 459], in[ 434], in[ 409], in[ 384], in[ 359], in[ 334], in[ 309], in[ 284], in[ 259], in[ 234], in[ 209], in[ 184], in[ 159], in[ 134], in[ 109], in[ 84], in[ 59], in[ 34], in[ 9], in[1583], in[1558], in[1533], in[1508], in[1483], in[1458], in[1433], in[1408], in[1383], in[1358], in[1333], in[1308], in[1283], in[1258], in[1233], in[1208], in[1183], in[1158], in[1133], in[1108], in[1083], in[1058], in[1033], in[1008], in[ 983], in[ 958], in[ 933], in[ 908], in[ 883], in[ 858], in[ 833], in[ 808], in[ 783], in[ 758], in[ 733], in[ 708], in[ 683], in[ 658], in[ 633], in[ 608], in[ 583], in[ 558], in[ 533], in[ 508], in[ 483], in[ 458], in[ 433], in[ 408], in[ 383], in[ 358], in[ 333], in[ 308], in[ 283], in[ 258], in[ 233], in[ 208], in[ 183], in[ 158], in[ 133], in[ 108], in[ 83], in[ 58], in[ 33], in[ 8], in[1582], in[1557], in[1532], in[1507], in[1482], in[1457], in[1432], in[1407], in[1382], in[1357], in[1332], in[1307], in[1282], in[1257], in[1232], in[1207], in[1182], in[1157], in[1132], in[1107], in[1082], in[1057], in[1032], in[1007], in[ 982], in[ 957], in[ 932], in[ 907], in[ 882], in[ 857], in[ 832], in[ 807], in[ 782], in[ 757], in[ 732], in[ 707], in[ 682], in[ 657], in[ 632], in[ 607], in[ 582], in[ 557], in[ 532], in[ 507], in[ 482], in[ 457], in[ 432], in[ 407], in[ 382], in[ 357], in[ 332], in[ 307], in[ 282], in[ 257], in[ 232], in[ 207], in[ 182], in[ 157], in[ 132], in[ 107], in[ 82], in[ 57], in[ 32], in[ 7], in[1581], in[1556], in[1531], in[1506], in[1481], in[1456], in[1431], in[1406], in[1381], in[1356], in[1331], in[1306], in[1281], in[1256], in[1231], in[1206], in[1181], in[1156], in[1131], in[1106], in[1081], in[1056], in[1031], in[1006], in[ 981], in[ 956], in[ 931], in[ 906], in[ 881], in[ 856], in[ 831], in[ 806], in[ 781], in[ 756], in[ 731], in[ 706], in[ 681], in[ 656], in[ 631], in[ 606], in[ 581], in[ 556], in[ 531], in[ 506], in[ 481], in[ 456], in[ 431], in[ 406], in[ 381], in[ 356], in[ 331], in[ 306], in[ 281], in[ 256], in[ 231], in[ 206], in[ 181], in[ 156], in[ 131], in[ 106], in[ 81], in[ 56], in[ 31], in[ 6], in[1580], in[1555], in[1530], in[1505], in[1480], in[1455], in[1430], in[1405], in[1380], in[1355], in[1330], in[1305], in[1280], in[1255], in[1230], in[1205], in[1180], in[1155], in[1130], in[1105], in[1080], in[1055], in[1030], in[1005], in[ 980], in[ 955], in[ 930], in[ 905], in[ 880], in[ 855], in[ 830], in[ 805], in[ 780], in[ 755], in[ 730], in[ 705], in[ 680], in[ 655], in[ 630], in[ 605], in[ 580], in[ 555], in[ 530], in[ 505], in[ 480], in[ 455], in[ 430], in[ 405], in[ 380], in[ 355], in[ 330], in[ 305], in[ 280], in[ 255], in[ 230], in[ 205], in[ 180], in[ 155], in[ 130], in[ 105], in[ 80], in[ 55], in[ 30], in[ 5], in[1579], in[1554], in[1529], in[1504], in[1479], in[1454], in[1429], in[1404], in[1379], in[1354], in[1329], in[1304], in[1279], in[1254], in[1229], in[1204], in[1179], in[1154], in[1129], in[1104], in[1079], in[1054], in[1029], in[1004], in[ 979], in[ 954], in[ 929], in[ 904], in[ 879], in[ 854], in[ 829], in[ 804], in[ 779], in[ 754], in[ 729], in[ 704], in[ 679], in[ 654], in[ 629], in[ 604], in[ 579], in[ 554], in[ 529], in[ 504], in[ 479], in[ 454], in[ 429], in[ 404], in[ 379], in[ 354], in[ 329], in[ 304], in[ 279], in[ 254], in[ 229], in[ 204], in[ 179], in[ 154], in[ 129], in[ 104], in[ 79], in[ 54], in[ 29], in[ 4], in[1578], in[1553], in[1528], in[1503], in[1478], in[1453], in[1428], in[1403], in[1378], in[1353], in[1328], in[1303], in[1278], in[1253], in[1228], in[1203], in[1178], in[1153], in[1128], in[1103], in[1078], in[1053], in[1028], in[1003], in[ 978], in[ 953], in[ 928], in[ 903], in[ 878], in[ 853], in[ 828], in[ 803], in[ 778], in[ 753], in[ 728], in[ 703], in[ 678], in[ 653], in[ 628], in[ 603], in[ 578], in[ 553], in[ 528], in[ 503], in[ 478], in[ 453], in[ 428], in[ 403], in[ 378], in[ 353], in[ 328], in[ 303], in[ 278], in[ 253], in[ 228], in[ 203], in[ 178], in[ 153], in[ 128], in[ 103], in[ 78], in[ 53], in[ 28], in[ 3], in[1577], in[1552], in[1527], in[1502], in[1477], in[1452], in[1427], in[1402], in[1377], in[1352], in[1327], in[1302], in[1277], in[1252], in[1227], in[1202], in[1177], in[1152], in[1127], in[1102], in[1077], in[1052], in[1027], in[1002], in[ 977], in[ 952], in[ 927], in[ 902], in[ 877], in[ 852], in[ 827], in[ 802], in[ 777], in[ 752], in[ 727], in[ 702], in[ 677], in[ 652], in[ 627], in[ 602], in[ 577], in[ 552], in[ 527], in[ 502], in[ 477], in[ 452], in[ 427], in[ 402], in[ 377], in[ 352], in[ 327], in[ 302], in[ 277], in[ 252], in[ 227], in[ 202], in[ 177], in[ 152], in[ 127], in[ 102], in[ 77], in[ 52], in[ 27], in[ 2], in[1576], in[1551], in[1526], in[1501], in[1476], in[1451], in[1426], in[1401], in[1376], in[1351], in[1326], in[1301], in[1276], in[1251], in[1226], in[1201], in[1176], in[1151], in[1126], in[1101], in[1076], in[1051], in[1026], in[1001], in[ 976], in[ 951], in[ 926], in[ 901], in[ 876], in[ 851], in[ 826], in[ 801], in[ 776], in[ 751], in[ 726], in[ 701], in[ 676], in[ 651], in[ 626], in[ 601], in[ 576], in[ 551], in[ 526], in[ 501], in[ 476], in[ 451], in[ 426], in[ 401], in[ 376], in[ 351], in[ 326], in[ 301], in[ 276], in[ 251], in[ 226], in[ 201], in[ 176], in[ 151], in[ 126], in[ 101], in[ 76], in[ 51], in[ 26], in[ 1], in[1575], in[1550], in[1525], in[1500], in[1475], in[1450], in[1425], in[1400], in[1375], in[1350], in[1325], in[1300], in[1275], in[1250], in[1225], in[1200], in[1175], in[1150], in[1125], in[1100], in[1075], in[1050], in[1025], in[1000], in[ 975], in[ 950], in[ 925], in[ 900], in[ 875], in[ 850], in[ 825], in[ 800], in[ 775], in[ 750], in[ 725], in[ 700], in[ 675], in[ 650], in[ 625], in[ 600], in[ 575], in[ 550], in[ 525], in[ 500], in[ 475], in[ 450], in[ 425], in[ 400], in[ 375], in[ 350], in[ 325], in[ 300], in[ 275], in[ 250], in[ 225], in[ 200], in[ 175], in[ 150], in[ 125], in[ 100], in[ 75], in[ 50], in[ 25], in[ 0] }; $display("%s", comment); $display("%16x %16x %16x %16x %16x", out[ 63: 0], out[ 127: 64], out[ 191: 128], out[ 255: 192], out[ 319: 256]); $display("%16x %16x %16x %16x %16x", out[ 383: 320], out[ 447: 384], out[ 511: 448], out[ 575: 512], out[ 639: 576]); $display("%16x %16x %16x %16x %16x", out[ 703: 640], out[ 767: 704], out[ 831: 768], out[ 895: 832], out[ 959: 896]); $display("%16x %16x %16x %16x %16x", out[1023: 960], out[1087:1024], out[1151:1088], out[1215:1152], out[1279:1216]); $display("%16x %16x %16x %16x %16x", out[1343:1280], out[1407:1344], out[1471:1408], out[1535:1472], out[1599:1536]); $display("================================================================================"); end endtask // pretty_print endmodule // keccak_tb