+<?xml version="1.0" encoding="UTF-8"?>
+<processnetwork
+xmlns="http://www.tik.ee.ethz.ch/~shapes/schema/PROCESSNETWORK"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://www.tik.ee.ethz.ch/~shapes/schema/PROCESSNETWORK
+ http://www.tik.ee.ethz.ch/~shapes/schema/processnetwork.xsd" name="AESA_DBF">
+
+ <variable value="8" name="N_BEAMS"/>
+ <variable value="16" name="N_ANTENNA_ELEMENTS"/>
+ <variable value="16" name="N_OVERLAPPED_BEAMS"/>
+ <variable value="16" name="N_DOPPLER_CHANNELS"/>
+
+ <variable value="8" name="SIZE_COMPLEX_NUM"/>
+ <variable value="64" name="N_FACTOR"/>
+ <variable value="4" name="N_RANGE_BINS"/>
+ <variable value="32" name="N_FFT"/>
+
+ <!-- ********************************************************** -->
+ <!-- instantiate processes -->
+ <!-- ********************************************************** -->
+
+ <!-- Data generator process with N_BEAMS outputs -->
+ <process name="Data_Generator">
+ <iterator variable="i" range="N_BEAMS">
+ <port type="output" name="out">
+ <append function="i"/>
+ </port>
+ </iterator>
+ <source type="c" location="Data_Generator.c"/>
+ </process>
+
+ <!-- Weights generator process with N_BEAMS outputs -->
+ <process name="Weight_Generator">
+ <iterator variable="i" range="N_BEAMS">
+ <port type="output" name="out">
+ <append function="i"/>
+ </port>
+ </iterator>
+ <source type="c" location="Weight_Generator.c"/>
+ </process>
+
+ <!-- N_BEAMS processes to compute result -->
+ <iterator variable="i" range="N_BEAMS">
+ <process name="Beam_Former">
+ <append function="i"/>
+ <port type="input" name="data_input"/>
+ <port type="input" name="weight_input"/>
+ <port type="output" name="data_output"/>
+ <source type="c" location="Beam_Former.c"/>
+ </process>
+ </iterator>
+
+ <!-- Corner Turn With Overlap processes -->
+ <iterator variable="i" range="N_BEAMS">
+ <process name="Corner_Turn_OL">
+ <append function="i"/>
+ <port type="input" name="data_input"/>
+ <port type="output" name="data_output"/>
+ <port type="output" name="data2_output_ol"/>
+ <source type="c" location="Corner_Turn_OL.c"/>
+ </process>
+ </iterator>
+
+ <!-- FFT processes to compute doppler channels -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <process name="FFT_Radix2_DIF">
+ <append function="i"/>
+ <port type="input" name="data_input"/>
+ <port type="output" name="data_output"/>
+ <source type="c" location="FFT_Radix2_DIF.c"/>
+ </process>
+ </iterator>
+
+ <!-- Corner Turn processes -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <process name="Corner_Turn">
+ <append function="i"/>
+ <port type="input" name="data_input"/>
+ <port type="output" name="data_output"/>
+ <source type="c" location="Corner_Turn.c"/>
+ </process>
+ </iterator>
+
+ <!-- FIR processes -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <process name="FIR">
+ <append function="i"/>
+ <port type="input" name="data_input"/>
+ <port type="output" name="data_output"/>
+ <source type="c" location="FIR.c"/>
+ </process>
+ </iterator>
+
+ <!-- Consumer process to collect data -->
+ <process name="Consumer">
+ <iterator variable="i" range=" N_BEAMS">
+ <port type="input" name="data_input">
+ <append function="i"/>
+ </port>
+ <port type="input" name="data2_input_delayed">
+ <append function="i"/>
+ </port>
+ </iterator>
+ <source type="c" location="Consumer.c"/>
+ </process>
+
+ <!-- ********************************************************** -->
+ <!-- instantiate channels -->
+ <!-- ********************************************************** -->
+
+ <!-- sw_channels from data generator to dbf -->
+ <iterator variable="i" range="N_BEAMS">
+ <sw_channel type="fifo" size="N_ANTENNA_ELEMENTS * SIZE_COMPLEX_NUM * N_FACTOR" name="data_to_dbf_chan">
+ <append function="i"/>
+ <port type="input" name="in"/>
+ <port type="output" name="out"/>
+ </sw_channel>
+ </iterator>
+
+ <!-- sw_channels from weight generator to dbf -->
+ <iterator variable="i" range="N_BEAMS">
+ <sw_channel type="fifo" size="N_ANTENNA_ELEMENTS * SIZE_COMPLEX_NUM * N_FACTOR" name="weight_to_dbf_chan">
+ <append function="i"/>
+ <port type="input" name="in"/>
+ <port type="output" name="out"/>
+ </sw_channel>
+ </iterator>
+
+ <!-- sw_channels from dbf to corner turn with overlap -->
+ <iterator variable="i" range="N_BEAMS">
+ <sw_channel type="fifo" size="N_RANGE_BINS * SIZE_COMPLEX_NUM * N_FACTOR" name="dbf_to_ct_ol">
+ <append function="i"/>
+ <port type="input" name="in"/>
+ <port type="output" name="out"/>
+ </sw_channel>
+ </iterator>
+
+ <!-- sw_channels from corner turn to fft -->
+ <iterator variable="i" range="N_BEAMS">
+ <sw_channel type="fifo" size="N_FFT * SIZE_COMPLEX_NUM * N_FACTOR" name="ct_ol_to_fft">
+ <append function="i"/>
+ <port type="input" name="in"/>
+ <port type="output" name="out"/>
+ </sw_channel>
+ </iterator>
+
+ <!-- sw_channels from corner turn delayed to fft -->
+ <iterator variable="i" range="N_BEAMS">
+ <sw_channel type="fifo" size="N_FFT * SIZE_COMPLEX_NUM * N_FACTOR" name="ct_ol_delayed_to_fft">
+ <append function="i"/>
+ <port type="input" name="in"/>
+ <port type="output" name="out"/>
+ </sw_channel>
+ </iterator>
+
+ <!-- sw_channels from fft to corner turn -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <sw_channel type="fifo" size="N_FFT * SIZE_COMPLEX_NUM * N_FACTOR" name="fft_to_corner_turn">
+ <append function="i"/>
+ <port type="input" name="in"/>
+ <port type="output" name="out"/>
+ </sw_channel>
+ </iterator>
+
+ <!-- sw channels from corner turn to fir -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <sw_channel type="fifo" size="N_RANGE_BINS * SIZE_COMPLEX_NUM * N_FACTOR" name="corner_turn_to_fir">
+ <append function="i"/>
+ <port type="input" name="in"/>
+ <port type="output" name="out"/>
+ </sw_channel>
+ </iterator>
+
+ <!-- sw_channels from fir to consumer-->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <sw_channel type="fifo" size="N_RANGE_BINS * SIZE_COMPLEX_NUM * N_FACTOR" name="fir_to_consumer">
+ <append function="i"/>
+ <port type="input" name="in"/>
+ <port type="output" name="out"/>
+ </sw_channel>
+ </iterator>
+
+ <!-- ********************************************************** -->
+ <!-- instantiate connections -->
+ <!-- ********************************************************** -->
+
+ <!-- connections from data generator to channels -->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Ant_To_Dbf_Chan_Data">
+ <append function="i"/>
+ <origin name="Data_Generator">
+ <port name="out">
+ <append function="i"/>
+ </port>
+ </origin>
+ <target name="data_to_dbf_chan">
+ <append function="i"/>
+ <port name="in"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from weight generator to channels -->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Weight_To_Dbf_Chan_Weight">
+ <append function="i"/>
+ <origin name="Weight_Generator">
+ <port name="out">
+ <append function="i"/>
+ </port>
+ </origin>
+ <target name="weight_to_dbf_chan">
+ <append function="i"/>
+ <port name="in">
+ </port>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from data channels to DBF processes -->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Dbf_Chan_Data_To_Dbf">
+ <append function="i"/>
+ <origin name="data_to_dbf_chan">
+ <append function="i"/>
+ <port name="out"/>
+ </origin>
+ <target name="Beam_Former">
+ <append function="i"/>
+ <port name="data_input"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from weight channels to DBF processes -->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Dbf_Chan_Weight_To_Dbf">
+ <append function="i"/>
+ <origin name="weight_to_dbf_chan">
+ <append function="i"/>
+ <port name="out"/>
+ </origin>
+ <target name="Beam_Former">
+ <append function="i"/>
+ <port name="weight_input"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from dbf to corner turn with overlap channels -->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Dbf_To_Corner_Turn_Overlap_Chan">
+ <append function="i"/>
+ <origin name="Beam_Former">
+ <append function="i"/>
+ <port name="data_output">
+ </port>
+ </origin>
+ <target name="dbf_to_ct_ol">
+ <append function="i"/>
+ <port name="in"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from dbf channels to CT processes -->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Chan1_To_Ct_Ol">
+ <append function="i"/>
+ <origin name="dbf_to_ct_ol">
+ <append function="i"/>
+ <port name="out"/>
+ </origin>
+ <target name="Corner_Turn_OL">
+ <append function="i"/>
+ <port name="data_input"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from corner turn to FFT channels -->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Ct_Ol_To_Chan2">
+ <append function="i"/>
+ <origin name="Corner_Turn_OL">
+ <append function="i"/>
+ <port name="data_output"/>
+ </origin>
+ <target name="ct_ol_to_fft">
+ <append function="i"/>
+ <port name="in"/>
+ </target>
+ </connection>
+ <connection name="Ct_Ol_Delay_To_Chan2">
+ <append function="i"/>
+ <origin name="Corner_Turn_OL">
+ <append function="i"/>
+ <port name="data2_output_ol"/>
+ </origin>
+ <target name="ct_ol_delayed_to_fft">
+ <append function="i"/>
+ <port name="in"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from FFT channels to FFT-->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Chan2_To_FFT">
+ <append function="i"/>
+ <origin name="ct_ol_to_fft">
+ <append function="i"/>
+ <port name="out"/>
+ </origin>
+ <target name="FFT_Radix2_DIF">
+ <append function="i"/>
+ <port name="data_input"/>
+ </target>
+ </connection>
+ <connection name="Chan2_Delay_To_FFT">
+ <append function="i"/>
+ <origin name="ct_ol_delayed_to_fft">
+ <append function="i"/>
+ <port name="out"/>
+ </origin>
+ <target name="FFT_Radix2_DIF">
+ <append function="i + N_BEAMS"/>
+ <port name="data_input"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from FFT to Corner Turn channels -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <connection name="FFT_To_Chan3">
+ <append function="i"/>
+ <origin name="FFT_Radix2_DIF">
+ <append function="i"/>
+ <port name="data_output"/>
+ </origin>
+ <target name="fft_to_corner_turn">
+ <append function="i"/>
+ <port name="in"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from Corner Turn channels to Corner Turn -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <connection name="Chan3_To_Corner_Turn">
+ <append function="i"/>
+ <origin name="fft_to_corner_turn">
+ <append function="i"/>
+ <port name="out"/>
+ </origin>
+ <target name="Corner_Turn">
+ <append function="i"/>
+ <port name="data_input"/>
+ </target>
+ </connection>
+ </iterator>
+
+
+ <!-- connections from Corner Turn to FIR Channels -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <connection name="Corner_Turn_To_Chan4">
+ <append function="i"/>
+ <origin name="Corner_Turn">
+ <append function="i"/>
+ <port name="data_output"/>
+ </origin>
+ <target name="corner_turn_to_fir">
+ <append function="i"/>
+ <port name="in"/>
+ </target>
+ </connection>
+ </iterator>
+
+
+ <!-- connections from FIR channels to FIR -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <connection name="Chan4_To_FIR">
+ <append function="i"/>
+ <origin name="corner_turn_to_fir">
+ <append function="i"/>
+ <port name="out"/>
+ </origin>
+ <target name="FIR">
+ <append function="i"/>
+ <port name="data_input"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connection from FIR to FIR channels -->
+ <iterator variable="i" range="2 * N_BEAMS">
+ <connection name="FIR_to_Chan5">
+ <append function="i"/>
+ <origin name="FIR">
+ <append function="i"/>
+ <port name="data_output"/>
+ </origin>
+ <target name="fir_to_consumer">
+ <append function="i"/>
+ <port name="in"/>
+ </target>
+ </connection>
+ </iterator>
+
+ <!-- connections from FIR to Consumer Channels -->
+ <iterator variable="i" range="N_BEAMS">
+ <connection name="Chan5_To_Consumer">
+ <append function="i"/>
+ <origin name="fir_to_consumer">
+ <append function="i"/>
+ <port name="out"/>
+ </origin>
+ <target name="Consumer">
+ <port name="data_input">
+ <append function="i"/>
+ </port>
+ </target>
+ </connection>
+ <connection name="Chan5_To_Consumer_Delayed">
+ <append function="i"/>
+ <origin name="fir_to_consumer">
+ <append function="i + N_BEAMS"/>
+ <port name="out"/>
+ </origin>
+ <target name="Consumer">
+ <port name="data2_input_delayed">
+ <append function="i"/>
+ </port>
+ </target>
+ </connection>
+ </iterator>
+</processnetwork>