Digital Signal Processing Reference
In-Depth Information
Fig. 5
A process with a
one-dimensional iteration
domain
2
1
3
••••••
2
1
3
2
2
2
2
library) or
isl
.
Essentially, the input of Operation
6
is a schedule. When generating code for a
single process in a process network, we can essentially use an identity schedule.
However, we not only need to generate code for applying the main operation
of the process, but also for reading and writing to the communication channels.
Furthermore, we need to ensure that within a given iteration of the process, the reads
happen
before
the actual operation and that the writes happen
after
the operation. To
enforce this extra ordering constraint, we introduce an extra innermost dimension
in the range of the schedule, assigning it the value 0 for reads, 1 for the iteration
domain and 2 for writes. The domains for the read and write operations are obtained
as ranges and domains of the associated communication channel mappings.
Example 13.
Consider a process with a one-dimensional iteration domain
=
{
S
(
)
|
≤
<
}
D
i
0
i
N
that reads a value from some other process in its first iteration
=
{
P
()
→
S
(
)
|
=
∧
>
},
M
1
i
i
0
N
0
propagates a value from one iteration to the next
i
)
|
i
=
=
{
S
(
)
→
S
(
≤
<
−
∧
+
}
M
2
i
0
i
N
1
i
1
and then sends a value to some other process in its last iteration
M
3
=
{
S
(
i
)
→
C
()
|
i
=
N
−
1
∧
N
>
0
}.
In
iscc
, we could generate such code using the following script.
D := [N] -> { S[i] : 0 <= i < N };
M1 := [N] -> { P[] -> S[0] : N > 0 };
M2 := [N] -> { S[i] -> S[i+1] : 0 <= i < N - 1 };
M3 := [N] -> { S[N-1] -> C[] : N > 0 };