sifive-blocks.git
7 years agoi2c, uart: Use Synchronizer primitives for the inputs
Megan Wachs [Wed, 6 Sep 2017 01:32:37 +0000 (18:32 -0700)]
i2c, uart: Use Synchronizer primitives for the inputs

7 years agoShiftRegInit: use the rocket-chip version since it is there now
Megan Wachs [Wed, 6 Sep 2017 00:51:40 +0000 (17:51 -0700)]
ShiftRegInit: use the rocket-chip version since it is there now

7 years agoregs: remove duplicate ShiftReg file which is now in rocket-chip
Megan Wachs [Wed, 6 Sep 2017 00:33:32 +0000 (17:33 -0700)]
regs: remove duplicate ShiftReg file which is now in rocket-chip

7 years agoremove duplicate ResetCatchAndSync definition
Megan Wachs [Fri, 25 Aug 2017 01:12:36 +0000 (18:12 -0700)]
remove duplicate ResetCatchAndSync definition

7 years agoMerge pull request #35 from sifive/spi-buffers
Megan Wachs [Sun, 20 Aug 2017 23:47:01 +0000 (16:47 -0700)]
Merge pull request #35 from sifive/spi-buffers

spi: put a request buffer infront of SPI

7 years agospi: Make memory mapped interface depth a parameter
Megan Wachs [Sun, 20 Aug 2017 19:39:38 +0000 (12:39 -0700)]
spi: Make memory mapped interface depth a parameter

7 years agospi: put a request buffer infront of SPI
Wesley W. Terpstra [Sat, 19 Aug 2017 19:36:28 +0000 (12:36 -0700)]
spi: put a request buffer infront of SPI

This will prevent SPI from blocking other pbus requests.

7 years agoMerge pull request #34 from ss2783/master
Shreesha Srinath [Fri, 18 Aug 2017 21:27:57 +0000 (14:27 -0700)]
Merge pull request #34 from ss2783/master

Updates to go with the fpga-shells directory

7 years agoRenamed ShiftReg to ShiftRegister
Shreesha Srinath [Fri, 18 Aug 2017 01:22:51 +0000 (18:22 -0700)]
Renamed ShiftReg to ShiftRegister

7 years agoUpdates to go with the fpga-shells directory
Shreesha Srinath [Fri, 18 Aug 2017 01:11:07 +0000 (18:11 -0700)]
Updates to go with the fpga-shells directory

