|
|
(20 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
− | {{private}}
| + | #REDIRECT [[Kart]] |
− | {{TOC right}}
| + | |
| | | |
− | == FPGA boards ==
| + | [[Category:Kart]] |
− | | + | |
− | 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, 53 % + 3 Block RAMs with the sequencer
| + | |
− | * [[Kart/DC motor controller#FPGA design|DC motor]]: 13 %
| + | |
− | * [[Kart/stepper motor controller#FPGA design|stepper motor]]: 25 %
| + | |
− | * I/O board: 34 %
| + | |
− | | + | |
− | == 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 ====
| + | |
− | | + | |
− | {| cellpadding="4" cellspacing="0" border="1"
| + | |
− | ! Bit
| + | |
− | ! Meaning
| + | |
− | ! Description
| + | |
− | |-
| + | |
− | | 15 ÷ 12
| + | |
− | | Command
| + | |
− | | 0: nop <br /> 1: set_speed(speed) <br /> 2: set_angle(angle) <br /> 3: drive_LEDs(pattern) <br /> 4: set_LEDs(mask) <br /> 5: clear_LEDs(mask) <br /> 6: blink_LEDs(period, mask) <br /> 8: run_distance(hall ticks) <br /> 9: run_for(milliseconds) <br /> A: run_until(event) <br /> D: goto(address) <br /> F: end(repeat)
| + | |
− | |-
| + | |
− | | 11 ÷ 0
| + | |
− | | Argument
| + | |
− | |
| + | |
− | |}
| + | |
− | | + | |
− | === 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
| + | |
− | |}
| + | |