|
|
(14 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
− | {{private}}
| + | #REDIRECT [[Kart]] |
− | {{TOC right}}
| + | |
− | | + | |
− | == FPGA boards ==
| + | |
− | | + | |
− | The FPGA modules use MicroSemi [http://www.actel.com/products/igloo/ IGLOO] low-power FPGAs.
| + | |
− | | + | |
− | The boards have been designed for AGL125 in a VQ100 package.
| + | |
− | However, it is possible to mount the following devices with the same package on that board:
| + | |
− | * AGL060: 1'536 VersaTiles, 4 4'608-bit RAMs
| + | |
− | * AGL125: 3'072 VersaTiles, 8 4'608-bit RAMs
| + | |
− | * AGL250: 6'144 VersaTiles, 8 4'608-bit RAMs
| + | |
− | One VersaTile can implement a 3-input combinatorial function or an E-flipflop.
| + | |
− | | + | |
− | === Pin Compatibility ===
| + | |
− | As a simple compatibility rule for these devices, one should use:
| + | |
− | * pins 43, 60, 93 and 94 for I/Os but not as a clock inputs
| + | |
− | * pin 99 tied to GNDQ
| + | |
− | * pin 100 tied to VMV0 (3.3 V)
| + | |
− | | + | |
− | === Global Clock Networks ===
| + | |
− | Note that pin names starting with '''GF''' and '''GC''' are associated with the chip global networks, and GA, GB, GD, and GE are used for quadrant global networks.
| + | |
− | | + | |
− | In case of the AGL060 - AGL250 the following pins are truly Global Clocks.
| + | |
− | * pins 10, 11, 13, 15, 16 for Network GF
| + | |
− | * pins 61, 62, 63, 64, 65 for Network GC
| + | |
− | | + | |
− | == Synthesis results ==
| + | |
− | | + | |
− | The device usage gives an idea if the synthesis has worked properly.
| + | |
− | Here the results for the AGLN125V5:
| + | |
− | * [[Kart/Bluetooth|controller]]: 40 % + 2 Block RAMs, 64 % + 6 Block RAMs with the (1024 steps) sequencer
| + | |
− | * [[Kart/DC motor controller#FPGA design|DC motor]]: 13 %
| + | |
− | * [[Kart/stepper motor controller#FPGA design|stepper motor]]: 25 %
| + | |
− | * [[Kart/sensor board#FPGA design|I/O board]]: 36 %
| + | |
− | | + | |
− | == Sequencer ==
| + | |
− | | + | |
− | The sequencer allows to store and play a special move specified by a sequence of commands.
| + | |
− | | + | |
− | === SmartPhone to Kart ===
| + | |
− | | + | |
− | {| cellpadding="4" cellspacing="0" border="1"
| + | |
− | ! Address
| + | |
− | ! Datatype
| + | |
− | ! Description
| + | |
− | |-
| + | |
− | | 7
| + | |
− | | UINT2
| + | |
− | | Control register
| + | |
− | |-
| + | |
− | | 8
| + | |
− | | UINT16
| + | |
− | | Sequence register
| + | |
− | |}
| + | |
− | | + | |
− | ==== Control register ====
| + | |
− | | + | |
− | {| cellpadding="4" cellspacing="0" border="1"
| + | |
− | ! Bit
| + | |
− | ! Meaning
| + | |
− | ! Description
| + | |
− | |-
| + | |
− | | 0
| + | |
− | | Reset sequence
| + | |
− | | sets the sequence RAM write and read addresses back to 0
| + | |
− | |-
| + | |
− | | 1
| + | |
− | | Run / stop
| + | |
− | | starts or stops a sequence
| + | |
− | |}
| + | |
− | | + | |
− | ==== Sequence register ====
| + | |
− | | + | |
− | The sequence register is made out of 2 :parts: the command and optional parameters.
| + | |
− | The commands are pushed into the same register, starting at the first one of the list after the <code>reset sequence</code> bit
| + | |
− | has been set in the [[#Control register|control register]].
| + | |
− | | + | |
− | {| cellpadding="4" cellspacing="0" border="1"
| + | |
− | |
| + | |
− | ! colspan = "2" | command
| + | |
− | ! parameter
| + | |
− | | comment
| + | |
− | |-
| + | |
− | | Bits
| + | |
− | ! colspan = "2" | 15 ÷ 12
| + | |
− | ! 11 ÷ 0
| + | |
− | |
| + | |
− | |-
| + | |
− | | rowspan = "12" | || 0 || nop || ||
| + | |
− | |-
| + | |
− | | 1 || set_speed || speed || implemented
| + | |
− | |-
| + | |
− | | 2 || set_angle || angle || implemented
| + | |
− | |-
| + | |
− | | 3 || drive_LEDs || pattern || implemented
| + | |
− | |-
| + | |
− | | 4 || set_LEDs || mask ||
| + | |
− | |-
| + | |
− | | 5 || clear_LEDs || mask ||
| + | |
− | |-
| + | |
− | | 6 || blink_LEDs || period, mask ||
| + | |
− | |-
| + | |
− | | 8 || run_distance || hall ticks || implemented
| + | |
− | |-
| + | |
− | | 9 || run_for || milliseconds || implemented
| + | |
− | |-
| + | |
− | | A || run_until || event ||
| + | |
− | |-
| + | |
− | | D || goto || address ||
| + | |
− | |-
| + | |
− | | F || end || repeat ||
| + | |
− | |}
| + | |
− | | + | |
− | === Kart to SmartPhone ===
| + | |
− | | + | |
− | {| cellpadding="4" cellspacing="0" border="1"
| + | |
− | ! Address
| + | |
− | ! Datatype
| + | |
− | ! Description
| + | |
− | |-
| + | |
− | | 7
| + | |
− | | UINT16
| + | |
− | | status
| + | |
− | |}
| + | |
− | | + | |
− | ==== Status register ====
| + | |
− | | + | |
− | {| cellpadding="4" cellspacing="0" border="1"
| + | |
− | ! Bit
| + | |
− | ! Meaning
| + | |
− | ! Description
| + | |
− | |-
| + | |
− | | 0
| + | |
− | | Running
| + | |
− | | indicates that a sequence is currently running
| + | |
− | |}
| + | |
− | | + | |
− | to do: stop sequence on BT connection lost
| + | |
| | | |
| [[Category:Kart]] | | [[Category:Kart]] |