330 likes | 518 Views
The FPX KCPSM Module Exercise: Network Data Encryption / Decryption Using ROT13 Algorithm. Henry Fu Washington University Applied Research Lab Supported by: NSF ANI-0096052 and Xilinx Corp. http://www.arl.wustl.edu/arl/projects/fpx/fpx_kcpsm/ hwf1@arl.wustl.edu.
E N D
The FPX KCPSM Module Exercise:Network Data Encryption / Decryption Using ROT13 Algorithm Henry Fu Washington University Applied Research Lab Supported by: NSF ANI-0096052 and Xilinx Corp. http://www.arl.wustl.edu/arl/projects/fpx/fpx_kcpsm/ hwf1@arl.wustl.edu
The FPX KCPSM Module Software Exercise • Network data encryption / decryption using ROT13 algorithm • Rotates characters by 13 places • ‘A’ ‘N’, ‘M’ ‘Z’, ‘a’ ‘n’, ‘m’ ‘z’ • Encryption Example: • ‘Hello World’ encrypts to ‘Uryyb Jbeyq’ • Decryption Example: • ‘Uryyb Jbeyq’ decrypts to ‘Hello World’
Approach to the ROT13 Algorithm • Consider the following four cases • IF (ch >= ‘A’) && (ch <= ‘M’) • Rotate “Right” ch by 13 characters • IF (ch >= ‘N’) && (ch <= ‘Z’) • Rotate “Left” ch by 13 characters • IF (ch >= ‘a’) && (ch <= ‘m’) • Rotate “Right” ch by 13 characters • IF (ch >= ‘n’) && (ch <= ‘z’) • Rotate “Left” ch by 13 characters
The FPX KCPSM Module Package • The FPX KCPSM Module Package includes: • IPTESTBENCH (IP2FAKE) • Generates fake ATM cells for simulation • UDPTESTBENCH (UDPTEST, UDPSTR) • Sends and receives UDP program and data packets • KCPSM Package (KCPSMBLE, PSMDEBUG) • Includes an assembler and a debugger for KCPSM • FPX KCPSM Module in VHDL • Includes all the VHDL source codes for the module
The FPX KCPSM Module Package (More) • The FPX KCPSM Module Package • Detailed information on the Internet: • http://www.arl.wustl.edu/arl/projects/fpx/fpx_kcpsm/ • Download the FPX KCPSM Module Package • Right click on fpx_kcpsm.tar.gz • Save it to h:\ • Extract the FPX KCPSM Module Package • Open a cygwin window • cd /cygdrive/h/ • gunzip fpx_kcpsm.tar.gz • tar xvf fpx_kcpsm.tar
The FPX KCPSM Module Package • The FPX KCPSM Module Package includes: • IPTESTBENCH/ • Includes the source files, input / output files, and comiple script for the IP2FAKE program • Build: Type ‘make’ in the prompt • UDPTESTBENCH/ • Includes the source fiels, input files, and compile script for the UDPTEST, UDPSTR program • Build: Type ‘make’ in the prompt
The FPX KCPSM Module Package (More) • KCPSM/ • Includes the KCPSM package from Xilinx Corp. and all the VHDL source codes, simulation script, synthesis script, and COREGEN component files for the FPX_KCPSM Module
Programming the KCPSM • The KCPSM executes programs stored in the program memory and accesses data stored in the data memory • Program memory stores up to two programs • Each program is limited to 255 instructions • Program should begin at address 0x00 • Interrupt input is used to reset the KCPSM • Data memory stores up to four data packets • Each data packet is limited to 255 bytes
Writing a KCPSM Program • Access the KCPSM Package • cd KCPSM/package • Create a subdirectory in the KCPSM package • mkdir ROT13 • cp kcpsmble.dat ROT13/ • cd ROT13 • Create a KCPSM program using a plain text editor • vi ROT13.PSM
The KCPSM: Registers and Constants • The KCPSM has 16 8-bit registers • Used in the program in the “sX” format, where ‘X’ is one of the following: • 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F • Example: s0, sA, sF • The KCPSM supports constants • Specified in the program in the form of a two-digit hexadecimal value, where they ranges from 0x00 to 0xFF
The KCPSM: Special Instructions • The KCPSM provides special instructions used to handle I/O and Interrupt operations: • INPUT sX, sY • Enables 8-bit data values external to the KCPSM to be transferred to register sX, where the port address is indirectly specified by the contents of sY • INPUT sX, pp • Enables 8-bit data values external to the KCPSM to be transferred to register sX, where the port address is directly specified as a two-digit hex constant
The KCPSM: Special Instructions (More) • OUTPUT sX, sY • Enables 8-bit data values in register sX to be transferred to logic external to the KCPSM, where the port address is indirectly specified by the contents of register sY • OUTPUT sX, pp • Enables 8-bit data values in register sX to be transferred to logic external to the KCPSM, where the port address is directly specified by the two-digit hex constant
The KCPSM: Special Instructions (More) • ENABLE INTERRUPT • Enables future interrupt requests • DISABLE INTERRUPT • Disables future interrupt requests • RETURNI ENABLE • Concludes an interrupt service routine and specifies that future interrupt requests are enabled • RETURNI DISABLE • Concludes an interrupt service routine and specifies that future interrupt requests are disabled
The KCPSM: Instructions • For detailed explanations of every instruction available to the KCPSM, please refer to the KCPSM App Notes: • “8-bit Microcontroller for Virtex Devices” • By Ken Chapman of Xilinx Corp. • Download URL: • http://www.xilinx.com/xapp/xapp213.pdf
The KCPSM Program Template • All KCPSM programs should follow a template in order for them to work with the FPX KCPSM Module: • Enables the KCPSM for Interrupt requests • Checks if the data memory is empty • Processes data if data memory is not empty • Signals to the Interface when KCPSM is done • Suspends the KCPSM
The KCPSM Program Template (More) ;Enable KCPSM Interrupt so that the KCPSM Interface can reset the KCPSM ENABLE INTERRUPT ;Check if there is new data packet in memory ;if no data, signal KCPSM Interface that process is done with no write ;if there is data, proceed to process data INIT: INPUT SA,03 ;LOAD M[03] TO SA SUB SA,00 ;COMPARE SA TO 00 JUMP NZ,CHK ;DATA IN MEMORY, PROCEED LOAD SA,00 ;NO DATA, LOAD 00 TO SA, no write, signal done OUTPUT SA,FF ;WRITE 00 TO M[FF], no write, signal done JUMP WAIT ;WAIT ;Assembly code to process data CHK: ;Assembly code goes here ;Signal KCPSM Interface that process is done, and needs to write it out DONE: LOAD SA,FF ;LOAD FF TO SA, signal done OUTPUT SA,FF ;WRITE FF TO M[FF], write, signal done ;Suspend KCPSM ADDRESS FE WAIT: JUMP WAIT
Assembling a KCPSM Program • An assembler called KCPSMBLE is included in the KCPSM package from Xilinx Corp. • KCPSMBLE needs to be executed in a PC • Programs need to be written in plain text • Programs needs to be saved in a DOS 8.3 file format with a <.PSM> extension • Usage: • ../KCPSMBLE ROT13.PSM
Assembling a KCPSM Program (More) • After KCPSMBLE finishes assembling the program, a coefficient file (ROT13.COE) is generated: • Used by COREGEN to generate a single-port block RAM and initialize the block RAM content to the machine code of the program • Used by CONVERT to generate a dual-port block RAM coefficient file for COREGEN and a <INST.TBP> for simulation and lab testing
Debugging a KCPSM Program • A debugger called PSMDEBUG is included in the KCPSM package from Xilinx Corp. • PSMDEBUG needs to be executed in a PC • The <.COE> file used must be generated by KCPSMBLE and must be unmodified • Usage: • ../PSMDEBUG ROT13.COE • Detail instructions will appear on screen after PSMDEBUG is executed
Converting a KCPSM Program • The <.COE> file generated by KCPSMBLE is targeted to use with single-port block RAM • The <.COE> file generated by KCPSMBLE contains the machine code of the KCPSM program • Need a program that converts the <.COE> file generated by KCPSMBLE so that it can be used for simulation, synthesis, and testing
Converting a KCPSM Program (More) • A C program called CONVERT is used to convert the <.COE> file generated by KCPSMBLE: • Converts the <.COE> file so that it is targeted to use with dual-port block RAM • Extracts the machine code of the KCPSM from the <.COE> file so that the program can be used in simulation and can be sent to the FPX KCPSM Module through an UDP packet
Converting a KCPSM Program (More) • The CONVERT program • Usage: • ../CONVERT ROT13.COE • Two files are generated after the CONVERT program is executed • <PROGRAM.COE> A coefficient file used by COREGEN to generate a dual-port block RAM • <INST.TBP> A input file used by the IP2FAKE program to generate simulation inputs and the UDPTEST program to send UDP program packet
Generating Fake ATM Cells for Simulation • A C program called IP2FAKE is used to generate fake ATM cells for simulation • Generate a fake ROT13 program packet / cell using the <INST.TBP> from CONVERT • Usage: • /cygdrive/h/iptestbench/ip2fake INST.TBP ROT13.DAT • Generate a fake input data packet / cell • Use a plain text editor to create a HELLO.TBP file • vi HELLO.TBP
Contents of the HELLO.TBP File The first word specifies it is a data packet The second word specifies ‘Hell’ The third word specifies ‘o Wo’ The fourth word specifies ‘rld’ # demo testbench # # comments start with # # commands start with ! # parameters are optional # # to get familiar with the tools run "ip2raw TESTBENCH.TBP" # and check the outcoming TBRAW.TBP file # # UDP block, will be prepended by an UDP header # parameter: ip-address, dest-port, src-port !UDP 192.168.0.1 7 64000 00000001 48656C6C 6F20576F 726C6400
Simulating a KCPSM Program • Modelsim is used to simulate the FPX KCPSM Module • Copy the fake ATM program and data packet / cell to the simulation directory • cp ROT13.DAT KCPSM/sim/ • cp HELLO.DAT KCPSM/sim/ • Go to the design simulation directory • cd KCPSM/sim/ • Create the simulation input file • cat WAIT.DAT ROT13.DAT HELLO.DAT > INPUT_CELLS.DAT
Simulating a KCPSM Program (More) • Compile the module and Start Modelsim • make compile • make sim • In Modelsim main window, type: • do testbench.do • run 10000 • In Modelsim wave window • Edit > Select All • Right click on the selected waves • Radix > Hexadecimal
Simulating a KCPSM Program (More) • In Modelsim wave window • Go through the window and see the internal KCPSM processing details • In the cygwin window, open the simulation output file • vi LC_CELLSOUT.DAT • Scroll through the simulation output file • Each ATM cell is separated by a ‘new_cell’ line • The first to the third to last cells are program packets • The last two cells are the encrypted data packets
Simulating a KCPSM Program The 1st – 2nd word is the ATM Cell Header The 3rd – 7th word is the Internet Protocol Header The 8th – 9th word is the UDP Header The 10th word specifies it is a data packet The 11th – 13th word is the data string ‘Hello World’ The 1st – 2nd word is the ATM Cell Header The 3rd – 7th word is the Internet Protocol Header The 8th – 9th word is the UDP Header The 10th word specifies it is a data packet The 11th – 13th word is the data string ‘Uryyb Jbeyq’ • The input data cell • The output data cell
Testing a KCPSM Program in the Lab • FTP the .TBP file to fpx • sftp yourlogin@fpx.arl.wustl.edu • put ROT13.TBP • quit • Login to fpx using ssh (Secure Shell) • ssh -l yourlogin fpx.arl.wustl.edu • mkdir udptestbench/ • cd udptestbench/ • cp ~hwf1/udptestbench/* .
Testing a KCPSM Program in the Lab • Use UDPTEST to send the ROT13 program packet • ./udptest ../ROT13.TBP • Use UDPSTR to send the data packet • ./udpstr –h 192.168.10.1 –p 7
Testing a KCPSM Program in the Lab (More) • Screenshot of the encryption example:
Testing a KCPSM Program in the Lab (More) • Screenshot of the decryption example:
Conclusion • In this FPX KCPSM Module Exercise • Write, assemble, and debug a KCPSM program using KCPSMBLE, PSMDEBUG • Generate fake program and data ATM cells for simulation using CONVERT, IP2FAKE • Simulate a KCPSM program using Modelsim • Test a KCPSM program in the lab using UDPTEST, UDPSTR