Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

doc: tristates

  • Loading branch information...
commit e82ea19cdc73de09758a7aae1c020fe99a4d9cd1 1 parent 1b18194
Sébastien Bourdeauducq authored February 19, 2013

Showing 1 changed file with 20 additions and 0 deletions. Show diff stats Hide diff stats

  1. 20  doc/fhdl.rst
20  doc/fhdl.rst
Source Rendered
@@ -180,6 +180,25 @@ Options to ``get_port`` are:
180 180
 
181 181
 Migen generates behavioural V*HDL code that should be compatible with all simulators and, if the number of ports is <= 2, most FPGA synthesizers. If a specific code is needed, the memory generator function can be overriden using the ``memory_handler`` parameter of the conversion function.
182 182
 
  183
+Tri-state I/O
  184
+=============
  185
+A triplet (O, OE, I) of one-way signals defining a tri-state I/O port is represented by the ``TSTriple`` object. Such objects are only containers for signals that are intended to be later connected to a tri-state I/O buffer, and cannot be used in fragments. Such objects, however, should be kept in the design as long as possible as they allow the individual one-way signals to be manipulated in a non-ambiguous way.
  186
+
  187
+The object that can be used in a ``Fragment`` is ``Tristate``, and it behaves exactly like an instance of a tri-state I/O buffer that would be defined as follows: ::
  188
+
  189
+  Instance("Tristate",
  190
+    Instance.Inout("target", target),
  191
+    Instance.Input("o", o),
  192
+    Instance.Input("oe", oe),
  193
+    Instance.Output("i", i)
  194
+  )
  195
+
  196
+Signals ``target``, ``o`` and ``i`` can have any width, while ``oe`` is 1-bit wide. The ``target`` signal should go to a port and not be used elsewhere in the design. Like modern FPGA architectures, Migen does not support internal tri-states.
  197
+
  198
+A ``Tristate`` object can be created from a ``TSTriple`` object by calling the ``get_tristate`` method.
  199
+
  200
+By default, Migen emits technology-independent behavioral code for a tri-state buffer. If a specific code is needed, the tristate generator function can be overriden using the ``tristate_handler`` parameter of the conversion function.
  201
+
183 202
 Fragments
184 203
 *********
185 204
 A "fragment" is a unit of logic, which is composed of:
@@ -187,6 +206,7 @@ A "fragment" is a unit of logic, which is composed of:
187 206
 * A list of combinatorial statements.
188 207
 * A list of synchronous statements, or a clock domain name -> synchronous statements dictionary.
189 208
 * A list of instances.
  209
+* A list of tri-states.
190 210
 * A list of memories.
191 211
 * A list of simulation functions (see :ref:`simulating`).
192 212
 

0 notes on commit e82ea19

Please sign in to comment.
Something went wrong with that request. Please try again.