From 0c9dce7bc23a95e2781a993d94e6f8e96c5feb6a Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Thu, 21 Sep 2017 18:40:38 +0200 Subject: [PATCH] Add picosoc performance.{py,png} --- picosoc/performance.png | Bin 0 -> 37585 bytes picosoc/performance.py | 86 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 picosoc/performance.png create mode 100644 picosoc/performance.py diff --git a/picosoc/performance.png b/picosoc/performance.png new file mode 100644 index 0000000000000000000000000000000000000000..3450305fc42e00b00e0f5944ed2e6ddb8fb41761 GIT binary patch literal 37585 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 literal 0 HcmV?d00001 diff --git a/picosoc/performance.py b/picosoc/performance.py new file mode 100644 index 0000000..a66f5cd --- /dev/null +++ b/picosoc/performance.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 + +import matplotlib.pyplot as plt +import numpy as np + +text = """ +default : 010f52ef +dspi-8 : 008dc82f +dspi-7 : 008d6d63 +dspi-6 : 008d1297 +dspi-5 : 008cb7cb +dspi-4 : 008c5cff +dspi-3 : 008c0233 +dspi-2 : 008ba767 +dspi-1 : 008b4c9b +dspi-crm-8 : 008af1cf +dspi-crm-7 : 008a9703 +dspi-crm-6 : 008a3c37 +dspi-crm-5 : 0089e16b +dspi-crm-4 : 0089869f +dspi-crm-3 : 00892bd3 +dspi-crm-2 : 0088d107 +dspi-crm-1 : 0088763b +qspi-8 : 004a2c6f +qspi-7 : 0049d1a3 +qspi-6 : 004976d7 +qspi-5 : 00491c0b +qspi-4 : 0048c13f +qspi-3 : 00486673 +qspi-2 : 00480ba7 +qspi-1 : 0047b0db +qspi-crm-8 : 0047560f +qspi-crm-7 : 0046fb43 +qspi-crm-6 : 0046a077 +qspi-crm-5 : 004645ab +qspi-crm-4 : 0045eadf +qspi-crm-3 : 00459013 +qspi-crm-2 : 00453547 +qspi-crm-1 : 0044da7b +qspi-ddr-8 : 00288bf5 +qspi-ddr-7 : 00283129 +qspi-ddr-6 : 0027d65d +qspi-ddr-5 : 00277b91 +qspi-ddr-4 : 002720c5 +qspi-ddr-3 : 0026c5f9 +qspi-ddr-2 : 00266b2d +qspi-ddr-1 : 00261061 +qspi-ddr-crm-8 : 0025b595 +qspi-ddr-crm-7 : 00255ac9 +qspi-ddr-crm-6 : 0024fffd +qspi-ddr-crm-5 : 0024a531 +qspi-ddr-crm-4 : 00244a65 +qspi-ddr-crm-3 : 0023ef99 +qspi-ddr-crm-2 : 002394cd +qspi-ddr-crm-1 : 00233a01 +""" + +labels = list() +values = list() + +for line in text.split("\n"): + if line != "": + line = line.split() + labels.append(line[0]) + values.append(int(line[2], 16)) + +plt.figure(figsize=(10, 3)) +plt.title("Performance comparison for different PicoSoC SPI flash configurations") +plt.plot(range(len(labels)), values[0] / np.array(values)) +plt.xticks(range(len(labels)), labels, rotation=90) + +for color, x1, x2 in [["black", 0, 0], ["red", 1, 8], ["green", 9, 16], + ["red", 17, 24], ["green", 25, 32], ["red", 33, 40], ["green", 41, 48]]: + for t in plt.axes().xaxis.get_ticklabels()[x1:x2+1]: + t.set_color(color) + plt.plot([x1, x1], [0, values[0] / values[x1] - 0.2], color=color) + plt.plot([x2, x2], [0, values[0] / values[x2] - 0.2], color=color) + plt.plot([x1], [values[0] / values[x1]], "k.") + plt.plot([x2], [values[0] / values[x2]], "k.") + +plt.xlim(-1, len(values)) +plt.ylim(0, 9) +plt.grid() + +plt.savefig("performance.png") +# plt.show()