You may have noticed a few of the more interesting features on the Altera board. These include a VGA connector, and a PS/2 mouse or keyboard connector. We are not going to play with the VGA port in this workshop - it's definitely one of the more amusing ways of blowing up a monitor. However, the mouse port looks sufficiently fun, and relatively safe.
This week's task is to interface correctly with a PS/2 serial mouse connected to the PS/2 connector on the Altera board. You should be able to output to the LEDs the current absolute x position of the mouse pointer, and also the first two mouse buttons should be represented on the decimal point LEDs.
To test your mouse hardware download mousetest.zip which contains mousetest.sof. This is the file normally produced by a successful compilation which the Programmer downloads to the board. To tell the Programmer to download mousetest.sof rather than the project you are working on, follow these steps:
Please note that the inout statement above are not input statements! If you get this wrong it frequently crashes the MAX+plus II (sigh!).
The mouse sends data to the "computer" (a.k.a. the Altera) in three bytes along the serial port.
MSB 7 | 6 | 5 | 4 | 3 | 2 | 1 | LSB 0 |
---|---|---|---|---|---|---|---|
Y Overflow | X Overflow | Y Sign | X Sign | 1 | Middle Button | Right Button | Left Button |
The core of your program should be a state machine with three states - one state for each byte input. The state machine should change state each time a new byte is received. Each state will deal with decoding the corresponding input byte. Note that the first byte has a valid bit and you should remain in the same state until this valid bit is set.
You haven't been given a .acf file for this workshop, so you'll have to make one yourself. In fact, the .acf file from week 1 will pretty much do, so download dice.acf to this week's project directory, and rename it to mouse.acf.
First open it using File | Open....
The first thing in the file (after Altera's copyright notice) is the
assignments, but they are all for a chip called "dice". Our new chip
is going to be called "mouse", so indicate this by changing CHIP
dice
to CHIP mouse
.
Now close the .acf file. Make sure you have the right project name set, and open Assign | Pin/Location/Chip....
To add an input, type the new name into Node Name, and the pin number into Pin. Then click on Add, and then OK. You will need to add mclk on pin 30, and mdata on pin 31. Remember that they are actually inouts rather than just inputs.
There is no facility to rename an input. If you need to do that, you must first delete the old one (select it from the list and click Delete) and then add the new one.
The practice we had in Week 1 with the "testbed" module should have taught you something about how things can go subtly wrong (with little error reporting from the tools) when your pin assignments are wrong. Therefore, before starting to program the mouse interface, it is a good idea to double-check that your pin assignments are correct. You may want to write a simple Verilog test program that exercises them: this would be laudable, but it is not a requirement. If you write such code, do not include it in your mini-report.
You may find that the old compilations from previous workshops have consumed a lot of disk space with temporary files. It is safe to delete the files which you have not created (remember to keep your .v and .acf files!).
W3-Q1: What is the resolution of the mouse?
W3-Q2: Are the overflow flags ever set?
Submit the following to one of the demonstrators before the end of the last session of this week on Thursday morning.
////////////////////////////////////////////////////////////////////////////// // ARM Project - Week 3 // // Your name // Your college // date //////////////////////////////////////////////////////////////////////////////