FRC FPGA Architecture Kickoff 2009 Agenda • • • • • • FRC Robot Controller Architecture FPGA Features and Use Cases Break WPILib for LabVIEW Break WPILib for C / C++ cRIO Architecture Ethernet Freescale PowerPC Ethernet Slot 1 RS232 Slot2 PCI Xilinx FPGA … Slot 8 NI 9201 Architecture 8 Channel Analog Input Module Channel 1 Channel 2 FPGA ADC MUX NI 9201 … Channel 8 / Battery NI 9403 Architecture 32-Channel Bidirectional Digital I/O Module Pull-up Resistors Digital I/O (14) Tristate Buffer Hobby PWM Output (10) Relay (8 x 2) FPGA NI Lightning Bug Shift Register Robot Signal Light NI 9403 I2C Header Outputs (4) Grounding FETs I2C Bus Digital Breakout NI 9472 Architecture Solenoid Channel 1 FPGA Buffer Solenoid Channel 2 … NI 9472 Solenoid Channel 8 FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Analog Input Use Case • • • • Angle of a Potentiometer Distance of a Maxbotics Ultrasonic Sensor Acceleration of an Accelerometer Axis Any other Very Low Frequency Analog Signal Analog Input • 12-bit ADC with +/-10V Range • Access Factory Calibration • Variable-Length Scan List – 8 maximum – Repeat entries allowed • Scan Rate – Per module basis (one ADC) – 2us per Conversion Minimum i.e. 500kS/s with single entry scan list Analog Input Sources • Raw Samples – 16-bit – Updated After Each Conversion • Oversample / Average Engine Output – 32-bit • Windowed Register Access – Most recent sample FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Oversample / Average Engine (OAE) Use Case • Oversample – Higher Resolution Samples – Lower Sample Rate • Average – Same Resolution Samples – Lower Sample Rate – More Stable Sample Values Oversample / Average Engine (OAE) • Specified in bits – B bits: 2B == N Samples – 15 bits Each Maximum • Oversample – Sums NO samples • Average – Sums NA samples – Divide by NA • Output changes after NO x NA Samples FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Accumulator Use case • Hardware Numerical Integration • Gyro – Integrate: Angular Rate Angle Accumulator • 64-bit Value / 32-bit Count • 2 available – Hardwired to Slot 1, AI 1 and AI 2 OAE Output • Center Value • Deadband • Value Reset to Zero FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Analog Trigger Use case • • • • • Reflective Sensor Encoder Interrupt at Pot Value Sin-Cos Signal to Quadrature Variable Reluctance Sensor Any Analog Signal to Digital Analog Trigger • • • • Trigger Events From Analog Signal Specify Upper and Lower Limit Source Raw or OAE Trigger State – High when Above Upper Limit – Low when Below Lower Limit – Unchanged when Between Limits (Hysteresis) • In Window – Voltage between Upper and Lower Limit Analog Trigger Analog Trigger – Hysteresis Analog Trigger – Hysteresis (Too Noisy) Analog Trigger - Rollover Detection Use case • Count Rollovers (Rotations) – Continuous-Turn Potentiometers – Magnetic Absolute Encoder – Any Signal that Rolls Over Analog Trigger - Rollover Detection • Jump Over Window • Floating – Large Change in Value • Average-Rejection Filter – 3 Point Filter • Pulse Output – Rising and Falling Pulses – Cannot Read via Register; Routable Only Analog Trigger – Rollover Detection Rising Trigger Analog Trigger – Rollover Detection Rising Trigger, Low-Pass Filtered Average Rejection Filter Use case • Averaging Inherent in Sampling Process • Perform More Averaging After Sampling – Changes the Effective Sample Rate – Increases the Effect of the Filter • Balance Effective Sample Rate – Too Fast, the Filter Has Too Little Effect – Too Slow, Trigger False Positives • True Slope Needs at least One Sample In Window Average Rejection Filter Analog Trigger – Rollover Detection Rising Trigger, Average Rejection FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Digital Input / Output Use case • Digital Input – Limit Switches • Digital Output – Jaguar Coast / Brake Control • Pulse Generator – Ping Signal for Ultrasonic Sensors Digital Input / Output • 6.525us Per Sample • Output Enable (Change) – 17us Delay for I/O on Both NI 9403 Modules • Output Latch Configurable Before OE • Output Pulse Generator – Invert Bits For Some Time Then Reset – 1.6ms Maximum FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Slow Digital Output Use case • Spike Relay Control • Robot Signal Light – Controlled by Network Status Code – Not Available • 4 Outputs on I2C Header – Any Custom Circuits that need More Outputs Slow Digital Output • SPI Output to Sidecar Shift Registers • 320us Per Update • Spike Relay Control – Gated by Watchdog • Robot Signal Light • 4 Outputs on I2C Header FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Hobby PWM Output Use case • Jaguar Motor Controller – 1x Period Multiplier – 5ms Update • Victor Motor Controller – 2x Period Multiplier – 10ms Update • Hobby Servo – 4x Period Multiplier – 20ms Update Hobby PWM Output • 8-bit Generator • • • • 0 == Disable Output 1 == 0.65ms High 128 == 1.5ms High 255 == 2.35ms High • Period Multiplier – 1x, 2x, or 4x • Gated by Watchdog FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access I2C Bus Use case • Hitechnic NXT Compatible Sensors – Compass – 3 Axis Accelerometer – Gyro (No Hardware Integration) • Devantech Sensors – SRF08 Ultrasonic Range Finder – Compass • Any Other I2C Compliant Sensors I2C Bus • • • • • • • • Address / Register / Data Transaction Format Independent Bus Per Module 7-Bit Addresses Only Write 1 Byte Per Transaction Read 1, 2, 3, or 4 Bytes Per Transaction Clock Skewing Only On Read Between Data Bytes Slave Acknowledge Ignored Interrupt on Done FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Digital Input Filtering Use case • Debounce Buttons • Synchronize Digital Input Signals • Filter Out High Frequency Noise Digital Input Filtering • 3 Filters Per Module • Filter Assigned Per Channel • Correlation Between Channels – Updates at End of Correlation Period – Unchanged if Input Changed During Period • All Routed Digital Inputs Can Be Filtered FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Solenoid Output Use case • Control Pneumatic Solenoids • Less Space Than 4 Spikes Solenoid Output • Pass-through • Gated by Watchdog FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Watchdog Use case • • • • Ensure That Critical Code Keeps Running Added Safety if Used Correctly Not Mandatory; Strongly Recommended Disable to Keep Motors Running At Breakpoint Watchdog • • • • Disables Actuator Outputs Configurable Timeout Feed To Keep Alive Manual Kill – Disable Outputs Now • Immortal Mode – Timeout and Manual Kill Ignored – Outputs Enabled FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Counter / Timer • 2 Types of Counters – Dedicated 4x Quadrature Decoders • 4 Available – General Purpose Counters • 8 Available • Signed 31-bit Value • Most Recent Direction • Timer On Each Counter Output Counter / Timer (cont) • Routable Input Sources – Digital Input Filter – Analog Trigger • Disable (Ignore Inputs) • Software Reset Value to Zero • External Reset Value to Zero Routable Input Dedicated 4x Quadrature Decoder Use case • Highest Resolution • Dedicated Hardware • Absolute Angle – External Reset as Index Input Dedicated 4x Quadrature Decoder • A and B Channel Routable Inputs • Count for Each Transition of A or B Signal 4x More Precise 1x, 2x Quadrature Decoding Counter Use case • Used Up All 4x Decoding Counters • Less Resolution Needed • More Averaging of Encoder Speed – Fewer Timer Events Per Rotation Up / Down Counter Use case • Count Full Rotations of Rollover Sensors – Route Analog Trigger Rising and Falling Pulses • Simple Counter – Disable the “Count Down” Channel External Direction Counter Use case • BaneBots Encoder Divider Kit • Other Encoder Types General Purpose Counter • Counting Modes – 1x or 2x Quadrature Decoding • “A” and “B” Inputs – Up / Down Counter • “Count Up” and “Count Down” Inputs – External Direction • “Count” and “Direction” Inputs • Rising, Falling, or Both Edge Sensitivity Semi-Period Timer Use case • Echo Signal from Ultrasonic Range Sensor • Duty-Cycle Measurement – If Period is Fixed, Measure High or Low Pulse – If Not, Hard to Get Consistent Sample Pulse-Length Direction Counter Use case • Allegro ATS651 Gear Tooth Sensor – Direction Information Encoded in Pulse Length – Provided in Kit in 2005 • Black PCB • RevNC General Purpose Counter (cont) • Special Modes – Semi-Period • • • • Primary Output is Timer Odd Counter Value Means Measurement In Progress Select High or Low Semi-Period Single Input Channel – Pulse-Length Direction • Direction to Count Determined From Pulse-Length • Select Pulse-Length Threshold • Single Input Channel Timer Use case • Measure Speed • Detect Motor Stall • Time Events Timer • Time Between Counter Events – Event == Value Change • Stall Detection • Sample Averaging – Sliding Window – Up to 128 Samples FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access SPI Engine Use case • Interface Custom Circuits • Some Sensors SPI Engine • Serial Peripheral Interface / Synchronous Serial • Input and Output FIFOs – 512 Words Each • Highly Configurable – – – – Chip Select / Pre- or Post-Latch Clock Polarity Word Size (1-bit to 32-bit) MSb or LSb First • Streaming Interrupts – Receive Buffer • Not Empty; Half Full – Transmit Buffer • Half Empty; Empty and Idle FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Time / Alarm Use case • Time – Consistent us Value Across Subsystems – Fast, Precise Benchmark Source • Alarm – Interrupt Based Task Scheduling (for C++) Time / Alarm • Time – 1us Resolution – 32-bit range (71.5 Minutes) • Alarm – Schedule for a Specific Time – Generate an Interrupt – Interrupt Immediately if Scheduled Time In Past FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Routable Interrupt Use case • • • • Interrupt on Button Timestamp An Event Some Crazy Interface We Didn’t Foresee If All Else Fails Routable Interrupt • Input Sources Routable – Digital Input Filter – Analog Trigger • Latch Timestamp • Wait for Acknowledge – Timestamp Will Not Change Until Acknowledge – Can be Disabled FRC FPGA Subsystems • • • • • • • • Analog Input Oversample / Average Accumulator Analog Trigger Digital Input / Output Slow Digital Output Hobby PWM Output I2C Bus • • • • • • • • Digital Input Filtering Solenoid Output Watchdog Counter / Timer SPI Engine Time / Alarm Routable Interrupt Direct Memory Access Direct Memory Access (DMA) Use case • Data Streaming – FIR Filtering – Fourier Transform (Frequency Content) • Snapshot of Sensor On Event – Position Observer Direct Memory Access (DMA) • Stream Data Directly to PPC Memory • Sample Clock – Correlated Samples of Unrelated Data – Internally timed • FPGA Clock Domain – Externally timed • Routable Input • Configurable Data Sources • Sample Includes Timestamp • Overrun Indication Questions?