Functional Units with Conditional Input/Output Behavior in VLIW Processors
Marco J. G. Bekooij, Loek J. M. Engels, Albert Van Der Werf, Natalino G. Busá · 2001
In this paper we extend the method to deal with coarsegrain operations in static scheduled VLIW Processors as is introduced by Busá [1]. We allow functional units with a controller that does not traverse its states in a predefined way. This makes it possible to execute a function that contains a conditional construct like an if-statement as a single operation on a functional unit. This way the performance penalty otherwise caused by branch instructions is reduced. By adding a valid input and output signals the problem is circumvented that during compilation it is for this type of functional units not known when and how many samples will be consumed or produced. We will refer to these units as Conditional Input/output Units (CIUs). The operations that are executed on CIUs are called Conditional Input/output Operations (CIOs). The difference with guarded operations is that the production of a result of a CIO depends on the state of the CIU. An example of how CIOs can be applied in a C program is shown in Figure 1. Inside the for-loop the array of input samples is read and supplied as a stream of samples to a function with the name “CIO”. This function represents a CIO at the C program level. It produces its result in the variable dout and the valid signal in the variable vout. The result ¢¡¤£¢¥ is stored in the output array. The address of the location where this result is stored is only incremented when the valid output signal is true. Consequently, invalid results are overwritten in the output array. An additional input signal vin is supplied to the CIO in order to indicate if the current din sample must be processed. void CIO_loop(int *Ain, int size, int *Aout){ int idx1=0, idx2=0, din, dout, vin, vout; for(int i=0; i