7 years agouart: make it easy to simulate large text printouts (#33)
Wesley W. Terpstra [Thu, 10 Aug 2017 23:32:48 +0000 (16:32 -0700)]
uart: make it easy to simulate large text printouts (#33)

7 years agoMerge pull request #31 from ss2783/fix-mockaon
Shreesha Srinath [Fri, 4 Aug 2017 18:46:06 +0000 (11:46 -0700)]
Merge pull request #31 from ss2783/fix-mockaon

mockaon: Adds logic to detect external rtc toggles

7 years agomockaon: Adds logic to detect external rtc toggles
Shreesha Srinath [Thu, 3 Aug 2017 01:11:05 +0000 (18:11 -0700)]
mockaon: Adds logic to detect external rtc toggles

7 years agoMerge pull request #30 from sifive/spi
Albert Ou [Wed, 2 Aug 2017 22:33:11 +0000 (13:33 -0900)]
Merge pull request #30 from sifive/spi

spi: Fix invalid D channel response when flash interface is disabled

7 years agospi: Fix invalid D channel response when flash interface is disabled
Albert Ou [Wed, 2 Aug 2017 20:50:00 +0000 (13:50 -0700)]
spi: Fix invalid D channel response when flash interface is disabled

Issue: When the memory-mapped flash region is accessed while the flash
read mode is disabled (fctrl.en flag is clear), the SPI flash controller
generates an invalid response on the D channel.
This may cause the TileLink bus to deadlock.

Workaround: Software should avoid accessing the memory-mapped flash
region when the SPI controller is not in the flash read mode.

7 years agoallow bundle content params to be specified via a def (#29)
Henry Cook [Wed, 2 Aug 2017 18:46:27 +0000 (11:46 -0700)]
allow bundle content params to be specified via a def (#29)

7 years agospi: remove removed sink arg
Wesley W. Terpstra [Wed, 26 Jul 2017 23:02:44 +0000 (16:02 -0700)]
spi: remove removed sink arg

7 years agoMerge pull request #27 from sifive/typed_pad_ctrl
Yunsup Lee [Tue, 25 Jul 2017 23:37:46 +0000 (16:37 -0700)]
Merge pull request #27 from sifive/typed_pad_ctrl

Seperate GPIO Peripheral Functionality

7 years agomockaon: rename pads to pins
Yunsup Lee [Tue, 25 Jul 2017 22:02:22 +0000 (15:02 -0700)]
mockaon: rename pads to pins

7 years agoPorts: Rename the 'fromXYZPort' to 'fromPort' since it's redundant
Megan Wachs [Tue, 25 Jul 2017 15:36:28 +0000 (08:36 -0700)]
Ports: Rename the 'fromXYZPort' to 'fromPort' since it's redundant

7 years agoMerge remote-tracking branch 'origin/master' into typed_pad_ctrl
Megan Wachs [Tue, 25 Jul 2017 14:05:22 +0000 (07:05 -0700)]
Merge remote-tracking branch 'origin/master' into typed_pad_ctrl

7 years agouart: use PeripheryBusParams.frequency to calculate default divisor (#28)
Yunsup Lee [Tue, 25 Jul 2017 07:56:22 +0000 (00:56 -0700)]
uart: use PeripheryBusParams.frequency to calculate default divisor (#28)

7 years agoMerge remote-tracking branch 'origin/master' into typed_pad_ctrl
Megan Wachs [Mon, 24 Jul 2017 16:17:53 +0000 (09:17 -0700)]
Merge remote-tracking branch 'origin/master' into typed_pad_ctrl

7 years agoperiphery: peripherals now in coreplex (#26)
Henry Cook [Sun, 23 Jul 2017 15:31:44 +0000 (08:31 -0700)]
periphery: peripherals now in coreplex (#26)

* periphery: peripherals now in coreplex

* use fromAsyncFIFOMaster

7 years agogpio: Add missing file
Megan Wachs [Thu, 20 Jul 2017 21:53:34 +0000 (14:53 -0700)]
gpio: Add missing file

7 years agoAdd missing cloneType methods to pin bundles
Megan Wachs [Thu, 20 Jul 2017 18:36:31 +0000 (11:36 -0700)]
Add missing cloneType methods to pin bundles

7 years agoi2c: Remove pluralization on the bundle name, i2c not i2cs
Megan Wachs [Thu, 20 Jul 2017 17:53:44 +0000 (10:53 -0700)]
i2c: Remove pluralization on the bundle name, i2c not i2cs

7 years agoRemove pluralization on interface names. Require clocks and resets explicitly when...
Megan Wachs [Wed, 19 Jul 2017 21:51:50 +0000 (14:51 -0700)]
Remove pluralization on interface names. Require clocks and resets explicitly when necessary

7 years agoMake it possible to adjust the type of pad controls used,
Megan Wachs [Tue, 18 Jul 2017 17:58:04 +0000 (10:58 -0700)]
Make it possible to adjust the type of pad controls used,
and seperate out some of the "GPIO Peripheral" from "Pin Control"

7 years agoRefactor package hierarchy. (#25)
Henry Cook [Fri, 7 Jul 2017 17:48:57 +0000 (10:48 -0700)]
Refactor package hierarchy. (#25)

7 years agovc707 axi enhancements (#24)
Wesley W. Terpstra [Fri, 30 Jun 2017 19:36:33 +0000 (12:36 -0700)]
vc707 axi enhancements (#24)

1 - Print AXI-ID mappings
2 - Use half as many Deinterleaver buffers for the L2 backside
3 - Limit the Q depth on the PCIe control port to 2 (was 1584!)

7 years agomig: fix MemoryDevice to use 'reg' properly
Wesley W. Terpstra [Thu, 29 Jun 2017 20:41:30 +0000 (13:41 -0700)]
mig: fix MemoryDevice to use 'reg' properly

7 years agospi: include mem region (#23)
Wesley W. Terpstra [Thu, 29 Jun 2017 00:46:45 +0000 (17:46 -0700)]
spi: include mem region (#23)

7 years agodiplomacy: add reg-names to devices (#22)
Wesley W. Terpstra [Thu, 29 Jun 2017 00:45:18 +0000 (17:45 -0700)]
diplomacy: add reg-names to devices (#22)

7 years agogpio: Make IOF optional (#21)
Megan Wachs [Mon, 19 Jun 2017 19:41:38 +0000 (12:41 -0700)]
gpio: Make IOF optional (#21)

* gpio: Make IOF optional

* IOF: Make the default false

7 years agomake some base bundle classes easier to clone (#20)
Henry Cook [Thu, 15 Jun 2017 02:47:56 +0000 (19:47 -0700)]
make some base bundle classes easier to clone (#20)

7 years agospi: add dts ranges field for memory mapped spi (#19)
Wesley W. Terpstra [Thu, 15 Jun 2017 00:06:55 +0000 (17:06 -0700)]
spi: add dts ranges field for memory mapped spi (#19)

7 years agoMerge pull request #18 from sifive/lazy-raw-module-imp
Henry Cook [Tue, 13 Jun 2017 22:52:11 +0000 (15:52 -0700)]
Merge pull request #18 from sifive/lazy-raw-module-imp

periphery: convert bundle traits

7 years agoMore Peripheral-to-pins cleanups
Megan Wachs [Tue, 13 Jun 2017 18:00:29 +0000 (11:00 -0700)]
More Peripheral-to-pins cleanups

7 years agoUART: actually return the pins, not just the module. We should do this for the other...
Megan Wachs [Tue, 13 Jun 2017 01:08:35 +0000 (18:08 -0700)]
UART: actually return the pins, not just the module. We should do this for the other peripherals as well

7 years agoGPIO/SPI/I2C: Add sync stages in place of dummy variable since we need them and they...
Megan Wachs [Tue, 13 Jun 2017 00:53:51 +0000 (17:53 -0700)]
GPIO/SPI/I2C: Add sync stages in place of dummy variable since we need them and they are more useful.

7 years agoGPIO/SPI/I2C: Add sync stages in place of dummy variable since we need them and they...
Megan Wachs [Tue, 13 Jun 2017 00:53:08 +0000 (17:53 -0700)]
GPIO/SPI/I2C: Add sync stages in place of dummy variable since we need them and they are more useful.

7 years agoperiphery: convert periphery bundle traits to work with system-level multi-io module
Henry Cook [Mon, 5 Jun 2017 21:33:53 +0000 (14:33 -0700)]
periphery: convert periphery bundle traits to work with system-level multi-io module

7 years agoMerge pull request #17 from sifive/peripheral_options
Megan Wachs [Sat, 10 Jun 2017 05:07:43 +0000 (22:07 -0700)]
Merge pull request #17 from sifive/peripheral_options

Make more peripherals "listable" to allow for 0 or more

7 years agoperipheral_options: Actually compiles
Megan Wachs [Fri, 9 Jun 2017 20:53:22 +0000 (13:53 -0700)]
peripheral_options: Actually compiles

7 years agoSPIFlash: make it listable
Megan Wachs [Thu, 8 Jun 2017 23:29:01 +0000 (16:29 -0700)]
SPIFlash: make it listable

7 years agoGPIO: Make GPIO peripheral another listable one
Megan Wachs [Thu, 8 Jun 2017 23:25:20 +0000 (16:25 -0700)]
GPIO: Make GPIO peripheral another listable one

7 years agovc707axi: track rocketchip API changes (#16)
Wesley W. Terpstra [Fri, 2 Jun 2017 22:56:18 +0000 (15:56 -0700)]
vc707axi: track rocketchip API changes (#16)

7 years agouart: power-on with the right divider for the design (#15)
Wesley W. Terpstra [Sun, 14 May 2017 06:38:20 +0000 (23:38 -0700)]
uart: power-on with the right divider for the design (#15)

7 years agoMerge pull request #14 from sifive/async-pcie
Wesley W. Terpstra [Sat, 13 May 2017 06:15:14 +0000 (23:15 -0700)]
Merge pull request #14 from sifive/async-pcie

Async PCIe

7 years agovc707mig: use an external ibuf
Wesley W. Terpstra [Sat, 13 May 2017 06:07:10 +0000 (23:07 -0700)]
vc707mig: use an external ibuf

This makes it possible to also drive a PLL of our own from the crystal.

7 years agoxilinxvc707pciex1: push to a dedicated clock domain
Wesley W. Terpstra [Sat, 13 May 2017 05:59:48 +0000 (22:59 -0700)]
xilinxvc707pciex1: push to a dedicated clock domain

7 years agoxilinx mig: put a buffer infront of the controller (#13)
Wesley W. Terpstra [Thu, 11 May 2017 18:50:07 +0000 (11:50 -0700)]
xilinx mig: put a buffer infront of the controller (#13)

This makes placement of the L2 and DDR controller easier.

7 years agoxilinxvc707pciex1: better wrapper for AXI4-Lite control node (#12)
Wesley W. Terpstra [Mon, 8 May 2017 08:08:37 +0000 (01:08 -0700)]
xilinxvc707pciex1: better wrapper for AXI4-Lite control node (#12)

7 years agoMerge pull request #10 from sifive/axi-mmio
Henry Cook [Wed, 3 May 2017 18:46:30 +0000 (11:46 -0700)]
Merge pull request #10 from sifive/axi-mmio

axi4: switch to new pipelined converters

7 years agoMerge pull request #11 from sifive/spi
Yunsup Lee [Tue, 2 May 2017 21:36:39 +0000 (14:36 -0700)]
Merge pull request #11 from sifive/spi

SPI errata fixes

7 years agospi: Fix off-by-one error in calculating cycles per data frame
Albert Ou [Tue, 2 May 2017 19:35:34 +0000 (12:35 -0700)]
spi: Fix off-by-one error in calculating cycles per data frame

Issue: Configuring the frame length to certain values causes incorrect
operation.

Symptoms: Certain frame lengths result in the master sending one extra
clock pulse.  The slave device may then become desynchronized.

Workaround: The following frame lengths are supported and can be used.
Do not use other frame lengths.
* Serial mode: 0, 2, 4, 6, 8
* Dual mode:   0, 1, 3, 5, 7, 8
* Quad mode:   0, 1, 2, 3, 5, 6, 7, 8

7 years agospi: Fix io.port.dq(3) output enable
Albert Ou [Tue, 2 May 2017 19:07:37 +0000 (12:07 -0700)]
spi: Fix io.port.dq(3) output enable

Issue: The output enable signal for DQ[3] is not driven properly.

Symptoms: Output data from master to slave is not properly transmitted
in quad mode.  Data received from the slave is unaffected.

Workaround: When interfacing with SPI flash devices, do not use the
"Quad Input/Output Fast Read" command (opcode 0xEB) while in the
Extended SPI protocol.  Do not use the Native Quad SPI protocol.

7 years agoaxi4: switch to new pipelined converters axi-mmio
Wesley W. Terpstra [Wed, 26 Apr 2017 20:10:50 +0000 (13:10 -0700)]
axi4: switch to new pipelined converters

7 years agoMerge pull request #9 from sifive/vc707_mig_analog_inout
Henry Styles [Tue, 25 Apr 2017 17:18:46 +0000 (10:18 -0700)]
Merge pull request #9 from sifive/vc707_mig_analog_inout

Use _chisel3 analog for MIG inout

7 years agoUse _chisel3 analog for MIG inout vc707_mig_analog_inout
Henry Styles [Tue, 25 Apr 2017 17:15:00 +0000 (10:15 -0700)]
Use _chisel3 analog for MIG inout

7 years agoAdded stall for read after write (#8)
solomatnikov [Tue, 25 Apr 2017 16:14:00 +0000 (09:14 -0700)]
Added stall for read after write (#8)

7 years agoMerge pull request #7 from sifive/ndreset
Megan Wachs [Mon, 10 Apr 2017 21:25:08 +0000 (14:25 -0700)]
Merge pull request #7 from sifive/ndreset

MockAON: Accept the non-debug interrupt as an input to overall reset.

7 years agoMockAON: Accept the non-debug interrupt as an input to overall reset.
Megan Wachs [Fri, 7 Apr 2017 23:42:32 +0000 (16:42 -0700)]
MockAON: Accept the non-debug interrupt as an input to overall reset.

7 years agoMerge pull request #6 from sifive/debug_v013
Megan Wachs [Fri, 31 Mar 2017 22:14:35 +0000 (15:14 -0700)]
Merge pull request #6 from sifive/debug_v013

Debug v013

7 years agospi: correct polarity of FIRRTL combo loop detection workaround.
Megan Wachs [Fri, 31 Mar 2017 20:49:34 +0000 (13:49 -0700)]
spi: correct polarity of FIRRTL combo loop detection workaround.

7 years agoMerge remote-tracking branch 'origin/fix-false-comb-loop' into HEAD
Megan Wachs [Fri, 31 Mar 2017 03:01:30 +0000 (20:01 -0700)]
Merge remote-tracking branch 'origin/fix-false-comb-loop' into HEAD

7 years ago"Fix" false combinational loop through SPIArbiter fix-false-comb-loop
Jack Koenig [Fri, 31 Mar 2017 02:12:15 +0000 (19:12 -0700)]
"Fix" false combinational loop through SPIArbiter

Mux1H converts aggregates to UInt, muxes, then converts back which can
look like a cominational loop.

7 years agoMerge remote-tracking branch 'origin/master' into debug-0.13
Megan Wachs [Tue, 28 Mar 2017 01:48:24 +0000 (18:48 -0700)]
Merge remote-tracking branch 'origin/master' into debug-0.13

7 years agorename l2FrontendBus as fsb
Yunsup Lee [Sat, 25 Mar 2017 04:38:31 +0000 (21:38 -0700)]
rename l2FrontendBus as fsb

7 years agorename l2FrontendBus as fsb
Yunsup Lee [Sat, 25 Mar 2017 04:38:31 +0000 (21:38 -0700)]
rename l2FrontendBus as fsb

7 years agoJTAG: make TRSTn optional for all helpers as well to match the IO.
Megan Wachs [Sat, 25 Mar 2017 00:27:55 +0000 (17:27 -0700)]
JTAG: make TRSTn optional for all helpers as well to match the IO.

7 years agoMerge remote-tracking branch 'origin/master' into debug-0.13
Megan Wachs [Thu, 23 Mar 2017 02:16:20 +0000 (19:16 -0700)]
Merge remote-tracking branch 'origin/master' into debug-0.13

7 years agoupdate TLRegisterNode to take Seq of AddressSet
Yunsup Lee [Wed, 22 Mar 2017 05:12:37 +0000 (22:12 -0700)]
update TLRegisterNode to take Seq of AddressSet

7 years agoTLSPI: address parameter must now be a sequence.
Megan Wachs [Wed, 22 Mar 2017 00:51:28 +0000 (17:51 -0700)]
TLSPI: address parameter must now be a sequence.

7 years agoAdjust JTAG for rocket-chip changes
Megan Wachs [Tue, 14 Mar 2017 21:52:39 +0000 (14:52 -0700)]
Adjust JTAG for rocket-chip changes

7 years agoMerge remote-tracking branch 'origin/master' into debug-0.13
Megan Wachs [Fri, 10 Mar 2017 22:09:24 +0000 (14:09 -0800)]
Merge remote-tracking branch 'origin/master' into debug-0.13

7 years agoxilinx pcie: add the high PCIe address bits (physical path)
Wesley W. Terpstra [Fri, 3 Mar 2017 05:22:41 +0000 (21:22 -0800)]
xilinx pcie: add the high PCIe address bits (physical path)

The format is taken from here:
http://lxr.free-electrons.com/source/Documentation/devicetree/bindings/pci/xilinx-pcie.txt

7 years agoMerge pull request #4 from sifive/periphery-keys
Wesley W. Terpstra [Fri, 3 Mar 2017 05:00:44 +0000 (21:00 -0800)]
Merge pull request #4 from sifive/periphery-keys

DTS

7 years agodevices: include DTS meta-data
Wesley W. Terpstra [Fri, 3 Mar 2017 04:28:38 +0000 (20:28 -0800)]
devices: include DTS meta-data

7 years agodevices: create periphery keys for all devices
Wesley W. Terpstra [Thu, 23 Feb 2017 02:42:47 +0000 (18:42 -0800)]
devices: create periphery keys for all devices

Standardize how they are connected to the periphery bus

7 years agojtag: The jtag interfaces have moved to a different package.
Megan Wachs [Thu, 2 Mar 2017 22:46:34 +0000 (14:46 -0800)]
jtag: The jtag interfaces have moved to a different package.

7 years agoMerge pull request #2 from sifive/homogenous_bag_peripherals
Megan Wachs [Fri, 17 Feb 2017 02:45:48 +0000 (18:45 -0800)]
Merge pull request #2 from sifive/homogenous_bag_peripherals

Use HeterogenousBag to handle lists of peripherals

7 years agoUse HomogenousBag to handle lists of peripherals
Megan Wachs [Fri, 17 Feb 2017 01:52:24 +0000 (17:52 -0800)]
Use HomogenousBag to handle lists of peripherals

Previously we had to do weird things to make non-homogenous
lists of items (e.g. PWM Peripherals where ncmp were different from one to
the other) into a vector. But now Chisel supports a Record type,
and we use the HomogenousBag utility to do this more naturally.
This also deletes all the cruft which was introduced to get
around the limitation which doesn't exist anymore.

7 years agoMerge pull request #1 from sifive/i2c
solomatnikov [Fri, 10 Feb 2017 22:30:01 +0000 (14:30 -0800)]
Merge pull request #1 from sifive/i2c

I2c implementation

7 years agoMerge remote-tracking branch 'origin/master' into i2c i2c
Alex Solomatnikov [Fri, 10 Feb 2017 02:45:35 +0000 (18:45 -0800)]
Merge remote-tracking branch 'origin/master' into i2c

7 years agoFlipped polarity of output enables to match Guava pins logic
Alex Solomatnikov [Thu, 9 Feb 2017 19:37:40 +0000 (11:37 -0800)]
Flipped polarity of output enables to match Guava pins logic

7 years agoMade regs 32-bit word aligned to match the rest of the system
Alex Solomatnikov [Thu, 9 Feb 2017 19:36:19 +0000 (11:36 -0800)]
Made regs 32-bit word aligned to match the rest of the system

7 years agoAdded note: WISHBONE interface replaced by Tilelink2
Alex Solomatnikov [Wed, 8 Feb 2017 00:14:28 +0000 (16:14 -0800)]
Added note: WISHBONE interface replaced by Tilelink2

7 years agoAdded license
Alex Solomatnikov [Tue, 7 Feb 2017 23:58:04 +0000 (15:58 -0800)]
Added license

7 years agoRenamed i2cDevices to i2c
Alex Solomatnikov [Mon, 6 Feb 2017 18:39:47 +0000 (10:39 -0800)]
Renamed i2cDevices to i2c

7 years agoxilinx mig: track changes in rocket-chip
Wesley W. Terpstra [Sat, 4 Feb 2017 02:17:58 +0000 (18:17 -0800)]
xilinx mig: track changes in rocket-chip

7 years agoAddressing comments: bool style, comments, removed suggestName
Alex Solomatnikov [Sat, 4 Feb 2017 02:10:03 +0000 (18:10 -0800)]
Addressing comments: bool style, comments, removed suggestName

7 years agoBug fixes: passing OC WB test
Alex Solomatnikov [Sat, 4 Feb 2017 00:41:59 +0000 (16:41 -0800)]
Bug fixes: passing OC WB test

7 years agosifive-blocks: trust diplomacy to get names right
Wesley W. Terpstra [Wed, 1 Feb 2017 21:53:54 +0000 (13:53 -0800)]
sifive-blocks: trust diplomacy to get names right

7 years agoCompleted Chisel RTL (not tested yet)
Alex Solomatnikov [Wed, 1 Feb 2017 01:20:53 +0000 (17:20 -0800)]
Completed Chisel RTL (not tested yet)

7 years agospi: work around ucb-bar/chisel3#472
Wesley W. Terpstra [Tue, 31 Jan 2017 22:03:14 +0000 (14:03 -0800)]
spi: work around ucb-bar/chisel3#472

7 years agoxilinx ip: adjust to new diplomacy API
Wesley W. Terpstra [Mon, 30 Jan 2017 19:33:30 +0000 (11:33 -0800)]
xilinx ip: adjust to new diplomacy API

7 years agoInitial (compilable) version of I2C (no actual logic yet)
Alex Solomatnikov [Tue, 24 Jan 2017 22:58:01 +0000 (14:58 -0800)]
Initial (compilable) version of I2C (no actual logic yet)

7 years agoxilinx pcie: put buffers before the outputs to the controller
Wesley W. Terpstra [Sat, 21 Jan 2017 06:38:27 +0000 (22:38 -0800)]
xilinx pcie: put buffers before the outputs to the controller