Add clock buffer insertion pass, improve iopadmap.
authorMarcin Kościelnicki <koriakin@0x04.net>
Mon, 12 Aug 2019 15:57:43 +0000 (15:57 +0000)
committerMarcin Kościelnicki <koriakin@0x04.net>
Mon, 12 Aug 2019 22:16:38 +0000 (00:16 +0200)
commitf4c62f33ac56bc5725c44ad822e75d2387f98061
tree4a1659237670042c8709777d660b14be57cb004f
parent78b30bbb1102047585d1a2eac89b1c7f5ca7344e
Add clock buffer insertion pass, improve iopadmap.

A few new attributes are defined for use in cell libraries:

- iopad_external_pin: marks PAD cell's external-facing pin.  Pad
  insertion will be skipped for ports that are already connected
  to such a pin.
- clkbuf_sink: marks an input pin as a clock pin, requesting clock
  buffer insertion.
- clkbuf_driver: marks an output pin as a clock buffer output pin.
  Clock buffer insertion will be skipped for nets that are already
  driven by such a pin.

All three are module attributes that should be set to a comma-separeted
list of pin names.

Clock buffer insertion itself works as follows:

1. All cell ports, starting from bottom up, can be marked as clock sinks
   (requesting clock buffer insertion) or as clock buffer outputs.
2. If a wire in a given module is driven by a cell port that is a clock
   buffer output, it is in turn also considered a clock buffer output.
3. If an input port in a non-top module is connected to a clock sink in a
   contained cell, it is also in turn considered a clock sink.
4. If a wire in a module is driven by a non-clock-buffer cell, and is
   also connected to a clock sink port in a contained cell, a clock
   buffer is inserted in this module.
5. For the top module, a clock buffer is also inserted on input ports
   connected to clock sinks, optionally with a special kind of input
   PAD (such as IBUFG for Xilinx).
6. Clock buffer insertion on a given wire is skipped if the clkbuf_inhibit
   attribute is set on it.
examples/mimas2/run_yosys.ys
passes/techmap/Makefile.inc
passes/techmap/clkbufmap.cc [new file with mode: 0644]
passes/techmap/iopadmap.cc
techlibs/xilinx/cells_sim.v
techlibs/xilinx/cells_xtra.sh
techlibs/xilinx/cells_xtra.v
techlibs/xilinx/synth_xilinx.cc
techlibs/xilinx/xc6s_brams_bb.v
techlibs/xilinx/xc7_brams_bb.v