最简单的基本计算图是在类中例化的单个内核,此类派生自含指定输入和输出的 adf::graph
类。
class SimplestGraph: public adf::graph {
private:
adf::kernel k;
public:
adf::port<input> din;
adf::port<output> dout;
SimplestGraph() {
k = adf::kernel::create(passthrough);
adf::source(k) = "passthrough.cpp";
adf::runtime<ratio>(k) = 0.9;
adf::connect(din, k.in[0]);
adf::connect(k.out[0], dout);
dimensions(k.in[0]) = {FRAME_LENGTH};
dimensions(k.out[0]) = {FRAME_LENGTH};
};
};
上述简单计算图可嵌入另一个计算图。数据输入文件
Input_64.txt
表示从 PLIO 连接到嵌入式计算图输入的数据。数据输出文件 Output1.txt
表示从嵌入式计算图输出到 PLIO 连接的数据。Simple
计算图是 TestGraph
内的子计算图。class TestGraph: public adf::graph {
public:
adf::input_plio plin1;
adf::output_plio plout1;
SimplestGraph Simple;
TestGraph()
{
plin1 = adf::input_plio::create("input1",adf::plio_64_bits,"data/Input_64.txt",500);
adf::connect(plin1.out[0],Simple.din);
plout1 = adf::output_plio::create("output1",adf::plio_64_bits,"data/Output1.txt",500);
adf::connect(Simple.dout,plout1.in[0]);
};
};
测试激励文件程序会例化测试计算图,并调用控制命令来初始化运行并结束此计算图。
#include "graph.h"
TestGraph UnitTest;
int main(int argc, char ** argv) {
UnitTest.init();
UnitTest.run(NFRAMES*NITERATIONS);
UnitTest.end();
return 0;
}
生成的计算图会显示在 Vitis IDE 中:
图 1. 计算图视图