Knowledge

Handel-C

Source 📝

562:. Whilst this FIFO neither full nor empty, both sending and receiving threads may proceed without being blocked. However, when the FIFO is empty, the receiving thread will block at the next read. When it is full, the sending thread will block at the next send. A channel with actors in differing 1100: 935:
Handel-C was adopted by many University Hardware Research groups after its release by ESL, as a result was able to establish itself as a hardware design tool of choice within the academic community, especially in the United Kingdom.
375:
until the corresponding listening thread is ready to receive the message. Likewise the receiving thread will block on a read statement until the sending thread executes the next send. Thus they may be used as a means of
573:
A thread may simultaneously wait on multiple channels, synchronous or asynchronous, acting upon the first one available given a specified order of priority or optionally executing an alternate path if none is ready.
247:
Handel-C can be compiled to a number of HDLs and then synthesised to the corresponding hardware. This frees developers to concentrate on the programming task at hand rather than the
371:. Channels can be defined as asynchronous or synchronous (with or without an inferred storage element respectively). A thread writing to a synchronous channel will be immediately 683:
have on the timing of the program, the following keywords are reserved for describing the practicalities of the FPGA environment or for the language elements sourced from Occam:
912:
In Handel-C, assignment and the delay command take one cycle. All other operations are "free". This allows programmers to manually schedule tasks and create effective
928:
hardware description languages developed by the hardware compilation group. Handel HDL evolved into Handel-C around early 1996. The technology developed at Oxford was
916:. By arranging loops in parallel with the correct delays, pipelines can massively increase data throughput, at the expense of increased hardware resource use. 1172: 1046: 1015: 1723: 1195: 1718: 939:
In early 2008, Celoxica's ESL business was acquired by Agility, which developed and sold, among other products, ESL tools supporting Handel-C.
925: 51: 1728: 1133: 1373: 1343: 172: 64: 377: 284: 193: 1217: 1165: 559: 1358: 217: 39: 961: 932:
to mature as a cornerstone product for Embedded Solutions Limited (ESL) in 1996. ESL was renamed Celoxica in September 2000.
1403: 1284: 1205: 240: 567: 197: 1398: 1158: 965: 83: 586:) in which they were declared, the scope is hierarchical in nature as declarations are in scope within sub blocks. 288: 1222: 1181: 264: 1640: 1378: 1264: 1247: 1232: 1227: 1106:
Ahmed Ablak; Issam Damaj; American University of Kuwait (2016). "HTCC: Haskell to Handel-C Hardware Compiler".
229: 189: 1617: 1022: 221: 558:
Asynchronous channels provide a specified amount of storage for data passing through them in the form of a
1558: 1444: 680: 112: 35: 31: 27: 1568: 1459: 1449: 1274: 953: 563: 360: 244: 942:
In early 2009, Agility ceased operations after failing to obtain further capital investments or credit
1632: 1579: 1464: 1363: 1269: 913: 372: 209: 22: 1677: 1533: 1259: 1237: 1077: 981: 268: 225: 1553: 1469: 1139: 1111: 368: 280: 233: 135: 58: 1484: 1331: 1129: 1062: 1040: 929: 566:
is automatically asynchronous due to the need for at least one element of storage to mitigate
259:
Handel-C's subset of C includes all common C language features necessary to describe complex
1353: 1200: 1121: 123: 1587: 946: 364: 108: 46: 952:
Other subset C HDL's that developed around the same time are Transmogrifier C in 1994 at
1689: 128: 116: 1712: 1660: 1645: 1517: 1439: 1326: 1143: 1602: 1592: 1242: 248: 267:
data types were omitted. Floating point arithmetic is supported through external
149: 1388: 1302: 1210: 1094: 104: 99: 1607: 1538: 1507: 1319: 260: 1672: 1667: 1650: 1612: 1419: 1297: 969: 1655: 1548: 1479: 1424: 1383: 1314: 986: 1125: 1622: 1512: 1474: 1338: 1292: 287:(CSP) keywords are used, along with the general file structure of the 1684: 1543: 1368: 1252: 1150: 877: 663:/* "a", "b" and "d" are within scope */ 645:/* "a", "b" and "c" are within scope */ 212:
aimed at low-level hardware and is most commonly used in programming
547:// this has the effect of blocking the sending thread between writes 1116: 1454: 1434: 1393: 957: 535:// perform a sequence of 10 reads from the channel into variable x 1597: 1309: 213: 1154: 1429: 544:// introduce a delay of 1 clock cycle between successive reads 582:
The scope of declarations are limited to the code blocks (
1108:
2016 Euromicro Conference on Digital System Design (DSD)
472:// send the values 0 to 9 sequentially into the channel 630:/* "a" and "b" are within scope */ 679:
In addition to the effects the standard semantics of
924:
The historical roots of Handel-C are in a series of
1631: 1578: 1567: 1526: 1500: 1493: 1412: 1283: 1188: 183: 170: 144: 134: 122: 98: 82: 70: 57: 45: 21: 1010: 1008: 1006: 1004: 1002: 251:of a specific design language and architecture. 216:. Handel-C is to hardware design what the first 1166: 8: 16: 1575: 1497: 1173: 1159: 1151: 1078:"Mentor buys Agility's C synthesis assets" 232:programming language, with an emphasis on 15: 1115: 279:In order to facilitate a way to describe 63:ESL; Celoxica; Agility; Mentor Graphics; 685: 210:high-level hardware description language 998: 949:acquired Agility's C synthesis assets. 1045:: CS1 maint: archived copy as title ( 1038: 960:open source project) and Streams-C at 926:Oxford University Computing Laboratory 52:Oxford University Computing Laboratory 7: 1063:"Agility DS victim of credit crunch" 1051:Handel-C Language Reference Manual 285:communicating sequential processes 263:. Like many embedded C compilers, 14: 1076:Dylan McGrath (22 January 2009). 1061:Gabe Moretti (19 January 2009). 966:Impulse Accelerated Technologies 403:// declare a synchronous channel 218:high-level programming languages 703:< ... > (type clarifier) 129:Cross-platform (multi-platform) 1724:Hardware description languages 962:Los Alamos National Laboratory 1: 1719:C programming language family 243:(HDL) that target a specific 1729:Electronic design automation 675:Extensions to the C language 1095:Handel-C language resources 747:@ (concatenation operator) 1745: 578:Scope and variable sharing 289:Occam programming language 478:// begin receiving thread 271:that are very efficient. 241:hardware design languages 188: 178: 94: 78: 1265:Circuit underutilization 1248:Reconfigurable computing 591: 382: 363:provide a mechanism for 296: 415:// begin sending thread 717:? (read from channel) 714:(bit range selection) 706:! (send into channel) 1275:Hardware acceleration 954:University of Toronto 245:computer architecture 1465:Microchip Technology 1270:High-level synthesis 1110:. pp. 192–199. 220:were to programming 1534:Intel Quartus Prime 1260:Soft microprocessor 1126:10.1109/DSD.2016.24 982:High- and low-level 255:Additional features 228:rich subset of the 136:Filename extensions 71:First appeared 18: 1182:Programmable logic 1097:at Mentor Graphics 852:try { ... } reset 761:let ... ; in 689:Types and Objects 239:Unlike many other 234:parallel computing 1706: 1705: 1702: 1701: 1698: 1697: 1485:Texas Instruments 1135:978-1-5090-2817-7 964:(now licensed to 945:In January 2009, 905: 904: 281:parallel behavior 275:Parallel programs 203: 202: 100:Typing discipline 1736: 1576: 1498: 1175: 1168: 1161: 1152: 1147: 1119: 1082: 1081: 1073: 1067: 1066: 1058: 1052: 1050: 1044: 1036: 1034: 1033: 1027: 1021:. Archived from 1020: 1012: 797:internal_divide 755:external_divide 686: 670: 667: 664: 661: 658: 655: 652: 649: 646: 643: 640: 637: 634: 631: 628: 625: 622: 619: 616: 613: 610: 607: 604: 601: 598: 595: 585: 554: 551: 548: 545: 542: 539: 536: 533: 530: 527: 524: 521: 518: 515: 512: 509: 506: 503: 500: 497: 494: 491: 488: 485: 482: 479: 476: 473: 470: 467: 464: 461: 458: 455: 452: 449: 446: 443: 440: 437: 434: 431: 428: 425: 422: 419: 416: 413: 410: 407: 404: 401: 398: 395: 392: 389: 386: 369:parallel threads 351: 348: 345: 342: 339: 336: 333: 330: 327: 324: 321: 318: 315: 312: 309: 306: 303: 300: 166: 163: 161: 159: 157: 155: 153: 151: 47:Designed by 19: 1744: 1743: 1739: 1738: 1737: 1735: 1734: 1733: 1709: 1708: 1707: 1694: 1627: 1570: 1563: 1522: 1489: 1408: 1279: 1184: 1179: 1136: 1105: 1101:Oxford Handel-C 1091: 1086: 1085: 1075: 1074: 1070: 1060: 1059: 1055: 1037: 1031: 1029: 1025: 1018: 1016:"Archived copy" 1014: 1013: 1000: 995: 978: 968:under the name 947:Mentor Graphics 922: 910: 677: 672: 671: 668: 665: 662: 659: 656: 653: 650: 647: 644: 641: 638: 635: 632: 629: 626: 623: 620: 617: 614: 611: 608: 605: 602: 599: 596: 593: 583: 580: 556: 555: 552: 549: 546: 543: 540: 537: 534: 531: 528: 525: 522: 519: 516: 513: 510: 507: 504: 501: 498: 495: 492: 489: 486: 483: 480: 477: 474: 471: 468: 465: 462: 459: 456: 453: 450: 447: 444: 441: 438: 435: 432: 429: 426: 423: 420: 417: 414: 411: 408: 405: 402: 399: 396: 393: 390: 387: 384: 365:message passing 358: 353: 352: 349: 346: 343: 340: 337: 334: 331: 328: 325: 322: 319: 316: 313: 310: 307: 304: 301: 298: 277: 257: 226:turing-complete 173:implementations 148: 90: 12: 11: 5: 1742: 1740: 1732: 1731: 1726: 1721: 1711: 1710: 1704: 1703: 1700: 1699: 1696: 1695: 1693: 1692: 1687: 1682: 1681: 1680: 1675: 1665: 1664: 1663: 1653: 1648: 1643: 1637: 1635: 1629: 1628: 1626: 1625: 1620: 1615: 1610: 1605: 1600: 1595: 1590: 1584: 1582: 1573: 1565: 1564: 1562: 1561: 1556: 1551: 1546: 1541: 1536: 1530: 1528: 1524: 1523: 1521: 1520: 1515: 1510: 1504: 1502: 1495: 1491: 1490: 1488: 1487: 1482: 1477: 1472: 1467: 1462: 1457: 1452: 1447: 1442: 1437: 1432: 1427: 1422: 1416: 1414: 1410: 1409: 1407: 1406: 1401: 1396: 1391: 1386: 1381: 1376: 1371: 1366: 1361: 1356: 1351: 1346: 1341: 1336: 1335: 1334: 1324: 1323: 1322: 1317: 1307: 1306: 1305: 1300: 1289: 1287: 1281: 1280: 1278: 1277: 1272: 1267: 1262: 1257: 1256: 1255: 1245: 1240: 1235: 1230: 1225: 1220: 1215: 1214: 1213: 1203: 1198: 1192: 1190: 1186: 1185: 1180: 1178: 1177: 1170: 1163: 1155: 1149: 1148: 1134: 1103: 1098: 1090: 1089:External links 1087: 1084: 1083: 1080:. EETimes.com. 1068: 1065:. EETimes.com. 1053: 997: 996: 994: 991: 990: 989: 984: 977: 974: 921: 918: 909: 906: 903: 902: 900: 898: 894: 893: 891: 889: 885: 884: 882: 880: 874: 873: 870: 868: 864: 863: 860: 858: 854: 853: 850: 848: 844: 843: 840: 838: 834: 833: 830: 828: 824: 823: 820: 818: 814: 813: 810: 808: 804: 803: 800: 798: 794: 793: 790: 788: 784: 783: 780: 778: 774: 773: 770: 767: 763: 762: 759: 756: 752: 751: 748: 745: 741: 740: 737: 734: 730: 729: 726: 723: 719: 718: 715: 712: 708: 707: 704: 701: 697: 696: 693: 690: 676: 673: 592: 579: 576: 383: 357: 354: 297: 276: 273: 265:floating point 256: 253: 249:idiosyncrasies 201: 200: 186: 185: 181: 180: 176: 175: 168: 167: 146: 142: 141: 138: 132: 131: 126: 120: 119: 102: 96: 95: 92: 91: 88: 86: 84:Stable release 80: 79: 76: 75: 72: 68: 67: 61: 55: 54: 49: 43: 42: 25: 13: 10: 9: 6: 4: 3: 2: 1741: 1730: 1727: 1725: 1722: 1720: 1717: 1716: 1714: 1691: 1688: 1686: 1683: 1679: 1676: 1674: 1671: 1670: 1669: 1666: 1662: 1659: 1658: 1657: 1654: 1652: 1649: 1647: 1646:LatticeMico32 1644: 1642: 1639: 1638: 1636: 1634: 1630: 1624: 1621: 1619: 1616: 1614: 1611: 1609: 1606: 1604: 1601: 1599: 1596: 1594: 1591: 1589: 1586: 1585: 1583: 1581: 1577: 1574: 1572: 1566: 1560: 1557: 1555: 1552: 1550: 1547: 1545: 1542: 1540: 1537: 1535: 1532: 1531: 1529: 1525: 1519: 1516: 1514: 1511: 1509: 1506: 1505: 1503: 1499: 1496: 1492: 1486: 1483: 1481: 1478: 1476: 1473: 1471: 1468: 1466: 1463: 1461: 1458: 1456: 1453: 1451: 1448: 1446: 1443: 1441: 1438: 1436: 1433: 1431: 1428: 1426: 1423: 1421: 1418: 1417: 1415: 1411: 1405: 1402: 1400: 1397: 1395: 1392: 1390: 1387: 1385: 1382: 1380: 1377: 1375: 1372: 1370: 1367: 1365: 1362: 1360: 1357: 1355: 1352: 1350: 1347: 1345: 1342: 1340: 1337: 1333: 1330: 1329: 1328: 1327:SystemVerilog 1325: 1321: 1318: 1316: 1313: 1312: 1311: 1308: 1304: 1301: 1299: 1296: 1295: 1294: 1291: 1290: 1288: 1286: 1282: 1276: 1273: 1271: 1268: 1266: 1263: 1261: 1258: 1254: 1251: 1250: 1249: 1246: 1244: 1241: 1239: 1236: 1234: 1231: 1229: 1226: 1224: 1221: 1219: 1216: 1212: 1209: 1208: 1207: 1204: 1202: 1199: 1197: 1194: 1193: 1191: 1187: 1183: 1176: 1171: 1169: 1164: 1162: 1157: 1156: 1153: 1145: 1141: 1137: 1131: 1127: 1123: 1118: 1113: 1109: 1104: 1102: 1099: 1096: 1093: 1092: 1088: 1079: 1072: 1069: 1064: 1057: 1054: 1048: 1042: 1028:on 2010-03-31 1024: 1017: 1011: 1009: 1007: 1005: 1003: 999: 992: 988: 985: 983: 980: 979: 975: 973: 971: 967: 963: 959: 955: 950: 948: 943: 940: 937: 933: 931: 927: 919: 917: 915: 907: 901: 899: 896: 895: 892: 890: 887: 886: 883: 881: 879: 876: 875: 871: 869: 866: 865: 861: 859: 856: 855: 851: 849: 846: 845: 841: 839: 836: 835: 831: 829: 826: 825: 821: 819: 816: 815: 811: 809: 806: 805: 801: 799: 796: 795: 791: 789: 786: 785: 781: 779: 776: 775: 771: 768: 765: 764: 760: 757: 754: 753: 750:set intwidth 749: 746: 743: 742: 738: 736:<- (take) 735: 732: 731: 727: 724: 721: 720: 716: 713: 710: 709: 705: 702: 699: 698: 694: 691: 688: 687: 684: 682: 674: 590: 589:For example: 587: 577: 575: 571: 569: 568:metastability 565: 564:clock domains 561: 381: 379: 378:synchronizing 374: 370: 366: 362: 355: 295: 294:For example: 292: 290: 286: 282: 274: 272: 270: 266: 262: 254: 252: 250: 246: 242: 237: 235: 231: 227: 223: 219: 215: 211: 207: 199: 195: 191: 187: 184:Influenced by 182: 177: 174: 169: 165: 147: 143: 139: 137: 133: 130: 127: 125: 121: 118: 114: 110: 106: 103: 101: 97: 93: 87: 85: 81: 77: 73: 69: 66: 62: 60: 56: 53: 50: 48: 44: 41: 37: 33: 29: 26: 24: 20: 1603:LatticeMico8 1593:ARM Cortex-M 1569:Intellectual 1348: 1107: 1071: 1056: 1030:. Retrieved 1023:the original 951: 944: 941: 938: 934: 923: 911: 792:releasesema 692:Expressions 678: 588: 581: 572: 557: 359: 293: 283:some of the 278: 258: 238: 205: 204: 1633:Open-source 1580:Proprietary 1389:Flow to HDL 1211:Logic block 817:macro proc 812:set family 733:macro expr 695:Statements 179:Celoxica DK 65:Siemens EDA 1713:Categories 1608:MicroBlaze 1559:Simulators 1539:Xilinx ISE 1117:1907.07764 1032:2010-03-31 993:References 908:Scheduling 888:undefined 832:set reset 802:set clock 777:interface 725:\\ (drop) 261:algorithms 224:. It is a 162:/precision 140:.hcc, .hch 40:concurrent 36:structured 32:procedural 28:Imperative 1678:Microwatt 1673:Libre-SOC 1668:Power ISA 1651:OpenCores 1613:PicoBlaze 1420:Accellera 1413:Companies 1285:Languages 970:Impulse C 956:(now the 914:pipelines 822:set part 787:internal 744:external 739:ifselect 380:threads. 269:libraries 59:Developer 1656:OpenRISC 1571:property 1549:ModelSim 1527:Software 1501:Hardware 1494:Products 1480:Synopsys 1450:Infineon 1425:Achronix 1384:C to HDL 1349:Handel-C 1189:Concepts 1144:13213191 1041:cite web 987:C to HDL 976:See also 930:spun off 862:trysema 722:chanout 367:between 361:Channels 356:Channels 206:Handel-C 154:.siemens 117:inferred 109:manifest 89:v3.0 23:Paradigm 17:Handel-C 1623:Nios II 1513:Stratix 1475:Siemens 1460:Lattice 1445:Cadence 1339:SystemC 1293:Verilog 920:History 867:signal 857:shared 782:prialt 766:inline 758:select 711:chanin 584:{ ... } 373:blocked 145:Website 113:nominal 1685:RISC-V 1544:Vivado 1518:Virtex 1404:Chisel 1369:PALASM 1253:Xputer 1142:  1132:  878:typeof 807:mpram 769:width 728:delay 171:Major 158:/en-US 105:Static 1455:Intel 1435:Aldec 1394:MyHDL 1320:VITAL 1140:S2CID 1112:arXiv 1026:(PDF) 1019:(PDF) 958:FpgaC 872:with 847:sema 700:chan 538:delay 214:FPGAs 208:is a 198:occam 1661:1200 1618:Nios 1598:LEON 1399:ELLA 1379:CUPL 1374:ABEL 1354:Lola 1344:AHDL 1310:VHDL 1243:PSoC 1223:EPLD 1218:CPLD 1206:FPGA 1196:ASIC 1130:ISBN 1047:link 897:wom 842:seq 837:rom 827:ram 772:par 612:void 606:main 603:void 560:FIFO 502:< 439:< 391:chan 222:CPUs 156:.com 74:1996 1690:Zet 1641:JOP 1588:ARC 1554:VTR 1508:iCE 1470:NXP 1440:Arm 1430:AMD 1364:UPF 1359:PSL 1332:DPI 1315:AMS 1303:AMS 1238:GAL 1233:PAL 1228:PLA 1201:SoC 1122:doi 654:int 636:int 621:int 594:int 481:seq 418:seq 406:int 394:int 385:par 299:par 236:. 194:CSP 160:/ic 152:.sw 150:eda 38:), 1715:: 1138:. 1128:. 1120:. 1043:}} 1039:{{ 1001:^ 972:) 570:. 514:++ 505:10 451:++ 442:10 305:++ 291:. 196:, 192:, 124:OS 115:, 111:, 107:, 34:, 1298:A 1174:e 1167:t 1160:v 1146:. 1124:: 1114:: 1049:) 1035:. 681:C 669:} 666:} 660:; 657:d 651:{ 648:} 642:; 639:c 633:{ 627:; 624:b 618:{ 615:) 609:( 600:; 597:a 553:} 550:} 541:; 532:; 529:x 526:? 523:a 520:{ 517:) 511:j 508:; 499:j 496:; 493:0 490:= 487:j 484:( 475:} 469:; 466:i 463:! 460:a 457:{ 454:) 448:i 445:; 436:i 433:; 430:0 427:= 424:i 421:( 412:; 409:x 400:; 397:a 388:{ 350:} 347:; 344:e 341:+ 338:d 335:= 332:b 329:; 326:e 323:+ 320:d 317:= 314:a 311:; 308:c 302:{ 230:C 190:C 164:/ 30:(

Index

Paradigm
Imperative
procedural
structured
concurrent
Designed by
Oxford University Computing Laboratory
Developer
Siemens EDA
Stable release
Typing discipline
Static
manifest
nominal
inferred
OS
Cross-platform (multi-platform)
Filename extensions
eda.sw.siemens.com/en-US/ic/precision/
implementations
C
CSP
occam
high-level hardware description language
FPGAs
high-level programming languages
CPUs
turing-complete
C
parallel computing

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.