added mpardemo
[slipway.git] / doc / atmel.txt
diff --git a/doc/atmel.txt b/doc/atmel.txt
deleted file mode 100644 (file)
index 58ca1a3..0000000
+++ /dev/null
@@ -1,304 +0,0 @@
-Summary
-
-  This document describes the correlation between publicly documented
-  logic, I/O, and routing resources within the Atmel AT40k/94k family
-  of chips and bits in the bitstreams needed to program them.
-
-  Our goal is to make this information available to the public without
-  restriction on its use, for the purpose of creating automated tools
-  which generate bitstreams.
-
-
-Statement of Public Knowledge
-
-  The Knowledge encapsulated in this document was derived by formal
-  scientific experimentation, using only information generally
-  available to the public.  Extreme care which has been taken to
-  ensure that the process did not violate any copyright, trademark,
-  trade secret, or patent statutes.  No licensing contracts or
-  non-disclosure agreements were entered into by the parties involved
-  in this endeavor, nor did they have access to any confidential
-  information.
-
-  This document is part of the Public Domain; its authors surrender
-  claim to copyright on it.
-
-
-Corrections
-
-  If you find errors in this document, please correct them and add the
-  date and a short description of the correction to the table below.
-  This will assist in merging changes made in disjoint derivitaves.
-
-    2005.08.12  [gosset]  Initial revision
-    2006.03.12  [megacz]  Swapped {L1,L0}->W, FB->{L0,L1}, {H0->L0,H1->L1}
-    2006.03.13  [megacz]  Fixed lowest bit of z=00000000; it should be "1"
-    2006.03.13  [megacz]  Corrected meaning of z-octet bits 2-4 in IOBs
-    2006.03.13  [megacz]  Added constant zeroes in IOB section
-    2006.04.15  [megacz]  un-swapped FB->{L0,L1}
-
-Background
-
-  The Atmel AT40k Datasheet describes in great detail the resources
-  available in the AT40k as well as the FPGA portion of the AT94k
-  (which is functionally identical and uses the same binary
-  configuration format).
-
-  The configuration space used to control these resources consists of
-  a collection of independent octets arranged in a sparse 24-bit
-  address space.  This document correlates those bits with the
-  resources described in the Datasheet.
-
-  The process of configuring the device consists of writing these
-  octets into the configuration memory.  Once the desired
-  configuration octets are known, the procedures for loading them into
-  configuration memory are well documented in Atmel Documents 1009 and
-  2313.
-
-  Each data octet "D" has a 24-bit address, divided into three address
-  octets "X", "Y", and "Z".  In general, the X and Y address octets
-  are related to the physical position of the resource, while the Z
-  octet is related to the type of resource being addressed.
-
-Notation
-
-  We will use the notation A->B to indicate that setting the
-  corresponding configuration bit high causes source A to drive wire
-  B, and the notation A<>B to indicate that a pass gate between A and
-  B is enabled.  The notation ~A or ~A->B indicates a configuration
-  bit controlling A or causing A to drive B is *active low*
-  (inverted).
-
-  We will use the following terms to describe routing resources.
-  They vary slightly from Atmel's documentation, but are less
-  ambiguous.
-
-   X, Y, W, Z   The cell's inputs
-   XO, YO       The X and Y outputs from the cell (to its neighbors)
-   N, S, E, W   Orthogonal lines: connections to neighboring cells
-   NE,SE,NW,SW  Diagonal lines: connections to neighboring cells
-   S0..S4       Quad lines: four-cell long routing lines
-     H0..H4       Horizontal quad lines
-     V0..V4       Vertical quad lines
-   L0..L4       Switchbox ports: the wires joining FB,H0..H4,V0..V4,X,Y,Z,W
-   G0a..G4b     Global lines: eight-cell long routing lines, in two sets (a+b)
-   FB           The cell's internal feedback line
-   R            The cell's internal register
-   C            The cell's "center" output; can drive the X or Y outputs
-   ZM           The "Z-mux"; the mux which drives the cell's register input
-   WM           The "W-mux"; the mux which drives the third input to the LUTs
-   XL, YL       The output of the X,Y-LUTs
-   IA           The "internal and" gate (W & Z)
-   
-
-Cartesian Resources
-
-  Although the exact interpretation of the X and Y octets depends on
-  the resource type (Z octet), in most cases the X and Y octets are
-  the cartesian coordinates of the logic cell nearest to the desired
-  resource (0,0 is the lower-left hand logic cell).  This section
-  describes the significance of the Z and D octets for such resources.
-
-  Notes:
-    - The most significant four bits of the Z octet are 0000 for these bits
-    - If WZ->WM and FB->WM are both low, then W->WM.
-    - If ZM->R and YL->R are both low, then the XL->R
-    - The ZM->C and ZM->FB bits are used to bypass the register (when high).
-    - ~SET bit controls the set/reset behavior of the register; 0=set, 1=reset
-
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |Z3:0|                           D  octet                                    |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0000| V4->L4 | H4->L4 | FB->L2 | FB->L3 | FB->L1 | FB->L0 | FB->L4 |   1    |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0001| ZM->R  | YL->R  | WZ->WM | FB->WM | ZM->C  | ZM->FB |  C->XO |  C->YO |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0010| L4->Z  | L4->Y  | L3->Z  | L2->Z  | L1->Z  | L0->Z  | V4->OE | H4->OE |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0011| L2->W  | L3->W  | L4->W  | L4->X  | L0->W  | L1->W  |H2a<>V2a|H3b<>V3b|
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0100|  N->Y  |  S->Y  |  W->Y  |  E->Y  | L0->Y  | L1->Y  | L2->Y  | L3->Y  |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0101| SW->X  | NE->X  | SE->X  | NW->X  | L0->X  | L1->X  | L2->X  | L3->X  |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0110|                  X-LUT truth table, inverted                          |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0111|                  Y-LUT truth table, inverted                          |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |1000| V3->L3 | H3->L3 | H2->L2 | V2->L2 | V1->L1 | H0->L0 | V0->L0 | H1->L1 |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |1001|H1a<>V1a|H0a<>V0a|H0b<>V0b|H4a<>V4a|H4b<>V4b|H1b<>V1b|H3a<>V3a|H2b<>V2b|
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  ...
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-  |0001|   1    |   1    |   1    |   1    |  ~SET  |   1    |   1    |   1    |
-  +----+--------+--------+--------+--------+--------+--------+--------+--------+
-
-
-Sector Resources
-
-  Clocking, reset, and inter-sector repeaters are resources which are
-  not specific to a particular cell.  As such, their X,Y addressing is
-  slightly different.  These resources are addressed by the cartesian
-  coordinates of the cell above or to the right of the resource, with
-  an additional twist: for resources in vertical channels, the
-  X-coordinate is shifted right by two bits (divided by four); for
-  resources in horizontal channels, the Y-coordinate is shifted right
-  by two bits (divided by four).
-
-  The most significant three bits of the Z-octet for a sector resource
-  are set to 001; the next bit (fourth most significant) is set to 0
-  for horizontal channels and 1 for vertical channels.
-
-  One sector wire and one global wire enter each side of each
-  repeater, for a total of four connections.  Each connection has an
-  associated four-bit code which indicates if that connection is
-  driven by the repeater, and if so, which connection to the repeater
-  is used to drive it:
-
-     000 - driver disabled
-     100 - source is global wire on the other side of the repeater
-     010 - source is sector wire on the other side of the repeater
-     001 - source is other connection on the same side of the repeater
-  
-  Example: a code of 001 for the left-hand side sector wire driver
-  means that the source of the driver should be the left hand side
-  global wire.  A code of 010 for the top sector wire driver means that
-  the source of the driver should be the bottom sector wire.
-
-     CC     = column clock
-     CR     = column reset
-     SC     = sector clock
-     CC+    = sector clock of the sector below this one
-     InvSC  = invert the clock source (CC or S4) before driving SC
-
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | Z octet  |                    D  octet                           |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_0000 |   1    |   0    | Left/Top      G4 | Left/Top      S4 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_0001 |   0    | S4->CR | Right/Bottom  G4 | Right/Bottom  S4 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_0010 |   1    |   0    | Left/Top      G3 | Left/Top      S3 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_0011 |   1    |   1    | Right/Bottom  G3 | Right/Bottom  S3 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_0100 |   1    |   0    | Left/Top      G2 | Left/Top      S2 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_0101 | SC->CC+| S3->SC | Right/Bottom  G2 | Right/Bottom  S2 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_0110 |   1    |   0    | Left/Top      G1 | Left/Top      S1 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_0111 |   1    |   1    | Right/Bottom  G1 | Right/Bottom  S1 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_1000 |   1    |   0    | Left/Top      G0 | Left/Top      S0 |
-  +----------+--------+--------+-----+-----+------+-----+-----+------+
-  | 001_1001 | InvSC  |~SC->CC+| Right/Bottom  G0 | Right/Bottom  S0 |
-  +----------+--------+--------+----+--------+----+-----+--------+---+
-
-
-Block Memories
-
-  Although block memories are shown in the lower right hand corner of
-  each sector in the Atmel Datasheets, they are conceptually addressed
-  by the cartesian coordinate of the cell in the lower *left* hand
-  corner of the sector.  Furthermore, both coordinates are shifted
-  right two bits (divided by four).
-
-  The significance of the "D" octet for a given block memory depends
-  on its position; if it falls in an odd sector-column (4-7, 12-15,
-  etc), use the first chart; otherwise, use the second chart.
-
-    USECLK = the memory is synchronous
-    ENABLE = the memory is enabled
-      DUAL = enable both ports on a dual-ported memory
-
-  Odd Sector-Columns
-
-  +--------+------+------+------+------+--------+--------+--------+---------+
-  |Z octet |                       D octet                                  |
-  +--------+------+------+------+------+--------+---------+--------+--------+
-  |01000000|  1   |  1   |  1   |  1   |   1    |    1    |   1    |   1    |
-  +--------+------+------+------+------+--------+---------+--------+--------+
-  |01000001|  1   |  1   |  1   |  1   | USECLK | ~ENABLE | ENABLE | ENABLE |
-  +--------+------+------+------+------+--------+---------+--------+--------+
-
-  Even Sector-Columns
-
-  +--------+------+------+------+------+--------+--------+--------+--------+
-  |Z octet |                       D octet                                 |
-  +--------+------+------+------+------+--------+--------+--------+--------+
-  |01000000|  1   |  1   |  1   |  1   | USECLK |  DUAL  | ~DUAL  | ENABLE |
-  +--------+------+------+------+------+--------+--------+--------+--------+
-  |01000001|  1   |  1   |  1   |  1   |   1    |   1    |   1    |   1    |
-  +--------+------+------+------+------+--------+--------+--------+--------+
-
-
-I/O Blocks
-
-  The Z octet for I/O resources always its most significant three bits
-  set to 011.  The next bit is 1 for North/South IO Blocks and 0 for
-  East/West IO Blocks.  The next bit is always 0, and the bit
-  following that is set to 0 for primary (orthogonally connected)
-  IOBs, 1 for secondary (diagonally connected) IOBs.
-
-      S  = Sector wires of this cell
-      S+ = Sector wires of next cell
-      S- = Sector wires of previous cell
-      G  = Global wires of this cell
-      G+ = Global wires of next cell
-  Output = Allow output from this IOB
-      OE = when low, output is always enabled
-     OEM = 7 bits, one-hot encoded, chooses input to output-enable mux
-  USEOEM = when low, ignore the output enable mux
-   Delay = amount of delay to add; can be 0, 1, 3, or 5
-    Slew = slew time: 11=fast, 10=med, 01=slow
-    Pull = 00=pullup, 11=pulldown, 01=none
-
-  +--------+--------+--------+------+-------+-------+--------+--------+--------+
-  |Z octet |                         D  octet                                  |
-  +--------+--------+--------+------+-------+-------+--------+--------+--------+
-  |011_0_00| Schmit |      Slew     |~G2->CR|   0   |       Pull      |    0   |
-  +--------+--------+--------+------+-------+-------+--------+--------+--------+
-  |011_0_01|REG->OUT|    0   |  OE  |              Output Mux                  |
-  +--------+--------+--------+------+-------+-------+--------+--------+--------+
-  |011_0010|      Added Delay (primary)     |PRI->S-| PRI->G+| PRI->G | PRI->S |
-  +--------+--------+--------+------+-------+-------+--------+--------+--------+
-  |011_0110|      Added Delay (secondary)   |SND->S | SND->S+|PRI->REG|SND->REG|
-  +--------+--------+--------+------+-------+-------+--------+--------+--------+
-  |011_0_11|  OEM   | USEOEM |                   OEM                           |
-  +--------+--------+--------+------+-------+-------+--------+--------+--------+
-
-
-Global Clock/Reset Networks
-
-  To drive a column clock from one of the eight global clock/reset
-  networks, set the corresponding bit in the desired column:
-
-  +--------+--------+--------+
-  |Z octet |X octet |Y octet |
-  +--------+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+
-  |10100000| column |00000000| CK1 | CK2 | CK3 | CK4 | CK5 | CK6 | CK7 | CK8 |
-  +--------+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+
-
-Unknown
-
-  The following configuration resources are not fully understood, but
-  the values below appear to work.
-
-  +--------+--------+--------+
-  |Z octet |X octet |Y octet |
-  +--------+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+
-  |        |00000000|00000000|  1  |  1  |  1  |  1  |  1  |  1  | GCK  SRC  |
-  |10100001|00010111|00000000|  1  |  1  |  1  |  1  |  1  |  1  | GCK  SRC  |
-  |        |00101111|00000000|  1  |  1  |  1  |  1  |  1  |  1  | GCK  SRC  |
-  +--------+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+
-  |11010000|00000000|00000000|  1  |  1  |  0  |  0  |  0  |  0  |  0  |  0  |
-  +--------+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+
-  |11010011|00000000|00000000|  0  |  0  |  0  |  0  |  1  |  1  |  0  |  1  |
-  +--------+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+
-      
-
-
-
-