From f43f385499153161176a30f6859f6916c13c80f1 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson <oscar.gustafsson@gmail.com> Date: Fri, 1 Jul 2022 11:58:48 +0200 Subject: [PATCH] Add 3-point Winograd DFT example --- examples/secondorderdirectformiir.py | 2 +- examples/threepointwinograddft.py | 41 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 examples/threepointwinograddft.py diff --git a/examples/secondorderdirectformiir.py b/examples/secondorderdirectformiir.py index 693bb832..f812d10f 100644 --- a/examples/secondorderdirectformiir.py +++ b/examples/secondorderdirectformiir.py @@ -42,4 +42,4 @@ sfg.set_latency_of_type(Addition.type_name(), 1) sfg.set_execution_time_of_type(ConstantMultiplication.type_name(), 1) sfg.set_execution_time_of_type(Addition.type_name(), 1) -schedule = Schedule(sfg) +schedule = Schedule(sfg, cyclic=True) diff --git a/examples/threepointwinograddft.py b/examples/threepointwinograddft.py new file mode 100644 index 00000000..18675f57 --- /dev/null +++ b/examples/threepointwinograddft.py @@ -0,0 +1,41 @@ +"""Three-point Winograd DFT. +""" + +from b_asic.core_operations import Addition, ConstantMultiplication, Subtraction +from b_asic.special_operations import Input, Output +from b_asic.signal_flow_graph import SFG +from b_asic.schedule import Schedule +from math import cos, pi, sin + +u = -2*pi/3 +c30 = cos(u) - 1 +c31 = sin(u) + + +in0 = Input("x0") +in1 = Input("x1") +in2 = Input("x2") +a0 = in1 + in2 +a1 = in1 - in2 +a2 = a0 + in0 +m0 = c30 * a0 +m1 = c31 * a1 +a3 = a2 + m0 +a4 = a3 + m1 +a5 = a3 - m1 +out0 = Output(a2, "X0") +out1 = Output(a4, "X1") +out2 = Output(a5, "X2") + +sfg = SFG(inputs=[in0, in1, in2], outputs=[out0, out1, out2], + name="3-point Winograd DFT") + +# Set latencies and exection times +sfg.set_latency_of_type(ConstantMultiplication.type_name(), 2) +sfg.set_latency_of_type(Addition.type_name(), 1) +sfg.set_latency_of_type(Subtraction.type_name(), 1) +sfg.set_execution_time_of_type(ConstantMultiplication.type_name(), 1) +sfg.set_execution_time_of_type(Addition.type_name(), 1) +sfg.set_execution_time_of_type(Subtraction.type_name(), 1) + +schedule = Schedule(sfg, cyclic=False) -- GitLab