N64 Controller (Project Checkpoint#1)

37
2/24/2006 EECS150 Lab Lecture #6 1 N64 Controller (Project Checkpoint#1) EECS150 Spring2006 – Lab Lecture #6 Philip Godoy Guang Yang Greg Gibeling

description

N64 Controller (Project Checkpoint#1). EECS150 Spring2006 – Lab Lecture #6 Philip Godoy Guang Yang Greg Gibeling. Today (1). Administrative Info Lab #4 Solution Lab #5 Tips Project Overview Design Review Requirements. Today (2). CaLinx2 Expansion Checkpoint #1 Button Parse - PowerPoint PPT Presentation

Transcript of N64 Controller (Project Checkpoint#1)

Page 1: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 1

N64 Controller (Project Checkpoint#1)

EECS150 Spring2006 – Lab Lecture #6

Philip GodoyGuang Yang

Greg Gibeling

Page 2: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 2

Today (1)

Administrative Info Lab #4 Solution Lab #5 Tips Project Overview Design Review Requirements

Page 3: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 3

Today (2) CaLinx2 Expansion Checkpoint #1 Button Parse N64 Controller

Commands Bit Timing Receive Transmit Testing

Page 4: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 4

Administrative Info (1)

Midterm I Solutions will be posted

Group Sign-ups You should already have a group If not, see me after class today Group names need to be finalized

today

Page 5: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 5

Administrative Info (2) N64 Controller Checkout

One per group Test it out as soon as you get it

Use the Checkpoint#1 demo posted online Damage

You break it, you buy it We don’t have replacements, sorry

Return Due back by the final Otherwise we don’t grade your final

Page 6: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 6

Administrative Info (3) What are Man Hours?

MH =

Hi = # hours spent by person i, n = # people Example:

David and I are project partners. David spent 11 hours on CP#2, and I spent 8

hours on CP#2. 3 of each of our hours were spent working together.

H1=11, H2=8, n=2; MHCP#2 = 11 + 8 = 19 Last semester: average MHCP#1 = 30

n

iiH

1

Page 7: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 7

module Lab4Part2Tester(A, B, Sum, …);

output [15:0] A, B, Sum;input [1:0] FailMode;input Clock, Reset, Go;output Running, Error;

wire Done;assign Error = Sum != (A+B);

Lab4Part2Adder TheAdder(.A(A), .B(B), .Sum(Sum), .FailMode(FailMode));Counter TestCounter( .Clock(Clock), .Reset(Reset), .Set(1'b0),

.Load(1'b0), .Enable((Running & ~Error) | Go)),

.In(32'hXXXXXXXX), .Count({A, B}));defparam TestCounter.width = 32;

Register RunReg( .Clock(Clock), .Reset(Reset | &{A, B}), .Set(Go), .Enable(1'b0), .In(1'bx), .Out(Running));

defparam RunReg.width = 1;

Lab #4 Solution (1)

Page 8: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 8

Lab #4 Solution (2)

FSM Debugging Both FSMs were “almost Moore”

You’ll build a lot of these Check for this CAREFULLY in your code

Page 9: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 9

Lab #5 Tips Reading Logic Analyzer

Look at the falling edges of Clock This avoids clock-to-output delay Easier to read

CurrentState, Input, Output on THIS CYCLE NextState is the NEXT “CurrentState”

Using ChipScope Use different trigger ports for different signals Use “Position” to see before triggering event

Page 10: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 10

EECS 150 Spring 2006 Class Project

Page 11: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 11

Project Overview (1)

Wireless Tron N64 Controller -> Player Control NTSC (TV) Video Output -> Battle Field Display Chipcon RF Transceiver -> Wireless

Communication Game Engine -> Coordinate everything

Game Engine

NTSC Video

Chipcon Transceiv

er

N64 Controller

Page 12: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 12

Project Overview (2)

Check Point 1

N64 Controller

Interface

Check Point 2

NTSC Video

Check Point 3

Chipcon RF

Transceiver

Check Point 4

Game Engine

Block Diagram of the Design

Page 13: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 13

Project Overview (3)

Four check points N64 Input NTSC Output Chipcon Transceiver Bidirectional

communication Game Engine

Absolutely symmetric (anyone can play with anyone, with another copy of yourself)

Interface with Chipcon, N64 and NTSC

Page 14: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 14

Project Overview (4) Checkpoints

Require more design work than labs We’re not telling you exactly what to do

Part of your project Design them well Test modules thoroughly! Don’t lose your code

Require more time See project schedule posted online for

deadlines and grade weights

Page 15: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 15

Design Review Requirements High level schematic of your module

implementation Basic building blocks:

register, shift register, counter, mux, comparator, adder, state machine

You can create your own module hierarchy

Due at the beginning of your assigned lab the week after the lab lecture

Graded on correctness, efficiency

Page 16: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 16

Design Review Example

Page 17: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 17

Calinx2 Expansion

Calinx2 Expansion

N64 Controller Ports

(2)

Page 18: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 18

Checkpoint #1: N64 (1)

Primary input for your project Direction Buttons: Move your car Analog Joystick: Can also move your car Other Buttons:

Start new game after game over Speed up / brake ? Camera angles / zooming ? Weapons ? Game codes ?

Page 19: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 19

Checkpoint #1: N64 (2)

I/O Controller Precise timing requirements

You have to match a real piece of hardware You can’t change both ends of the problem

Hard to simulate You may want to build a model controller We would give you one, but its basically the

solution with minor changes Hint hint…

Page 20: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 20

Button Parse (1)

Real World Inputs Problem

Circuits are fast (27MHz) Humans are slow (100Hz) Mechanical switches are very imperfect

Solution Take very long (10ms), very bouncy pulses Clean them up Generate one cycle pulses (1’b0, 1’b1,

1’b0)

Page 21: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 21

Button Parse (2)

Edge Detector

DebouncerIn Out

Clock

Button Parse

Page 22: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 22

Button Parse (3)

Register Register RegisterIn Out

Clock

Rising Edge Detector

Page 23: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 23

Button Parse (4)

Max

Min

RegisterUp/Down Counter

Up

Down

Set

Reset

OutIn

Clock

Debouncer

In

~In

Turn On

Turn Off

Debouncer

Page 24: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 24

Button Parse (5)

Edge Detector

DebouncerIn Out

Clock

Button Parse

Page 25: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 25

N64 Controller (1)

Functionality Fancy Parallel <-> Serial Conversion

Single bi-directional wire to N64 Controller

Core of this module is a Shift Register Polling

N64 uses Challenge/Response We send a command, it responds Might need a little state (send/receive)

Page 26: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 26

N64 Controller (2)

Construction Components

Shift Register FSM/State Register What else?

Plan your design out in DETAIL

Page 27: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 27

N64 Commands (1)

Available Commands 8’hFF: Reset Controller 8’h00: Get Status 8’h01: Read Buttons 8’h02: Read Mempack 8’h03: Write Mempack 8’h04: Read EEPROM 8’h05: Write EEPROM

Page 28: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 28

N64 Commands (2)

Command Format 8bits of Command 1-bit Stop Bit (1’b1) Example:

Read Buttons: 9’b000000011 How do we generate this?

Shift Register Something better…

Page 29: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 29

N64 Bit Timing (1)

Data

Stop

Start

Start

Stop

1'b0

Stop

Start

1'b10

to 1

4us/Bit

Page 30: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 30

N64 Bit Timing (2)

1'b0 1'b0 1'b0 1'b0 1'b0 1'b0 1'b0

1'b1 1'b1

0 1 2 3 4 5 6 7 8

4us/Bit

“Read Buttons” Command 8bits of Command: 8’h01 1bit Stop Marker: 1’b1

Page 31: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 31

N64 Receive (1)

Points to Consider Reliability

The N64 controllers are NOT 100% reliable

Your circuit must be Timing

This is not a synchronous design The controller has its own clock We must detect new bits

A major part of this design is timing!

Page 32: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 32

N64 Receive (2) Detecting a new bit:

Look for 1’b1 (Stop sub-bit) -> 1’b0 (Start sub-bit)

Falling Edge Detector Wait 2us Capture Data

Register Register RegisterIn Out

Clock

Rising Edge Detector

Page 33: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 33

N64 Receive (3) What if we never get another bit…

Detection Falling edge never happens How do we detect an event that never

happens? Recovery

Can’t wait forever, game will lock up Re-request the button status? Reset the

controller? You MUST recover from this condition!

Page 34: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 34

N64 Transmit (1)

For Each Bit Count 1us (1 sub-bit), Transmit 1’b0 Count 1us (1 sub-bit), Transmit Data Count 1us (1 sub-bit), Transmit Data Count 1us (1 sub-bit), Transmit 1’b1

Timing We’re driving the bus – not a problem Still very important

Page 35: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 35

N64 Transmit (2)

10kΩ Pullup 10kΩ Pullup

DIn

DO

ut

Ena

ble

DIn

DO

ut

Ena

ble

Endpoint BEndpoint A

Bidirectional Open Collector Bus

1'b0 DQ

DIn

Enable

DOut

Driver Logic Virtex Tristate

Page 36: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 36

N64 Testing Required

Your circuit must work on board reliably Look at our demo…

Recommended Testing Build a testbench model of the controller Symmetric Protocol

Bits out look like bits in Just a different number of bits

Modify your solution…

Page 37: N64 Controller  (Project Checkpoint#1)

2/24/2006 EECS150 Lab Lecture #6 37

Reminders

Sign-up your group Check out a N64 controller and

test it Design review for CP#1 due in lab

next week (along with Lab#5) FPGA Tron demo after lab lecture “Real” Tron demo at 4pm

Get some ideas for extra credit