Directory structure:
$ cd ../../unit_tests/sqmag
$ tree
.
├── data
│ └── ivec.dat # stimulus generated by sqmag.jl
├── julia
│ ├── cleanup.jl
│ ├── ovec.dat # reference result generated by sqmag.jl
│ ├── README.txt
│ └── sqmag.jl # Julia script to generate stimulus and reference files
├── Makefile
└── src
├── graph.hpp # ADF graph
├── params.h
├── sqmag.cpp # kernel code
├── sqmag.hpp
└── tb.cpp # simulation code
Examine the stimulus generation script julia/sqmag.jl. Examine the source code in the src directory.
Build and run the design in both functional (x86sim) and cycle-approximate (aiesim) modes. Note the results of the comparison between DUT and reference results.
$ make all | tee build.log
8< --- snip --- >8
Comparing x86sim and reference results...
diff -ws ./Emulation-SW/x86simulator_output/ovec.dat ./julia/ovec.dat
Files ./Emulation-SW/x86simulator_output/ovec.dat and ./julia/ovec.dat are identical
***************************** x86sim completed! *****************************
8< --- snip --- >8
Comparing aiesim and reference results...
diff -ws ./Emulation-HW/aiesimulator_output/ovec_new.dat ./julia/ovec.dat
Files ./Emulation-HW/aiesimulator_output/ovec_new.dat and ./julia/ovec.dat are identical
***************************** aiesim completed! *****************************
$
Examine the input and output streams with Vitis Analyzer:
$ vitis_analyzer Emulation-HW/aiesimulator_output/default.aierun_summary &
Click Trace in the Analysis pane (Figure 12).
Figure 12: Vitis Analyzer: Trace Menu
Double-click the Run - default - AIE SIMULATION window to maximize it (Figure 13).
Figure 13: Default - AIE SIMULATOR Window
Double-click the Vitis Analyzer window to maximize it (double-click again to restore).
Figure 14: Stream Trace Data
Execute the function twice (as specified in src/tb.cpp), processing eight vectors per invocation. Note that there are no spaces between the data in the input stream, but the output stream is “bursty.” This code is not optimized. Optimization in outside the scope of this tutorial.