@InProceedings{WattMay01, title = "{A} {P}rogramming {L}anguage for {H}ardware/{S}oftware {C}o-{D}esign", author= "Watt, D. R. and May, David", editor= "Chalmers, Alan G. and Mirmehdi, Majid and Muller, Henk", pages = "167--178", booktitle= "{C}ommunicating {P}rocess {A}rchitectures 2001", isbn= "1 58603 202 X", year= "2001", month= "sep", abstract= "We have developed a programming language that allows programs to be expressed as single specifications in which any number of processes may be tagged for hardware compilation and the rest are compiled into software. We introduce a number of novel transformations that may be arbitrarily applied to an occam process in order to decompose it into two semantically equivalent concurrent processes. Our compiler targets hardware by compiling one of these processes into a field programmable gate array and the other into x86 object code. Furthermore, the compiler integrates a specialised communications protocol between the two programs that consists of a full-duplex channel implementation, multiplexor and buffers that are dependent on the program structure and that guarantee all external communications are free from deadlock. We demonstrate the elegance of our language and the power of our compiler on a small benchmark program." }