Transcript Document
System on Chip (SoC) Architecture Design SOCks – FPU Example James E. Stine 2 CADENCE DESIGN SYSTEMS, INC. Structure of Floating Point Multiplier All calculations are done in double precision Single-to-Double conversion Mantissa Sign Dadda Multiplier Exponent Sticky Bit Postnormalization Rounding Output 3 Dadda Multiplier Partial Products Compression (Half Adder) Compression (Full Adder) Final Carry-Propagate Adder 4 AMBA Interface Arbiter Address and Control Mux HADDR HADDR HWDATA MASTER 1, LEON HWDATA SLAVE 1, Floating Point Unit HRDATA HRDATA Address = 0xA016_0000 HADDR HWDATA MASTER n HADDR HWDATA SLAVE n HRDATA HRDATA Read Data Mux Decoder 5 The Floating Point Unit is interfaced with the LEON through the AHB AMBA interface (Advanced High-Performance Bus). This bus is intended to provide a high-speed communication with the processor. AMBA Interface A typical AMBA AHB system includes: • AHB Master: Initiates read or write operations on the bus. Only one Master is allowed to access the bus at a time. • AHB Slave: AHB Slave responds to a read or write, given an addressspace range. It then responds with acknowledge, wait or fail signal to the requesting master. • AHB Arbiter: The arbiter is responsible for allowing access to the bus to only one Master at any time. The arbitration algorithm may be modified. • AHB Decoder: A single decoder is required for all AHB devices. It is used to decode the address of each transfer and provide a select signal for the involved slave in that transfer. 6 AMBA AHB / FPU Interface Data input from CPU match_FPSCR address & Write Enable (write to FPSCR?) [26:0] 27 1 FPSCR Register FLAGS FSM Control SP/DP Result OpB OpA [31:27] [26:16] [15] [14:10] [9:5] [4:0] FPSCR_OUT, [19:16] Traps, SP/DP, Rounding, etc 1 FPSCR Out fpu_CPU Address input from CPU 32 0 Address Input (0-31) 1 Data input from CPU 32 0 1 Operand A Address 0 32 fpu_CPU 1 FPSCR Out Operand B Address Register File 32 x 32-bit Operand A Data 7 5 1 64 From FSM Control 4 32 AMBA Module address match & CPU Write Enable Operand B Data 64 FPSCR Address match (fpscr_match) 1 Data Input extended 32-bits (double precision) Data Output (CPU Read) 32 5 Write Enable Data Input (CPU Write) 1 Data output to CPU 5 Single/Double Precision Bit [15] From FPSCR output [19:16] Floating Point Traps, Round Unit Mode, SP/DP Result [63:32] [31:0] FLAGS (Invalid, UDF, OVF, Inexact, DivZero) 32 SOCks FP Multiplier Step-by-step • Check if sufficient disk space is available “quota –v” • Get SOCks kit and install it (package created by Johannes Grad from Illinois Institute of Technology) “tar xvf /import/vlsi7/jgrad/socks/socks.tar” • Make sure that RTEMS is installed (Real-Time Operating System for Multiprocessor Systems) • Set the path to RTEMS “set path = (/opt/rtems/bin $path)” • Test if the path was added “which sparc-rtems-g++” 8 SOCks FP Multiplier Step-by-step • Go to ./firmware directory “cd ./firmware” • Create a new source code folder by copying other example to a new directory. “cp –r bubblesort project_name” • Modify main test file (leon_test.c) and other necessary files (misc.c, test.h, leon.h). Additional modifications were necessary because additional structure vint was introduced. • Compile the firmware “make” • After successful compilation go to HDL custom directory. “cd ../../hdl/custom” 9 SOCks FP Multiplier Step-by-step • Digital Logic stored in HDL/custom directory communicates with Leon processor through AMBA bus. • Put FPU files in custom directory. • Compiler is set to compile all Verilog files that are stored in hdl/custom directory. In this case VHDL was used so change was necessary. Following line was added to exe/socks_compile “ncvhdl –v93 –work customlib ./custom/*.vhd” • Go to HDL directory “cd ..” • Compile the custom logic HDL In this context compilation means building a HDL simulation model, not a binary code as in C++ compilation. “../exe/socks_compile” 10 SOCks FP Multiplier Step-by-step • After successful HDL compilation go to sim directory “cd ../sim” • Run the simulation – “../exe/socks_sim project_name” – “../exe/socks_sim project_name partial” (creates waveforms for the custom logic) – “../exe/socks_sim project_name full” (creates waveforms for the entire design) • View the waveforms if needed “simvision &” • Remove temporary files to save space “cd ..” “exe/socks_clean” 11 SOCks FP Multiplier Step-by-step 12 SOCks FP Multiplier Step-by-step 13 SOCks FP Multiplier Step-by-step 14 SOCks FP Multiplier Step-by-step 15 SOCks FP Multiplier Step-by-step 16