Team MCR
From Ece
Our goal is to create a functional visual output of a Magnetic Card Reading system. A user will be able to scan his or her magnetic card and receive the encoded data on a display screen.
Contents |
Team Members
Scott Wilson - Recorder
Josh Lasseigne - Checker
Brandon Leatherwood - Coordinator
Phase 1
Introduction
Magnetic card readers are used in many applications from credit card machines and automated teller machines (ATM) to the security scanners posted throughout Simrall building. The readers pull data from special cards. The cards contain a magnetic strip that stores binary data. Magnetic card readers are an important tool for the communication between people and digital systems. This project involves interfacing a magnetic card reader with the Digilent, Inc. Spartan 3 development board to display the card information on a VGA monitor.
Concept
So that the the Magnetic endcoded information can be read by a user, it must be properly converted from the format in which it is sent from the magnetic card reader to an ASCII format readible by the user and understood by the VGA monitor. A decoder module will properly receive the input from the card reader and prepare it to be converted to the user readible format. A converter module will convert the raw data input by the card reader and and prepare it to be displayed in the proper output format. Finally, a display module will prepare the properly formatted data and will output the data to the VGA monitor.
Proposed Work
- The FPGA will run a module that recieves the magnetic card reader data from the magnetic card reader.
- The FPGA will run a module that converts the magnetic card reader data to the appropriate ascii value.
- The FPGA will run a module that displays the current ascii value on a VGA monitor.
Required Parts
- Kaneswipe 2 Track magnetic card reader with a PS2 keywedge
- Pegasus Spartan III FPGA board
- Standard VGA monitor
Expected Deliverables
With the above parts, the Spartan III board with be able to properly decode the information stored on a 2 track magnetic card and properly output the information to a VGA monitor for the user to read.
Phase 2
Introduction
Magnetic card readers are used in many applications from credit card machines and automated teller machines (ATM) to the security scanners posted throughout Simrall building. The readers pull data from special cards. The cards contain a magnetic strip that stores binary data. Magnetic card readers are an important tool for the communication between people and digital systems. This project involves interfacing a magnetic card reader with the Digilent, Inc. Spartan 3 development board to display the card information on a VGA monitor.
Concept
So that the the Magnetic endcoded information can be read by a user, it must be properly converted from the format in which it is sent from the magnetic card reader to an ASCII format readible by the user and understood by the VGA monitor. A decoder module will properly receive the input from the card reader and prepare it to be converted to the user readible format. A converter module will convert the raw data input by the card reader and and prepare it to be displayed in the proper output format. Finally, a display module will prepare the properly formatted data and will output the data to the VGA monitor.
Proposed Work
- The FPGA will run a module that recieves the magnetic card reader data from the magnetic card reader.
- The FPGA will run a module that converts the magnetic card reader data to the appropriate ascii value.
- The FPGA will run a module that displays the current ascii value on a VGA monitor.
Modules
- PS2 Core Module
- This module will receive the input from the magnetic card reader and convert it into a 16 bit hexcode derived from a user created table so that each letter, number, and symbol can be referenced quickly.
- Inputs
- ps2clk - clock from ps/2 port
- ps2data - Data from magnetic card reader
- Outputs
- hexcode(15:0)
- PS2 Decode Module
- This module will receive the input from the PS2 Core Module. It will break the 16 bit hexcode down into an 8 bit value for the memory module to story as well as pass on a 10 bit address location.
- Inputs
- hexcode(15:0)
- Outputs
- address(9:0)
- char_val(7:0)
- Magnetic Card Decodde Module
- This module will take the data from the PS2 Decode Module and convert it to an opcode for the Character Memory Module.
- The format for the magnetic card reader is "Track ID + Data + ES + ENTER". Where the information is in AsCII.
- Track ID: Tells which track the data is on.
- Track I : '%' (25H)
- Track II : ';' (3BH)
- Track III : '+' (2BH)
- Data: Information stored on the card. ASCII characters.
- '^' seperates different data fields.
- '$' seperates data within a field.
- ES: '?' . Tells the FPGA that all the data has been sent for that track.
- ENTER: 0D, End of input from the card.
- Here are sample two sample reads from the magnetic card reader.
- Typical Credit card read;
- %12345678912345678^DOE/JOHN C^1234567891234567891234?(return key function)
- ;1234567891234567=123456789123456?(return key function)
- California Drivers License read;
- %CARIVERSIDE^DOE$JOHN$CARL^1234 ANYROAD APT 12^?(return key function)
- ;123456789123456=123456789123?(return key function)
- +!!92519 C 01 M600200BRNBRN D55491990151M1O%+).[8)?=0?(return key function)
- Typical Credit card read;
- Track ID: Tells which track the data is on.
| Character | Function | Opcode |
| '%' | Track 1 | 000000 |
| ';' | Track 2 | 000001 |
| '+' | Track 3 | 000010 |
| '^' | Seperates data fields | 000011 |
| '$' | Seperates data within fields | 000100 |
| '?' | Escape Sequence | 000101 |
| 'Enter' | Return key | 000110 |
| '/' | Data | 000111 |
| '!' | Data | 001000 |
| '0-9' | Data | 001001 - 010010 |
| 'A-Z' | Data | 010011 - 101010 |
- Inputs
- clk - The circuit clock signal.
- data_in - Data from the PS2 module.
- Outputs
- Opcode - Signal that instructs the VGA Display Module what character to display.
- Inputs
- VGA Display Module
- This module will display contents from the character memory module to a computer monitor.
- Inputs
- clk - The circuit clock signal.
- Outputs
- hsync - Signal that instructs monitor to re-align electron gun to the next row.
- vsync - Signal that instructs monitor to re-align electron gun to the top of the screen.
- pixel_column - A bus that indicates the column of the current pixel.
- pixel_row - A bus that indicates the row of the current_pixel.
- video_on - A signal that indicates whether or not anything is currently being drawn to the screen.
- Character Map
- This memory module contains pixel information about the supported characters contained in the character set.
- Inputs
- char_addr - The address bus that specifies a specific character.
- char_row - The bus that specifies a particular row inside a specific character.
- char_col - The bus that specifies a particular column inside a specific character.
- Outputs
- fill_pixel - A signal that specifies the whether or not the pixel designated by char_row and char_col is filled.
- Character Memory
- This module is written to by the decoder module. It contains all characters that should be displayed on the screen. The output from this module is used for display by the VGA display module.
- Inputs
- clk - The circuit clock signal.
- addr - The address to which a read or write occurs.
- din - The input bus.
- we - A signal specifying when to write data from the input bus to a specified address.
- Outputs
- dout - The output bus.
Phase 3
Review of Proposed Work
- A module to store character data obtained from the card reader. Developer: Brandon Leatherwood
- A module to store character tiles. Developer: Brandon Leatherwood
- A module to create vertical and horizontal sync signals for the VGA output. Developer: Brandon Leatherwood
- A module to write pixel color information to the VGA output. Developer: Brandon Leatherwood
- A module to read in the data from the magnetic card reader and convert it to a user-defined hexcode. Developer: Scott Wilson
- A module to read in the user-defined hexcode and retrieve the corresponding 8 bit character value as well as passing on an address reference value for the memory module. Developer: Scott Wilson
The following image illustrates the specific modules and their integration with one another.
Module Descriptions
- PS2 Core Module (ps2core.v)
- This module receives input from the magnetic card reader. It outptus the corresponding hexcode value for each incoming character read from the MCR.
- Inputs
- ps2_data - The input from the magnetic card reader.
- ps2_clock - The clock input from the ps/2 port.
- Outputs
- hexcode(15:0) - Per a hexcode table we create, a specified value depending on which alphanumeric value or symbol is received from the card reader.
- ready - A value letting the ps2decode module know that it should be ready to accept an incoming hexvalue.
- PS2 Decode Module (ps2decode.v)
- This module receives input from the ps2core module and outputs an 8-bit character reference value and the specific memory address that char_mem.v will use to read or write.
- Inputs
- ps2_hexcode(15:0) - The hexcode from ps2core that corresponds to a certain alphanumeric value or symbol.
- ps2_ready - The enable for the module to be able to decode.
- Outputs
- addr(9:0) - The address in which char_mem.v should read from or write to
- char_out(7:0) - 8-bit bus carrying the actual data to be displayed
- mem_write - A value used to enable the memory module
- complete - A value used to signify when all the characters sent by the card reader have been read, decoded, and passed along.
- Memory module (char_mem.v)
- This module is written to by the decoder module. It contains all characters that should be displayed on the screen. The output from this module is read by the vga_buffer module to draw stored characters on the VGA monitor.
- Inputs
- clk - The circuit clock signal.
- addr(10) - The address to which a read or write occurs.
- din(8) - The input bus.
- we - A signal specifying when to write data from the input bus to a specified address.
- Outputs
- dout(8) - The output bus.
- Charater tile module (char_rom.v)
- This memory module contains pixel information about the supported characters contained in the character set.
- Inputs
- char_addr(8) - The address bus that specifies a specific character.
- char_row(3) - The bus that specifies a particular row inside a specific character tile.
- char_col(3) - The bus that specifies a particular column inside a specific character tile.
- Outputs
- out_pixel - A signal that specifies the whether or not the pixel designated by char_row and char_col is filled.
- Video sync module (vga_sync.v)
- This module will generate the h-sync and v-sync signals for the monitor. It also outputs the row and column information for the pixel that is currently being drawn.
- Inputs
- clk - The circuit clock signal.
- Outputs
- hsync - Signal that instructs monitor to re-align electron gun to the next row.
- vsync - Signal that instructs monitor to re-align electron gun to the top of the screen.
- pixel_col(10) - A bus that indicates the column of the current pixel.
- pixel_row(10) - A bus that indicates the row of the current_pixel.
- video_on - A signal that indicates whether or not anything is currently being drawn to the screen.
- Video buffer module (vga_buffer.v)
- This module is new for phase three. The purpose of this module is to use pixel_row and pixel_col information from the vga_sync module to calculate which character in memory (char_mem) is currently being drawn by the monitor. This causes the char_rom module to ouput a signal describing whether or not the current pixel in the current character should be displayed. This module will then output a RGB color on the red, green, and blue output lines (black if no pixel).
- Inputs
- pixel_row(10) - A bus that indicates the row of the current_pixel.
- pixel_col(10) - A bus that indicates the column of the current pixel.
- mem_ready - A signal that indicates that it is safe to read from memory.
- out_pixel - A signal that specifies the whether or not the pixel designated by char_row and char_col (in char_rom) is filled.
- video_on - A signal that indicates whether or not anything is currently being drawn to the screen.
- Outputs
- addr(10) - The address to which a read should occur.
- red_out - A signal that specifies that the current pixel should contain red.
- green_out - A signal that specifies that the current pixel should contain green.
- blue_out - A signal that specifies that the current pixel should contain blue.
- char_row(3) - The bus that specifies a particular row inside a specific character tile.
- char_col(3) - The bus that specifies a particular row inside a specific character tile.
Expected Deliverables
The expected deliverables have not changed since Phase II.




