Initial commit
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..c53a448
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,6 @@
+[submodule "cargo/spectrometer"]
+ path = cargo/spectrometer
+ url = https://github.com/milovanovic/spectrometer.git
+[submodule "cargo/wb2axip"]
+ path = cargo/wb2axip
+ url = https://github.com/milovanovic/wb2axip.git
diff --git a/cargo/Makefile b/cargo/Makefile
new file mode 100644
index 0000000..af64301
--- /dev/null
+++ b/cargo/Makefile
@@ -0,0 +1,38 @@
+SPECTROMETER_PATH = ./spectrometer
+TOP_TEST_PATH = ./top/dv/SpectrometerTest/spectrometer
+
+SIZE?=128
+export FFT_SIZE=$(SIZE)
+
+ENABLE_PLOT?=false
+
+move_user_proj_example:
+ mv ../verilog/rtl/user_proj_example.v ./user_proj_example.v
+
+move_back_user_proj_example:
+ mv ./user_proj_example.v ../verilog/rtl/user_proj_example.v
+
+verilog_spectrometer:
+ cd $(SPECTROMETER_PATH); sbt "runMain spectrometer.SpectrometerTestApp $(FFT_SIZE)"; cd -;
+
+test_spectrometer:
+ cd $(SPECTROMETER_PATH); SBT_OPTS="-DfftSize=$(FFT_SIZE) -DenablePlot=$(ENABLE_PLOT)" sbt "testOnly spectrometer.SpectrometerTestSpec"; cd -;
+
+.PHONY: test_top
+test_top:
+ make move_user_proj_example
+ make verilog_spectrometer
+ make test_spectrometer
+ cd $(TOP_TEST_PATH); make all; cd -;
+ make move_back_user_proj_example
+
+clean_top:
+ cd $(TOP_TEST_PATH); make clean; cd -;
+
+check-env:
+ifndef PDK_ROOT
+ $(error PDK_ROOT is undefined, please export it before running make)
+endif
+ifndef RISCV32
+ $(error RISCV32 is undefined, please export it before running make)
+endif
diff --git a/cargo/README.md b/cargo/README.md
new file mode 100644
index 0000000..bdafa94
--- /dev/null
+++ b/cargo/README.md
@@ -0,0 +1,3 @@
+# Spectrometer on Caravel
+
+![Interface of the Spectrometer](./doc/Spectrometer.png)
\ No newline at end of file
diff --git a/cargo/doc/SpectrometerTest.png b/cargo/doc/SpectrometerTest.png
new file mode 100644
index 0000000..3db48c8
--- /dev/null
+++ b/cargo/doc/SpectrometerTest.png
Binary files differ
diff --git a/cargo/doc/SpectrometerTest.svg b/cargo/doc/SpectrometerTest.svg
new file mode 100644
index 0000000..66df482
--- /dev/null
+++ b/cargo/doc/SpectrometerTest.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="3344px" height="965px" viewBox="-0.5 -0.5 3344 965" content="<mxfile host="app.diagrams.net" modified="2020-12-15T17:38:55.943Z" agent="5.0 (X11)" etag="QCIieRVd5MzkISBAlLTr" version="13.11.0" type="device"><diagram id="qXFagdSMaphbRnIKP229" name="Page-1">7V1bc+M2sv41foyLuBAEH2cmmexWbfakMjmV7HmZkiV6rHNky5HlGU9+/SElUSTRTfEGgBCJ2aqNRUkghf763ui+YR8e337eLZ4fftmuks0NDVZvN+zHG0o5iYP0P9mV76crMT9e+LJbr46XSHHh0/rv5HgxPF18Xa+Sl8rn9tvtZr9+rl5cbp+ekuW+cm2x222/VT92v91Ub/q8+JKAC5+Wiw28+sd6tX84XmUsCIo3/pGsvzycbp2+FR/feVzknz599OVhsdp+K11iP92wD7vtdn/86/HtQ7LJNi/fl+P3Pta8e36yXfK0b/OF//kWPN2//fWXWHz65a/nV/Fb8tsfP4T5Ol8Xm9fTbz497v57vgm77evTKsmWCW7Y+28P633y6XmxzN79llI9vfawf9ykr0j658t+t/2/82bx9Mpis/7ylP69Se7TB31/v95sPmw321166Wn7lK7yHv6U/KmS3T55K106/bSfk+1jst99Tz9yeleedvkEM5bv+rcS1QJ+uvhQoliUf3JxgsqX89rFZqZ/nPazy96SqHlvk6fVuwynxWaAvcw364ayOxnyMCNC+rUTr4jD5xa7fel1+u7HdfawB4KVNzxd414uk+USpdRhnfxx7jbb5f/9/rB+yt84LUkuESxZVfgJkqtEjxChRn5tl2wW+/XXKhdiFDrd4dftOn2SMxqI5FU8hFFYXeNl+7pbJqevlbmmcaWQVVdKt+ZLsgcrpdu4+F762HP2gRcAqvPWDMGZ8DgbCWdc6sIZWMlBnHGPs5FwRqgunIGVHMQZ9TgbB2eR0AQzsJB7KAvCZpTptXwBLMXhXwa17dO+dP34z5itrIoAzoNbSoLi30nOlzBHY4GhThiznYMWfklJBpSZrpUggMSqY/fkbb3/M0PAbXh69Z8THrK/f3wrv/h+elHFTWvxUMif46t0J0t3zl6eb529KO59ePX9/OqSjKvFz5G1L9CEi5Nre+TdS5/kbom1s7ueA14quG0r1go2qFups1yreWKVRWXQ8GD84hfSP46PoFWG0qCbpq7h0gKwXAEsB0yhcGlCVmESYZwei4gtBOB0egVamAQivpUVckoZ3PKop8kXxG2Wq0GuNqx0jIa0lehnOutD0TVhRSiiLTW8bpnoBxTBm9cyjhLpUaIfJaraOlK2MPhIP8BkNmOXdY2DJ3YHPBAkdXByHTxENUYyKlMN6GEIKi+saxo9+a90AT3TET1EpLZGybfMTcYamtOeWIoaMEotY8mM+9oLS1VntPAqKz5l4WLWeJUTQmTALyIyxWsI3+0eaFV0oxTZJptwFkkQBfAnNGjuqO7pzHqMOR94j1EvpBVyxkHq4MWakIstZlyAMo8TGzihqcHOdOEEWcw4TrrlJD1OeuKEA+XVHyZwLeMoaZHr0YuS9u5fPW5cR0kUYHFF2TdlyNqsZhwp3WppPFLaIYVAi0L2DGdHvHkt4yjREsv2KGlASWpPpDKm+KcJMJeXNY4dLRFuj50G7KRGhpSaAIOsZRwlWkLZHiVqlSXVabIQHrpgszAtgWuPFZW4TJ/RQrgY32phWoLSHidNONFjtkDIjGu3MOrRYwM9AwwXCJkRLBdmPXI7C5xEMjU1apNWg6wYSboubRxD1qO688BQrNGikdQBi8bHda3gRJNFAyAzskXjY71W0DPEogGQGcOicahyWU8xz4SKE3lgo5hHNawNFvOoDkGLYh71K7aKeZhDxdq+yk0Vw8IGY6jy2SBjqHqlBWOoX7HGGA4VonvGUE65RJe8XU18gRQzGGMMWIbRzBlI6YYl1shza541SuhtPFGbm7yO8FCk1PSTKpT08JBMeSiOgXeYOwLG+EkGl+4rG3lLKqnoyBZn+TMHziodQpSagmNUteCRvjW4FDmB1zJa29kAI+qZgSIyXF/8qR5NEOp3THED9dzgLDeE6tkYhRt4T24IkROFkncNMHZmjFD1v1swhvode4yhJT/nGcNM30I1zqSJMWLkeKQFxpCq/92CMdTv2GMMLUlHzxjGnPYqLLghR11Qk456VOI55AddflbgtBfPapg1tORZPWuYOs5sgjPAuS1zjHFoeBQP4AxwXs0aY2hJIbvEGNNKDRphDDUZaJAxsnr1QYyhpgatMcbkcuYT0hhqd1ZdjKEmAw0yRlYOOYgx1NSgNcYwkzNfiTsRDuwydH9/T5EOx9cAaQqMID19hWggO61ruhRJOGRvlPrTyiguC1NyGwRN4vTw6tdkt073JNnpk7GNqTQahm5BlyAQY8OlMaVIzOfCusah65BFUIJuVOmtTBpQq5gS59bQjNHT62yVH7LsaHS6gHeIzl4YQH9jE2eSu/LXxycqnkMJrIvWvMGyFmAkb/ZQshpSi7td28GuFgtVM3WpEmmwUcBXgFljyEYR7tb11XBcxnC0M8OVxICgsuoOxLJJFpjSYM08nPc5vToeJiFv9BDa83BWHxJWGcScw6Hm65rZF3wlbPRKoIxr8RWSbkNJr7OaHTEsMq6g4vG2k6qfoy0KylQKlOvhz3Q5Yqk6pQWDql8JVWZBuC2blRL3+hYFW2GDMfOf6CBjXrCeySBlzhSjPl3PWWUeXq0uJyHg77D3YBWmOMHC0GAVtTizWUqo3whb2O1ZkIir32r+DhFFQFOg22FYVlAdssIfiATF0hVaZqdeRc/zkCkYbylYzfbx/AgrIROb/c1xktlNNo85p5P46zWbcJxSiX34IA7jSopL4kv238Xm2+L7y+ddslh9z9dJH+y41PEjAIb75G1/SUWdpqUhA9SUoWzZ2LT1crF5d7r8uF6tspug096qCqwWeB3GFkN6krPFVYJnLmfL8DQ2uJhG1tsvzKKprmpcHwRBqSCob3Ffasbektpc2EFAlEr9bMsK64fsZ4EltYJaF5ZC5jKWfOtMG0XHurAkY4exJKFcWj99fnnerPefAwPmxu5It5HtDcGqDpuMMGsjsmptSJgYfP3tbX6kiB0gBSZgjwb5av01u+Vpqwoj/riZwKYf5g9sPqcUe6n1Bc6XDw9lzENwEye4g2AZJ1i0fxSc/J3sth4oOFDY+ECJseizjxT0oC5IVrgQKIixI+eevH3IqyaLnSAvFg/25O1DXvVUoxPkhYb32QUiBijhhpqMY/dcoBja3YULNCNSOOACxc6Ytt4FqsOJAy4QC+otW+8COQOU8V0gFkAb+axlYfh6KpQgLHROzbL8yAOqZudEi/H1LAvqawi8nnUFKE4oWqwYwSta15DigqaFXUrOmpZNlxQRcVDTwuxqoWnnRAsXNC128NJrWreA4oSmdSb76zXtBaQ4oGkJdKRMFGos023LDmOMTQLQvLfUZLdEg3wPLNEAOlAmIsWu0iAbN5aPGhyPBtA3mTIfgLa9TvABtPqnzAeg8NcJPoDm/pT5AHTpdYIPoJk/ZT4ARcsu8AEyYXvKfBCArrySO8AJyKTqKXMCQgUX5BEyB5q2oILO3e1wrqfLfivnOcsDksfbbWiJtgmzXd9uH8YMj77b0Obk09xt6sJuz8u65HB2nBNadV72JUIFJ7QqjNG20apXSwV0bNbYNIAlgiZSWq7SwAkNjIyRbKOBJ0MDF/QyMnBwyno5ip3Uy8iguynrZYQKLuhlZKralPWyRAf4jU2Dfj7wVGjghl7u5xlPhgYu6OUQ2kbnOjgTxHCjUCIVQkprv7BoNlqulLBLC+yErEIB37KmfvdPd4D92+PbKFTIXZ0I07NrDWURaGsplN6M1ZUNd6phITTwPITMQCi15xkFPTi1QChdujxvlVrGEDRPi3rcKesElcIM1wlWq+fCWVUNUQb7BBeDLEa0kmZVN4RSgTpABZjbmbDfjFIhcIAKMLczYc8Zo8K53/h4NICZnQl7zigNhAOcAHM74cyo4IBuFjCCIWZGBRcCScJ68GIOvZspJ6joK3uefWfu8CzmxYEHW7pL2Qm123KXCSyQ4duJ9ZEYnEMI4eFOqy3FmJhVGgzlZO5AHbqwPsChNH0pG0FXGaXII3GjffrSQF3QOG6J5RPtXNIaajQrjm9DpkFrINIkXToKiqWV5zWuKmBwxjCA64YGVqHcNNV6XMzyvI+gw5jNQn9BvQ3SxdKprCtZ0Aqinef2qjeKTqVY7Z9MVL5wY2R2F4vmFc7ENO/oIRz7s276yqnGDF8qt+SKY5JL0jsmLmb4mnVrPmDKFTkVZgk7oP+kHJ5NFiS1yqvyI0gFYFgMRVGSjKY1q7Tu02vSpS0QeYWxgIipyDvOyB2OvAhg+oC8UhlDZBl5mPtfj7yT4rk0hPZOhpmyLcNRKHAUFTgisLqXy2S5BOA5wxpjhMMbJYS7jrIoTM2waihIhr0HO0fKyWveclSrLiChYSQflRyKEXCKWK2GifvBBUzc5QB5pmd9xZhd5gOPPexuOK+0pqLGbtiRw6zdhCtqIqpwlAuF3xLr5+u1u5W5skSneieEjqvfmewWvfZQ0gclHmUBu0LlS22o4nJsVHULKXtUaRwwy0yhSvJxUUU7OrXeGWmHGLXLneqL9MXL5fHWapG+bTelvtO9d1M6Wchgmp4TXkq+8jy8FMjD1IHKCArD3xNOkwEahE6c04bV5lPmA7V3hwvuOu3oY3m7pZ3donap1mW3kMhluwXzrLzd0kdWqEOe3bBboI8zZXkNeNgJu2Xe3f7dsFvm1YcS9hV2w3KBXpS3XDTE6MRly6VnGUo2+LyD5aLcxbjlUj+E0lsu3aSFOuDeCcuFwDO1U5bYgIddsFwIzM1P2XJRaeCG5TIzPlAjjy7MBpHdisOvKP9YOvt1run9T/m9mgLfWlI3FpCHgVsHXUhWxhtGoLQWNlrpbD9FaoZTRajxvDk2PnQSuK3FnyuoEiS+FaW8eQxQFfWFlRi9yAcbNuphZQNWcVbkg2EpOP/rC6t49CofaG16WNmBFQ2NwYqOfOSA5c6th5V1WDFz0oqNLa3yY/UeVtZhFRBjsArGtq3y7rIeVrZhJWMUVSVQ9UVVHIwNKn/AYyRQZZ3NhQCgKouqnmfzxOh2lT/qMRKowqwmv9TgQF7CVz7nviu+wpHL8xl68tPjy0p//VQVMqX/4CEnWEitvq0N+Oi60MdEx4KVSN1BrhQRZH2DRQEr0hNWYnR3sFtM1OX+QVOYECLRDirl9qo9gRYTtDVLKdJvtzULRyryDQNvFgCKQ9BWSlbpLPsiSHZc2TiCrIuueSBIoO3DIg0IijuubBxB3TI3HkG9EZRpH6oPNshyprGSb47HimmsHLq16sMKspxxrFg/6TYPrGS2DQxrl1wyOrx32NHO6XsX48iC597MDtVzotIbsz3DlA4BoMNYA/Y4MlSsIIyJwVbOEkacj/CMRwzoWxbEgKJ4wsSQDhADumkFMUyU5btKjIg4JrKg91MQxkStvrOEYW4RBhlFBqjhY7L2wv/VEH2UTbQqTUBh1QXb2pksgMuy+kog04Zl5F0WA9hhSjI6c0YvELk1dqJOyxrHjvXJOTPBzoVTzAdxEfWGT8eVjSPI+hQTj6BIplYPKYQGNQKmyzcxjiufZLSOK5mdfB2eLbqMq4abGMeVTz3asJayMuYSBkRvJHVZ1jh2oNu9fpp6BBfQgGATv+262UhXnzMhJhuxBYRgRXpsPErAM0lnSkDBOlVKhC5QgtZTYrKxWkCJyAHhBI++nAkx2dgsIEQ8PiE6npd0ORg7ZMCmIyaiaiGKnoXXBAnqipKfarcpHB98erItvoL83TaF+VX+VsG0SOT9EgOTWMrk7h4FpOvwOpx7U5ND2fHK4eF+FXHnMSINGOs8PFo9YCerw6NvjMyC5h2Pamqfnj4PdGZ9CZgdeLbs+dQdnhK/kWF4Wk9vzRGesTXhGRhCZxTgNzKMTphAm3CvRMqz8u1qWWVW0Z2noMdql3geXDJam+dpzhuHk+5l1rapVELRN7ALxIJoJxa0MS464K/SzLmATt65OXvjh5cDIt6lHyD0+Q22dZY3P9EbKW5iymjbts5VRsVYuYRSDXwMfCgWIt46CS5Ay0DcpHHu8v1xS4o9/0ey+Zpk8hCSYfu6t9dUe3fcn7GlszLGLAqxGAyzKZg50g80lbr6KeBEEAywFUoAq5qRI50z10+fF6vFc2ZQTNZSIUqD+UhiEo5bJYXQEo8EBsYx7AU2UY1M5qYNQ0wb1w0RUHEZhreSD7dCVIHJLi6ryVNhyrmkw48JG8ylED5o5SuG3BtBx4MsYn+XIOw+ZBEqG4BsZAWyKv4iW/jTEpv0+KtImeGgi+FappAW20KalkpojzTNSLssNTuDTnsYQbQof+7k3asuZS31O+TmVesJH8yGGcPEoDWspcB3ntawwnAi0GNaKMvyi8tqE/gwnd9kDSsdkw8PakVHaKkdnqWOwKhsALLSCmRV/Elb+MOaHjUPIHx/7BYJQqS75MuLvRhpbWDobrvfbx9bBYY2i7tk8+v2Zb1fb9E1/6V84Bx0etju1n+nP3ChMYo+RK9ydcSTPsWaV+J5KaVFSvW2ZKuiSQZwLUPyqHQrs/Io8gFNB5GWHZKxhLTSrQwjjXqZ5iDSLltx43vnUX0pvk0Lx3IpvloIRVubJca8fUxRHA3P58Lk7FZ9ke5SpfoCVgf8vn5MUlwF/06+pf//2/Zx8QSN4F//9fHnWiP4ePlup15JP/jsTDEHl1AoI8UcWNpZbVmujd6YuJ6To6KBrCGia0d3LrB0zGxKdF7SN9dPX26OxXv9fVEd4GhVaWJVxCMnQYeJRgORcIEdU2+1bcYkJXJsE2yb96Ewa1Twy9Zozy6yIrocBm/XNrarZyXCWjO97TguW2Fw5HyrNcRety+GEtkAYqUVxKrwsxQFl9h5oDnZlqMaHv01qEGrlBBoezxv7r9M3dNXiZEFfke2ApHOtGD/Xx4Wz9mf+3Rbkr+32Xrvn5Nd6q0fNrW4/mtxsclYvF+/JbkqOJ7h2y9O8I817bZ6wEzg6R5C4lsBd5wVg8i0b7rodkQSnkFviUxH1GjE+a0y062QQl2VZxSpi4VxqC6mSWVGPK59cKM6U09x2/J19/UAEgLsMuchE0a3TKFyf8iAxVJBbAoyEbgXsQIZQupjeKv119xGOqjZx9e3rMXQ2YgqvT9d5ZsdkFaYWY6ufhmFqmDC55EjJfSdiVPGAAmsnrhiFApbE/23HCVBKFGryO6hN9IYp/Y+ojkfMVLckjBit3R0J7FNpfb1eia3tLLlEufCEXyTjh3mr983qcbi4mCAZ6JUkEXG/BIlLlk8tFETU0/r+Cv3SlQaD/JKFOxBr1ijV6I8eGzJK6nX7JhXEszOK1F0bzakc2yfJIAxwRn5JFKMbxCfiwDn6ZNk+mx8txBquylzAVGjI5I7wAcUHjqcMh9AIrggjCg8RgcNv+kQQT2d4UCAhFGokk3MTXCUBDGeubNLAgZVsokZIq6SAC9KtxsmDLDzvD5MaCtMCBIoMnQhUKihM6R6NuEIgn9/+C9XG0LKVmU9ds8QIK0DZ1RsroGosXv9INFuhAYI4EQ7SMBUDrSDRGIxXuVZU3my1VEt29WTQYtOPGOf3MgGvPTcOmMKiqD2o7Jx/uwGlkAgQUMPo56l8CRoaGJkphaeBN27GJFgpDZGBNUBlmB73Qc4cDqbgK2VIxwQgpbOcBCk+dvTcjv1en2gxBwo2OdIashbhNYsQsSuIa0AYdAgjKdbKUUC4W6pFAmwyFO9Yr72WilCFCNwQLEUIWq/LWPVUoQoRoClcqkUu53gMb16qXTnNRZMIauZq5hK8TlWyRTSNTKztU7lUZO1tYiiWB2ohOLIOVVva9mztVRIOJJvmu6RWcTccufUbMfBopOztgYcmgXWlrkzs8DasnRkFhnseQkdszC2BpyZRVYzd2gWMbZsnZpFWsTnxtaECw2BZnXgKCy/cIDZG1sWAluxWt7jxjlAQjDJrqO+5+PH312t7yG0VfrUboFPqhKaKOErfBrIqo65HL/Eh5A51fhAxnKgyIf4Fmljaj4KiilHT+mkBjECiSFKyUSND1NbCjpQ48N8jU9l8Q4OJBNVH0xXsQSLlXXt1PiwKIA/p6HGh6kFf7ZqfJiv8ekNW4zOJmBrp8YHQNBWjQ8yHej+fj/5Gh9ViTlR49Po8nqD0KBB2N+uMRoHmXDeiVN3804E6dF3STdffeKJC32JJx5bSzxxxQ6wlHgiSP/AS/CYYOaJg/ZCQzJPcDWDmScej5V5QkbkZebW1DNPXNGtTmSeGuPa3twyaG6pkHAk74Q0AALkm4695VBZNeumUCdnbw0pq1btLYNl1aq9Zausms2+rBpaSEPKquFqBsuqob1lq6wamS2b21tTLqtWlasTZdUYB3t7ayx7y42yasIbi+171vn88q5+YrACD+t1PmAwqAt1PnzWY2N1kBVMDnSgzofDMOaE63zaTdy1XOfj+9eNqfdE75Y0JtWeaDGedfRKH7UdpAuVPh2n6PlKnzI5zVT6ROEolT6R2jivRaWP2njfWqWPntl+s6z0QelsArZ2Kn0ABK1V+kDJ+biY/PRdoMScqPTx/R3HNAn72zUmTcKQNquIa808ZUKOVtnQncyTwEJQ9br56jNPkurLPMnQWuZJKnaArcyTaMGX0848SdgVZ0DmCa5mMPMk4fA2W5knWF6SmVtTzzxJdYSEA5kn2phj8OaWQXNLwgFHjuSeWjjl07G4HKqtzhXTXC2uIbXVqsVlsLZatbhs1VaH3QzyWVhcQ2qr4WoGa6uhxWWtthoWmOQW15Rrq1WLy4XaaooJeG9xjWdxOVJdHTXmwntW+7z78MHZap+4VbjRcrWPbORQX+1zkawUTJlwoNpHQstpwtU+gLEcqPbJTVWv+UbRfDGorBy9qw9Fvd1uSo9QTOkRcfMTvZHiJqaMuqr+aKC2tmAhpv6CC+6UAZo0sqlXf5fJeg7iuKP+aAir6qar/iBjja/+aAiLTBbL5efFavGcaYHJeuFUbYAdSUzKWfXCaTjd+Haq8EDUA+qUML6N4YabDG3TjvWp1x7apkxGt7wa74v61xNQTsBywlhJQYoEWv/wRoOVVE9B6BXHuNPNT7lTJXV/5CDLRcbqClKcwoe3U1jAaeM5Le9hmvMwKYsg5RnN9cx4biYTjedre7qZqW+Zu5nSWS+TR2ddX9IbNAD13KP5nAyZOuF9zk5EDjkgcip0LxPZqgfKkDFuE/ZAEaZrpIdVf/TcJbZEj9ff32bgj4aBSpqINslDuzlidIDtjPWVZBytz7KqpHjsp31oV1IyvYJQ1qpm4vGcBn5g7IUTwW52MIbmQcois1RHUqLizqoOYkj3cz31KP/97rffndU9ggCzLTwXDI1WksKQXl1e9XQibAS4TEiMsHZ9IuTg8YQ1D8JcKA0sl6VgaQkfNLQVNBQhAIUIbqPO3pjJ+CFyYE2PPyavoUolcj9+2Fw86/XjZSJL5+OH0azihwjTORY/RMqkX3+bQ/xQOh8/zJQJEIcKPXwnMDR7HUMbNTtFGBa07ZuFj6GEjS6urCshH1OO/STR8LgMfCtSv2Uojc9adAD0HcG60NoIfCNiB74AiIcbWwGib02nGYhCH/rYWOhjttCnZa7DPLW4afSJEC5nDnKluxmGXIsp217gjQS5y4q8M/oqLoYW8LSYND5242bMvs8aPpzI1BRjNOiyweiGF/Z9Oe9Qqa7D5g0BT8uLK+tz2YC5EwQtXDaYX1G/ZUhxcBgM8oqjLXxRWhuB76Hs34bRDCNktoDoG9r1zeY9bHfrv9MfuNCZPBqmb83l9DinXmLplVi9TV0opvhYYorbElMjhjiv3twzjL6s/sCcb49VO9iBXLfjt17g2RR4ly2+8X17DmORWbJ34hMyEOslEq2tF2PBgjCAkZY/3tN3f/4TkMJ6R7dImSnG8q5Dpc2SyGZxY5t1YaLIav31pk0dM6/WbgU5TIuLJ8AC/6FzybR6K9RbEYd/9Xe7yy98ek6WKesdm1MUbsyd+gXg2pwvH7ZIRyXaUQT8cUIBx5gd6JbT7zzuUun68R8uQnSwvVQGEcUBBDHK8nFxkEI/kHN93R/IRDYC+VD9NBjG4EYojCV9zzAYb1/3n/a7ZPE4DJ4ulIJlj/3p9EhEAzQZUWcV42d3cgvCjj5qLqHujJgagWYGiOKD/On9R3j71MRphmCzMHUQl0agSFEoYtreIBTrS7VdF5JOQP7gYgyH/NUIaCOMEKCMYNdHoMP7STsJ0NffvUxuD8VIOiCTGZYc1C2Tj0UC1y2U6wzi9VNbe9gZyezGsZYfIjB/GfACIYitbC4cweoTlL3RpUYNTpLyJdl9ft5t//dz8rZ4fE6X6AIfw76+Gc9daft67oRZ9tsx2Wfs5HbYsZYdNr2Ee5m8rfd/ZoS4DU+v/nMiS/b3j2/lF99zP7S03amgScgqTCLA1oeQC2NBNYAf3JwC+Fhq4PBGm96Kx+j4pa3Ko5qORP1JpPS/pH0LMcBga4C3mgC/rvB9yK7dQT+iEtz+jxZ6bgRb0JH0BZjmTJFgvF2vpM2JioGqRhF192H2P2iodw8269dP+ZHWEjkETo8L0msgQRpbjQ3LQOgxZf71088//ftHK7yuk4frkARBu02XWe9zba0faUgLcIEd3zZo97aoDu9RfnC2VxA76VxkwG/QEoQragmttNU9u/ndTZHg8kLGLZH6bOwo8gY3az6lrL7Y1Fd+ajGdsvcmaryYFmcEcezQliPmLBlDFe93x0LkofJMNYLkMlkur1DOqY5Sbzln2+NC69CHwyMWEVsI3fA4hwOuDR5xfBv1rMJTEUID2wihRhCyEnci1I6Q+/t7eo0CBCiA3vBQFzIODzMV4pLeMaEdHqn4kCt+hfBQ/Z3e8FAXMg4PLJDSLacmbNU5qDcaZuH/sX55uMtMVgezXsOTwNot5/Ng6Vxnchh0slsthtSSjwypd3/+k1979YB54IjRgaOhDad+4PyQ5+YDRu/On9i54cxfA64kxBURdoGloVbKJLCI8MDqDiwajA8sM109xFImd/fajfhFIu+v0cfTFQwHC5k24nWMPzcpd6QXOz3EDh1d7ITDZ3doxtWn9dOXrAAt2KwLz82Dqj2oEK/NNqgaZ5BoK/ZpCar3mbp8qebRfMLs+C4LadXKHj9jFmooQmsllT58EAKrFjsMWwhu3g2+bRVhL6/P4NLz4qnNwtGlddNdPq4DL8M71ke8BmWuh+03TM4Hi823xfeXz6mBsfp+vMfxzxQ8LzcZ9nRQ5niT2j0IFsuD9emVjiIzRFSVGYjSYXlewpLMqA9ze5kxjsw4epPFI5DhAsLl3RhTVG4+pzLjaOAE29f9czaX5igng7eP6T9vSHeXaUgUm+XxP0syzVb+4+plWnBjT6xZ5u+Muf9Odtsa7j701PLc3Zm7kVyCLoslfbnbZkQtQoDpb3z4ZbtKsk/8Pw==</diagram></mxfile>"><defs/><g><rect x="155" y="242" width="3040" height="720" fill="none" stroke="#000000" stroke-width="4" pointer-events="all"/><path d="M 1915 482.53 L 1915 475" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1915 492.53 L 1911.67 482.53 L 1918.33 482.53 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1555 482.53 L 1555 475" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1555 492.53 L 1551.67 482.53 L 1558.33 482.53 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1195 482.53 L 1195 475" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1195 492.53 L 1191.67 482.53 L 1198.33 482.53 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 835 482.53 L 835 475" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 835 492.53 L 831.67 482.53 L 838.33 482.53 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="195" y="362.21" width="2960" height="560" fill="none" stroke="#666666" stroke-width="4" pointer-events="all"/><path d="M 395 608.38 L 395 402 L 3015 402 L 3014.91 548.09" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 395 618.38 L 391.67 608.38 L 398.33 608.38 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 3014.9 558.09 L 3011.58 548.09 L 3018.24 548.09 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1144.8 802.47 L 1166.56 802.47" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1172.56 802.47 L 1166.56 804.47 L 1166.56 800.47 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 675 682.36 L 706.76 682.36" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 712.76 682.36 L 706.76 684.36 L 706.76 680.36 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1035 682.36 L 1066.76 682.36" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1072.76 682.36 L 1066.76 684.36 L 1066.76 680.36 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1395 682.26 L 1426.76 682.26" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1432.76 682.26 L 1426.76 684.26 L 1426.76 680.26 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1755 682.26 L 1786.76 682.26" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1792.76 682.26 L 1786.76 684.26 L 1786.76 680.26 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1115 702.5 L 1145 702.5 L 1145 782.5 L 1166.76 782.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1172.76 782.5 L 1166.76 784.5 L 1166.76 780.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1145 822.49 L 1166.76 822.49" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1172.76 822.49 L 1166.76 824.49 L 1166.76 820.49 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1145 842.33 L 1166.76 842.33" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1172.76 842.33 L 1166.76 844.33 L 1166.76 840.33 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1145 862.5 L 1166.76 862.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1172.76 862.5 L 1166.76 864.5 L 1166.76 860.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 784.8 802.85 L 806.56 802.85" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 812.56 802.85 L 806.56 804.85 L 806.56 800.85 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 785 822.87 L 806.76 822.87" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 812.76 822.87 L 806.76 824.87 L 806.76 820.87 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 785 842.71 L 806.76 842.71" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 812.76 842.71 L 806.76 844.71 L 806.76 840.71 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 785 862.88 L 806.76 862.88" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 812.76 862.88 L 806.76 864.88 L 806.76 860.88 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1504.8 802.85 L 1526.56 802.85" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1532.56 802.85 L 1526.56 804.85 L 1526.56 800.85 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1505 822.87 L 1526.76 822.87" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1532.76 822.87 L 1526.76 824.87 L 1526.76 820.87 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1505 842.71 L 1526.76 842.71" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1532.76 842.71 L 1526.76 844.71 L 1526.76 840.71 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1505 862.88 L 1526.76 862.88" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1532.76 862.88 L 1526.76 864.88 L 1526.76 860.88 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1864.8 802.85 L 1886.56 802.85" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1892.56 802.85 L 1886.56 804.85 L 1886.56 800.85 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1865 822.87 L 1886.76 822.87" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1892.76 822.87 L 1886.76 824.87 L 1886.76 820.87 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1865 842.71 L 1886.76 842.71" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1892.76 842.71 L 1886.76 844.71 L 1886.76 840.71 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1865 862.88 L 1886.76 862.88" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1892.76 862.88 L 1886.76 864.88 L 1886.76 860.88 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1475 702.5 L 1505 702.5 L 1505 782.5 L 1526.76 782.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1532.76 782.5 L 1526.76 784.5 L 1526.76 780.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1835 702.5 L 1865 702.5 L 1865 782.5 L 1886.76 782.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1892.76 782.5 L 1886.76 784.5 L 1886.76 780.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 754.8 702.5 L 784.8 702.5 L 784.8 782.5 L 806.56 782.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 812.56 782.5 L 806.56 784.5 L 806.56 780.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 855 802.5 L 885 802.5 L 885 682.5 L 906.76 682.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 912.76 682.5 L 906.76 684.5 L 906.76 680.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1215 802.85 L 1245 802.85 L 1245 682.85 L 1266.76 682.85" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1272.76 682.85 L 1266.76 684.85 L 1266.76 680.85 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1575 802.85 L 1605 802.85 L 1605 682.85 L 1626.76 682.85" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1632.76 682.85 L 1626.76 684.85 L 1626.76 680.85 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1935 802.85 L 1965 802.85 L 1965 682.85 L 1986.76 682.85" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1992.76 682.85 L 1986.76 684.85 L 1986.76 680.85 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 754.8 662.5 L 784.8 662.5 L 784.8 542.5 L 806.56 542.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 812.56 542.5 L 806.56 544.5 L 806.56 540.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1115 662.5 L 1145 662.5 L 1145 542.5 L 1166.76 542.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1172.76 542.5 L 1166.76 544.5 L 1166.76 540.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1475 662.5 L 1505 662.5 L 1505 542.5 L 1526.76 542.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1532.76 542.5 L 1526.76 544.5 L 1526.76 540.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1835 662.5 L 1865 662.5 L 1865 542.5 L 1886.76 542.5" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1892.76 542.5 L 1886.76 544.5 L 1886.76 540.5 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 2115 682.26 L 2146.76 682.26" fill="none" stroke="#d6b656" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2152.76 682.26 L 2146.76 684.26 L 2146.76 680.26 Z" fill="#d6b656" stroke="#d6b656" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 2255 682.3 L 2446.78 682.34" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2452.78 682.34 L 2446.78 684.34 L 2446.78 680.34 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1935.02 522.5 L 2275 522.5 L 2275 662.5 L 2446.97 661.75" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2452.97 661.72 L 2446.98 663.75 L 2446.97 659.75 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1574.66 522.5 L 1605 522.5 L 1605 462.5 L 2295 462.5 L 2294.93 642.5 L 2447.72 642.22" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2453.72 642.21 L 2447.73 644.22 L 2447.72 640.22 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1215 522.5 L 1245 522.5 L 1245 442.5 L 2315.29 442.5 L 2315.22 622.5 L 2446.97 621.78" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2452.97 621.75 L 2446.98 623.78 L 2446.96 619.78 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 855.01 522.5 L 885 522.5 L 885 422.5 L 2335.24 422 L 2335.17 602 L 2446.54 601.77" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2452.54 601.76 L 2446.54 603.77 L 2446.54 599.77 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 855 842.68 L 876.96 842.8" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 882.96 842.84 L 876.95 844.8 L 876.98 840.8 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="885.2" y="832.5" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 843px; margin-left: 887px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="887" y="846" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><path d="M 1215 842.68 L 1236.96 842.8" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1242.96 842.84 L 1236.95 844.8 L 1236.98 840.8 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1575 842.68 L 1596.96 842.8" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1602.96 842.84 L 1596.95 844.8 L 1596.98 840.8 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1935 842.68 L 1956.96 842.8" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1962.96 842.84 L 1956.95 844.8 L 1956.98 840.8 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="710" y="792.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 803px; margin-left: 710px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_0</div></div></div></foreignObject><text x="783" y="806" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">in_split_0</text></switch></g><rect x="710" y="812.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 823px; margin-left: 710px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_0</div></div></div></foreignObject><text x="783" y="826" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">uRx_split_0</text></switch></g><rect x="710" y="832.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 843px; margin-left: 710px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div align="right"><font color="#CC6600">all_ones</font></div></div></div></div></foreignObject><text x="783" y="846" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">all_ones</text></switch></g><rect x="710" y="852.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 863px; margin-left: 710px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div align="right"><font color="#CC6600">all_zeros</font></div></div></div></div></foreignObject><text x="783" y="866" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">all_zeros</text></switch></g><rect x="1245" y="832.5" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 843px; margin-left: 1247px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="1247" y="846" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><rect x="1605" y="832.5" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 843px; margin-left: 1607px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="1607" y="846" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><rect x="1965" y="832.5" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 843px; margin-left: 1967px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="1967" y="846" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><rect x="1070" y="792.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 803px; margin-left: 1070px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_1</div></div></div></foreignObject><text x="1143" y="806" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">in_split_1</text></switch></g><rect x="1070" y="812.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 823px; margin-left: 1070px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_1</div></div></div></foreignObject><text x="1143" y="826" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">uRx_split_1</text></switch></g><rect x="1070" y="832.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 843px; margin-left: 1070px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div align="right"><font color="#CC6600">all_ones</font></div></div></div></div></foreignObject><text x="1143" y="846" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">all_ones</text></switch></g><rect x="1070" y="852.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 863px; margin-left: 1070px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div align="right"><font color="#CC6600">all_zeros</font></div></div></div></div></foreignObject><text x="1143" y="866" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">all_zeros</text></switch></g><rect x="1430" y="792.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 803px; margin-left: 1430px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_2</div></div></div></foreignObject><text x="1503" y="806" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">in_split_2</text></switch></g><rect x="1430" y="812.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 823px; margin-left: 1430px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_2</div></div></div></foreignObject><text x="1503" y="826" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">uRx_split_2</text></switch></g><rect x="1430" y="832.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 843px; margin-left: 1430px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div align="right"><font color="#CC6600">all_ones</font></div></div></div></div></foreignObject><text x="1503" y="846" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">all_ones</text></switch></g><rect x="1430" y="852.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 863px; margin-left: 1430px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div align="right"><font color="#CC6600">all_zeros</font></div></div></div></div></foreignObject><text x="1503" y="866" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">all_zeros</text></switch></g><rect x="1790" y="792.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 803px; margin-left: 1790px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_3</div></div></div></foreignObject><text x="1863" y="806" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">in_split_3</text></switch></g><rect x="1790" y="812.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 823px; margin-left: 1790px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_3</div></div></div></foreignObject><text x="1863" y="826" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">uRx_split_3</text></switch></g><rect x="1790" y="832.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 843px; margin-left: 1790px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div align="right"><font color="#CC6600">all_ones</font></div></div></div></div></foreignObject><text x="1863" y="846" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">all_ones</text></switch></g><rect x="1790" y="852.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 863px; margin-left: 1790px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div align="right"><font color="#CC6600">all_zeros</font></div></div></div></div></foreignObject><text x="1863" y="866" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">all_zeros</text></switch></g><rect x="1215" y="782.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 793px; margin-left: 1216px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1225" y="796" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1215" y="822.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 832px; margin-left: 1216px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1225" y="836" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1575" y="782.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 793px; margin-left: 1576px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1585" y="796" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1575" y="822.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 832px; margin-left: 1576px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1585" y="836" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1935" y="782.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 793px; margin-left: 1936px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1945" y="796" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1935" y="822.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 832px; margin-left: 1936px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1945" y="836" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1154.8" y="762.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 773px; margin-left: 1156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1165" y="776" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1154.8" y="782.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 793px; margin-left: 1156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1165" y="796" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1155" y="802.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 813px; margin-left: 1156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">2</div></div></div></foreignObject><text x="1165" y="816" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">2</text></switch></g><rect x="1155" y="822.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 833px; margin-left: 1156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">3</div></div></div></foreignObject><text x="1165" y="836" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">3</text></switch></g><rect x="1155" y="842.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 853px; margin-left: 1156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">4</div></div></div></foreignObject><text x="1165" y="856" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">4</text></switch></g><rect x="1514.8" y="762.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 773px; margin-left: 1516px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1525" y="776" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1514.8" y="782.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 793px; margin-left: 1516px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1525" y="796" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1515" y="802.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 813px; margin-left: 1516px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">2</div></div></div></foreignObject><text x="1525" y="816" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">2</text></switch></g><rect x="1515" y="822.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 833px; margin-left: 1516px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">3</div></div></div></foreignObject><text x="1525" y="836" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">3</text></switch></g><rect x="1515" y="842.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 853px; margin-left: 1516px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">4</div></div></div></foreignObject><text x="1525" y="856" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">4</text></switch></g><rect x="1874.8" y="762.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 773px; margin-left: 1876px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1885" y="776" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1874.8" y="782.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 793px; margin-left: 1876px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1885" y="796" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1875" y="802.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 813px; margin-left: 1876px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">2</div></div></div></foreignObject><text x="1885" y="816" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">2</text></switch></g><rect x="1875" y="822.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 833px; margin-left: 1876px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">3</div></div></div></foreignObject><text x="1885" y="836" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">3</text></switch></g><rect x="1875" y="842.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 853px; margin-left: 1876px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">4</div></div></div></foreignObject><text x="1885" y="856" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">4</text></switch></g><rect x="2355" y="572.15" width="70" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 68px; height: 1px; padding-top: 582px; margin-left: 2355px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_4</div></div></div></foreignObject><text x="2423" y="586" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">in_split_4</text></switch></g><path d="M 2424.75 582 L 2446.71 582.12" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2452.71 582.16 L 2446.7 584.12 L 2446.73 580.12 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 2424.75 562.33 L 2446.71 562.45" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2452.71 562.49 L 2446.7 564.45 L 2446.73 560.45 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="2350" y="552.15" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 73px; height: 1px; padding-top: 562px; margin-left: 2350px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_4</div></div></div></foreignObject><text x="2423" y="566" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">uRx_split_4</text></switch></g><rect x="2434.95" y="662.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 673px; margin-left: 2436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="2445" y="676" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="2434.95" y="642.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 653px; margin-left: 2436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="2445" y="656" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="2434.95" y="622.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 633px; margin-left: 2436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">2</div></div></div></foreignObject><text x="2445" y="636" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">2</text></switch></g><rect x="2434.95" y="602" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 612px; margin-left: 2436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">3</div></div></div></foreignObject><text x="2445" y="616" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">3</text></switch></g><rect x="2434.95" y="582.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 593px; margin-left: 2436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">4</div></div></div></foreignObject><text x="2445" y="596" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">4</text></switch></g><rect x="2434.95" y="562.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 573px; margin-left: 2436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">5</div></div></div></foreignObject><text x="2445" y="576" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">5</text></switch></g><rect x="2434.95" y="542.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 553px; margin-left: 2436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">6</div></div></div></foreignObject><text x="2445" y="556" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">6</text></switch></g><path d="M 2494.95 582.33 L 2516.91 582.45" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2522.91 582.49 L 2516.9 584.45 L 2516.93 580.45 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="2524.95" y="572.15" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 582px; margin-left: 2527px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="2527" y="586" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><rect x="2494.95" y="562.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 572px; margin-left: 2496px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">2</div></div></div></foreignObject><text x="2505" y="576" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">2</text></switch></g><path d="M 2494.75 621.54 L 2546.72 621.7" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2552.72 621.72 L 2546.72 623.7 L 2546.73 619.7 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 2494.75 662.1 L 2525 662 L 2525 782 L 2546.66 781.89" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2552.66 781.86 L 2546.67 783.89 L 2546.65 779.89 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="2494.95" y="602" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 612px; margin-left: 2496px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="2505" y="616" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><path d="M 2654.9 621.89 L 2686.66 621.82" fill="none" stroke="#82b366" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2692.66 621.81 L 2686.67 623.82 L 2686.66 619.82 Z" fill="#82b366" stroke="#82b366" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 2814.9 622.16 L 2846.66 622.09" fill="none" stroke="#82b366" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2852.66 622.08 L 2846.67 624.09 L 2846.66 620.09 Z" fill="#82b366" stroke="#82b366" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 834.77 758.03 L 835 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 834.76 768.03 L 831.44 758.03 L 838.1 758.03 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 854.8 562.33 L 876.76 562.45" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 882.76 562.49 L 876.75 564.45 L 876.78 560.45 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="885.2" y="552.15" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 562px; margin-left: 887px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="887" y="566" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><rect x="795" y="522.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 533px; margin-left: 796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="805" y="536" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><path d="M 1194.77 758.03 L 1195 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1194.76 768.03 L 1191.44 758.03 L 1198.1 758.03 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1554.77 758.03 L 1555 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1554.76 768.03 L 1551.44 758.03 L 1558.1 758.03 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1914.77 758.03 L 1915 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1914.76 768.03 L 1911.44 758.03 L 1918.1 758.03 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1575 562.33 L 1596.96 562.45" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1602.96 562.49 L 1596.95 564.45 L 1596.98 560.45 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="1605" y="552.15" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 562px; margin-left: 1607px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="1607" y="566" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><rect x="1575" y="542.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 552px; margin-left: 1576px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1585" y="556" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1575" y="502.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 513px; margin-left: 1576px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1585" y="516" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1515" y="522.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 533px; margin-left: 1516px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1525" y="536" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><path d="M 1215 562.33 L 1236.96 562.45" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1242.96 562.49 L 1236.95 564.45 L 1236.98 560.45 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="1245" y="552.15" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 562px; margin-left: 1247px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="1247" y="566" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><rect x="1215" y="542.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 552px; margin-left: 1216px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1225" y="556" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1215" y="502.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 513px; margin-left: 1216px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1225" y="516" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1154.8" y="522.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 533px; margin-left: 1156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1165" y="536" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><path d="M 1935 562.33 L 1956.96 562.45" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1962.96 562.49 L 1956.95 564.45 L 1956.98 560.45 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="1965" y="552.15" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 562px; margin-left: 1967px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#CC6600">always_ready</font></div></div></div></foreignObject><text x="1967" y="566" fill="#000000" font-family="Helvetica" font-size="12px">always_ready</text></switch></g><rect x="1935" y="542.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 552px; margin-left: 1936px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1945" y="556" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="1935" y="502.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 513px; margin-left: 1936px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="1945" y="516" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="1875" y="522.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 532px; margin-left: 1876px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="1885" y="536" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><path d="M 1814.6 628.03 L 1815 322" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1814.59 638.03 L 1811.27 628.02 L 1817.93 628.03 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1694.68 628.28 L 1695 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1694.67 638.28 L 1691.35 628.27 L 1698.01 628.28 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 2054.8 628.28 L 2055 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2054.79 638.28 L 2051.47 628.28 L 2058.14 628.28 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1334.8 628.28 L 1335 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1334.79 638.28 L 1331.47 628.28 L 1338.14 628.28 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1454.8 628.28 L 1455 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1454.79 638.28 L 1451.47 628.28 L 1458.14 628.28 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 1094.8 628.28 L 1095 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1094.79 638.28 L 1091.47 628.28 L 1098.14 628.28 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 974.8 628.03 L 975 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 974.79 638.03 L 971.47 628.03 L 978.14 628.03 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 734.68 628.28 L 735 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 734.67 638.28 L 731.35 628.27 L 738.01 628.28 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 614.8 628.28 L 615 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 614.79 638.28 L 611.47 628.28 L 618.14 628.28 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 2474.42 537.68 L 2475 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2474.38 547.68 L 2471.09 537.66 L 2477.75 537.69 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 2754.52 568.09 L 2755 402" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2754.49 578.09 L 2751.19 568.08 L 2757.85 568.1 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 2954.9 622.15 L 2986.66 622.08" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2992.66 622.07 L 2986.67 624.08 L 2986.66 620.08 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 3034.9 602.06 L 3056.66 602.06" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3062.66 602.06 L 3056.66 604.06 L 3056.66 600.06 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 3035.1 622.08 L 3056.86 622.08" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3062.86 622.08 L 3056.86 624.08 L 3056.86 620.08 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 3035.1 641.92 L 3056.86 641.92" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3062.86 641.92 L 3056.86 643.92 L 3056.86 639.92 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 3035.1 662.09 L 3056.86 662.09" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3062.86 662.09 L 3056.86 664.09 L 3056.86 660.09 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 3034.9 582.23 L 3056.66 582.23" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3062.66 582.23 L 3056.66 584.23 L 3056.66 580.23 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="3064.9" y="572.21" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 582px; margin-left: 3067px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_4</div></div></div></foreignObject><text x="3067" y="586" fill="#000000" font-family="Helvetica" font-size="12px">uRx_split_4</text></switch></g><rect x="3064.9" y="591.8" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 602px; margin-left: 3067px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_3</div></div></div></foreignObject><text x="3067" y="605" fill="#000000" font-family="Helvetica" font-size="12px">uRx_split_3</text></switch></g><rect x="3064.9" y="611.8" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 622px; margin-left: 3067px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_2</div></div></div></foreignObject><text x="3067" y="625" fill="#000000" font-family="Helvetica" font-size="12px">uRx_split_2</text></switch></g><rect x="3064.9" y="632.21" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 642px; margin-left: 3067px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_1</div></div></div></foreignObject><text x="3067" y="646" fill="#000000" font-family="Helvetica" font-size="12px">uRx_split_1</text></switch></g><rect x="3064.9" y="652.21" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 662px; margin-left: 3067px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split_0</div></div></div></foreignObject><text x="3067" y="666" fill="#000000" font-family="Helvetica" font-size="12px">uRx_split_0</text></switch></g><path d="M 335 682.44 L 366.76 682.37" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 372.76 682.36 L 366.77 684.37 L 366.76 680.37 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 415 662.35 L 436.76 662.35" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442.76 662.35 L 436.76 664.35 L 436.76 660.35 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 415.2 682.37 L 436.96 682.37" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442.96 682.37 L 436.96 684.37 L 436.96 680.37 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 415.2 702.21 L 436.96 702.21" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442.96 702.21 L 436.96 704.21 L 436.96 700.21 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 415.2 722.38 L 436.96 722.38" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442.96 722.38 L 436.96 724.38 L 436.96 720.38 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 415 642.52 L 436.76 642.52" fill="none" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442.76 642.52 L 436.76 644.52 L 436.76 640.52 Z" fill="#9673a6" stroke="#9673a6" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="445" y="632.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 643px; margin-left: 447px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_4</div></div></div></foreignObject><text x="447" y="646" fill="#000000" font-family="Helvetica" font-size="12px">in_split_4</text></switch></g><rect x="445" y="652.09" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 662px; margin-left: 447px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_3</div></div></div></foreignObject><text x="447" y="666" fill="#000000" font-family="Helvetica" font-size="12px">in_split_3</text></switch></g><rect x="445" y="672.09" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 682px; margin-left: 447px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_2</div></div></div></foreignObject><text x="447" y="686" fill="#000000" font-family="Helvetica" font-size="12px">in_split_2</text></switch></g><rect x="445" y="692.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 703px; margin-left: 447px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_1</div></div></div></foreignObject><text x="447" y="706" fill="#000000" font-family="Helvetica" font-size="12px">in_split_1</text></switch></g><rect x="445" y="712.5" width="75" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 73px; height: 1px; padding-top: 723px; margin-left: 447px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split_0</div></div></div></foreignObject><text x="447" y="726" fill="#000000" font-family="Helvetica" font-size="12px">in_split_0</text></switch></g><path d="M 115 683 L 226.76 682.64" fill="none" stroke="#82b366" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 232.76 682.62 L 226.77 684.64 L 226.76 680.64 Z" fill="#82b366" stroke="#82b366" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 2734.91 670.04 L 2735 762 L 3235 762" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2734.9 664.04 L 2736.91 670.03 L 2732.91 670.04 Z" fill="#6c8ebf" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 2754.73 661.8 L 2755 742 L 3226.76 742" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3232.76 742 L 3226.76 744 L 3226.76 740 Z" fill="#6c8ebf" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 2774.9 661.8 L 2775 722 L 3226.76 722" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3232.76 722 L 3226.76 724 L 3226.76 720 Z" fill="#6c8ebf" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="2494.95" y="641.74" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 652px; margin-left: 2496px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="2505" y="655" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><path d="M 2654.9 781.74 L 3226.76 782" fill="none" stroke="#82b366" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3232.76 782 L 3226.76 784 L 3226.76 780 Z" fill="#82b366" stroke="#82b366" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="235" y="657.5" width="100" height="50" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 683px; margin-left: 236px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 12px">8→32</font></div></div></div></foreignObject><text x="285" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">8→32</text></switch></g><rect x="305" y="672.5" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 683px; margin-left: 305px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="333" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="235" y="672.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 683px; margin-left: 237px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="237" y="686" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="265" y="707.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 718px; margin-left: 266px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_adapter</div></div></div></foreignObject><text x="285" y="721" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">in_adap...</text></switch></g><path d="M 375 677.85 L 380 677.85 L 390 657.85 L 399.88 657.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 403.88 657.85 L 399.88 659.18 L 399.88 656.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 677.85 L 390 697.85 L 399.88 697.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 403.88 697.85 L 399.88 699.18 L 399.88 696.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 677.85 L 390 717.85 L 399.88 717.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 403.88 717.85 L 399.88 719.18 L 399.88 716.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 677.85 L 399.88 677.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 403.88 677.85 L 399.88 679.18 L 399.88 676.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="375" y="622.85" width="40" height="120" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 380 682.85 L 385 682.85 L 395 662.85 L 404.88 662.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 408.88 662.85 L 404.88 664.18 L 404.88 661.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 385 682.85 L 395 702.85 L 404.88 702.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 408.88 702.85 L 404.88 704.18 L 404.88 701.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="375" y="622.85" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 634px; margin-left: 376px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="395" y="634" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 385 682.85 L 395 722.85 L 404.88 722.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 408.88 722.85 L 404.88 724.18 L 404.88 721.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 385 682.85 L 395 642.85 L 404.88 642.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 408.88 642.85 L 404.88 644.18 L 404.88 641.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 385 682.85 L 404.88 682.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 408.88 682.85 L 404.88 684.18 L 404.88 681.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="375" y="742.85" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 753px; margin-left: 376px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in_split</div></div></div></foreignObject><text x="395" y="756" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">in_split</text></switch></g><rect x="555" y="642.5" width="120" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 683px; margin-left: 556px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><p><font style="font-size: 20px" face="Times New Roman">PLFG</font><br /></p></div></div></div></foreignObject><text x="615" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">PLFG
</text></switch></g><rect x="595" y="642.5" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 654px; margin-left: 596px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="615" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="635" y="672.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 38px; height: 1px; padding-top: 683px; margin-left: 635px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="673" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="715" y="642.5" width="40" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 720 682.85 L 725 682.85 L 735 662.85 L 744.88 662.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 748.88 662.85 L 744.88 664.18 L 744.88 661.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 725 682.85 L 735 702.85 L 744.88 702.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 748.88 702.85 L 744.88 704.18 L 744.88 701.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="715" y="642.5" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 654px; margin-left: 716px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="735" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="715" y="722.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 733px; margin-left: 716px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">plfg_split</div></div></div></foreignObject><text x="735" y="736" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">plfg_sp...</text></switch></g><path d="M 775 562.33 L 795 522.85 L 874.6 522.85 L 894.6 562.33 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,834.8,542.59)" pointer-events="all"/><path d="M 819.8 542.5 L 824.8 542.5 L 849.8 517.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 832.3 512.5 Q 852.3 532.5 836.8 555.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 832.92 561.57 L 834.86 554.45 L 838.74 557.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="814.8" y="602.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 613px; margin-left: 816px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>plfg_mux_1</div></div></div></div></foreignObject><text x="835" y="616" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">plfg_mu...</text></switch></g><rect x="855" y="542.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 552px; margin-left: 856px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="865" y="556" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="855" y="502.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 513px; margin-left: 856px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="865" y="516" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="815" y="495.25" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 507px; margin-left: 816px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="835" y="507" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 775.2 842.33 L 795.2 802.85 L 874.8 802.85 L 894.8 842.33 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,835,822.59)" pointer-events="all"/><path d="M 820 822.5 L 825 822.5 L 850 797.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 832.5 792.5 Q 852.5 812.5 837 835.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 833.12 841.57 L 835.06 834.45 L 838.94 837.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="815" y="882.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 893px; margin-left: 816px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>plfg_mux_0</div></div></div></div></foreignObject><text x="835" y="896" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">plfg_mu...</text></switch></g><rect x="855" y="782.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 793px; margin-left: 856px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="865" y="796" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="855" y="822.33" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 832px; margin-left: 856px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="865" y="836" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="794.8" y="762.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 773px; margin-left: 796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0</div></div></div></foreignObject><text x="805" y="776" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g><rect x="794.8" y="782.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 793px; margin-left: 796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">1</div></div></div></foreignObject><text x="805" y="796" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="795" y="802.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 813px; margin-left: 796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">2</div></div></div></foreignObject><text x="805" y="816" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">2</text></switch></g><rect x="795" y="822.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 833px; margin-left: 796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">3</div></div></div></foreignObject><text x="805" y="836" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">3</text></switch></g><rect x="795" y="842.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 853px; margin-left: 796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">4</div></div></div></foreignObject><text x="805" y="856" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">4</text></switch></g><rect x="814.8" y="775.25" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 787px; margin-left: 816px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="835" y="787" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="915" y="642.5" width="120" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 683px; margin-left: 916px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 20px">NCO</font></div></div></div></foreignObject><text x="975" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">NCO</text></switch></g><rect x="1005" y="672.5" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 683px; margin-left: 1005px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="1033" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="915" y="672.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 683px; margin-left: 917px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="917" y="686" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="955" y="642.5" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 654px; margin-left: 956px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="975" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="1075" y="642.5" width="40" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 1080 682.85 L 1085 682.85 L 1095 662.85 L 1104.88 662.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1108.88 662.85 L 1104.88 664.18 L 1104.88 661.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1085 682.85 L 1095 702.85 L 1104.88 702.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1108.88 702.85 L 1104.88 704.18 L 1104.88 701.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1075" y="722.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 733px; margin-left: 1076px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">nco_split</div></div></div></foreignObject><text x="1095" y="736" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">nco_spl...</text></switch></g><rect x="1075" y="643" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 655px; margin-left: 1076px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1095" y="655" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 1135.2 842.33 L 1155.2 802.85 L 1234.8 802.85 L 1254.8 842.33 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,1195,822.59)" pointer-events="all"/><path d="M 1180 822.5 L 1185 822.5 L 1210 797.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1192.5 792.5 Q 1212.5 812.5 1197 835.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1193.12 841.57 L 1195.06 834.45 L 1198.94 837.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1175" y="882.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 893px; margin-left: 1176px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">nco_mux_0</div></div></div></foreignObject><text x="1195" y="896" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">nco_mux...</text></switch></g><rect x="1175" y="775.25" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 787px; margin-left: 1176px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1195" y="787" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 1135.2 562.33 L 1155.2 522.85 L 1234.8 522.85 L 1254.8 562.33 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,1195,542.59)" pointer-events="all"/><path d="M 1180 542.5 L 1185 542.5 L 1210 517.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1192.5 512.5 Q 1212.5 532.5 1197 555.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1193.12 561.57 L 1195.06 554.45 L 1198.94 557.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1175" y="602.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 613px; margin-left: 1176px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">nco_mux_1</div></div></div></foreignObject><text x="1195" y="616" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">nco_mux...</text></switch></g><rect x="1174.8" y="495.25" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 507px; margin-left: 1176px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1195" y="507" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="1275" y="642.5" width="120" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 683px; margin-left: 1276px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 20px">FFT</font></div></div></div></foreignObject><text x="1335" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">FFT</text></switch></g><rect x="1365" y="672.5" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 683px; margin-left: 1365px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="1393" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="1275" y="672.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 683px; margin-left: 1277px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="1277" y="686" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="1315" y="643" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 655px; margin-left: 1316px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1335" y="655" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="1435" y="642.5" width="40" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 1440 682.85 L 1445 682.85 L 1455 662.85 L 1464.88 662.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1468.88 662.85 L 1464.88 664.18 L 1464.88 661.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1445 682.85 L 1455 702.85 L 1464.88 702.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1468.88 702.85 L 1464.88 704.18 L 1464.88 701.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1435" y="722.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 733px; margin-left: 1436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">fft_split</div></div></div></foreignObject><text x="1455" y="736" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">fft_spl...</text></switch></g><rect x="1435" y="642.5" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 654px; margin-left: 1436px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1455" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 1495.2 562.33 L 1515.2 522.85 L 1594.8 522.85 L 1614.8 562.33 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,1555,542.59)" pointer-events="all"/><path d="M 1540 542.5 L 1545 542.5 L 1570 517.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1552.5 512.5 Q 1572.5 532.5 1557 555.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1553.12 561.57 L 1555.06 554.45 L 1558.94 557.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1535" y="602.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 613px; margin-left: 1536px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">fft_mux_1</div></div></div></foreignObject><text x="1555" y="616" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">fft_mux...</text></switch></g><rect x="1535" y="495.25" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 507px; margin-left: 1536px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1555" y="507" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 1495.2 842.33 L 1515.2 802.85 L 1594.8 802.85 L 1614.8 842.33 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,1555,822.59)" pointer-events="all"/><path d="M 1540 822.5 L 1545 822.5 L 1570 797.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1552.5 792.5 Q 1572.5 812.5 1557 835.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1553.12 841.57 L 1555.06 834.45 L 1558.94 837.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1535" y="882.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 893px; margin-left: 1536px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">fft_mux_0</div></div></div></foreignObject><text x="1555" y="896" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">fft_mux...</text></switch></g><rect x="1535" y="775.25" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 787px; margin-left: 1536px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1555" y="787" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="1635" y="642.5" width="120" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 683px; margin-left: 1636px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 20px">MAG</font></div></div></div></foreignObject><text x="1695" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">MAG</text></switch></g><rect x="1725" y="672.5" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 683px; margin-left: 1725px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="1753" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="1635" y="672.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 683px; margin-left: 1637px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="1637" y="686" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="1675" y="642.5" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 654px; margin-left: 1676px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1695" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="1795" y="642.5" width="40" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 1800 682.85 L 1805 682.85 L 1815 662.85 L 1824.88 662.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1828.88 662.85 L 1824.88 664.18 L 1824.88 661.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 1805 682.85 L 1815 702.85 L 1824.88 702.85" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1828.88 702.85 L 1824.88 704.18 L 1824.88 701.52 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1795" y="722.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 733px; margin-left: 1796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">mag_split</div></div></div></foreignObject><text x="1815" y="736" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">mag_spl...</text></switch></g><rect x="1795" y="642.5" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 654px; margin-left: 1796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1815" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 1855.2 842.33 L 1875.2 802.85 L 1954.8 802.85 L 1974.8 842.33 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,1915,822.59)" pointer-events="all"/><path d="M 1900 822.5 L 1905 822.5 L 1930 797.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1912.5 792.5 Q 1932.5 812.5 1917 835.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1913.12 841.57 L 1915.06 834.45 L 1918.94 837.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1895" y="882.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 893px; margin-left: 1896px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">mag_mux_0</div></div></div></foreignObject><text x="1915" y="896" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">mag_mux...</text></switch></g><rect x="1894.8" y="775.25" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 787px; margin-left: 1896px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1915" y="787" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 1855.2 562.33 L 1875.2 522.85 L 1954.8 522.85 L 1974.8 562.33 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,1915,542.59)" pointer-events="all"/><path d="M 1900 542.5 L 1905 542.5 L 1930 517.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1912.5 512.5 Q 1932.5 532.5 1917 555.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1913.12 561.57 L 1915.06 554.45 L 1918.94 557.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="1895" y="602.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 613px; margin-left: 1896px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">mag_mux_1</div></div></div></foreignObject><text x="1915" y="616" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">mag_mux...</text></switch></g><rect x="1894.8" y="495.25" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 507px; margin-left: 1896px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="1915" y="507" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="1995" y="642.5" width="120" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 683px; margin-left: 1996px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 20px">ACC</font></div></div></div></foreignObject><text x="2055" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">ACC</text></switch></g><rect x="2085" y="672.5" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 683px; margin-left: 2085px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="2113" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="1995" y="672.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 683px; margin-left: 1997px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="1997" y="686" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="2035" y="643" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 655px; margin-left: 2036px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="2055" y="655" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="2155" y="657.5" width="100" height="50" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 683px; margin-left: 2156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 12px">16→32</font></div></div></div></foreignObject><text x="2205" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">16→32</text></switch></g><rect x="2225" y="672.5" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 683px; margin-left: 2225px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="2253" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="2155" y="672.5" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 683px; margin-left: 2157px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="2157" y="686" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="2185" y="707.5" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 718px; margin-left: 2186px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">acc_adapter</div></div></div></foreignObject><text x="2205" y="721" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">acc_ada...</text></switch></g><path d="M 2395 641.48 L 2415 602 L 2534.9 602 L 2554.9 641.48 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,2474.95,621.74)" pointer-events="all"/><path d="M 2462.45 622.5 L 2467.45 622.5 L 2492.45 597.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2474.95 592.5 Q 2494.95 612.5 2479.45 635.75" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2475.57 641.57 L 2477.51 634.45 L 2481.39 637.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="2454.95" y="554.9" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 566px; margin-left: 2456px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="2475" y="566" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="2554.9" y="597.21" width="100" height="50" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 622px; margin-left: 2556px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 12px">32→8</font></div></div></div></foreignObject><text x="2605" y="626" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">32→8</text></switch></g><rect x="2624.9" y="612.21" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 622px; margin-left: 2625px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="2653" y="626" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="2554.9" y="612.21" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 622px; margin-left: 2557px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="2557" y="626" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="2584.9" y="647.21" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 657px; margin-left: 2586px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uTx_adapter</div></div></div></foreignObject><text x="2605" y="661" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">uTx_ada...</text></switch></g><rect x="2554.9" y="756.85" width="100" height="50" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 782px; margin-left: 2556px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 12px">32→8</font></div></div></div></foreignObject><text x="2605" y="785" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">32→8</text></switch></g><rect x="2624.9" y="771.85" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 782px; margin-left: 2625px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="2653" y="785" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="2554.9" y="771.85" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 782px; margin-left: 2557px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="2557" y="785" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="2584.9" y="806.85" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 817px; margin-left: 2586px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">out_adapter</div></div></div></foreignObject><text x="2605" y="820" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">out_ada...</text></switch></g><rect x="2694.9" y="581.8" width="120" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 622px; margin-left: 2696px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 20px">UART</font></div></div></div></foreignObject><text x="2755" y="625" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">UART</text></switch></g><rect x="2784.9" y="611.8" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 622px; margin-left: 2785px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="2813" y="625" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="2694.9" y="611.8" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 622px; margin-left: 2697px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="2697" y="625" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="2734.9" y="582.71" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 594px; margin-left: 2736px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="2755" y="594" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><rect x="2854.9" y="597.21" width="100" height="50" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 622px; margin-left: 2856px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 12px">8→32</font></div></div></div></foreignObject><text x="2905" y="626" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">8→32</text></switch></g><rect x="2924.9" y="612.21" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 622px; margin-left: 2925px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Helvetica">out</font></div></div></div></foreignObject><text x="2953" y="626" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">out</text></switch></g><rect x="2854.9" y="612.21" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 18px; height: 1px; padding-top: 622px; margin-left: 2857px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">in</div></div></div></foreignObject><text x="2857" y="626" fill="#000000" font-family="Helvetica" font-size="12px">in</text></switch></g><rect x="2884.9" y="647.21" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 657px; margin-left: 2886px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_adapter</div></div></div></foreignObject><text x="2905" y="661" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">uRx_ada...</text></switch></g><path d="M 2994.9 617.56 L 2999.9 617.56 L 3009.9 597.56 L 3019.78 597.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3023.78 597.56 L 3019.78 598.89 L 3019.78 596.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 2999.9 617.56 L 3009.9 637.56 L 3019.78 637.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3023.78 637.56 L 3019.78 638.89 L 3019.78 636.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 2999.9 617.56 L 3009.9 657.56 L 3019.78 657.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3023.78 657.56 L 3019.78 658.89 L 3019.78 656.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 2999.9 617.56 L 3009.9 577.56 L 3019.78 577.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3023.78 577.56 L 3019.78 578.89 L 3019.78 576.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 2999.9 617.56 L 3019.78 617.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3023.78 617.56 L 3019.78 618.89 L 3019.78 616.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="2994.9" y="562.56" width="40" height="120" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 2999.9 622.56 L 3004.9 622.56 L 3014.9 602.56 L 3024.78 602.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3028.78 602.56 L 3024.78 603.89 L 3024.78 601.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 3004.9 622.56 L 3014.9 642.56 L 3024.78 642.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3028.78 642.56 L 3024.78 643.89 L 3024.78 641.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="2994.9" y="562.56" width="40" height="14.5" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 574px; margin-left: 2996px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#B85450">regs</font></div></div></div></foreignObject><text x="3015" y="574" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">regs</text></switch></g><path d="M 3004.9 622.56 L 3014.9 662.56 L 3024.78 662.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3028.78 662.56 L 3024.78 663.89 L 3024.78 661.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 3004.9 622.56 L 3014.9 582.56 L 3024.78 582.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3028.78 582.56 L 3024.78 583.89 L 3024.78 581.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 3004.9 622.56 L 3024.78 622.56" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3028.78 622.56 L 3024.78 623.89 L 3024.78 621.23 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="2994.9" y="682.56" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 693px; margin-left: 2996px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">uRx_split</div></div></div></foreignObject><text x="3015" y="696" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">uRx_spl...</text></switch></g><rect x="1775" y="282" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 302px; margin-left: 1776px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">WB2AXI</div></div></div></foreignObject><text x="1815" y="306" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">WB2AXI</text></switch></g><rect x="2915" y="822" width="240" height="99.85" fill="none" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 872px; margin-left: 2916px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-size: 24px" align="center"><font style="font-size: 24px" color="#666666"><b>Spectrometer</b></font></div></div></div></div></foreignObject><text x="3035" y="876" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">Spectrometer</text></switch></g><rect x="3235" y="771.85" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 782px; margin-left: 3237px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; "><div style="font-size: 18px" align="left"><font style="font-size: 18px" color="#82B366">outStream</font></div></div></div></div></foreignObject><text x="3237" y="785" fill="#000000" font-family="Helvetica" font-size="12px" font-weight="bold">outStream</text></switch></g><rect x="3235" y="751.85" width="80" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 78px; height: 1px; padding-top: 762px; margin-left: 3237px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 18px"><b><font style="font-size: 18px" color="#6C8EBF">uRx</font></b></font></div></div></div></foreignObject><text x="3237" y="765" fill="#000000" font-family="Helvetica" font-size="12px">uRx</text></switch></g><rect x="3235" y="731.85" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 38px; height: 1px; padding-top: 742px; margin-left: 3237px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-size: 18px" align="left"><font style="font-size: 18px"><b><font style="font-size: 18px" color="#6C8EBF">int</font></b></font></div></div></div></div></foreignObject><text x="3237" y="745" fill="#000000" font-family="Helvetica" font-size="12px">int</text></switch></g><rect x="3235" y="711.85" width="80" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 78px; height: 1px; padding-top: 722px; margin-left: 3237px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 18px"><b><font style="font-size: 18px" color="#6C8EBF">uTx</font></b></font></div></div></div></foreignObject><text x="3237" y="725" fill="#000000" font-family="Helvetica" font-size="12px">uTx</text></switch></g><rect x="0" y="662" width="115" height="40" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 113px; height: 1px; padding-top: 682px; margin-left: 0px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-size: 18px" align="right"><font style="font-size: 18px"><b><font style="font-size: 18px" color="#82B366">inStream</font></b></font></div></div></div></div></foreignObject><text x="113" y="686" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="end">inStream</text></switch></g><rect x="155" y="242" width="280" height="80" fill="none" stroke="#000000" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 278px; height: 1px; padding-top: 282px; margin-left: 156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><font style="font-size: 24px">user_proj_example</font></b></div></div></div></foreignObject><text x="295" y="286" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">user_proj_example</text></switch></g><path d="M 1815 267.53 L 1815 202" fill="none" stroke="#663300" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1815 277.53 L 1811.67 267.53 L 1818.33 267.53 Z" fill="#663300" stroke="#663300" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="1795" y="182" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 192px; margin-left: 1796px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 18px"><b><font style="font-size: 18px" color="#663300">WB</font></b></font></div></div></div></foreignObject><text x="1815" y="196" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">WB</text></switch></g><rect x="155" y="1" width="640" height="201" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><rect x="155" y="2" width="630" height="40" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 628px; height: 1px; padding-top: 22px; margin-left: 156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#666666"><b><font style="font-size: 24px">LEGEND</font></b></font></div></div></div></foreignObject><text x="470" y="26" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">LEGEND</text></switch></g><path d="M 170 82 L 232.53 82" fill="none" stroke="#663300" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 240.53 82 L 232.53 84.67 L 232.53 79.33 Z" fill="#663300" stroke="#663300" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="155" y="42" width="100" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 52px; margin-left: 156px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font color="#666666"><b><font style="font-size: 18px">Signals</font><font style="font-size: 18px">:</font></b></font></div></div></div></foreignObject><text x="205" y="56" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Signals:</text></switch></g><path d="M 170 102 L 232.53 102" fill="none" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 240.53 102 L 232.53 104.67 L 232.53 99.33 Z" fill="#b85450" stroke="#b85450" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 170 121.76 L 232.53 121.96" fill="none" stroke="#9673a6" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 240.53 121.99 L 232.52 124.63 L 232.54 119.29 Z" fill="#9673a6" stroke="#9673a6" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 170 142 L 232.53 142" fill="none" stroke="#d6b656" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 240.53 142 L 232.53 144.67 L 232.53 139.33 Z" fill="#d6b656" stroke="#d6b656" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 170 162 L 232.53 162" fill="none" stroke="#82b366" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 240.53 162 L 232.53 164.67 L 232.53 159.33 Z" fill="#82b366" stroke="#82b366" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="253" y="71" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 81px; margin-left: 255px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="font-size: 16px" align="left"><font style="font-size: 16px" color="#666666"><b>Wishbone</b></font></div></div></div></div></foreignObject><text x="255" y="85" fill="#000000" font-family="Helvetica" font-size="12px">Wishbone</text></switch></g><rect x="253" y="91" width="95" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 93px; height: 1px; padding-top: 101px; margin-left: 255px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px" color="#666666"><b>AXI4</b></font></div></div></div></foreignObject><text x="255" y="105" fill="#000000" font-family="Helvetica" font-size="12px">AXI4</text></switch></g><rect x="253" y="111" width="165" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 163px; height: 1px; padding-top: 121px; margin-left: 255px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px" color="#666666"><b>AXI4-Stream 32b<br /></b></font></div></div></div></foreignObject><text x="255" y="125" fill="#000000" font-family="Helvetica" font-size="12px">AXI4-Stream 32b
</text></switch></g><rect x="253" y="131" width="165" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 163px; height: 1px; padding-top: 141px; margin-left: 255px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px" color="#666666"><b>AXI4-Stream 16b<br /></b></font></div></div></div></foreignObject><text x="255" y="145" fill="#000000" font-family="Helvetica" font-size="12px">AXI4-Stream 16b
</text></switch></g><path d="M 170 182 L 232.53 182" fill="none" stroke="#6c8ebf" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 240.53 182 L 232.53 184.67 L 232.53 179.33 Z" fill="#6c8ebf" stroke="#6c8ebf" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="253" y="151" width="165" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 163px; height: 1px; padding-top: 161px; margin-left: 255px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px" color="#666666"><b>AXI4-Stream 8b<br /></b></font></div></div></div></foreignObject><text x="255" y="165" fill="#000000" font-family="Helvetica" font-size="12px">AXI4-Stream 8b
</text></switch></g><rect x="253" y="171" width="165" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 163px; height: 1px; padding-top: 181px; margin-left: 255px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px" color="#666666"><b>Single line<br /></b></font></div></div></div></foreignObject><text x="255" y="185" fill="#000000" font-family="Helvetica" font-size="12px">Single line
</text></switch></g><rect x="427" y="42" width="100" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 52px; margin-left: 428px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 18px" color="#666666"><b>Blocks:</b></font></div></div></div></foreignObject><text x="477" y="56" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Blocks:</text></switch></g><rect x="442" y="71" width="343" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 341px; height: 1px; padding-top: 81px; margin-left: 444px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px" color="#CC6600">•<font style="font-size: 16px"><sup><span style="font-size: 7px"></span></sup></font></font><font style="font-size: 16px" color="#CC6600"><b> always_ready: ready is <font style="font-size: 16px">always</font> active</b></font></div></div></div></foreignObject><text x="444" y="85" fill="#000000" font-family="Helvetica" font-size="12px">• always_ready: ready is always active</text></switch></g><rect x="442" y="91" width="348" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 346px; height: 1px; padding-top: 101px; margin-left: 444px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px" color="#CC6600">•<font style="font-size: 16px"><sup><span style="font-size: 7px"></span></sup></font></font><font size="1" color="#CC6600"><sup><span style="font-size: 7px"></span></sup></font><font style="font-size: 16px" color="#CC6600"><b> all_ones: output is 0xFFFF<br /></b></font></div></div></div></foreignObject><text x="444" y="105" fill="#000000" font-family="Helvetica" font-size="12px">• all_ones: output is 0xFFFF
</text></switch></g><rect x="442" y="111" width="343" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 341px; height: 1px; padding-top: 121px; margin-left: 444px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 16px" color="#CC6600">•<font style="font-size: 16px"><sup><span style="font-size: 7px"> </span></sup></font></font><font style="font-size: 16px" color="#CC6600"><b>all_zeros: output is 0x0000<br /></b></font></div></div></div></foreignObject><text x="444" y="125" fill="#000000" font-family="Helvetica" font-size="12px">• all_zeros: output is 0x0000
</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
diff --git a/cargo/spectrometer b/cargo/spectrometer
new file mode 160000
index 0000000..ba0c1a0
--- /dev/null
+++ b/cargo/spectrometer
@@ -0,0 +1 @@
+Subproject commit ba0c1a00f230f2f6011c8bad4f6896c62546396c
diff --git a/cargo/top/dv/README.md b/cargo/top/dv/README.md
new file mode 100644
index 0000000..07aa660
--- /dev/null
+++ b/cargo/top/dv/README.md
@@ -0,0 +1,20 @@
+# DV Tests
+
+Organized into one subdirectories:
+ * caravel: contains tests for example user project.
+
+<pre>
+├── SpectrometerTest
+│ └── spectrometer
+│ ├── plfg_nco_fft_mag_acc_pout
+│ ├── plfg_nco_fft_mag_acc_utx
+│ ├── pin_fft_mag_acc_pout
+│ └── pin_nco_fft_mag_acc_pout
+└── SpectrometerTestWithLAoutputs
+ └── spectrometer
+ ├── plfg_nco_fft_mag_acc_pout
+ ├── plfg_nco_fft_mag_acc_utx
+ ├── pin_fft_mag_acc_pout
+ └── pin_nco_fft_mag_acc_pout
+</pre>
+
diff --git a/cargo/top/dv/SpectrometerTest/defs.h b/cargo/top/dv/SpectrometerTest/defs.h
new file mode 100644
index 0000000..5a273a0
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/defs.h
@@ -0,0 +1,188 @@
+// SPDX-License-Identifier: Apache-2.0
+
+#ifndef _STRIVE_H_
+#define _STRIVE_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+
+// a pointer to this is a null pointer, but the compiler does not
+// know that because "sram" is a linker symbol from sections.lds.
+extern uint32_t sram;
+
+// Pointer to firmware flash routines
+extern uint32_t flashio_worker_begin;
+extern uint32_t flashio_worker_end;
+
+// Storage area (MGMT: 0x0100_0000, User: 0x0200_0000)
+#define reg_rw_block0 (*(volatile uint32_t*)0x01000000)
+#define reg_rw_block1 (*(volatile uint32_t*)0x01100000)
+#define reg_ro_block0 (*(volatile uint32_t*)0x02000000)
+
+// UART (0x2000_0000)
+#define reg_uart_clkdiv (*(volatile uint32_t*)0x20000000)
+#define reg_uart_data (*(volatile uint32_t*)0x20000004)
+#define reg_uart_enable (*(volatile uint32_t*)0x20000008)
+
+// GPIO (0x2100_0000)
+#define reg_gpio_data (*(volatile uint32_t*)0x21000000)
+#define reg_gpio_ena (*(volatile uint32_t*)0x21000004)
+#define reg_gpio_pu (*(volatile uint32_t*)0x21000008)
+#define reg_gpio_pd (*(volatile uint32_t*)0x2100000c)
+
+// Logic Analyzer (0x2200_0000)
+#define reg_la0_data (*(volatile uint32_t*)0x25000000)
+#define reg_la1_data (*(volatile uint32_t*)0x25000004)
+#define reg_la2_data (*(volatile uint32_t*)0x25000008)
+#define reg_la3_data (*(volatile uint32_t*)0x2500000c)
+
+#define reg_la0_ena (*(volatile uint32_t*)0x25000010)
+#define reg_la1_ena (*(volatile uint32_t*)0x25000014)
+#define reg_la2_ena (*(volatile uint32_t*)0x25000018)
+#define reg_la3_ena (*(volatile uint32_t*)0x2500001c)
+
+// User Project Control (0x2300_0000)
+#define reg_mprj_xfer (*(volatile uint32_t*)0x26000000)
+#define reg_mprj_pwr (*(volatile uint32_t*)0x26000004)
+#define reg_mprj_datal (*(volatile uint32_t*)0x26000008)
+#define reg_mprj_datah (*(volatile uint32_t*)0x2600000c)
+
+#define reg_mprj_io_0 (*(volatile uint32_t*)0x26000020)
+#define reg_mprj_io_1 (*(volatile uint32_t*)0x26000024)
+#define reg_mprj_io_2 (*(volatile uint32_t*)0x26000028)
+#define reg_mprj_io_3 (*(volatile uint32_t*)0x2600002c)
+#define reg_mprj_io_4 (*(volatile uint32_t*)0x26000030)
+#define reg_mprj_io_5 (*(volatile uint32_t*)0x26000034)
+#define reg_mprj_io_6 (*(volatile uint32_t*)0x26000038)
+
+#define reg_mprj_io_7 (*(volatile uint32_t*)0x2600003c)
+#define reg_mprj_io_8 (*(volatile uint32_t*)0x26000040)
+#define reg_mprj_io_9 (*(volatile uint32_t*)0x26000044)
+#define reg_mprj_io_10 (*(volatile uint32_t*)0x26000048)
+
+#define reg_mprj_io_11 (*(volatile uint32_t*)0x2600004c)
+#define reg_mprj_io_12 (*(volatile uint32_t*)0x26000050)
+#define reg_mprj_io_13 (*(volatile uint32_t*)0x26000054)
+#define reg_mprj_io_14 (*(volatile uint32_t*)0x26000058)
+
+#define reg_mprj_io_15 (*(volatile uint32_t*)0x2600005c)
+#define reg_mprj_io_16 (*(volatile uint32_t*)0x26000060)
+#define reg_mprj_io_17 (*(volatile uint32_t*)0x26000064)
+#define reg_mprj_io_18 (*(volatile uint32_t*)0x26000068)
+
+#define reg_mprj_io_19 (*(volatile uint32_t*)0x2600006c)
+#define reg_mprj_io_20 (*(volatile uint32_t*)0x26000070)
+#define reg_mprj_io_21 (*(volatile uint32_t*)0x26000074)
+#define reg_mprj_io_22 (*(volatile uint32_t*)0x26000078)
+
+#define reg_mprj_io_23 (*(volatile uint32_t*)0x2600007c)
+#define reg_mprj_io_24 (*(volatile uint32_t*)0x26000080)
+#define reg_mprj_io_25 (*(volatile uint32_t*)0x26000084)
+#define reg_mprj_io_26 (*(volatile uint32_t*)0x26000088)
+
+#define reg_mprj_io_27 (*(volatile uint32_t*)0x2600008c)
+#define reg_mprj_io_28 (*(volatile uint32_t*)0x26000090)
+#define reg_mprj_io_29 (*(volatile uint32_t*)0x26000094)
+#define reg_mprj_io_30 (*(volatile uint32_t*)0x26000098)
+#define reg_mprj_io_31 (*(volatile uint32_t*)0x2600009c)
+
+#define reg_mprj_io_32 (*(volatile uint32_t*)0x260000a0)
+#define reg_mprj_io_33 (*(volatile uint32_t*)0x260000a4)
+#define reg_mprj_io_34 (*(volatile uint32_t*)0x260000a8)
+#define reg_mprj_io_35 (*(volatile uint32_t*)0x260000ac)
+#define reg_mprj_io_36 (*(volatile uint32_t*)0x260000b0)
+#define reg_mprj_io_37 (*(volatile uint32_t*)0x260000b4)
+
+// User Project Slaves (0x3000_0000)
+#define reg_mprj_slave (*(volatile uint32_t*)0x30000000)
+
+// Flash Control SPI Configuration (2D00_0000)
+#define reg_spictrl (*(volatile uint32_t*)0x2d000000)
+
+// Bit fields for Flash SPI control
+#define FLASH_BITBANG_IO0 0x00000001
+#define FLASH_BITBANG_IO1 0x00000002
+#define FLASH_BITBANG_CLK 0x00000010
+#define FLASH_BITBANG_CSB 0x00000020
+#define FLASH_BITBANG_OEB0 0x00000100
+#define FLASH_BITBANG_OEB1 0x00000200
+#define FLASH_ENABLE 0x80000000
+
+// Counter-Timer 0 Configuration
+#define reg_timer0_config (*(volatile uint32_t*)0x22000000)
+#define reg_timer0_value (*(volatile uint32_t*)0x22000004)
+#define reg_timer0_data (*(volatile uint32_t*)0x22000008)
+
+// Counter-Timer 1 Configuration
+#define reg_timer1_config (*(volatile uint32_t*)0x23000000)
+#define reg_timer1_value (*(volatile uint32_t*)0x23000004)
+#define reg_timer1_data (*(volatile uint32_t*)0x23000008)
+
+// Bit fields for Counter-timer configuration
+#define TIMER_ENABLE 0x01
+#define TIMER_ONESHOT 0x02
+#define TIMER_UPCOUNT 0x04
+#define TIMER_CHAIN 0x08
+#define TIMER_IRQ_ENABLE 0x10
+
+// SPI Master Configuration
+#define reg_spimaster_config (*(volatile uint32_t*)0x24000000)
+#define reg_spimaster_data (*(volatile uint32_t*)0x24000004)
+
+// Bit fields for SPI master configuration
+#define SPI_MASTER_DIV_MASK 0x00ff
+#define SPI_MASTER_MLB 0x0100
+#define SPI_MASTER_INV_CSB 0x0200
+#define SPI_MASTER_INV_CLK 0x0400
+#define SPI_MASTER_MODE_1 0x0800
+#define SPI_MASTER_STREAM 0x1000
+#define SPI_MASTER_ENABLE 0x2000
+#define SPI_MASTER_IRQ_ENABLE 0x4000
+#define SPI_HOUSEKEEPING_CONN 0x8000
+
+// System Area (0x2F00_0000)
+#define reg_power_good (*(volatile uint32_t*)0x2F000000)
+#define reg_clk_out_dest (*(volatile uint32_t*)0x2F000004)
+#define reg_trap_out_dest (*(volatile uint32_t*)0x2F000008)
+#define reg_irq_source (*(volatile uint32_t*)0x2F00000C)
+
+// Bit fields for reg_power_good
+#define USER1_VCCD_POWER_GOOD 0x01
+#define USER2_VCCD_POWER_GOOD 0x02
+#define USER1_VDDA_POWER_GOOD 0x04
+#define USER2_VDDA_POWER_GOOD 0x08
+
+// Bit fields for reg_clk_out_dest
+#define CLOCK1_MONITOR 0x01
+#define CLOCK2_MONITOR 0x02
+
+// Bit fields for reg_irq_source
+#define IRQ7_SOURCE 0x01
+#define IRQ8_SOURCE 0x02
+
+// Individual bit fields for the GPIO pad control
+#define MGMT_ENABLE 0x0001
+#define OUTPUT_DISABLE 0x0002
+#define HOLD_OVERRIDE 0x0004
+#define INPUT_DISABLE 0x0008
+#define MODE_SELECT 0x0010
+#define ANALOG_ENABLE 0x0020
+#define ANALOG_SELECT 0x0040
+#define ANALOG_POLARITY 0x0080
+#define SLOW_SLEW_MODE 0x0100
+#define TRIPPOINT_SEL 0x0200
+#define DIGITAL_MODE_MASK 0x1c00
+
+// Useful GPIO mode values
+#define GPIO_MODE_MGMT_STD_INPUT_NOPULL 0x0403
+#define GPIO_MODE_MGMT_STD_INPUT_PULLDOWN 0x0803
+#define GPIO_MODE_MGMT_STD_INPUT_PULLUP 0x0c03
+#define GPIO_MODE_MGMT_STD_OUTPUT 0x1809
+
+#define GPIO_MODE_USER_STD_INPUT_NOPULL 0x0402
+#define GPIO_MODE_USER_STD_INPUT_PULLDOWN 0x0802
+#define GPIO_MODE_USER_STD_INPUT_PULLUP 0x0c02
+#define GPIO_MODE_USER_STD_OUTPUT 0x1808
+
+// --------------------------------------------------------
+#endif
diff --git a/cargo/top/dv/SpectrometerTest/sections.lds b/cargo/top/dv/SpectrometerTest/sections.lds
new file mode 100644
index 0000000..d785002
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/sections.lds
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: Apache-2.0 */
+
+MEMORY {
+ FLASH (rx) : ORIGIN = 0x10000000, LENGTH = 0x400000 /* 4MB */
+ RAM(xrw) : ORIGIN = 0x00000000, LENGTH = 0x0400 /* 256 words (1 KB) */
+}
+
+SECTIONS {
+ /* The program code and other data goes into FLASH */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ *(.srodata) /* .srodata sections (constants, strings, etc.) */
+ *(.srodata*) /* .srodata*sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ _etext = .; /* define a global symbol at end of code */
+ _sidata = _etext; /* This is used by the startup to initialize data */
+ } >FLASH
+
+ /* Initialized data section */
+ .data : AT ( _sidata )
+ {
+ . = ALIGN(4);
+ _sdata = .;
+ _ram_start = .;
+ . = ALIGN(4);
+ *(.data)
+ *(.data*)
+ *(.sdata)
+ *(.sdata*)
+ . = ALIGN(4);
+ _edata = .;
+ } >RAM
+
+ /* Uninitialized data section */
+ .bss :
+ {
+ . = ALIGN(4);
+ _sbss = .;
+ *(.bss)
+ *(.bss*)
+ *(.sbss)
+ *(.sbss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .;
+ } >RAM
+
+ /* Define the start of the heap */
+ .heap :
+ {
+ . = ALIGN(4);
+ _heap_start = .;
+ } >RAM
+}
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/Makefile b/cargo/top/dv/SpectrometerTest/spectrometer/Makefile
new file mode 100644
index 0000000..56c03ca
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/Makefile
@@ -0,0 +1,19 @@
+# ---- Test patterns ----
+
+.SUFFIXES:
+.SILENT: clean all
+
+PATTERNS = plfg_nco_fft_mag_acc_pout plfg_nco_fft_mag_acc_utx pin_fft_mag_acc_pout pin_nco_fft_mag_acc_pout
+
+all: ${PATTERNS}
+ for i in ${PATTERNS}; do \
+ ( cd $$i && make -f Makefile $${i}.vcd &> verify.log && grep Monitor verify.log) ; \
+ done
+
+clean: ${PATTERNS}
+ for i in ${PATTERNS}; do \
+ rm -f verify.log; \
+ ( cd $$i && make clean ) ; \
+ done
+
+.PHONY: clean all
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/Makefile b/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/Makefile
new file mode 100644
index 0000000..35ab772
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/Makefile
@@ -0,0 +1,54 @@
+CARAVEL_PATH = ./../../../../../..
+
+FIRMWARE_PATH = ../..
+RTL_PATH = $(CARAVEL_PATH)/verilog/rtl
+IP_PATH = $(CARAVEL_PATH)/verilog/ip
+BEHAVIOURAL_MODELS = ../../
+
+CARGO_PATH = $(CARAVEL_PATH)/cargo
+WB2AXI_PATH = $(CARAVEL_PATH)/cargo/wb2axip/rtl
+PROJECT_PATH = $(CARAVEL_PATH)/cargo/spectrometer/rtl/SpectrometerTest
+TOP_PATH = $(CARAVEL_PATH)/cargo/top/rtl/SpectrometerTest
+
+GCC_PATH?=$(RISCV32)/bin
+GCC_PREFIX?=riscv32-unknown-elf
+PDK_PATH?=$(PDK_ROOT)/sky130A
+
+FFT_SIZE?=64 # Pass fft size to testbench and c code
+
+.SUFFIXES:
+
+PATTERN = pin_fft_mag_acc_pout
+
+all: ${PATTERN:=.vcd}
+
+hex: ${PATTERN:=.hex}
+
+%.vvp: %_tb.v %.hex
+ iverilog -DFUNCTIONAL -DSIM -DFFT_SIZE=$(FFT_SIZE) -I $(BEHAVIOURAL_MODELS) \
+ -I $(WB2AXI_PATH) \
+ -I $(PROJECT_PATH) \
+ -I $(TOP_PATH) \
+ -I $(PDK_PATH) -I $(IP_PATH) -I $(RTL_PATH) \
+ $< -o $@
+
+%.vcd: %.vvp
+ vvp $<
+
+%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s
+ ${GCC_PATH}/${GCC_PREFIX}-gcc -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -DFFT_SIZE=$(FFT_SIZE) -o $@ $(FIRMWARE_PATH)/start.s $<
+
+%.hex: %.elf
+ ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@
+ # to fix flash base address
+ sed -i 's/@10000000/@00000000/g' $@
+
+%.bin: %.elf
+ ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
+
+# ---- Clean ----
+
+clean:
+ rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.txt
+
+.PHONY: clean hex all
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/pin_fft_mag_acc_pout.c b/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/pin_fft_mag_acc_pout.c
new file mode 100644
index 0000000..932cfcf
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/pin_fft_mag_acc_pout.c
@@ -0,0 +1,89 @@
+// SPDX-License-Identifier: Apache-2.0
+
+#include "../../defs.h"
+#include "../../stub.c"
+
+#include "../../spectrometerDefs.h"
+
+/*
+ Spectrometer Test:
+ - Set spectrometer to pass data through:
+ pin
+ fft
+ mag
+ acc
+ pout
+*/
+
+int clk = 0;
+int i;
+
+void main()
+{
+ // Configure GPIO pins
+ reg_mprj_io_24 = GPIO_MODE_USER_STD_INPUT_PULLUP;
+ reg_mprj_io_23 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_22 = GPIO_MODE_USER_STD_OUTPUT;
+
+ reg_mprj_io_21 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_20 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_19 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_18 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_17 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_16 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_15 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_14 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_13 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_12 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_11 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+
+ reg_mprj_io_10 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_9 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_8 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_7 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_6 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_5 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_4 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_3 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_2 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_1 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_0 = GPIO_MODE_USER_STD_OUTPUT;
+
+ /* Apply configuration */
+ reg_mprj_xfer = 1;
+ while (reg_mprj_xfer == 1);
+
+ int segmentNumsArrayOffset = 6 * BEATBYTES;
+ int repeatedChirpNumsArrayOffset = segmentNumsArrayOffset + 4 * BEATBYTES;
+ int chirpOrdinalNumsArrayOffset = repeatedChirpNumsArrayOffset + 8 * BEATBYTES;
+
+ PLFG_RAM(0) = 0x24000000;
+ PLFG_REG(2*BEATBYTES) = 8;
+ PLFG_REG(4*BEATBYTES) = 1;
+ PLFG_REG(5*BEATBYTES) = 4;
+ PLFG_REG(segmentNumsArrayOffset) = 1;
+ PLFG_REG(repeatedChirpNumsArrayOffset) = 1;
+ PLFG_REG(chirpOrdinalNumsArrayOffset) = 0;
+ PLFG_REG(1*BEATBYTES) = 0;
+ PLFG_REG(0*BEATBYTES) = 1;
+
+ MAG_REG(0) = 0x2; // set jpl magnitude
+
+ ACC_REG(0) = FFT_SIZE;
+ ACC_REG(1*BEATBYTES) = 4;
+
+ FFT_MUX_1_REG(0) = 0;
+ MAG_MUX_1_REG(0) = 0;
+
+ PLFG_MUX_0_REG(1*BEATBYTES)= 1;
+ NCO_MUX_0_REG(0) = 1;
+ FFT_MUX_0_REG(0) = 0;
+ FFT_MUX_0_REG(1*BEATBYTES) = 1;
+ MAG_MUX_0_REG(0) = 0;
+ MAG_MUX_0_REG(1*BEATBYTES) = 1;
+
+ OUT_MUX_REG(0) = 0;
+ OUT_MUX_REG(2*BEATBYTES) = 5;
+
+}
+
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/pin_fft_mag_acc_pout_tb.v b/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/pin_fft_mag_acc_pout_tb.v
new file mode 100644
index 0000000..104e343
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/pin_fft_mag_acc_pout/pin_fft_mag_acc_pout_tb.v
@@ -0,0 +1,197 @@
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+
+`timescale 1 ns / 1 ps
+
+`include "caravel.v"
+`include "spiflash.v"
+
+module pin_fft_mag_acc_pout_tb;
+ // declare file for writing data
+ integer file;
+
+ // input data to send
+ reg [7:0] inputData [0:4*`FFT_SIZE-1];
+
+ // Golden data
+ reg [15:0] goldenData [0:`FFT_SIZE-1];
+
+ // clk, rst, power signals
+ reg clock;
+ reg RSTB;
+ reg power1, power2;
+
+ // testbench signals
+ wire gpio;
+ wire [37:0] mprj_io;
+
+ // Output stream data wires
+ reg out_ready = 0;
+ wire out_valid;
+ wire [7:0] out_data;
+ reg [7:0] out_temp;
+
+ // Input stream data wires
+ wire in_ready;
+ reg in_valid = 0;
+ reg [7:0] in_data = 8'h04;
+ reg in_last = 0;
+
+ reg [15:0] dataCounter = 16'b0;
+ reg [15:0] dataSentCounter = 16'b0;
+
+ // Assign wires
+ assign mprj_io[11] = out_ready;
+ assign out_valid = mprj_io[12];
+ assign out_data = mprj_io[20:13];
+
+ assign in_ready = mprj_io[0];
+ assign mprj_io[1] = in_valid;
+ assign mprj_io[9:2] = in_data[7:0];
+ assign mprj_io[10] = in_last;
+
+
+ // toggle clock
+ always #500 clock <= (clock === 1'b0);
+
+ // Read input data
+ initial $readmemh("./../../../../../../cargo/spectrometer/test_run_dir/SpectrometerTest/pin_fft_mag_acc_pout/input.txt", inputData);
+
+ // Read golden data
+ initial $readmemh("./../../../../../../cargo/spectrometer/test_run_dir/SpectrometerTest/pin_fft_mag_acc_pout/GoldenData.txt", goldenData);
+
+ // open file for writting
+ initial begin
+ $printtimescale(pin_fft_mag_acc_pout_tb);
+ file = $fopen("output.txt","w");
+ if (file) $display("File was opened successfully : %0d", file);
+ else $display("File was NOT opened successfully : %0d", file);
+ end
+
+ initial begin
+ clock = 0;
+ #500 out_ready = 1'b1; // Set out_ready
+ end
+
+ // Check inStream.ready and inStream.valid and send data
+ always @ (posedge clock) begin
+ if (in_ready == 1'b1) begin
+ in_valid = 1'b1;
+ in_data <= inputData[dataSentCounter % (4*`FFT_SIZE)];
+ dataSentCounter <= dataSentCounter + 1'b1;
+ end
+ end
+
+ // Check outStream.ready and outStream.valid and collect data
+ always @ (posedge clock) begin
+ if (out_ready == 1'b1 && out_valid == 1'b1) begin
+ if (dataCounter % 2 == 0) out_temp <= out_data;
+ else begin
+ $fwriteh(file, "%h" ,out_data);
+ $fwriteh(file, "%h\n" ,out_temp);
+ if ({out_data,out_temp} != goldenData[dataCounter/2]) begin
+ $display("%c[1;31m",27);
+ $display ("Monitor: Test pin_fft_mag_acc_pout failed!!! Read data was %h, but should be %h.", {out_data,out_temp}, goldenData[dataCounter/2]);
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+ end
+ dataCounter <= dataCounter + 1'b1;
+ end
+ end
+
+ initial begin
+ $dumpfile("pin_fft_mag_acc_pout.vcd");
+ $dumpvars(0, pin_fft_mag_acc_pout_tb);
+
+ // Repeat cycles of 1000 clock edges as needed to complete testbench
+ repeat (30) begin
+ repeat (1000) @(posedge clock);
+ // $display("+1000 cycles");
+ end
+ $display("%c[1;31m",27);
+ $display ("Monitor: Test pin_fft_mag_acc_pout Failed!!! Timeout.");
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+
+ // Check if enough data was send, and if so terminate test
+ initial begin
+ wait(dataCounter == 16'd 2*`FFT_SIZE);
+ $display("%c[1;32m",27);
+ $display("Monitor: Test pin_fft_mag_acc_pout passed.");
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+
+ initial begin
+ RSTB <= 1'b0;
+ #10000;
+ RSTB <= 1'b1; // Release reset
+ #20000;
+ end
+
+ initial begin // Power-up sequence
+ power1 <= 1'b0;
+ power2 <= 1'b0;
+ #200;
+ power1 <= 1'b1;
+ #200;
+ power2 <= 1'b1;
+ end
+
+ wire flash_csb;
+ wire flash_clk;
+ wire flash_io0;
+ wire flash_io1;
+
+ wire VDD1V8;
+ wire VDD3V3;
+ wire VSS;
+
+ assign VDD3V3 = power1;
+ assign VDD1V8 = power2;
+ assign VSS = 1'b0;
+
+ caravel uut (
+ .vddio (VDD3V3),
+ .vssio (VSS),
+ .vdda (VDD3V3),
+ .vssa (VSS),
+ .vccd (VDD1V8),
+ .vssd (VSS),
+ .vdda1 (VDD3V3),
+ .vdda2 (VDD3V3),
+ .vssa1 (VSS),
+ .vssa2 (VSS),
+ .vccd1 (VDD1V8),
+ .vccd2 (VDD1V8),
+ .vssd1 (VSS),
+ .vssd2 (VSS),
+ .clock (clock),
+ .gpio (gpio),
+ .mprj_io (mprj_io),
+ .flash_csb(flash_csb),
+ .flash_clk(flash_clk),
+ .flash_io0(flash_io0),
+ .flash_io1(flash_io1),
+ .resetb (RSTB)
+ );
+
+ spiflash #(
+ .FILENAME("pin_fft_mag_acc_pout.hex")
+ ) spiflash (
+ .csb(flash_csb),
+ .clk(flash_clk),
+ .io0(flash_io0),
+ .io1(flash_io1),
+ .io2(),
+ .io3()
+ );
+
+endmodule
+`default_nettype wire
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/Makefile b/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/Makefile
new file mode 100644
index 0000000..b3e507a
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/Makefile
@@ -0,0 +1,54 @@
+CARAVEL_PATH = ./../../../../../..
+
+FIRMWARE_PATH = ../..
+RTL_PATH = $(CARAVEL_PATH)/verilog/rtl
+IP_PATH = $(CARAVEL_PATH)/verilog/ip
+BEHAVIOURAL_MODELS = ../../
+
+CARGO_PATH = $(CARAVEL_PATH)/cargo
+WB2AXI_PATH = $(CARAVEL_PATH)/cargo/wb2axip/rtl
+PROJECT_PATH = $(CARAVEL_PATH)/cargo/spectrometer/rtl/SpectrometerTest
+TOP_PATH = $(CARAVEL_PATH)/cargo/top/rtl/SpectrometerTest
+
+GCC_PATH?=$(RISCV32)/bin
+GCC_PREFIX?=riscv32-unknown-elf
+PDK_PATH?=$(PDK_ROOT)/sky130A
+
+FFT_SIZE?=64 # Pass fft size to testbench and c code
+
+.SUFFIXES:
+
+PATTERN = pin_nco_fft_mag_acc_pout
+
+all: ${PATTERN:=.vcd}
+
+hex: ${PATTERN:=.hex}
+
+%.vvp: %_tb.v %.hex
+ iverilog -DFUNCTIONAL -DSIM -DFFT_SIZE=$(FFT_SIZE) -I $(BEHAVIOURAL_MODELS) \
+ -I $(WB2AXI_PATH) \
+ -I $(PROJECT_PATH) \
+ -I $(TOP_PATH) \
+ -I $(PDK_PATH) -I $(IP_PATH) -I $(RTL_PATH) \
+ $< -o $@
+
+%.vcd: %.vvp
+ vvp $<
+
+%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s
+ ${GCC_PATH}/${GCC_PREFIX}-gcc -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -DFFT_SIZE=$(FFT_SIZE) -o $@ $(FIRMWARE_PATH)/start.s $<
+
+%.hex: %.elf
+ ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@
+ # to fix flash base address
+ sed -i 's/@10000000/@00000000/g' $@
+
+%.bin: %.elf
+ ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
+
+# ---- Clean ----
+
+clean:
+ rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.txt
+
+.PHONY: clean hex all
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/pin_nco_fft_mag_acc_pout.c b/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/pin_nco_fft_mag_acc_pout.c
new file mode 100644
index 0000000..fd345b1
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/pin_nco_fft_mag_acc_pout.c
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: Apache-2.0
+
+#include "../../defs.h"
+#include "../../stub.c"
+
+#include "../../spectrometerDefs.h"
+
+/*
+ Spectrometer Test:
+ - Set spectrometer to pass data through:
+ pin
+ nco
+ fft
+ mag
+ acc
+ pout
+*/
+
+int clk = 0;
+int i;
+
+void main()
+{
+ // Configure GPIO pins
+ reg_mprj_io_24 = GPIO_MODE_USER_STD_INPUT_PULLUP;
+ reg_mprj_io_23 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_22 = GPIO_MODE_USER_STD_OUTPUT;
+
+ reg_mprj_io_21 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_20 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_19 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_18 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_17 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_16 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_15 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_14 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_13 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_12 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_11 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+
+ reg_mprj_io_10 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_9 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_8 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_7 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_6 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_5 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_4 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_3 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_2 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_1 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_0 = GPIO_MODE_USER_STD_OUTPUT;
+
+ /* Apply configuration */
+ reg_mprj_xfer = 1;
+ while (reg_mprj_xfer == 1);
+
+ int segmentNumsArrayOffset = 6 * BEATBYTES;
+ int repeatedChirpNumsArrayOffset = segmentNumsArrayOffset + 4 * BEATBYTES;
+ int chirpOrdinalNumsArrayOffset = repeatedChirpNumsArrayOffset + 8 * BEATBYTES;
+
+ PLFG_RAM(0) = 0x24000000;
+ PLFG_REG(2*BEATBYTES) = 8;
+ PLFG_REG(4*BEATBYTES) = 1;
+ PLFG_REG(5*BEATBYTES) = 4;
+ PLFG_REG(segmentNumsArrayOffset) = 1;
+ PLFG_REG(repeatedChirpNumsArrayOffset) = 1;
+ PLFG_REG(chirpOrdinalNumsArrayOffset) = 0;
+ PLFG_REG(1*BEATBYTES) = 0;
+ PLFG_REG(0*BEATBYTES) = 1;
+
+ MAG_REG(0) = 0x2; // set jpl magnitude
+
+ ACC_REG(0) = FFT_SIZE;
+ ACC_REG(1*BEATBYTES) = 4;
+
+ NCO_MUX_1_REG(0) = 0;
+ FFT_MUX_1_REG(0) = 0;
+ MAG_MUX_1_REG(0) = 0;
+
+ PLFG_MUX_0_REG(0) = 1;
+ NCO_MUX_0_REG(0) = 0;
+ NCO_MUX_0_REG(1*BEATBYTES) = 1;
+ FFT_MUX_0_REG(0) = 0;
+ FFT_MUX_0_REG(1*BEATBYTES) = 1;
+ MAG_MUX_0_REG(0) = 0;
+ MAG_MUX_0_REG(1*BEATBYTES) = 1;
+
+ OUT_MUX_REG(0) = 0;
+ OUT_MUX_REG(2*BEATBYTES) = 5;
+
+}
+
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/pin_nco_fft_mag_acc_pout_tb.v b/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/pin_nco_fft_mag_acc_pout_tb.v
new file mode 100644
index 0000000..bdbd5bd
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/pin_nco_fft_mag_acc_pout/pin_nco_fft_mag_acc_pout_tb.v
@@ -0,0 +1,192 @@
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+
+`timescale 1 ns / 1 ps
+
+`include "caravel.v"
+`include "spiflash.v"
+
+module pin_nco_fft_mag_acc_pout_tb;
+ // declare file for writing data
+ integer file;
+
+ // Golden data
+ reg [15:0] goldenData [0:`FFT_SIZE-1];
+
+ // clk, rst, power signals
+ reg clock;
+ reg RSTB;
+ reg power1, power2;
+
+ // testbench signals
+ wire gpio;
+ wire [37:0] mprj_io;
+
+ // Output stream data wires
+ reg out_ready = 0;
+ wire out_valid;
+ wire [7:0] out_data;
+ reg [7:0] out_temp;
+
+ // Input stream data wires
+ wire in_ready;
+ reg in_valid = 0;
+ reg [7:0] in_data = 8'h04;
+ reg in_last = 0;
+
+ reg [15:0] dataCounter = 16'b0;
+ reg [1:0] dataSentCounter = 2'b0;
+
+ // Assign wires
+ assign mprj_io[11] = out_ready;
+ assign out_valid = mprj_io[12];
+ assign out_data = mprj_io[20:13];
+
+ assign in_ready = mprj_io[0];
+ assign mprj_io[1] = in_valid;
+ assign mprj_io[9:2] = in_data[7:0];
+ assign mprj_io[10] = in_last;
+
+
+ // toggle clock
+ always #500 clock <= (clock === 1'b0);
+
+ // Read golden data
+ initial $readmemh("./../../../../../../cargo/spectrometer/test_run_dir/SpectrometerTest/pin_nco_fft_mag_acc_pout/GoldenData.txt", goldenData);
+
+ // open file for writting
+ initial begin
+ $printtimescale(pin_nco_fft_mag_acc_pout_tb);
+ file = $fopen("output.txt","w");
+ if (file) $display("File was opened successfully : %0d", file);
+ else $display("File was NOT opened successfully : %0d", file);
+ end
+
+ initial begin
+ clock = 0;
+ #500 out_ready = 1'b1; // Set out_ready
+ end
+
+ // Check inStream.ready and inStream.valid and send data
+ always @ (posedge clock) begin
+ if (in_ready == 1'b1) begin
+ in_valid = 1'b1;
+ if (dataSentCounter % 4 == 0) in_data <= 8'h04;
+ else in_data <= 8'h00;
+ dataSentCounter <= dataSentCounter + 1'b1;
+ end
+ end
+
+ // Check outStream.ready and outStream.valid and collect data
+ always @ (posedge clock) begin
+ if (out_ready == 1'b1 && out_valid == 1'b1) begin
+ if (dataCounter % 2 == 0) out_temp <= out_data;
+ else begin
+ $fwriteh(file, "%h" ,out_data);
+ $fwriteh(file, "%h\n" ,out_temp);
+ if ({out_data,out_temp} != goldenData[dataCounter/2]) begin
+ $display("%c[1;31m",27);
+ $display ("Monitor: Test pin_nco_fft_mag_acc_pout failed!!! Read data was %h, but should be %h.", {out_data,out_temp}, goldenData[dataCounter/2]);
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+ end
+ dataCounter <= dataCounter + 1'b1;
+ end
+ end
+
+ initial begin
+ $dumpfile("pin_nco_fft_mag_acc_pout.vcd");
+ $dumpvars(0, pin_nco_fft_mag_acc_pout_tb);
+
+ // Repeat cycles of 1000 clock edges as needed to complete testbench
+ repeat (30) begin
+ repeat (1000) @(posedge clock);
+ // $display("+1000 cycles");
+ end
+ $display("%c[1;31m",27);
+ $display ("Monitor: Test pin_nco_fft_mag_acc_pout failed!!! Timeout.");
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+
+ // Check if enough data was send, and if so terminate test
+ initial begin
+ wait(dataCounter == 16'd 2*`FFT_SIZE);
+ $display("%c[1;32m",27);
+ $display("Monitor: Test pin_nco_fft_mag_acc_pout passed.");
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+
+ initial begin
+ RSTB <= 1'b0;
+ #10000;
+ RSTB <= 1'b1; // Release reset
+ #20000;
+ end
+
+ initial begin // Power-up sequence
+ power1 <= 1'b0;
+ power2 <= 1'b0;
+ #200;
+ power1 <= 1'b1;
+ #200;
+ power2 <= 1'b1;
+ end
+
+ wire flash_csb;
+ wire flash_clk;
+ wire flash_io0;
+ wire flash_io1;
+
+ wire VDD1V8;
+ wire VDD3V3;
+ wire VSS;
+
+ assign VDD3V3 = power1;
+ assign VDD1V8 = power2;
+ assign VSS = 1'b0;
+
+ caravel uut (
+ .vddio (VDD3V3),
+ .vssio (VSS),
+ .vdda (VDD3V3),
+ .vssa (VSS),
+ .vccd (VDD1V8),
+ .vssd (VSS),
+ .vdda1 (VDD3V3),
+ .vdda2 (VDD3V3),
+ .vssa1 (VSS),
+ .vssa2 (VSS),
+ .vccd1 (VDD1V8),
+ .vccd2 (VDD1V8),
+ .vssd1 (VSS),
+ .vssd2 (VSS),
+ .clock (clock),
+ .gpio (gpio),
+ .mprj_io (mprj_io),
+ .flash_csb(flash_csb),
+ .flash_clk(flash_clk),
+ .flash_io0(flash_io0),
+ .flash_io1(flash_io1),
+ .resetb (RSTB)
+ );
+
+ spiflash #(
+ .FILENAME("pin_nco_fft_mag_acc_pout.hex")
+ ) spiflash (
+ .csb(flash_csb),
+ .clk(flash_clk),
+ .io0(flash_io0),
+ .io1(flash_io1),
+ .io2(),
+ .io3()
+ );
+
+endmodule
+`default_nettype wire
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/Makefile b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/Makefile
new file mode 100644
index 0000000..8e6eae6
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/Makefile
@@ -0,0 +1,54 @@
+CARAVEL_PATH = ./../../../../../..
+
+FIRMWARE_PATH = ../..
+RTL_PATH = $(CARAVEL_PATH)/verilog/rtl
+IP_PATH = $(CARAVEL_PATH)/verilog/ip
+BEHAVIOURAL_MODELS = ../../
+
+CARGO_PATH = $(CARAVEL_PATH)/cargo
+WB2AXI_PATH = $(CARAVEL_PATH)/cargo/wb2axip/rtl
+PROJECT_PATH = $(CARAVEL_PATH)/cargo/spectrometer/rtl/SpectrometerTest
+TOP_PATH = $(CARAVEL_PATH)/cargo/top/rtl/SpectrometerTest
+
+GCC_PATH?=$(RISCV32)/bin
+GCC_PREFIX?=riscv32-unknown-elf
+PDK_PATH?=$(PDK_ROOT)/sky130A
+
+FFT_SIZE?=64 # Pass fft size to testbench and c code
+
+.SUFFIXES:
+
+PATTERN = plfg_nco_fft_mag_acc_pout
+
+all: ${PATTERN:=.vcd}
+
+hex: ${PATTERN:=.hex}
+
+%.vvp: %_tb.v %.hex
+ iverilog -DFUNCTIONAL -DSIM -DFFT_SIZE=$(FFT_SIZE) -I $(BEHAVIOURAL_MODELS) \
+ -I $(WB2AXI_PATH) \
+ -I $(PROJECT_PATH) \
+ -I $(TOP_PATH) \
+ -I $(PDK_PATH) -I $(IP_PATH) -I $(RTL_PATH) \
+ $< -o $@
+
+%.vcd: %.vvp
+ vvp $<
+
+%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s
+ ${GCC_PATH}/${GCC_PREFIX}-gcc -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -DFFT_SIZE=$(FFT_SIZE) -o $@ $(FIRMWARE_PATH)/start.s $<
+
+%.hex: %.elf
+ ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@
+ # to fix flash base address
+ sed -i 's/@10000000/@00000000/g' $@
+
+%.bin: %.elf
+ ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
+
+# ---- Clean ----
+
+clean:
+ rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.txt
+
+.PHONY: clean hex all
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/plfg_nco_fft_mag_acc_pout.c b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/plfg_nco_fft_mag_acc_pout.c
new file mode 100644
index 0000000..8c5dc86
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/plfg_nco_fft_mag_acc_pout.c
@@ -0,0 +1,105 @@
+// SPDX-License-Identifier: Apache-2.0
+
+#include "../../defs.h"
+#include "../../stub.c"
+
+#include "../../spectrometerDefs.h"
+
+/*
+ Spectrometer Test:
+ - Set spectrometer to pass data through:
+ plfg
+ nco
+ fft
+ mag
+ acc
+ pout
+*/
+
+int clk = 0;
+int i;
+
+void main()
+{
+ // Configure GPIO pins
+ reg_mprj_io_24 = GPIO_MODE_USER_STD_INPUT_PULLUP;
+ reg_mprj_io_23 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_22 = GPIO_MODE_USER_STD_OUTPUT;
+
+ reg_mprj_io_21 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_20 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_19 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_18 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_17 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_16 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_15 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_14 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_13 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_12 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_11 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+
+ reg_mprj_io_10 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_9 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_8 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_7 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_6 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_5 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_4 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_3 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_2 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_1 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_0 = GPIO_MODE_USER_STD_OUTPUT;
+
+ reg_la0_ena = 0xFFFFFFFB;
+ reg_la0_ena = 0xFFFFFFFF;
+ reg_la0_ena = 0xFFFFFFFB;
+ reg_la0_ena = 0xFFFFFFFF;
+ reg_la0_ena = 0xFFFFFFFB;
+ reg_la0_ena = 0xFFFFFFFF;
+ reg_la0_ena = 0xFFFFFFFB;
+ reg_la0_ena = 0xFFFFFFFF;
+ reg_la0_ena = 0xFFFFFFFB;
+ reg_la0_ena = 0xFFFFFFFF;
+ reg_la0_ena = 0xFFFFFFFB;
+ reg_la0_ena = 0xFFFFFFFF;
+ reg_la0_ena = 0xFFFFFFFB;
+ reg_la0_ena = 0xFFFFFFFF;
+ reg_la0_data = 0xFEEDBEEF;
+
+ /* Apply configuration */
+ reg_mprj_xfer = 1;
+ while (reg_mprj_xfer == 1);
+
+ int segmentNumsArrayOffset = 6 * BEATBYTES;
+ int repeatedChirpNumsArrayOffset = segmentNumsArrayOffset + 4 * BEATBYTES;
+ int chirpOrdinalNumsArrayOffset = repeatedChirpNumsArrayOffset + 8 * BEATBYTES;
+
+ PLFG_RAM(0) = 0x24000000;
+ PLFG_REG(2*BEATBYTES) = 8;
+ PLFG_REG(4*BEATBYTES) = 1;
+ PLFG_REG(5*BEATBYTES) = 8*128/FFT_SIZE;
+ PLFG_REG(segmentNumsArrayOffset) = 1;
+ PLFG_REG(repeatedChirpNumsArrayOffset) = 1;
+ PLFG_REG(chirpOrdinalNumsArrayOffset) = 0;
+ PLFG_REG(1*BEATBYTES) = 0;
+ PLFG_REG(0*BEATBYTES) = 1;
+
+ MAG_REG(0) = 0x2; // set jpl magnitude
+
+ ACC_REG(0) = FFT_SIZE;
+ ACC_REG(1*BEATBYTES) = 4;
+
+ PLFG_MUX_1_REG(0) = 0;
+ NCO_MUX_1_REG(0) = 0;
+ FFT_MUX_1_REG(0) = 0;
+ MAG_MUX_1_REG(0) = 0;
+
+ PLFG_MUX_0_REG(0) = 0;
+ NCO_MUX_0_REG(0) = 0;
+ FFT_MUX_0_REG(0) = 0;
+ MAG_MUX_0_REG(0) = 0;
+
+ OUT_MUX_REG(0) = 0;
+
+}
+
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/plfg_nco_fft_mag_acc_pout_tb.v b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/plfg_nco_fft_mag_acc_pout_tb.v
new file mode 100644
index 0000000..d4130e3
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_pout/plfg_nco_fft_mag_acc_pout_tb.v
@@ -0,0 +1,179 @@
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+
+`timescale 1 ns / 1 ps
+
+`include "caravel.v"
+`include "spiflash.v"
+
+module plfg_nco_fft_mag_acc_pout_tb;
+ // declare file for writing data
+ integer file;
+
+ // Golden data
+ reg [15:0] goldenData [0:`FFT_SIZE-1];
+
+ // clk, rst, power signals
+ reg clock;
+ reg RSTB;
+ reg power1, power2;
+
+ // testbench signals
+ wire gpio;
+ wire [37:0] mprj_io;
+
+ // Output stream data wires
+ reg out_ready;
+ wire out_valid;
+ wire [7:0] out_data;
+ reg [7:0] out_temp;
+
+ reg [15:0] dataCounter = 16'b0;
+ reg [9:0] cntReg = 10'b0;
+
+
+ // Assign wires
+ assign mprj_io[11] = out_ready;
+ assign out_valid = mprj_io[12];
+ assign out_data = mprj_io[20:13];
+
+ assign mprj_io[10:1] = cntReg[9:0];
+
+
+ // toggle clock
+ always #500 clock <= (clock === 1'b0);
+
+ // Read golden data
+ initial $readmemh("./../../../../../../cargo/spectrometer/test_run_dir/SpectrometerTest/plfg_nco_fft_mag_acc_pout/GoldenData.txt", goldenData);
+
+ // send data to input stream
+ always @ (posedge clock) begin
+ cntReg <= cntReg + 1'b1;
+ end
+
+ // open file for writting
+ initial begin
+ $printtimescale(plfg_nco_fft_mag_acc_pout_tb);
+ file = $fopen("output.txt","w");
+ if (file) $display("File was opened successfully : %0d", file);
+ else $display("File was NOT opened successfully : %0d", file);
+ end
+
+ initial begin
+ clock = 0;
+ #500 out_ready = 1'b1; // Set out_ready
+ end
+
+ // Chech outStream.ready and outStream.valid and collect data
+ always @ (posedge clock) begin
+ if (out_ready == 1'b1 && out_valid == 1'b1) begin
+ if (dataCounter % 2 == 0) out_temp <= out_data;
+ else begin
+ $fwriteh(file, "%h" ,out_data);
+ $fwriteh(file, "%h\n" ,out_temp);
+ if ({out_data,out_temp} != goldenData[dataCounter/2]) begin
+ $display("%c[1;31m",27);
+ $display ("Monitor: Test plfg_nco_fft_mag_acc_pout failed!!! Read data was %h, but should be %h.", {out_data,out_temp}, goldenData[dataCounter/2]);
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+ end
+ dataCounter <= dataCounter + 1'b1;
+ end
+ end
+
+ initial begin
+ $dumpfile("plfg_nco_fft_mag_acc_pout.vcd");
+ $dumpvars(0, plfg_nco_fft_mag_acc_pout_tb);
+
+ // Repeat cycles of 1000 clock edges as needed to complete testbench
+ repeat (30) begin
+ repeat (1000) @(posedge clock);
+ // $display("+1000 cycles");
+ end
+ $display("%c[1;31m",27);
+ $display ("Monitor: Test plfg_nco_fft_mag_acc_pout failed!!! Timeout.");
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+
+ // Check if enough data was send, and if so terminate test
+ initial begin
+ wait(dataCounter == 16'd 2*`FFT_SIZE);
+ $display("%c[1;32m",27);
+ $display("Monitor: Test plfg_nco_fft_mag_acc_pout passed.");
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+
+ initial begin
+ RSTB <= 1'b0;
+ #10000;
+ RSTB <= 1'b1; // Release reset
+ #20000;
+ end
+
+ initial begin // Power-up sequence
+ power1 <= 1'b0;
+ power2 <= 1'b0;
+ #200;
+ power1 <= 1'b1;
+ #200;
+ power2 <= 1'b1;
+ end
+
+ wire flash_csb;
+ wire flash_clk;
+ wire flash_io0;
+ wire flash_io1;
+
+ wire VDD1V8;
+ wire VDD3V3;
+ wire VSS;
+
+ assign VDD3V3 = power1;
+ assign VDD1V8 = power2;
+ assign VSS = 1'b0;
+
+ caravel uut (
+ .vddio (VDD3V3),
+ .vssio (VSS),
+ .vdda (VDD3V3),
+ .vssa (VSS),
+ .vccd (VDD1V8),
+ .vssd (VSS),
+ .vdda1 (VDD3V3),
+ .vdda2 (VDD3V3),
+ .vssa1 (VSS),
+ .vssa2 (VSS),
+ .vccd1 (VDD1V8),
+ .vccd2 (VDD1V8),
+ .vssd1 (VSS),
+ .vssd2 (VSS),
+ .clock (clock),
+ .gpio (gpio),
+ .mprj_io (mprj_io),
+ .flash_csb(flash_csb),
+ .flash_clk(flash_clk),
+ .flash_io0(flash_io0),
+ .flash_io1(flash_io1),
+ .resetb (RSTB)
+ );
+
+ spiflash #(
+ .FILENAME("plfg_nco_fft_mag_acc_pout.hex")
+ ) spiflash (
+ .csb(flash_csb),
+ .clk(flash_clk),
+ .io0(flash_io0),
+ .io1(flash_io1),
+ .io2(),
+ .io3()
+ );
+
+endmodule
+`default_nettype wire
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/Makefile b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/Makefile
new file mode 100644
index 0000000..bedcbdf
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/Makefile
@@ -0,0 +1,54 @@
+CARAVEL_PATH = ./../../../../../..
+
+FIRMWARE_PATH = ../..
+RTL_PATH = $(CARAVEL_PATH)/verilog/rtl
+IP_PATH = $(CARAVEL_PATH)/verilog/ip
+BEHAVIOURAL_MODELS = ../../
+
+CARGO_PATH = $(CARAVEL_PATH)/cargo
+WB2AXI_PATH = $(CARAVEL_PATH)/cargo/wb2axip/rtl
+PROJECT_PATH = $(CARAVEL_PATH)/cargo/spectrometer/rtl/SpectrometerTest
+TOP_PATH = $(CARAVEL_PATH)/cargo/top/rtl/SpectrometerTest
+
+GCC_PATH?=$(RISCV32)/bin
+GCC_PREFIX?=riscv32-unknown-elf
+PDK_PATH?=$(PDK_ROOT)/sky130A
+
+FFT_SIZE?=64 # Pass fft size to testbench and c code
+
+.SUFFIXES:
+
+PATTERN = plfg_nco_fft_mag_acc_utx
+
+all: ${PATTERN:=.vcd}
+
+hex: ${PATTERN:=.hex}
+
+%.vvp: %_tb.v %.hex
+ iverilog -DFUNCTIONAL -DSIM -DFFT_SIZE=$(FFT_SIZE) -I $(BEHAVIOURAL_MODELS) \
+ -I $(WB2AXI_PATH) \
+ -I $(PROJECT_PATH) \
+ -I $(TOP_PATH) \
+ -I $(PDK_PATH) -I $(IP_PATH) -I $(RTL_PATH) \
+ $< -o $@
+
+%.vcd: %.vvp
+ vvp $<
+
+%.elf: %.c $(FIRMWARE_PATH)/sections.lds $(FIRMWARE_PATH)/start.s
+ ${GCC_PATH}/${GCC_PREFIX}-gcc -march=rv32imc -mabi=ilp32 -Wl,-Bstatic,-T,$(FIRMWARE_PATH)/sections.lds,--strip-debug -ffreestanding -nostdlib -DFFT_SIZE=$(FFT_SIZE) -o $@ $(FIRMWARE_PATH)/start.s $<
+
+%.hex: %.elf
+ ${GCC_PATH}/${GCC_PREFIX}-objcopy -O verilog $< $@
+ # to fix flash base address
+ sed -i 's/@10000000/@00000000/g' $@
+
+%.bin: %.elf
+ ${GCC_PATH}/${GCC_PREFIX}-objcopy -O binary $< /dev/stdout | tail -c +1048577 > $@
+
+# ---- Clean ----
+
+clean:
+ rm -f *.elf *.hex *.bin *.vvp *.vcd *.log *.txt
+
+.PHONY: clean hex all
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/plfg_nco_fft_mag_acc_utx.c b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/plfg_nco_fft_mag_acc_utx.c
new file mode 100644
index 0000000..9bb95c4
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/plfg_nco_fft_mag_acc_utx.c
@@ -0,0 +1,93 @@
+// SPDX-License-Identifier: Apache-2.0
+
+#include "../../defs.h"
+#include "../../stub.c"
+
+#include "../../spectrometerDefs.h"
+
+/*
+ Spectrometer Test:
+ - Set spectrometer to pass data through:
+ plfg
+ nco
+ fft
+ mag
+ acc
+ utx
+*/
+
+int clk = 0;
+int i;
+
+void main()
+{
+ // Configure GPIO pins
+ reg_mprj_io_24 = GPIO_MODE_USER_STD_INPUT_PULLUP;
+ reg_mprj_io_23 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_22 = GPIO_MODE_USER_STD_OUTPUT;
+
+ reg_mprj_io_21 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_20 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_19 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_18 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_17 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_16 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_15 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_14 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_13 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_12 = GPIO_MODE_USER_STD_OUTPUT;
+ reg_mprj_io_11 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+
+ reg_mprj_io_10 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_9 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_8 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_7 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_6 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_5 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_4 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_3 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_2 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_1 = GPIO_MODE_USER_STD_INPUT_PULLDOWN;
+ reg_mprj_io_0 = GPIO_MODE_USER_STD_OUTPUT;
+
+ /* Apply configuration */
+ reg_mprj_xfer = 1;
+ while (reg_mprj_xfer == 1);
+
+ UART_REG(uart_div) = 2;
+ UART_REG(uart_txctrl) = 1;
+ UART_REG(uart_rxctrl) = 1;
+
+ MAG_REG(0) = 0x2; // set jpl magnitude
+
+ ACC_REG(0) = FFT_SIZE;
+ ACC_REG(1*BEATBYTES) = 4;
+
+ PLFG_MUX_1_REG(0) = 0;
+ NCO_MUX_1_REG(0) = 0;
+ FFT_MUX_1_REG(0) = 0;
+ MAG_MUX_1_REG(0) = 0;
+
+ PLFG_MUX_0_REG(0) = 0;
+ NCO_MUX_0_REG(0) = 0;
+ FFT_MUX_0_REG(0) = 0;
+ MAG_MUX_0_REG(0) = 0;
+
+ OUT_MUX_REG(0x4) = 0;
+
+ int segmentNumsArrayOffset = 6 * BEATBYTES;
+ int repeatedChirpNumsArrayOffset = segmentNumsArrayOffset + 4 * BEATBYTES;
+ int chirpOrdinalNumsArrayOffset = repeatedChirpNumsArrayOffset + 8 * BEATBYTES;
+
+ PLFG_RAM(0) = 0x24000000;
+ PLFG_REG(2*BEATBYTES) = 8;
+ PLFG_REG(4*BEATBYTES) = 1;
+ PLFG_REG(5*BEATBYTES) = 8*128/FFT_SIZE;;
+ PLFG_REG(segmentNumsArrayOffset) = 1;
+ PLFG_REG(repeatedChirpNumsArrayOffset) = 1;
+ PLFG_REG(chirpOrdinalNumsArrayOffset) = 0;
+ PLFG_REG(1*BEATBYTES) = 0;
+ PLFG_REG(0*BEATBYTES) = 1;
+
+}
+
diff --git a/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/plfg_nco_fft_mag_acc_utx_tb.v b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/plfg_nco_fft_mag_acc_utx_tb.v
new file mode 100644
index 0000000..82ddcfc
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometer/plfg_nco_fft_mag_acc_utx/plfg_nco_fft_mag_acc_utx_tb.v
@@ -0,0 +1,195 @@
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+
+`timescale 1 ns / 1 ps
+
+`include "caravel.v"
+`include "spiflash.v"
+`include "uart_rx.v"
+
+module plfg_nco_fft_mag_acc_utx_tb;
+ // declare file for writing data
+ integer file;
+
+ // Golden data
+ reg [15:0] goldenData [0:`FFT_SIZE-1];
+
+ // clk, rst, power signals
+ reg clock;
+ reg RSTB;
+ reg power1, power2;
+
+ // testbench signals
+ wire gpio;
+ wire [37:0] mprj_io;
+
+ // Output stream data wires
+ reg out_ready = 1'b0;
+ wire out_valid;
+ wire [7:0] out_data;
+
+ // uart data
+ reg uRx = 1'b1;
+ wire uTx;
+ wire [7:0] utx_data;
+ reg [7:0] utx_temp;
+ wire utx_valid;
+
+ reg [15:0] dataCounter = 16'b0;
+ reg [9:0] cntReg = 10'b0;
+
+
+ // Assign wires
+ assign mprj_io[11] = out_ready;
+ assign out_valid = mprj_io[12];
+ assign out_data = mprj_io[20:13];
+
+ assign uTx = mprj_io[23];
+ assign mprj_io[24] = uRx;
+
+ assign mprj_io[10:1] = cntReg[9:0];
+
+
+ // toggle clock
+ always #500 clock <= (clock === 1'b0);
+
+ // Read golden data
+ initial $readmemh("./../../../../../../cargo/spectrometer/test_run_dir/SpectrometerTest/plfg_nco_fft_mag_acc_utx/GoldenData.txt", goldenData);
+
+ // send data to input stream
+ always @ (posedge clock) begin
+ cntReg <= cntReg + 1'b1;
+ end
+
+ // open file for writting
+ initial begin
+ file = $fopen("output.txt","w");
+ if (file) $display("File was opened successfully : %0d", file);
+ else $display("File was NOT opened successfully : %0d", file);
+ end
+
+ initial begin
+ clock = 0;
+ end
+
+ // Collect data from uTx
+ always @ (posedge clock) begin
+ if (utx_valid) begin
+ if (dataCounter % 2 == 0) utx_temp <= utx_data;
+ else begin
+ $fwriteh(file, "%h" ,utx_data);
+ $fwriteh(file, "%h\n" ,utx_temp);
+ if ({utx_data,utx_temp} != goldenData[dataCounter/2]) begin
+ $display("%c[1;31m",27);
+ $display ("Monitor: Test plfg_nco_fft_mag_acc_utx failed!!! Read data was %h, but should be %h.", {utx_data,utx_temp}, goldenData[dataCounter/2]);
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+ end
+ dataCounter <= dataCounter + 1'b1;
+ end
+ end
+
+ initial begin
+ $dumpfile("plfg_nco_fft_mag_acc_utx.vcd");
+ $dumpvars(4, plfg_nco_fft_mag_acc_utx_tb);
+
+ // Repeat cycles of 1000 clock edges as needed to complete testbench
+ repeat (300) begin
+ repeat (1000) @(posedge clock);
+ // $display("+1000 cycles");
+ end
+ $display("%c[1;31m",27);
+ $display ("Monitor: Test plfg_nco_fft_mag_acc_utx failed!!! Timeout.");
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+
+ // Check if enough data was send, and if so terminate test
+ initial begin
+ wait(dataCounter == 16'd 2*`FFT_SIZE);
+ $display("%c[1;32m",27);
+ $display("Monitor: Test plfg_nco_fft_mag_acc_utx passed.");
+ $display("%c[0m",27);
+ $fclose(file);
+ $finish;
+ end
+
+ initial begin
+ RSTB <= 1'b0;
+ #10000;
+ RSTB <= 1'b1; // Release reset
+ #20000;
+ end
+
+ initial begin // Power-up sequence
+ power1 <= 1'b0;
+ power2 <= 1'b0;
+ #200;
+ power1 <= 1'b1;
+ #200;
+ power2 <= 1'b1;
+ end
+
+ wire flash_csb;
+ wire flash_clk;
+ wire flash_io0;
+ wire flash_io1;
+
+ wire VDD1V8;
+ wire VDD3V3;
+ wire VSS;
+
+ assign VDD3V3 = power1;
+ assign VDD1V8 = power2;
+ assign VSS = 1'b0;
+
+ caravel uut (
+ .vddio (VDD3V3),
+ .vssio (VSS),
+ .vdda (VDD3V3),
+ .vssa (VSS),
+ .vccd (VDD1V8),
+ .vssd (VSS),
+ .vdda1 (VDD3V3),
+ .vdda2 (VDD3V3),
+ .vssa1 (VSS),
+ .vssa2 (VSS),
+ .vccd1 (VDD1V8),
+ .vccd2 (VDD1V8),
+ .vssd1 (VSS),
+ .vssd2 (VSS),
+ .clock (clock),
+ .gpio (gpio),
+ .mprj_io (mprj_io),
+ .flash_csb(flash_csb),
+ .flash_clk(flash_clk),
+ .flash_io0(flash_io0),
+ .flash_io1(flash_io1),
+ .resetb (RSTB)
+ );
+
+ spiflash #(
+ .FILENAME("plfg_nco_fft_mag_acc_utx.hex")
+ ) spiflash (
+ .csb(flash_csb),
+ .clk(flash_clk),
+ .io0(flash_io0),
+ .io1(flash_io1),
+ .io2(),
+ .io3()
+ );
+
+ uart_rx #(.CLKS_PER_BIT(3)
+ ) urx_tb (
+ .i_Clock(clock),
+ .i_Rx_Serial(uTx),
+ .o_Rx_DV(utx_valid),
+ .o_Rx_Byte(utx_data)
+ );
+
+endmodule
+`default_nettype wire
diff --git a/cargo/top/dv/SpectrometerTest/spectrometerDefs.h b/cargo/top/dv/SpectrometerTest/spectrometerDefs.h
new file mode 100644
index 0000000..4e7f6b8
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spectrometerDefs.h
@@ -0,0 +1,104 @@
+// SPDX-License-Identifier: Apache-2.0
+
+#ifndef _SPECTROMETERDEF_H_
+#define _SPECTROMETERDEF_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+
+// Helper functions
+#define _AC(X,Y) (X##Y)
+
+#define _REG32(p, i) (*(volatile uint32_t *) ((p) + (i)))
+
+#define BEATBYTES 4
+
+#define IN_SPL_BASE _AC(0x30000000,UL)
+
+#define PLFG_RAM_BASE _AC(0x30001000,UL)
+#define PLFG_BASE _AC(0x30002100,UL)
+#define PLFG_SPL_BASE _AC(0x30002200,UL)
+#define PLFG_MUX_0_BASE _AC(0x30002210,UL)
+#define PLFG_MUX_1_BASE _AC(0x30002220,UL)
+
+#define NCO_BASE _AC(0x30003000,UL)
+#define NCO_SPL_BASE _AC(0x30003100,UL)
+#define NCO_MUX_0_BASE _AC(0x30003110,UL)
+#define NCO_MUX_1_BASE _AC(0x30003120,UL)
+
+#define FFT_BASE _AC(0x30004000,UL)
+#define FFT_SPL_BASE _AC(0x30004100,UL)
+#define FFT_MUX_0_BASE _AC(0x30004110,UL)
+#define FFT_MUX_1_BASE _AC(0x30004120,UL)
+
+#define MAG_BASE _AC(0x30005000,UL)
+#define MAG_SPL_BASE _AC(0x30005100,UL)
+#define MAG_MUX_0_BASE _AC(0x30005110,UL)
+#define MAG_MUX_1_BASE _AC(0x30005120,UL)
+
+#define ACC_QUEUE_BASE _AC(0x30006000,UL)
+#define ACC_BASE _AC(0x30007000,UL)
+
+#define OUT_MUX_BASE _AC(0x30008000,UL)
+#define OUT_SPL_BASE _AC(0x30008010,UL)
+
+#define UART_BASE _AC(0x30009000,UL)
+#define UART_SPL_BASE _AC(0x30009100,UL)
+
+// REGS
+#define IN_SPL_REG(offset) _REG32(IN_SPL_BASE, offset)
+
+#define PLFG_RAM(offset) _REG32(PLFG_RAM_BASE, offset)
+#define PLFG_REG(offset) _REG32(PLFG_BASE, offset)
+#define PLFG_SPL_REG(offset) _REG32(PLFG_SPL_BASE, offset)
+#define PLFG_MUX_0_REG(offset) _REG32(PLFG_MUX_0_BASE, offset)
+#define PLFG_MUX_1_REG(offset) _REG32(PLFG_MUX_1_BASE, offset)
+
+#define NCO_REG(offset) _REG32(NCO_BASE, offset)
+#define NCO_SPL_REG(offset) _REG32(NCO_SPL_BASE, offset)
+#define NCO_MUX_0_REG(offset) _REG32(NCO_MUX_0_BASE, offset)
+#define NCO_MUX_1_REG(offset) _REG32(NCO_MUX_1_BASE, offset)
+
+#define FFT_REG(offset) _REG32(FFT_BASE, offset)
+#define FFT_SPL_REG(offset) _REG32(FFT_SPL_BASE, offset)
+#define FFT_MUX_0_REG(offset) _REG32(FFT_MUX_0_BASE, offset)
+#define FFT_MUX_1_REG(offset) _REG32(FFT_MUX_1_BASE, offset)
+
+#define MAG_REG(offset) _REG32(MAG_BASE, offset)
+#define MAG_SPL_REG(offset) _REG32(MAG_SPL_BASE, offset)
+#define MAG_MUX_0_REG(offset) _REG32(MAG_MUX_0_BASE, offset)
+#define MAG_MUX_1_REG(offset) _REG32(MAG_MUX_1_BASE, offset)
+
+#define ACC_QUEUE_REG(offset) _REG32(ACC_QUEUE_BASE, offset)
+#define ACC_REG(offset) _REG32(ACC_BASE, offset)
+
+#define OUT_MUX_REG(offset) _REG32(OUT_MUX_BASE, offset)
+#define OUT_SPL_REG(offset) _REG32(OUT_SPL_BASE, offset)
+
+#define UART_REG(offset) _REG32(UART_BASE, offset)
+#define UART_SPL_REG(offset) _REG32(UART_SPL_BASE, offset)
+
+/* Register offsets */
+#define uart_txfifo 0x00
+#define uart_rxfifo 0x04
+#define uart_txctrl 0x08
+#define uart_txmark 0x0a
+#define uart_rxctrl 0x0c
+#define uart_rxmark 0x0e
+
+#define uart_ie 0x10
+#define uart_ip 0x14
+#define uart_div 0x18
+#define uart_parity 0x1c
+#define uart_wire4 0x20
+#define uart_either8or9 0x24
+
+#define mux_output_0 0x0*BEATBYTES
+#define mux_output_1 0x1*BEATBYTES
+#define mux_output_2 0x2*BEATBYTES
+
+#define spl_ctrl 0x0*BEATBYTES
+#define spl_mask 0x1*BEATBYTES
+
+// --------------------------------------------------------
+#endif
diff --git a/cargo/top/dv/SpectrometerTest/spiflash.v b/cargo/top/dv/SpectrometerTest/spiflash.v
new file mode 100644
index 0000000..c4794c4
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/spiflash.v
@@ -0,0 +1,416 @@
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+/*
+ * PicoSoC - A simple example SoC using PicoRV32
+ *
+ * Copyright (C) 2017 Clifford Wolf <clifford@clifford.at>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+`timescale 1 ns / 1 ps
+
+//
+// Simple SPI flash simulation model
+//
+// This model samples io input signals 1ns before the SPI clock edge and
+// updates output signals 1ns after the SPI clock edge.
+//
+// Supported commands:
+// AB, B9, FF, 03, BB, EB, ED
+//
+// Well written SPI flash data sheets:
+// Cypress S25FL064L http://www.cypress.com/file/316661/download
+// Cypress S25FL128L http://www.cypress.com/file/316171/download
+//
+
+module spiflash #(
+ parameter FILENAME = "firmware.hex"
+)(
+ input csb,
+ input clk,
+ inout io0, // MOSI
+ inout io1, // MISO
+ inout io2,
+ inout io3
+);
+ localparam verbose = 0;
+ localparam integer latency = 8;
+
+ reg [7:0] buffer;
+ integer bitcount = 0;
+ integer bytecount = 0;
+ integer dummycount = 0;
+
+ reg [7:0] spi_cmd;
+ reg [7:0] xip_cmd = 0;
+ reg [23:0] spi_addr;
+
+ reg [7:0] spi_in;
+ reg [7:0] spi_out;
+ reg spi_io_vld;
+
+ reg powered_up = 0;
+
+ localparam [3:0] mode_spi = 1;
+ localparam [3:0] mode_dspi_rd = 2;
+ localparam [3:0] mode_dspi_wr = 3;
+ localparam [3:0] mode_qspi_rd = 4;
+ localparam [3:0] mode_qspi_wr = 5;
+ localparam [3:0] mode_qspi_ddr_rd = 6;
+ localparam [3:0] mode_qspi_ddr_wr = 7;
+
+ reg [3:0] mode = 0;
+ reg [3:0] next_mode = 0;
+
+ reg io0_oe = 0;
+ reg io1_oe = 0;
+ reg io2_oe = 0;
+ reg io3_oe = 0;
+
+ reg io0_dout = 0;
+ reg io1_dout = 0;
+ reg io2_dout = 0;
+ reg io3_dout = 0;
+
+ assign #1 io0 = io0_oe ? io0_dout : 1'bz;
+ assign #1 io1 = io1_oe ? io1_dout : 1'bz;
+ assign #1 io2 = io2_oe ? io2_dout : 1'bz;
+ assign #1 io3 = io3_oe ? io3_dout : 1'bz;
+
+ wire io0_delayed;
+ wire io1_delayed;
+ wire io2_delayed;
+ wire io3_delayed;
+
+ assign #1 io0_delayed = io0;
+ assign #1 io1_delayed = io1;
+ assign #1 io2_delayed = io2;
+ assign #1 io3_delayed = io3;
+
+ // 16 MB (128Mb) Flash
+ reg [7:0] memory [0:16*1024*1024-1];
+
+ initial begin
+ $display("Memory 5 bytes = 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
+ memory[1048576], memory[1048577], memory[1048578],
+ memory[1048579], memory[1048580]);
+ $display("Reading %s", FILENAME);
+ $readmemh(FILENAME, memory);
+ $display("%s loaded into memory", FILENAME);
+ $display("Memory 5 bytes = 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x",
+ memory[1048576], memory[1048577], memory[1048578],
+ memory[1048579], memory[1048580]);
+ end
+
+ task spi_action;
+ begin
+ spi_in = buffer;
+
+ if (bytecount == 1) begin
+ spi_cmd = buffer;
+
+ if (spi_cmd == 8'h ab)
+ powered_up = 1;
+
+ if (spi_cmd == 8'h b9)
+ powered_up = 0;
+
+ if (spi_cmd == 8'h ff)
+ xip_cmd = 0;
+ end
+
+ if (powered_up && spi_cmd == 'h 03) begin
+ if (bytecount == 2)
+ spi_addr[23:16] = buffer;
+
+ if (bytecount == 3)
+ spi_addr[15:8] = buffer;
+
+ if (bytecount == 4)
+ spi_addr[7:0] = buffer;
+
+ if (bytecount >= 4) begin
+ buffer = memory[spi_addr];
+ spi_addr = spi_addr + 1;
+ end
+ end
+
+ if (powered_up && spi_cmd == 'h bb) begin
+ if (bytecount == 1)
+ mode = mode_dspi_rd;
+
+ if (bytecount == 2)
+ spi_addr[23:16] = buffer;
+
+ if (bytecount == 3)
+ spi_addr[15:8] = buffer;
+
+ if (bytecount == 4)
+ spi_addr[7:0] = buffer;
+
+ if (bytecount == 5) begin
+ xip_cmd = (buffer == 8'h a5) ? spi_cmd : 8'h 00;
+ mode = mode_dspi_wr;
+ dummycount = latency;
+ end
+
+ if (bytecount >= 5) begin
+ buffer = memory[spi_addr];
+ spi_addr = spi_addr + 1;
+ end
+ end
+
+ if (powered_up && spi_cmd == 'h eb) begin
+ if (bytecount == 1)
+ mode = mode_qspi_rd;
+
+ if (bytecount == 2)
+ spi_addr[23:16] = buffer;
+
+ if (bytecount == 3)
+ spi_addr[15:8] = buffer;
+
+ if (bytecount == 4)
+ spi_addr[7:0] = buffer;
+
+ if (bytecount == 5) begin
+ xip_cmd = (buffer == 8'h a5) ? spi_cmd : 8'h 00;
+ mode = mode_qspi_wr;
+ dummycount = latency;
+ end
+
+ if (bytecount >= 5) begin
+ buffer = memory[spi_addr];
+ spi_addr = spi_addr + 1;
+ end
+ end
+
+ if (powered_up && spi_cmd == 'h ed) begin
+ if (bytecount == 1)
+ next_mode = mode_qspi_ddr_rd;
+
+ if (bytecount == 2)
+ spi_addr[23:16] = buffer;
+
+ if (bytecount == 3)
+ spi_addr[15:8] = buffer;
+
+ if (bytecount == 4)
+ spi_addr[7:0] = buffer;
+
+ if (bytecount == 5) begin
+ xip_cmd = (buffer == 8'h a5) ? spi_cmd : 8'h 00;
+ mode = mode_qspi_ddr_wr;
+ dummycount = latency;
+ end
+
+ if (bytecount >= 5) begin
+ buffer = memory[spi_addr];
+ spi_addr = spi_addr + 1;
+ end
+ end
+
+ spi_out = buffer;
+ spi_io_vld = 1;
+
+ if (verbose) begin
+ if (bytecount == 1)
+ $write("<SPI-START>");
+ $write("<SPI:%02x:%02x>", spi_in, spi_out);
+ end
+
+ end
+ endtask
+
+ task ddr_rd_edge;
+ begin
+ buffer = {buffer, io3_delayed, io2_delayed, io1_delayed, io0_delayed};
+ bitcount = bitcount + 4;
+ if (bitcount == 8) begin
+ bitcount = 0;
+ bytecount = bytecount + 1;
+ spi_action;
+ end
+ end
+ endtask
+
+ task ddr_wr_edge;
+ begin
+ io0_oe = 1;
+ io1_oe = 1;
+ io2_oe = 1;
+ io3_oe = 1;
+
+ io0_dout = buffer[4];
+ io1_dout = buffer[5];
+ io2_dout = buffer[6];
+ io3_dout = buffer[7];
+
+ buffer = {buffer, 4'h 0};
+ bitcount = bitcount + 4;
+ if (bitcount == 8) begin
+ bitcount = 0;
+ bytecount = bytecount + 1;
+ spi_action;
+ end
+ end
+ endtask
+
+ always @(csb) begin
+ if (csb) begin
+ if (verbose) begin
+ $display("");
+ $fflush;
+ end
+ buffer = 0;
+ bitcount = 0;
+ bytecount = 0;
+ mode = mode_spi;
+ io0_oe = 0;
+ io1_oe = 0;
+ io2_oe = 0;
+ io3_oe = 0;
+ end else
+ if (xip_cmd) begin
+ buffer = xip_cmd;
+ bitcount = 0;
+ bytecount = 1;
+ spi_action;
+ end
+ end
+
+ always @(csb, clk) begin
+ spi_io_vld = 0;
+ if (!csb && !clk) begin
+ if (dummycount > 0) begin
+ io0_oe = 0;
+ io1_oe = 0;
+ io2_oe = 0;
+ io3_oe = 0;
+ end else
+ case (mode)
+ mode_spi: begin
+ io0_oe = 0;
+ io1_oe = 1;
+ io2_oe = 0;
+ io3_oe = 0;
+ io1_dout = buffer[7];
+ end
+ mode_dspi_rd: begin
+ io0_oe = 0;
+ io1_oe = 0;
+ io2_oe = 0;
+ io3_oe = 0;
+ end
+ mode_dspi_wr: begin
+ io0_oe = 1;
+ io1_oe = 1;
+ io2_oe = 0;
+ io3_oe = 0;
+ io0_dout = buffer[6];
+ io1_dout = buffer[7];
+ end
+ mode_qspi_rd: begin
+ io0_oe = 0;
+ io1_oe = 0;
+ io2_oe = 0;
+ io3_oe = 0;
+ end
+ mode_qspi_wr: begin
+ io0_oe = 1;
+ io1_oe = 1;
+ io2_oe = 1;
+ io3_oe = 1;
+ io0_dout = buffer[4];
+ io1_dout = buffer[5];
+ io2_dout = buffer[6];
+ io3_dout = buffer[7];
+ end
+ mode_qspi_ddr_rd: begin
+ ddr_rd_edge;
+ end
+ mode_qspi_ddr_wr: begin
+ ddr_wr_edge;
+ end
+ endcase
+ if (next_mode) begin
+ case (next_mode)
+ mode_qspi_ddr_rd: begin
+ io0_oe = 0;
+ io1_oe = 0;
+ io2_oe = 0;
+ io3_oe = 0;
+ end
+ mode_qspi_ddr_wr: begin
+ io0_oe = 1;
+ io1_oe = 1;
+ io2_oe = 1;
+ io3_oe = 1;
+ io0_dout = buffer[4];
+ io1_dout = buffer[5];
+ io2_dout = buffer[6];
+ io3_dout = buffer[7];
+ end
+ endcase
+ mode = next_mode;
+ next_mode = 0;
+ end
+ end
+ end
+
+ always @(posedge clk) begin
+ if (!csb) begin
+ if (dummycount > 0) begin
+ dummycount = dummycount - 1;
+ end else
+ case (mode)
+ mode_spi: begin
+ buffer = {buffer, io0};
+ bitcount = bitcount + 1;
+ if (bitcount == 8) begin
+ bitcount = 0;
+ bytecount = bytecount + 1;
+ spi_action;
+ end
+ end
+ mode_dspi_rd, mode_dspi_wr: begin
+ buffer = {buffer, io1, io0};
+ bitcount = bitcount + 2;
+ if (bitcount == 8) begin
+ bitcount = 0;
+ bytecount = bytecount + 1;
+ spi_action;
+ end
+ end
+ mode_qspi_rd, mode_qspi_wr: begin
+ buffer = {buffer, io3, io2, io1, io0};
+ bitcount = bitcount + 4;
+ if (bitcount == 8) begin
+ bitcount = 0;
+ bytecount = bytecount + 1;
+ spi_action;
+ end
+ end
+ mode_qspi_ddr_rd: begin
+ ddr_rd_edge;
+ end
+ mode_qspi_ddr_wr: begin
+ ddr_wr_edge;
+ end
+ endcase
+ end
+ end
+endmodule
diff --git a/cargo/top/dv/SpectrometerTest/start.s b/cargo/top/dv/SpectrometerTest/start.s
new file mode 100644
index 0000000..7dd13d8
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/start.s
@@ -0,0 +1,161 @@
+# SPDX-License-Identifier: Apache-2.0
+
+.section .text
+
+start:
+
+# zero-initialize register file
+addi x1, zero, 0
+# x2 (sp) is initialized by reset
+addi x3, zero, 0
+addi x4, zero, 0
+addi x5, zero, 0
+addi x6, zero, 0
+addi x7, zero, 0
+addi x8, zero, 0
+addi x9, zero, 0
+addi x10, zero, 0
+addi x11, zero, 0
+addi x12, zero, 0
+addi x13, zero, 0
+addi x14, zero, 0
+addi x15, zero, 0
+addi x16, zero, 0
+addi x17, zero, 0
+addi x18, zero, 0
+addi x19, zero, 0
+addi x20, zero, 0
+addi x21, zero, 0
+addi x22, zero, 0
+addi x23, zero, 0
+addi x24, zero, 0
+addi x25, zero, 0
+addi x26, zero, 0
+addi x27, zero, 0
+addi x28, zero, 0
+addi x29, zero, 0
+addi x30, zero, 0
+addi x31, zero, 0
+
+# zero initialize scratchpad memory
+# setmemloop:
+# sw zero, 0(x1)
+# addi x1, x1, 4
+# blt x1, sp, setmemloop
+
+# copy data section
+la a0, _sidata
+la a1, _sdata
+la a2, _edata
+bge a1, a2, end_init_data
+loop_init_data:
+lw a3, 0(a0)
+sw a3, 0(a1)
+addi a0, a0, 4
+addi a1, a1, 4
+blt a1, a2, loop_init_data
+end_init_data:
+
+# zero-init bss section
+la a0, _sbss
+la a1, _ebss
+bge a0, a1, end_init_bss
+loop_init_bss:
+sw zero, 0(a0)
+addi a0, a0, 4
+blt a0, a1, loop_init_bss
+end_init_bss:
+
+# call main
+call main
+loop:
+j loop
+
+.global flashio_worker_begin
+.global flashio_worker_end
+
+.balign 4
+
+flashio_worker_begin:
+# a0 ... data pointer
+# a1 ... data length
+# a2 ... optional WREN cmd (0 = disable)
+
+# address of SPI ctrl reg
+li t0, 0x28000000
+
+# Set CS high, IO0 is output
+li t1, 0x120
+sh t1, 0(t0)
+
+# Enable Manual SPI Ctrl
+sb zero, 3(t0)
+
+# Send optional WREN cmd
+beqz a2, flashio_worker_L1
+li t5, 8
+andi t2, a2, 0xff
+flashio_worker_L4:
+srli t4, t2, 7
+sb t4, 0(t0)
+ori t4, t4, 0x10
+sb t4, 0(t0)
+slli t2, t2, 1
+andi t2, t2, 0xff
+addi t5, t5, -1
+bnez t5, flashio_worker_L4
+sb t1, 0(t0)
+
+# SPI transfer
+flashio_worker_L1:
+
+# If byte count is zero, we're done
+beqz a1, flashio_worker_L3
+
+# Set t5 to count down 32 bits
+li t5, 32
+# Load t2 from address a0 (4 bytes)
+lw t2, 0(a0)
+
+flashio_worker_LY:
+# Set t6 to count down 8 bits
+li t6, 8
+
+flashio_worker_L2:
+# Clock out the bit (msb first) on IO0 and read bit in from IO1
+srli t4, t2, 31
+sb t4, 0(t0)
+ori t4, t4, 0x10
+sb t4, 0(t0)
+lbu t4, 0(t0)
+andi t4, t4, 2
+srli t4, t4, 1
+slli t2, t2, 1
+or t2, t2, t4
+
+# Decrement 32 bit count
+addi t5, t5, -1
+bnez t5, flashio_worker_LX
+
+sw t2, 0(a0)
+addi a0, a0, 4
+lw t2, 0(a0)
+
+flashio_worker_LX:
+addi t6, t6, -1
+bnez t6, flashio_worker_L2
+addi a1, a1, -1
+bnez a1, flashio_worker_LY
+
+beqz t5, flashio_worker_L3
+sw t2, 0(a0)
+
+flashio_worker_L3:
+# Back to MEMIO mode
+li t1, 0x80
+sb t1, 3(t0)
+
+ret
+.balign 4
+flashio_worker_end:
+
diff --git a/cargo/top/dv/SpectrometerTest/stub.c b/cargo/top/dv/SpectrometerTest/stub.c
new file mode 100644
index 0000000..b08593f
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/stub.c
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: Apache-2.0
+
+void putchar(char c)
+{
+ if (c == '\n')
+ putchar('\r');
+ reg_uart_data = c;
+}
+
+void print(const char *p)
+{
+ while (*p)
+ putchar(*(p++));
+}
\ No newline at end of file
diff --git a/cargo/top/dv/SpectrometerTest/tbuart.v b/cargo/top/dv/SpectrometerTest/tbuart.v
new file mode 100644
index 0000000..206b9eb
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/tbuart.v
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+/*
+ * PicoSoC - A simple example SoC using PicoRV32
+ *
+ * Copyright (C) 2017 Clifford Wolf <clifford@clifford.at>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+`timescale 1 ns / 1 ps
+
+/* tbuart --- mimic an external UART display, operating at 9600 baud */
+/* and accepting ASCII characters for display. */
+
+/* To do: Match a known UART 3.3V 16x2 LCD display. However, it */
+/* should be possible on a testing system to interface to the UART */
+/* pins on a Raspberry Pi, also running at 3.3V. */
+
+module tbuart (
+ input ser_rx
+);
+ reg [3:0] recv_state;
+ reg [2:0] recv_divcnt;
+ reg [7:0] recv_pattern;
+ reg [8*50-1:0] recv_buf_data; // 50 characters. Increase as needed for tests.
+
+ reg clk;
+
+ initial begin
+ clk <= 1'b0;
+ recv_state <= 0;
+ recv_divcnt <= 0;
+ recv_pattern <= 0;
+ recv_buf_data <= 0;
+ end
+
+ // NOTE: Running at 3.0us clock period @ 5 clocks per bit = 15.0us per
+ // bit ~= 64 kbaud. Not tuned to any particular UART. Most run at
+ // 9600 baud default and will bounce up to higher baud rates when
+ // passed specific command words.
+
+ always #1500 clk <= (clk === 1'b0);
+
+ always @(posedge clk) begin
+ recv_divcnt <= recv_divcnt + 1;
+ case (recv_state)
+ 0: begin
+ if (!ser_rx)
+ recv_state <= 1;
+ recv_divcnt <= 0;
+ end
+ 1: begin
+ if (2*recv_divcnt > 3'd3) begin
+ recv_state <= 2;
+ recv_divcnt <= 0;
+ end
+ end
+ 10: begin
+ if (recv_divcnt > 3'd3) begin
+ // 0x0a = '\n'
+ if (recv_pattern == 8'h0a) begin
+ $display("output: %s", recv_buf_data);
+ end else begin
+ recv_buf_data <= {recv_buf_data, recv_pattern};
+ end
+ recv_state <= 0;
+ end
+ end
+ default: begin
+ if (recv_divcnt > 3'd3) begin
+ recv_pattern <= {ser_rx, recv_pattern[7:1]};
+ recv_state <= recv_state + 1;
+ recv_divcnt <= 0;
+ end
+ end
+ endcase
+ end
+
+endmodule
diff --git a/cargo/top/dv/SpectrometerTest/uart_rx.v b/cargo/top/dv/SpectrometerTest/uart_rx.v
new file mode 100644
index 0000000..83e1a89
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/uart_rx.v
@@ -0,0 +1,138 @@
+// SPDX-License-Identifier: Apache-2.0
+
+module uart_rx #(
+ parameter CLKS_PER_BIT = 174
+)(
+ input i_Clock,
+ input i_Rx_Serial,
+ output o_Rx_DV,
+ output [7:0] o_Rx_Byte
+ );
+
+ parameter s_IDLE = 3'b000;
+ parameter s_RX_START_BIT = 3'b001;
+ parameter s_RX_DATA_BITS = 3'b010;
+ parameter s_RX_STOP_BIT = 3'b011;
+ parameter s_CLEANUP = 3'b100;
+
+ reg r_Rx_Data_R = 1'b1;
+ reg r_Rx_Data = 1'b1;
+
+ reg [7:0] r_Clock_Count = 0;
+ reg [2:0] r_Bit_Index = 0; //8 bits total
+ reg [7:0] r_Rx_Byte = 0;
+ reg r_Rx_DV = 0;
+ reg [2:0] r_SM_Main = 0;
+
+ // Purpose: Double-register the incoming data.
+ // This allows it to be used in the UART RX Clock Domain.
+ // (It removes problems caused by metastability)
+ always @(posedge i_Clock)
+ begin
+ r_Rx_Data_R <= i_Rx_Serial;
+ r_Rx_Data <= r_Rx_Data_R;
+ end
+
+
+ // Purpose: Control RX state machine
+ always @(posedge i_Clock)
+ begin
+
+ case (r_SM_Main)
+ s_IDLE :
+ begin
+ r_Rx_DV <= 1'b0;
+ r_Clock_Count <= 0;
+ r_Bit_Index <= 0;
+
+ if (r_Rx_Data == 1'b0) // Start bit detected
+ r_SM_Main <= s_RX_START_BIT;
+ else
+ r_SM_Main <= s_IDLE;
+ end
+
+ // Check middle of start bit to make sure it's still low
+ s_RX_START_BIT :
+ begin
+ if (r_Clock_Count == (CLKS_PER_BIT-1)/2)
+ begin
+ if (r_Rx_Data == 1'b0)
+ begin
+ r_Clock_Count <= 0; // reset counter, found the middle
+ r_SM_Main <= s_RX_DATA_BITS;
+ end
+ else
+ r_SM_Main <= s_IDLE;
+ end
+ else
+ begin
+ r_Clock_Count <= r_Clock_Count + 1;
+ r_SM_Main <= s_RX_START_BIT;
+ end
+ end // case: s_RX_START_BIT
+
+
+ // Wait CLKS_PER_BIT-1 clock cycles to sample serial data
+ s_RX_DATA_BITS :
+ begin
+ if (r_Clock_Count < CLKS_PER_BIT-1)
+ begin
+ r_Clock_Count <= r_Clock_Count + 1;
+ r_SM_Main <= s_RX_DATA_BITS;
+ end
+ else
+ begin
+ r_Clock_Count <= 0;
+ r_Rx_Byte[r_Bit_Index] <= r_Rx_Data;
+
+ // Check if we have received all bits
+ if (r_Bit_Index < 7)
+ begin
+ r_Bit_Index <= r_Bit_Index + 1;
+ r_SM_Main <= s_RX_DATA_BITS;
+ end
+ else
+ begin
+ r_Bit_Index <= 0;
+ r_SM_Main <= s_RX_STOP_BIT;
+ end
+ end
+ end // case: s_RX_DATA_BITS
+
+
+ // Receive Stop bit. Stop bit = 1
+ s_RX_STOP_BIT :
+ begin
+ // Wait CLKS_PER_BIT-1 clock cycles for Stop bit to finish
+ if (r_Clock_Count < CLKS_PER_BIT-1)
+ begin
+ r_Clock_Count <= r_Clock_Count + 1;
+ r_SM_Main <= s_RX_STOP_BIT;
+ end
+ else
+ begin
+ r_Rx_DV <= 1'b1;
+ r_Clock_Count <= 0;
+ r_SM_Main <= s_CLEANUP;
+ end
+ end // case: s_RX_STOP_BIT
+
+
+ // Stay here 1 clock
+ s_CLEANUP :
+ begin
+ r_SM_Main <= s_IDLE;
+ r_Rx_DV <= 1'b0;
+ end
+
+
+ default :
+ r_SM_Main <= s_IDLE;
+
+ endcase
+ end
+
+ assign o_Rx_DV = r_Rx_DV;
+ assign o_Rx_Byte = r_Rx_Byte;
+
+endmodule // uart_rx
\ No newline at end of file
diff --git a/cargo/top/dv/SpectrometerTest/uart_tx.v b/cargo/top/dv/SpectrometerTest/uart_tx.v
new file mode 100644
index 0000000..d3e4472
--- /dev/null
+++ b/cargo/top/dv/SpectrometerTest/uart_tx.v
@@ -0,0 +1,135 @@
+// SPDX-License-Identifier: Apache-2.0
+
+module uart_tx
+ #(parameter CLKS_PER_BIT)
+ (
+ input i_Clock,
+ input i_Tx_DV,
+ input [7:0] i_Tx_Byte,
+ output o_Tx_Active,
+ output reg o_Tx_Serial,
+ output o_Tx_Done
+ );
+
+ parameter s_IDLE = 3'b000;
+ parameter s_TX_START_BIT = 3'b001;
+ parameter s_TX_DATA_BITS = 3'b010;
+ parameter s_TX_STOP_BIT = 3'b011;
+ parameter s_CLEANUP = 3'b100;
+
+ reg [2:0] r_SM_Main = 0;
+ reg [7:0] r_Clock_Count = 0;
+ reg [2:0] r_Bit_Index = 0;
+ reg [7:0] r_Tx_Data = 0;
+ reg r_Tx_Done = 0;
+ reg r_Tx_Active = 0;
+
+ always @(posedge i_Clock)
+ begin
+
+ case (r_SM_Main)
+ s_IDLE :
+ begin
+ o_Tx_Serial <= 1'b1; // Drive Line High for Idle
+ r_Tx_Done <= 1'b0;
+ r_Clock_Count <= 0;
+ r_Bit_Index <= 0;
+
+ if (i_Tx_DV == 1'b1)
+ begin
+ r_Tx_Active <= 1'b1;
+ r_Tx_Data <= i_Tx_Byte;
+ r_SM_Main <= s_TX_START_BIT;
+ end
+ else
+ r_SM_Main <= s_IDLE;
+ end // case: s_IDLE
+
+
+ // Send out Start Bit. Start bit = 0
+ s_TX_START_BIT :
+ begin
+ o_Tx_Serial <= 1'b0;
+
+ // Wait CLKS_PER_BIT-1 clock cycles for start bit to finish
+ if (r_Clock_Count < CLKS_PER_BIT-1)
+ begin
+ r_Clock_Count <= r_Clock_Count + 1;
+ r_SM_Main <= s_TX_START_BIT;
+ end
+ else
+ begin
+ r_Clock_Count <= 0;
+ r_SM_Main <= s_TX_DATA_BITS;
+ end
+ end // case: s_TX_START_BIT
+
+
+ // Wait CLKS_PER_BIT-1 clock cycles for data bits to finish
+ s_TX_DATA_BITS :
+ begin
+ o_Tx_Serial <= r_Tx_Data[r_Bit_Index];
+
+ if (r_Clock_Count < CLKS_PER_BIT-1)
+ begin
+ r_Clock_Count <= r_Clock_Count + 1;
+ r_SM_Main <= s_TX_DATA_BITS;
+ end
+ else
+ begin
+ r_Clock_Count <= 0;
+
+ // Check if we have sent out all bits
+ if (r_Bit_Index < 7)
+ begin
+ r_Bit_Index <= r_Bit_Index + 1;
+ r_SM_Main <= s_TX_DATA_BITS;
+ end
+ else
+ begin
+ r_Bit_Index <= 0;
+ r_SM_Main <= s_TX_STOP_BIT;
+ end
+ end
+ end // case: s_TX_DATA_BITS
+
+
+ // Send out Stop bit. Stop bit = 1
+ s_TX_STOP_BIT :
+ begin
+ o_Tx_Serial <= 1'b1;
+
+ // Wait CLKS_PER_BIT-1 clock cycles for Stop bit to finish
+ if (r_Clock_Count < CLKS_PER_BIT-1)
+ begin
+ r_Clock_Count <= r_Clock_Count + 1;
+ r_SM_Main <= s_TX_STOP_BIT;
+ end
+ else
+ begin
+ r_Tx_Done <= 1'b1;
+ r_Clock_Count <= 0;
+ r_SM_Main <= s_CLEANUP;
+ r_Tx_Active <= 1'b0;
+ end
+ end // case: s_Tx_STOP_BIT
+
+
+ // Stay here 1 clock
+ s_CLEANUP :
+ begin
+ r_Tx_Done <= 1'b1;
+ r_SM_Main <= s_IDLE;
+ end
+
+
+ default :
+ r_SM_Main <= s_IDLE;
+
+ endcase
+ end
+
+ assign o_Tx_Active = r_Tx_Active;
+ assign o_Tx_Done = r_Tx_Done;
+
+endmodule
\ No newline at end of file
diff --git a/cargo/top/rtl/SpectrometerTest/user_proj_example.v b/cargo/top/rtl/SpectrometerTest/user_proj_example.v
new file mode 100644
index 0000000..59623e5
--- /dev/null
+++ b/cargo/top/rtl/SpectrometerTest/user_proj_example.v
@@ -0,0 +1,290 @@
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+/*
+ *-------------------------------------------------------------
+ *
+ * spectrometer
+ *
+ *-------------------------------------------------------------
+ */
+
+`ifdef SIM
+`include "wbm2axisp.v"
+`include "skidbuffer.v"
+`include "SpectrometerTest.v"
+`include "plusarg_reader.v"
+`endif
+
+module user_proj_example (
+`ifdef USE_POWER_PINS
+ inout vdda1, // User area 1 3.3V supply
+ inout vdda2, // User area 2 3.3V supply
+ inout vssa1, // User area 1 analog ground
+ inout vssa2, // User area 2 analog ground
+ inout vccd1, // User area 1 1.8V supply
+ inout vccd2, // User area 2 1.8v supply
+ inout vssd1, // User area 1 digital ground
+ inout vssd2, // User area 2 digital ground
+`endif
+
+ // Wishbone Slave ports (WB MI A)
+ input wb_clk_i,
+ input wb_rst_i,
+ input wbs_stb_i,
+ input wbs_cyc_i,
+ input wbs_we_i,
+ input [3:0] wbs_sel_i,
+ input [31:0] wbs_dat_i,
+ input [31:0] wbs_adr_i,
+ output wbs_ack_o,
+ output [31:0] wbs_dat_o,
+
+ // Logic Analyzer Signals
+ input [127:0] la_data_in,
+ output [127:0] la_data_out,
+ input [127:0] la_oen,
+
+ // IOs
+ input [`MPRJ_IO_PADS-1:0] io_in,
+ output [`MPRJ_IO_PADS-1:0] io_out,
+ output [`MPRJ_IO_PADS-1:0] io_oeb
+);
+
+// Logic Analyzer Signals
+ wire [127:0] la_data_in;
+ wire [127:0] la_data_out;
+ wire [127:0] la_oen;
+
+// IOs
+ wire [`MPRJ_IO_PADS-1:0] io_in;
+ wire [`MPRJ_IO_PADS-1:0] io_out;
+ wire [`MPRJ_IO_PADS-1:0] io_oeb;
+
+// AXI write address channel signals
+ wire w_o_axi_awvalid; // Write address valid
+ wire w_i_axi_awready; // Slave is ready to accept
+ wire w_o_axi_awid; // Write ID
+ wire [33:0] w_o_axi_awaddr; // Write address
+ wire [7:0] w_o_axi_awlen; // Write Burst Length
+ wire [2:0] w_o_axi_awsize; // Write Burst size
+ wire [1:0] w_o_axi_awburst; // Write Burst type
+ wire [0:0] w_o_axi_awlock; // Write lock type
+ wire [3:0] w_o_axi_awcache; // Write Cache type
+ wire [2:0] w_o_axi_awprot; // Write Protection type
+ wire [3:0] w_o_axi_awqos; // Write Quality of Svc
+// AXI write data channel signals
+ wire w_o_axi_wvalid; // Write valid
+ wire w_i_axi_wready; // Write data ready
+ wire [31:0] w_o_axi_wdata; // Write data
+ wire [3:0] w_o_axi_wstrb; // Write strobes
+ wire w_o_axi_wlast; // Last write transaction
+// AXI write response channel signals
+ wire w_i_axi_bvalid; // Write reponse valid
+ wire w_o_axi_bready; // Response ready
+ wire w_i_axi_bid; // Response ID
+ wire [1:0] w_i_axi_bresp; // Write response
+// AXI read address channel signals
+ wire w_o_axi_arvalid; // Read address valid
+ wire w_i_axi_arready; // Read address ready
+ wire [0:0] w_o_axi_arid; // Read ID
+ wire [33:0] w_o_axi_araddr; // Read address
+ wire [7:0] w_o_axi_arlen; // Read Burst Length
+ wire [2:0] w_o_axi_arsize; // Read Burst size
+ wire [1:0] w_o_axi_arburst; // Read Burst type
+ wire [0:0] w_o_axi_arlock; // Read lock type
+ wire [3:0] w_o_axi_arcache; // Read Cache type
+ wire [2:0] w_o_axi_arprot; // Read Protection type
+ wire [3:0] w_o_axi_arqos; // Read Protection type
+// AXI read data channel signals
+ wire w_i_axi_rvalid; // Read reponse valid
+ wire w_o_axi_rready; // Read Response ready
+ wire [0:0] w_i_axi_rid; // Response ID
+ wire [31:0] w_i_axi_rdata; // Read data
+ wire [1:0] w_i_axi_rresp; // Read response
+ wire w_i_axi_rlast; // Read last
+
+// Wires for inStream and outStream
+ wire w_inStream_ready;
+ wire w_inStream_valid;
+ wire [7:0] w_inStream_data;
+ wire w_inStream_last;
+
+ wire w_outStream_ready;
+ wire w_outStream_valid;
+ wire [7:0] w_outStream_data;
+ wire w_outStream_last;
+
+// Wires for uart
+ wire w_uart_int;
+ wire w_uart_tx;
+ wire w_uart_rx;
+
+// Assign inStream signals
+ genvar i;
+
+ assign io_oeb[0] = 1'b0; //fix pin to output
+ assign io_oeb[10:1] = 10'h3ff; //fix pins to inputs
+
+ assign io_out[10:1] = 10'h333; // drive unused outputs
+
+ assign io_out[0] = w_inStream_ready;
+ assign w_inStream_valid = io_in[1];
+ assign w_inStream_data[7:0] = io_in[9:2];
+ assign w_inStream_last = io_in[10];
+
+// Assign outStream signals
+ assign io_oeb[11] = 1'b1; // fix pin to input
+ assign io_oeb[21:12] = 10'h000; // fix pins to outputs
+
+ assign io_out[11] = 1'b1; // drive unused outputs
+
+ assign w_outStream_ready = io_in[11];
+ assign io_out[12] = w_outStream_valid;
+ assign io_out[20:13] = w_outStream_data[7:0];
+ assign io_out[21] = w_outStream_last;
+
+// set uart pins
+ assign io_oeb[22] = 1'b0; // uart_int is output
+ assign io_out[22] = w_uart_int;
+ assign io_oeb[23] = 1'b0; // uart_tx is output
+ assign io_out[23] = w_uart_tx;
+ assign io_out[24] = 1'b0;
+ assign io_oeb[24] = 1'b1; // uart_rx is input
+ assign w_uart_rx = io_in[24];
+
+// Drive remaining io pins
+ assign io_out[`MPRJ_IO_PADS-1:25] = 13'h1666;
+ assign io_oeb[`MPRJ_IO_PADS-1:25] = 13'h0000;
+
+// Drive LA with zeroes
+ assign la_data_out = {128{1'b0}};
+
+// Wishbone to AXI4
+ wbm2axisp #(
+ .C_AXI_DATA_WIDTH(32), // Width of the AXI R&W data
+ .C_AXI_ADDR_WIDTH(34), // AXI Address width (log wordsize)
+ .C_AXI_ID_WIDTH(1),
+ .DW(32), // Wishbone data width
+ .AW(32), // Wishbone address width (log wordsize)
+ .AXI_WRITE_ID(1'b0),
+ .AXI_READ_ID(1'b0)
+ ) wb2axi (
+ .i_clk(wb_clk_i), // System clock
+ .i_reset(wb_rst_i), // Reset signal,drives AXI rst
+ // AXI write address channel signals
+ .o_axi_awvalid(w_o_axi_awvalid), // Write address valid
+ .i_axi_awready(w_i_axi_awready), // Slave is ready to accept
+ .o_axi_awid(w_o_axi_awid), // Write ID [C_AXI_ID_WIDTH-1:0]
+ .o_axi_awaddr(w_o_axi_awaddr), // Write address [C_AXI_ADDR_WIDTH-1:0]
+ .o_axi_awlen(w_o_axi_awlen), // Write Burst Length [7:0]
+ .o_axi_awsize(w_o_axi_awsize), // Write Burst size [2:0]
+ .o_axi_awburst(w_o_axi_awburst), // Write Burst type [1:0]
+ .o_axi_awlock(w_o_axi_awlock), // Write lock type [0:0]
+ .o_axi_awcache(w_o_axi_awcache), // Write Cache type [3:0]
+ .o_axi_awprot(w_o_axi_awprot), // Write Protection type [2:0]
+ .o_axi_awqos(w_o_axi_awqos), // Write Quality of Svc [3:0]
+ // AXI write data channel signals
+ .o_axi_wvalid(w_o_axi_wvalid), // Write valid
+ .i_axi_wready(w_i_axi_wready), // Write data ready
+ .o_axi_wdata(w_o_axi_wdata), // Write data [C_AXI_DATA_WIDTH-1:0]
+ .o_axi_wstrb(w_o_axi_wstrb), // Write strobes [C_AXI_DATA_WIDTH/8-1:0]
+ .o_axi_wlast(w_o_axi_wlast), // Last write transaction
+ // AXI write response channel signals
+ .i_axi_bvalid(w_i_axi_bvalid), // Write reponse valid
+ .o_axi_bready(w_o_axi_bready), // Response ready
+ .i_axi_bid(w_i_axi_bid), // Response ID [C_AXI_ID_WIDTH-1:0]
+ .i_axi_bresp(w_i_axi_bresp), // Write response [1:0]
+ // AXI read address channel signals
+ .o_axi_arvalid(w_o_axi_arvalid), // Read address valid
+ .i_axi_arready(w_i_axi_arready), // Read address ready
+ .o_axi_arid(w_o_axi_arid), // Read ID [C_AXI_ID_WIDTH-1:0]
+ .o_axi_araddr(w_o_axi_araddr), // Read address [C_AXI_ADDR_WIDTH-1:0]
+ .o_axi_arlen(w_o_axi_arlen), // Read Burst Length [7:0]
+ .o_axi_arsize(w_o_axi_arsize), // Read Burst size [2:0]
+ .o_axi_arburst(w_o_axi_arburst), // Read Burst type [1:0]
+ .o_axi_arlock(w_o_axi_arlock), // Read lock type [0:0]
+ .o_axi_arcache(w_o_axi_arcache), // Read Cache type [3:0]
+ .o_axi_arprot(w_o_axi_arprot), // Read Protection type [2:0]
+ .o_axi_arqos(w_o_axi_arqos), // Read Protection type [3:0]
+ // AXI read data channel signals
+ .i_axi_rvalid(w_i_axi_rvalid), // Read reponse valid
+ .o_axi_rready(w_o_axi_rready), // Read Response ready
+ .i_axi_rid(w_i_axi_rid), // Response ID [C_AXI_ID_WIDTH-1:0]
+ .i_axi_rdata(w_i_axi_rdata), // Read data [C_AXI_DATA_WIDTH-1:0]
+ .i_axi_rresp(w_i_axi_rresp), // Read response [1:0]
+ .i_axi_rlast(w_i_axi_rlast), // Read last
+ // We'll share the clock and the reset
+ .i_wb_cyc(wbs_cyc_i),
+ .i_wb_stb(wbs_stb_i),
+ .i_wb_we(wbs_we_i),
+ .i_wb_addr(wbs_adr_i), // [(AW-1):0]
+ .i_wb_data(wbs_dat_i), // [(DW-1):0]
+ .i_wb_sel(wbs_sel_i), // [(DW/8-1):0]
+ .o_wb_stall(),
+ .o_wb_ack(wbs_ack_o),
+ .o_wb_data(wbs_dat_o), // [(DW-1):0]
+ .o_wb_err()
+ );
+
+// Spectrometer
+ SpectrometerTest spectrometer (
+ .clock(wb_clk_i),
+ .reset(wb_rst_i),
+ // AXI write address channel signals
+ .ioMem_0_aw_ready(w_i_axi_awready),
+ .ioMem_0_aw_valid(w_o_axi_awvalid),
+ .ioMem_0_aw_bits_id(w_o_axi_awid),
+ .ioMem_0_aw_bits_addr(w_o_axi_awaddr[33:2]),//[31:0]
+ .ioMem_0_aw_bits_len(w_o_axi_awlen), // [7:0]
+ .ioMem_0_aw_bits_size(w_o_axi_awsize), // [2:0]
+ .ioMem_0_aw_bits_burst(w_o_axi_awburst), // [1:0]
+ .ioMem_0_aw_bits_lock(w_o_axi_awlock),
+ .ioMem_0_aw_bits_cache(w_o_axi_awcache), // [3:0]
+ .ioMem_0_aw_bits_prot(w_o_axi_awprot), // [2:0]
+ .ioMem_0_aw_bits_qos(w_o_axi_awqos), // [3:0]
+ // AXI write data channel signals
+ .ioMem_0_w_ready(w_i_axi_wready),
+ .ioMem_0_w_valid(w_o_axi_wvalid),
+ .ioMem_0_w_bits_data(w_o_axi_wdata), // [31:0]
+ .ioMem_0_w_bits_strb(w_o_axi_wstrb), // [3:0]
+ .ioMem_0_w_bits_last(w_o_axi_wlast),
+ // AXI write response channel signals
+ .ioMem_0_b_ready(w_o_axi_bready),
+ .ioMem_0_b_valid(w_i_axi_bvalid),
+ .ioMem_0_b_bits_id(w_i_axi_bid),
+ .ioMem_0_b_bits_resp(w_i_axi_bresp), // [1:0]
+ // AXI read address channel signals
+ .ioMem_0_ar_ready(w_i_axi_arready),
+ .ioMem_0_ar_valid(w_o_axi_arvalid),
+ .ioMem_0_ar_bits_id(w_o_axi_arid),
+ .ioMem_0_ar_bits_addr(w_o_axi_araddr[33:2]),// [31:0]
+ .ioMem_0_ar_bits_len(w_o_axi_arlen), // [7:0]
+ .ioMem_0_ar_bits_size(w_o_axi_arsize), // [2:0]
+ .ioMem_0_ar_bits_burst(w_o_axi_arburst), // [1:0]
+ .ioMem_0_ar_bits_lock(w_o_axi_arlock),
+ .ioMem_0_ar_bits_cache(w_o_axi_arcache), // [3:0]
+ .ioMem_0_ar_bits_prot(w_o_axi_arprot), // [2:0]
+ .ioMem_0_ar_bits_qos(w_o_axi_arqos), // [3:0]
+ // AXI read data channel signals
+ .ioMem_0_r_ready(w_o_axi_rready),
+ .ioMem_0_r_valid(w_i_axi_rvalid),
+ .ioMem_0_r_bits_id(w_i_axi_rid),
+ .ioMem_0_r_bits_data(w_i_axi_rdata), // [31:0]
+ .ioMem_0_r_bits_resp(w_i_axi_rresp), // [1:0]
+ .ioMem_0_r_bits_last(w_i_axi_rlast),
+ // AXI-stream
+ .inStream_0_ready(w_inStream_ready),
+ .inStream_0_valid(w_inStream_valid),
+ .inStream_0_bits_data(w_inStream_data),
+ .inStream_0_bits_last(w_inStream_last),
+ .outStream_0_ready(w_outStream_ready),
+ .outStream_0_valid(w_outStream_valid),
+ .outStream_0_bits_data(w_outStream_data),
+ .outStream_0_bits_last(w_outStream_last),
+ .int_0(w_uart_int),
+ .uTx(w_uart_tx),
+ .uRx(w_uart_rx)
+ );
+endmodule
+`default_nettype wire
\ No newline at end of file
diff --git a/cargo/wb2axip b/cargo/wb2axip
new file mode 160000
index 0000000..e80d7a6
--- /dev/null
+++ b/cargo/wb2axip
@@ -0,0 +1 @@
+Subproject commit e80d7a6b5cab0a4073fd8c9037737231748bdaee