diff --git a/.gitignore b/.gitignore
index d35ba51e12ebc314b5f6d61e095c368f7f2feec5..d5b5002f5f5c6b42e587679f056e8bada40a6660 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 *.pdf
 db/
+RemoteSystemsTempFiles/
 incremental_db/
 output_files/
 simulation/
diff --git a/RemoteSystemsTempFiles/.project b/RemoteSystemsTempFiles/.project
deleted file mode 100644
index 5447a64fa9d029de5bd06a0ad372bebc0db9a9c1..0000000000000000000000000000000000000000
--- a/RemoteSystemsTempFiles/.project
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>RemoteSystemsTempFiles</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.rse.ui.remoteSystemsTempNature</nature>
-	</natures>
-</projectDescription>
diff --git a/hexdriver.sv b/hexdriver.sv
index 61a01ddbb306b4cd882bedfd882675096b863f28..40dd7b937204032417ee6a3f1da64deed3523aa6 100644
--- a/hexdriver.sv
+++ b/hexdriver.sv
@@ -22,7 +22,6 @@ always_comb begin
 		4'b1101   : Out = 7'b0100001; // 'd'
 		4'b1110   : Out = 7'b0000110; // 'E'
 		4'b1111   : Out = 7'b0001110; // 'F'
-		default   : Out = 7'bX;
 	endcase
 end
 
diff --git a/input/hpi_io_intf.sv b/input/hpi_io_intf.sv
new file mode 100644
index 0000000000000000000000000000000000000000..3b1eb51c45eb909aecc0bcea572257310508e803
--- /dev/null
+++ b/input/hpi_io_intf.sv
@@ -0,0 +1,43 @@
+// Interface between NIOS II and EZ-OTG chip
+module hpi_io_intf( input        Clk, Reset,
+                    input [1:0]  from_sw_address,
+                    output[15:0] from_sw_data_in,
+                    input [15:0] from_sw_data_out,
+                    input        from_sw_r,from_sw_w,from_sw_cs,
+                    inout [15:0] OTG_DATA,
+                    output[1:0]  OTG_ADDR,
+                    output       OTG_RD_N, OTG_WR_N, OTG_CS_N, OTG_RST_N
+                   );
+
+// Buffer (register) for from_sw_data_out because inout bus should be driven
+//   by a register, not combinational logic.
+logic [15:0] from_sw_data_out_buffer;
+
+// TODO: Fill in the blanks below.
+// OTG_DATA should be high Z (tristated) when NIOS is not writing to OTG_DATA inout bus.
+// Look at tristate.sv in lab 6 for an example.
+assign OTG_DATA = from_sw_w ? 16'hZZZZ: from_sw_data_out_buffer;
+assign OTG_RST_N = !Reset; // ?
+
+always_ff @ (posedge Clk)
+begin
+    if(Reset)
+    begin
+        from_sw_data_out_buffer <= 16'hcccc;
+        OTG_ADDR                <= 2'b10; // ?
+        OTG_RD_N                <= 1'b1;
+        OTG_WR_N                <= 1'b1;
+        OTG_CS_N                <= 1'b1;
+        from_sw_data_in         <= 16'hcccc;
+    end
+    else
+    begin
+        from_sw_data_out_buffer <= from_sw_data_out;
+        OTG_ADDR                <= from_sw_address;
+        OTG_RD_N                <= from_sw_r;
+        OTG_WR_N                <= from_sw_w;
+        OTG_CS_N                <= from_sw_cs;
+        from_sw_data_in         <= OTG_DATA;
+    end
+end
+endmodule
diff --git a/ps2kb_hw.tcl b/input/ps2kb_hw.tcl
similarity index 96%
rename from ps2kb_hw.tcl
rename to input/ps2kb_hw.tcl
index 1cfbad3a63506bf30efc3450caba610fde95755d..a5585a6d42bc6cacb9afa0f10f374a01a5c870f6 100644
--- a/ps2kb_hw.tcl
+++ b/input/ps2kb_hw.tcl
@@ -3,21 +3,21 @@
 # DO NOT MODIFY
 
 
-# 
+#
 # ps2kb "PS/2 Keyboard Interface" v1.0
 #  2017.11.18.22:12:04
 # This module produces key events for PS/2 keyboard
-# 
+#
 
-# 
+#
 # request TCL package from ACDS 16.1
-# 
+#
 package require -exact qsys 16.1
 
 
-# 
+#
 # module ps2kb
-# 
+#
 set_module_property DESCRIPTION "This module produces key events for PS/2 keyboard"
 set_module_property NAME ps2kb
 set_module_property VERSION 1.0
@@ -33,35 +33,35 @@ set_module_property ALLOW_GREYBOX_GENERATION false
 set_module_property REPORT_HIERARCHY false
 
 
-# 
+#
 # file sets
-# 
+#
 add_fileset QUARTUS_SYNTH QUARTUS_SYNTH "" ""
 set_fileset_property QUARTUS_SYNTH TOP_LEVEL ps2kb
 set_fileset_property QUARTUS_SYNTH ENABLE_RELATIVE_INCLUDE_PATHS false
 set_fileset_property QUARTUS_SYNTH ENABLE_FILE_OVERWRITE_MODE false
-add_fileset_file ps2kb.sv SYSTEM_VERILOG PATH input/ps2kb.sv TOP_LEVEL_FILE
+add_fileset_file ps2kb.sv SYSTEM_VERILOG PATH ps2kb.sv TOP_LEVEL_FILE
 
 add_fileset SIM_VERILOG SIM_VERILOG "" ""
 set_fileset_property SIM_VERILOG TOP_LEVEL ps2kb
 set_fileset_property SIM_VERILOG ENABLE_RELATIVE_INCLUDE_PATHS false
 set_fileset_property SIM_VERILOG ENABLE_FILE_OVERWRITE_MODE false
-add_fileset_file ps2kb.sv SYSTEM_VERILOG PATH input/ps2kb.sv
+add_fileset_file ps2kb.sv SYSTEM_VERILOG PATH ps2kb.sv
 
 
-# 
+#
 # parameters
-# 
+#
 
 
-# 
+#
 # display items
-# 
+#
 
 
-# 
+#
 # connection point clock
-# 
+#
 add_interface clock clock end
 set_interface_property clock clockRate 0
 set_interface_property clock ENABLED true
@@ -73,9 +73,9 @@ set_interface_property clock SVD_ADDRESS_GROUP ""
 add_interface_port clock CLK clk Input 1
 
 
-# 
+#
 # connection point reset
-# 
+#
 add_interface reset reset end
 set_interface_property reset associatedClock clock
 set_interface_property reset synchronousEdges DEASSERT
@@ -88,9 +88,9 @@ set_interface_property reset SVD_ADDRESS_GROUP ""
 add_interface_port reset RESET reset Input 1
 
 
-# 
+#
 # connection point ps2_clk
-# 
+#
 add_interface ps2_clk conduit end
 set_interface_property ps2_clk associatedClock clock
 set_interface_property ps2_clk associatedReset ""
@@ -103,9 +103,9 @@ set_interface_property ps2_clk SVD_ADDRESS_GROUP ""
 add_interface_port ps2_clk PS2_CLK export Bidir 1
 
 
-# 
+#
 # connection point ps2_data
-# 
+#
 add_interface ps2_data conduit end
 set_interface_property ps2_data associatedClock clock
 set_interface_property ps2_data associatedReset ""
@@ -118,9 +118,9 @@ set_interface_property ps2_data SVD_ADDRESS_GROUP ""
 add_interface_port ps2_data PS2_DATA export Bidir 1
 
 
-# 
+#
 # connection point key_events
-# 
+#
 add_interface key_events avalon end
 set_interface_property key_events addressUnits WORDS
 set_interface_property key_events associatedClock clock
diff --git a/osu_fpga_toplevel.qsf b/osu_fpga_toplevel.qsf
index 480fe63973260d581458f996e83a1a66f7531834..f2e3275897d2c68ec7a27b22b2a4f96a86bd577a 100644
--- a/osu_fpga_toplevel.qsf
+++ b/osu_fpga_toplevel.qsf
@@ -42,7 +42,7 @@ set_global_assignment -name DEVICE EP4CE115F29C7
 set_global_assignment -name TOP_LEVEL_ENTITY osu_fpga_toplevel
 set_global_assignment -name ORIGINAL_QUARTUS_VERSION 17.0.0
 set_global_assignment -name PROJECT_CREATION_TIME_DATE "23:41:32  NOVEMBER 11, 2017"
-set_global_assignment -name LAST_QUARTUS_VERSION "17.0.0 Lite Edition"
+set_global_assignment -name LAST_QUARTUS_VERSION "17.1.0 Lite Edition"
 set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
 set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
 set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
@@ -1118,9 +1118,12 @@ set_instance_assignment -name TSU_REQUIREMENT "10 ns" -from * -to *
 set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
 set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
 set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
+set_global_assignment -name SYSTEMVERILOG_FILE input/hpi_io_intf.sv
 set_global_assignment -name QIP_FILE otogame/synthesis/otogame.qip
 set_global_assignment -name SDC_FILE timing.sdc
 set_global_assignment -name SYSTEMVERILOG_FILE hexdriver.sv
 set_global_assignment -name SYSTEMVERILOG_FILE input/ps2kb.sv
 set_global_assignment -name SYSTEMVERILOG_FILE osu_fpga_toplevel.sv
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON
+set_global_assignment -name NUM_PARALLEL_PROCESSORS 4
 set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
\ No newline at end of file
diff --git a/osu_fpga_toplevel.sv b/osu_fpga_toplevel.sv
index 8705405fa3436a351918ce2cff99a11939d6dc0d..0563fc7d3035c64d11784aed28c853b4c4d7e1ce 100644
--- a/osu_fpga_toplevel.sv
+++ b/osu_fpga_toplevel.sv
@@ -9,22 +9,98 @@
 *
 */
 module osu_fpga_toplevel (
+	// Clock
 	input logic CLOCK_50,
+
+	// Buttons & LEDs
 	input logic [1:0] KEY,
 	output logic [7:0] LEDG,
 	output logic [17:0] LEDR,
 	output logic [6:0] HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7,
+
+	// DRAM
 	output logic [12:0] DRAM_ADDR,
 	output logic [1:0] DRAM_BA,
 	output logic DRAM_CAS_N, DRAM_CKE, DRAM_CS_N,
 	inout wire [31:0] DRAM_DQ,
 	output logic [3:0] DRAM_DQM,
 	output logic DRAM_RAS_N, DRAM_WE_N, DRAM_CLK,
-	inout wire PS2_KBCLK, PS2_KBDAT
+
+	// SRAM
+
+	// Flash
+	output logic [22:0] FL_ADDR,
+	inout wire [7:0] FL_DQ,
+	output logic FL_CE_N, FL_OE_N, FL_WE_N, FL_RESET_N, FL_WP_N,
+	input logic FL_RY,
+
+	// sdcard
+
+	// PS/2
+	inout wire PS2_KBCLK, PS2_KBDAT,
+
+	// HPI (USB)
+	inout wire [15:0] OTG_DATA,
+	output logic [1:0] OTG_ADDR,
+	output logic OTG_CS_N, OTG_OE_N, OTG_WE_N, OTG_RST_N,
+	input logic[1:0] OTG_INT,
+
+	// VGA
+	output logic VGA_CLK,
+	output logic [7:0] VGA_R, VGA_G, VGA_B,
+	output logic VGA_SYNC_N, VGA_BLANK_N, VGA_VS, VGA_HS
+
+	// Audio
 );
+	// Synchronizers
+    logic Reset_h, Clk;
+    always_ff @ (posedge Clk) begin
+        Reset_h <= ~(KEY[0]);        // The push buttons are active low
+    end
+
+	// Additional wires for Flash
+	assign FL_WP_N = 1'b1;
+
+	// HPI wrapper
+    logic [1:0] hpi_addr;
+    logic [15:0] hpi_data_in, hpi_data_out;
+    logic hpi_r, hpi_w, hpi_cs;
+	hpi_io_intf hpi_io_inst(
+		.Clk(CLOCK_50),
+		.Reset(Reset_h),
+		// signals connected to NIOS II
+		.from_sw_address(hpi_addr),
+		.from_sw_data_in(hpi_data_in),
+		.from_sw_data_out(hpi_data_out),
+		.from_sw_r(hpi_r),
+		.from_sw_w(hpi_w),
+		.from_sw_cs(hpi_cs),
+		// signals connected to EZ-OTG chip
+		.OTG_DATA(OTG_DATA),
+		.OTG_ADDR(OTG_ADDR),
+		.OTG_RD_N(OTG_OE_N),
+		.OTG_WR_N(OTG_WE_N),
+		.OTG_CS_N(OTG_CS_N),
+		.OTG_RST_N(OTG_RST_N)
+	);
+
+	// Hex drivers
+	logic [31:0] hex_export;
+	hexdriver hexdrv7(.In(hex_export[31:28]), .Out(HEX7));
+	hexdriver hexdrv6(.In(hex_export[27:24]), .Out(HEX6));
+	hexdriver hexdrv5(.In(hex_export[23:20]), .Out(HEX5));
+	hexdriver hexdrv4(.In(hex_export[19:16]), .Out(HEX4));
+	hexdriver hexdrv3(.In(hex_export[15:12]), .Out(HEX3));
+	hexdriver hexdrv2(.In(hex_export[11:8]), .Out(HEX2));
+	hexdriver hexdrv1(.In(hex_export[7:4]), .Out(HEX1));
+	hexdriver hexdrv0(.In(hex_export[3:0]), .Out(HEX0));
+
+	// Main Program (SoC)
 	otogame main_soc (
+		// Clock
 		.clk_clk(CLOCK_50),
-		.reset_reset_n(KEY[0]),
+		.reset_reset_n(~Reset_h),
+		// DRAM
 		.sdram_wire_addr(DRAM_ADDR),
 		.sdram_wire_ba(DRAM_BA),
 		.sdram_wire_cas_n(DRAM_CAS_N),
@@ -35,25 +111,27 @@ module osu_fpga_toplevel (
 		.sdram_wire_ras_n(DRAM_RAS_N),
 		.sdram_wire_we_n(DRAM_WE_N),
 		.sdram_clk_clk(DRAM_CLK),
+		// Flash
+		.flash_conn_ADDR(FL_ADDR),
+		.flash_conn_DQ(FL_DQ),
+		.flash_conn_CE_N(FL_CE_N),
+		.flash_conn_OE_N(FL_OE_N),
+		.flash_conn_WE_N(FL_WE_N),
+		.flash_conn_RST_N(FL_RESET_N),
+		// PS/2
 		.ps2_data_export(PS2_KBDAT),
-		.ps2_clk_export(PS2_KBCLK)
+		.ps2_clk_export(PS2_KBCLK),
+		// USB
+		.otg_hpi_address_export(hpi_addr),
+		.otg_hpi_data_in_port(hpi_data_in),
+		.otg_hpi_data_out_port(hpi_data_out),
+		.otg_hpi_cs_export(hpi_cs),
+		.otg_hpi_r_export(hpi_r),
+		.otg_hpi_w_export(hpi_w),
+		// LEDs
+		.hex_export(hex_export),
+		.ledr_export(LEDR),
+		.ledg_export(LEDG)
 	);
 
-	// logic[7:0] kdr1, kdr2, kur1, kur2, kc;
-	// logic[2:0] st;
-
-	// ps2kb kb(.CLK(CLOCK_50), .RESET(~KEY[0]), .AVL_READ(0), .AVL_WRITE(0), .AVL_CS(0),
-	//    .AVL_BYTE_EN(0), .AVL_ADDR(0), .AVL_WRITEDATA(0), .AVL_READDATA(0),
-	//    .PS2_CLK(PS2_KBCLK), .PS2_DATA(PS2_KBDAT), .debug_state(LEDG[2:0]), .debug_kc(LEDR[7:0]),
-	//    .debug_kdr1(kdr1), .debug_kdr2(kdr2), .debug_kur1(kur1), .debug_kur2(kur2));
-
-	// hexdriver kd1l(.In(kdr1[3:0]), .Out(HEX0));
-	// hexdriver kd1h(.In(kdr1[7:4]), .Out(HEX1));
-	// hexdriver kd2l(.In(kdr2[3:0]), .Out(HEX2));
-	// hexdriver kd2h(.In(kdr2[7:4]), .Out(HEX3));
-	// hexdriver ku1l(.In(kur1[3:0]), .Out(HEX4));
-	// hexdriver ku1h(.In(kur1[7:4]), .Out(HEX5));
-	// hexdriver ku2l(.In(kur2[3:0]), .Out(HEX6));
-	// hexdriver ku2h(.In(kur2[7:4]), .Out(HEX7));
-	// hexdriver sthex(.In({1'b0,st}), .Out(HEX7));
 endmodule
diff --git a/osu_fpga_toplevel_assignment_defaults.qdf b/osu_fpga_toplevel_assignment_defaults.qdf
new file mode 100644
index 0000000000000000000000000000000000000000..e44468ff093ba55f5104594c4b5b2853f466d92d
--- /dev/null
+++ b/osu_fpga_toplevel_assignment_defaults.qdf
@@ -0,0 +1,807 @@
+# -------------------------------------------------------------------------- #
+#
+# Copyright (C) 2017  Intel Corporation. All rights reserved.
+# Your use of Intel Corporation's design tools, logic functions 
+# and other software and tools, and its AMPP partner logic 
+# functions, and any output files from any of the foregoing 
+# (including device programming or simulation files), and any 
+# associated documentation or information are expressly subject 
+# to the terms and conditions of the Intel Program License 
+# Subscription Agreement, the Intel Quartus Prime License Agreement,
+# the Intel FPGA IP License Agreement, or other applicable license
+# agreement, including, without limitation, that your use is for
+# the sole purpose of programming logic devices manufactured by
+# Intel and sold by Intel or its authorized distributors.  Please
+# refer to the applicable agreement for further details.
+#
+# -------------------------------------------------------------------------- #
+#
+# Quartus Prime
+# Version 17.1.0 Build 590 10/25/2017 SJ Lite Edition
+# Date created = 02:27:58  November 20, 2017
+#
+# -------------------------------------------------------------------------- #
+#
+# Note:
+#
+# 1) Do not modify this file. This file was generated
+#    automatically by the Quartus Prime software and is used
+#    to preserve global assignments across Quartus Prime versions.
+#
+# -------------------------------------------------------------------------- #
+
+set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off
+set_global_assignment -name IP_COMPONENT_INTERNAL Off
+set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On
+set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off
+set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off
+set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db
+set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off
+set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off
+set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off
+set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off
+set_global_assignment -name HC_OUTPUT_DIR hc_output
+set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off
+set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off
+set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On
+set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off
+set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings"
+set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On
+set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On
+set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off
+set_global_assignment -name REVISION_TYPE Base -family "Arria V"
+set_global_assignment -name REVISION_TYPE Base -family "Stratix V"
+set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ"
+set_global_assignment -name REVISION_TYPE Base -family "Cyclone V"
+set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle"
+set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On
+set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On
+set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On
+set_global_assignment -name DO_COMBINED_ANALYSIS Off
+set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off
+set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off
+set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off
+set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off
+set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On
+set_global_assignment -name TIMEQUEST_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "MAX 10"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix IV"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV E"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria 10"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX V"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix V"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria V GZ"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX II"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GX"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GZ"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV GX"
+set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone V"
+set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING Off
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX"
+set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V"
+set_global_assignment -name TIMEQUEST_REPORT_NUM_WORST_CASE_TIMING_PATHS 100
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone 10 LP"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "MAX 10"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV E"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix IV"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria 10"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX V"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix V"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria V GZ"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX II"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GX"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GZ"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV GX"
+set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone V"
+set_global_assignment -name OPTIMIZATION_MODE Balanced
+set_global_assignment -name ALLOW_REGISTER_MERGING On
+set_global_assignment -name ALLOW_REGISTER_DUPLICATION On
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Cyclone 10 LP"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX 10"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix IV"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV E"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q ON -family "Arria 10"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX V"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Stratix V"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria V GZ"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "MAX II"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GX"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Arria II GZ"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone IV GX"
+set_global_assignment -name TIMEQUEST_SPECTRA_Q OFF -family "Cyclone V"
+set_global_assignment -name MUX_RESTRUCTURE Auto
+set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off
+set_global_assignment -name ENABLE_IP_DEBUG Off
+set_global_assignment -name SAVE_DISK_SPACE On
+set_global_assignment -name OCP_HW_EVAL Enable
+set_global_assignment -name DEVICE_FILTER_PACKAGE Any
+set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any
+set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any
+set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "<None>"
+set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001
+set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993
+set_global_assignment -name FAMILY "Cyclone V"
+set_global_assignment -name TRUE_WYSIWYG_FLOW Off
+set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off
+set_global_assignment -name STATE_MACHINE_PROCESSING Auto
+set_global_assignment -name SAFE_STATE_MACHINE Off
+set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On
+set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On
+set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off
+set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000
+set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250
+set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On
+set_global_assignment -name PARALLEL_SYNTHESIS On
+set_global_assignment -name DSP_BLOCK_BALANCING Auto
+set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)"
+set_global_assignment -name NOT_GATE_PUSH_BACK On
+set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On
+set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off
+set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On
+set_global_assignment -name IGNORE_CARRY_BUFFERS Off
+set_global_assignment -name IGNORE_CASCADE_BUFFERS Off
+set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off
+set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off
+set_global_assignment -name IGNORE_LCELL_BUFFERS Off
+set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO
+set_global_assignment -name IGNORE_SOFT_BUFFERS On
+set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off
+set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off
+set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On
+set_global_assignment -name AUTO_GLOBAL_OE_MAX On
+set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On
+set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off
+set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut
+set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced
+set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced
+set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced
+set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced
+set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced
+set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced
+set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed
+set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced
+set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area
+set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area
+set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area
+set_global_assignment -name ALLOW_XOR_GATE_USAGE On
+set_global_assignment -name AUTO_LCELL_INSERTION On
+set_global_assignment -name CARRY_CHAIN_LENGTH 48
+set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32
+set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32
+set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48
+set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70
+set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70
+set_global_assignment -name CASCADE_CHAIN_LENGTH 2
+set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16
+set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4
+set_global_assignment -name AUTO_CARRY_CHAINS On
+set_global_assignment -name AUTO_CASCADE_CHAINS On
+set_global_assignment -name AUTO_PARALLEL_EXPANDERS On
+set_global_assignment -name AUTO_OPEN_DRAIN_PINS On
+set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off
+set_global_assignment -name AUTO_ROM_RECOGNITION On
+set_global_assignment -name AUTO_RAM_RECOGNITION On
+set_global_assignment -name AUTO_DSP_RECOGNITION On
+set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto
+set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto
+set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On
+set_global_assignment -name STRICT_RAM_RECOGNITION Off
+set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On
+set_global_assignment -name FORCE_SYNCH_CLEAR Off
+set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On
+set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off
+set_global_assignment -name AUTO_RESOURCE_SHARING Off
+set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off
+set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off
+set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off
+set_global_assignment -name MAX7000_FANIN_PER_CELL 100
+set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On
+set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)"
+set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)"
+set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)"
+set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off
+set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V"
+set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX"
+set_global_assignment -name REPORT_PARAMETER_SETTINGS On
+set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On
+set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On
+set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX"
+set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V"
+set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation"
+set_global_assignment -name HDL_MESSAGE_LEVEL Level2
+set_global_assignment -name USE_HIGH_SPEED_ADDER Auto
+set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100
+set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000
+set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000
+set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off
+set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000
+set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100
+set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On
+set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off
+set_global_assignment -name BLOCK_DESIGN_NAMING Auto
+set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off
+set_global_assignment -name SYNTHESIS_EFFORT Auto
+set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On
+set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off
+set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium
+set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V"
+set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX"
+set_global_assignment -name MAX_LABS "-1 (Unlimited)"
+set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On
+set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)"
+set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On
+set_global_assignment -name PRPOF_ID Off
+set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off
+set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On
+set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On
+set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off
+set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off
+set_global_assignment -name AUTO_MERGE_PLLS On
+set_global_assignment -name IGNORE_MODE_FOR_MERGE Off
+set_global_assignment -name TXPMA_SLEW_RATE Low
+set_global_assignment -name ADCE_ENABLED Auto
+set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal
+set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off
+set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0
+set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0
+set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0
+set_global_assignment -name SPECTRAQ_PHYSICAL_SYNTHESIS Off
+set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off
+set_global_assignment -name DEVICE AUTO
+set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off
+set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off
+set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On
+set_global_assignment -name ENABLE_NCEO_OUTPUT Off
+set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin"
+set_global_assignment -name STRATIXIII_UPDATE_MODE Standard
+set_global_assignment -name STRATIX_UPDATE_MODE Standard
+set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image"
+set_global_assignment -name CVP_MODE Off
+set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V"
+set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10"
+set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V"
+set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ"
+set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V"
+set_global_assignment -name VID_OPERATION_MODE "PMBus Slave"
+set_global_assignment -name USE_CONF_DONE AUTO
+set_global_assignment -name USE_PWRMGT_SCL AUTO
+set_global_assignment -name USE_PWRMGT_SDA AUTO
+set_global_assignment -name USE_PWRMGT_ALERT AUTO
+set_global_assignment -name USE_INIT_DONE AUTO
+set_global_assignment -name USE_CVP_CONFDONE AUTO
+set_global_assignment -name USE_SEU_ERROR AUTO
+set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial"
+set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration"
+set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial"
+set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial"
+set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial"
+set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial"
+set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial"
+set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial"
+set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial"
+set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial"
+set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial"
+set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial"
+set_global_assignment -name USER_START_UP_CLOCK Off
+set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off
+set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off
+set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On
+set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On
+set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC
+set_global_assignment -name ENABLE_VREFA_PIN Off
+set_global_assignment -name ENABLE_VREFB_PIN Off
+set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off
+set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off
+set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off
+set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off
+set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground"
+set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off
+set_global_assignment -name INIT_DONE_OPEN_DRAIN On
+set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated"
+set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated"
+set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated"
+set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO"
+set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin"
+set_global_assignment -name ENABLE_CONFIGURATION_PINS On
+set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off
+set_global_assignment -name ENABLE_NCE_PIN Off
+set_global_assignment -name ENABLE_BOOT_SEL_PIN On
+set_global_assignment -name CRC_ERROR_CHECKING Off
+set_global_assignment -name INTERNAL_SCRUBBING Off
+set_global_assignment -name PR_ERROR_OPEN_DRAIN On
+set_global_assignment -name PR_READY_OPEN_DRAIN On
+set_global_assignment -name ENABLE_CVP_CONFDONE Off
+set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On
+set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V"
+set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX"
+set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V"
+set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On
+set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto
+set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care
+set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV"
+set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10"
+set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V"
+set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ"
+set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0
+set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On
+set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation"
+set_global_assignment -name OPTIMIZE_SSN Off
+set_global_assignment -name OPTIMIZE_TIMING "Normal compilation"
+set_global_assignment -name ECO_OPTIMIZE_TIMING Off
+set_global_assignment -name ECO_REGENERATE_REPORT Off
+set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal
+set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off
+set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically
+set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically
+set_global_assignment -name SEED 1
+set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF
+set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off
+set_global_assignment -name SLOW_SLEW_RATE Off
+set_global_assignment -name PCI_IO Off
+set_global_assignment -name TURBO_BIT On
+set_global_assignment -name WEAK_PULL_UP_RESISTOR Off
+set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off
+set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off
+set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On
+set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto
+set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto
+set_global_assignment -name NORMAL_LCELL_INSERT On
+set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX"
+set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V"
+set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF
+set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off
+set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off
+set_global_assignment -name AUTO_TURBO_BIT ON
+set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off
+set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off
+set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off
+set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off
+set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off
+set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off
+set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off
+set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On
+set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off
+set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off
+set_global_assignment -name FITTER_EFFORT "Auto Fit"
+set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns
+set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal
+set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto
+set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto
+set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off
+set_global_assignment -name AUTO_GLOBAL_CLOCK On
+set_global_assignment -name AUTO_GLOBAL_OE On
+set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On
+set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic
+set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off
+set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off
+set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off
+set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off
+set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off
+set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off
+set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off
+set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off
+set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off
+set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off
+set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off
+set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off
+set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off
+set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off
+set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off
+set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up"
+set_global_assignment -name ENABLE_HOLD_BACK_OFF On
+set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto
+set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off
+set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto
+set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On
+set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V"
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP"
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10"
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E"
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10"
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V"
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ"
+set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V"
+set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)"
+set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)"
+set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)"
+set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)"
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10"
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V"
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V"
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX"
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ"
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V"
+set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX"
+set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off
+set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On
+set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off
+set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off
+set_global_assignment -name PR_DONE_OPEN_DRAIN On
+set_global_assignment -name NCEO_OPEN_DRAIN On
+set_global_assignment -name ENABLE_CRC_ERROR_PIN Off
+set_global_assignment -name ENABLE_PR_PINS Off
+set_global_assignment -name RESERVE_PR_PINS Off
+set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off
+set_global_assignment -name PR_PINS_OPEN_DRAIN Off
+set_global_assignment -name CLAMPING_DIODE Off
+set_global_assignment -name TRI_STATE_SPI_PINS Off
+set_global_assignment -name UNUSED_TSD_PINS_GND Off
+set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off
+set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off
+set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium
+set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V"
+set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV"
+set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10"
+set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V"
+set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ"
+set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V"
+set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0
+set_global_assignment -name SEU_FIT_REPORT Off
+set_global_assignment -name HYPER_RETIMER Off -family "Arria 10"
+set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1"
+set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto
+set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto
+set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On
+set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On
+set_global_assignment -name EDA_SIMULATION_TOOL "<None>"
+set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "<None>"
+set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "<None>"
+set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "<None>"
+set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "<None>"
+set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "<None>"
+set_global_assignment -name EDA_BOARD_DESIGN_TOOL "<None>"
+set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "<None>"
+set_global_assignment -name EDA_RESYNTHESIS_TOOL "<None>"
+set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On
+set_global_assignment -name COMPRESSION_MODE Off
+set_global_assignment -name CLOCK_SOURCE Internal
+set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz"
+set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1
+set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On
+set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off
+set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On
+set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF
+set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF
+set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF
+set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF
+set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F
+set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF
+set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off
+set_global_assignment -name USE_CHECKSUM_AS_USERCODE On
+set_global_assignment -name SECURITY_BIT Off
+set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP"
+set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10"
+set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E"
+set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV"
+set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V"
+set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II"
+set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX"
+set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ"
+set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX"
+set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto
+set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto
+set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130"
+set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000
+set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000
+set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000
+set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000
+set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000
+set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000
+set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000
+set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000
+set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery"
+set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0
+set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0
+set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0
+set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto
+set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto
+set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto
+set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto
+set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto
+set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto
+set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF
+set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF
+set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF
+set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF
+set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off
+set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On
+set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off
+set_global_assignment -name GENERATE_TTF_FILE Off
+set_global_assignment -name GENERATE_RBF_FILE Off
+set_global_assignment -name GENERATE_HEX_FILE Off
+set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0
+set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up
+set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal"
+set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off
+set_global_assignment -name AUTO_RESTART_CONFIGURATION On
+set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off
+set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off
+set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V"
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP"
+set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10"
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E"
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10"
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V"
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ"
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX"
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX"
+set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V"
+set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF
+set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off
+set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off
+set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off
+set_global_assignment -name POR_SCHEME "Instant ON"
+set_global_assignment -name EN_USER_IO_WEAK_PULLUP On
+set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On
+set_global_assignment -name POF_VERIFY_PROTECT Off
+set_global_assignment -name ENABLE_SPI_MODE_CHECK Off
+set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On
+set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off
+set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0
+set_global_assignment -name GENERATE_PMSF_FILES On
+set_global_assignment -name START_TIME 0ns
+set_global_assignment -name SIMULATION_MODE TIMING
+set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off
+set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On
+set_global_assignment -name SETUP_HOLD_DETECTION Off
+set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off
+set_global_assignment -name CHECK_OUTPUTS Off
+set_global_assignment -name SIMULATION_COVERAGE On
+set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On
+set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On
+set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On
+set_global_assignment -name GLITCH_DETECTION Off
+set_global_assignment -name GLITCH_INTERVAL 1ns
+set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off
+set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On
+set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off
+set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On
+set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE
+set_global_assignment -name SIMULATION_NETLIST_VIEWER Off
+set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT
+set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT
+set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off
+set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO
+set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO
+set_global_assignment -name DRC_TOP_FANOUT 50
+set_global_assignment -name DRC_FANOUT_EXCEEDING 30
+set_global_assignment -name DRC_GATED_CLOCK_FEED 30
+set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY
+set_global_assignment -name ENABLE_DRC_SETTINGS Off
+set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25
+set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10
+set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30
+set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2
+set_global_assignment -name MERGE_HEX_FILE Off
+set_global_assignment -name GENERATE_SVF_FILE Off
+set_global_assignment -name GENERATE_ISC_FILE Off
+set_global_assignment -name GENERATE_JAM_FILE Off
+set_global_assignment -name GENERATE_JBC_FILE Off
+set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On
+set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off
+set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off
+set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off
+set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off
+set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On
+set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off
+set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state"
+set_global_assignment -name HPS_EARLY_IO_RELEASE Off
+set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off
+set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off
+set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5%
+set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5%
+set_global_assignment -name POWER_USE_PVA On
+set_global_assignment -name POWER_USE_INPUT_FILE "No File"
+set_global_assignment -name POWER_USE_INPUT_FILES Off
+set_global_assignment -name POWER_VCD_FILTER_GLITCHES On
+set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off
+set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off
+set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL
+set_global_assignment -name POWER_AUTO_COMPUTE_TJ On
+set_global_assignment -name POWER_TJ_VALUE 25
+set_global_assignment -name POWER_USE_TA_VALUE 25
+set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off
+set_global_assignment -name POWER_BOARD_TEMPERATURE 25
+set_global_assignment -name POWER_HPS_ENABLE Off
+set_global_assignment -name POWER_HPS_PROC_FREQ 0.0
+set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off
+set_global_assignment -name IGNORE_PARTITIONS Off
+set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off
+set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On
+set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End"
+set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On
+set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On
+set_global_assignment -name RTLV_GROUP_RELATED_NODES On
+set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off
+set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off
+set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On
+set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On
+set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On
+set_global_assignment -name EQC_BBOX_MERGE On
+set_global_assignment -name EQC_LVDS_MERGE On
+set_global_assignment -name EQC_RAM_UNMERGING On
+set_global_assignment -name EQC_DFF_SS_EMULATION On
+set_global_assignment -name EQC_RAM_REGISTER_UNPACK On
+set_global_assignment -name EQC_MAC_REGISTER_UNPACK On
+set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On
+set_global_assignment -name EQC_STRUCTURE_MATCHING On
+set_global_assignment -name EQC_AUTO_BREAK_CONE On
+set_global_assignment -name EQC_POWER_UP_COMPARE Off
+set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On
+set_global_assignment -name EQC_AUTO_INVERSION On
+set_global_assignment -name EQC_AUTO_TERMINATE On
+set_global_assignment -name EQC_SUB_CONE_REPORT Off
+set_global_assignment -name EQC_RENAMING_RULES On
+set_global_assignment -name EQC_PARAMETER_CHECK On
+set_global_assignment -name EQC_AUTO_PORTSWAP On
+set_global_assignment -name EQC_DETECT_DONT_CARES On
+set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off
+set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ?
+set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ?
+set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ?
+set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ?
+set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ?
+set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ?
+set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ?
+set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ?
+set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ?
+set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ?
+set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "<None>" -section_id ?
+set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ?
+set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ?
+set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ?
+set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ?
+set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ?
+set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ?
+set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ?
+set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ?
+set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ?
+set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ?
+set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ?
+set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ?
+set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ?
+set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ?
+set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ?
+set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ?
+set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ?
+set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ?
+set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ?
+set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ?
+set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ?
+set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ?
+set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ?
+set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ?
+set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ?
+set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ?
+set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ?
+set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ?
+set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ?
+set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ?
+set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ?
+set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ?
+set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ?
+set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ?
+set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ?
+set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ?
+set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ?
+set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ?
+set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ?
+set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ?
+set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ?
+set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ?
+set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ?
+set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ?
+set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ?
+set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ?
+set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ?
+set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ?
+set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ?
+set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ?
+set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ?
+set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ?
+set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ?
+set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ?
diff --git a/otogame.qsys b/otogame.qsys
index 32161491af34c542d168b3ade4540f48eb6b7143..0f38560ffde8dbe9b59c48423cdd7f003d829d51 100644
--- a/otogame.qsys
+++ b/otogame.qsys
@@ -21,15 +21,25 @@
    {
       datum _sortIndex
       {
-         value = "8";
+         value = "10";
          type = "int";
       }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
    }
    element flash.flash_data
    {
+      datum _lockedAddress
+      {
+         value = "0";
+         type = "boolean";
+      }
       datum baseAddress
       {
-         value = "402653184";
+         value = "536870912";
          type = "String";
       }
    }
@@ -37,7 +47,7 @@
    {
       datum baseAddress
       {
-         value = "406847488";
+         value = "552599552";
          type = "String";
       }
    }
@@ -45,7 +55,7 @@
    {
       datum _sortIndex
       {
-         value = "6";
+         value = "1";
          type = "int";
       }
    }
@@ -57,13 +67,26 @@
          type = "String";
       }
    }
+   element jtag_uart.irq
+   {
+      datum _tags
+      {
+         value = "";
+         type = "String";
+      }
+   }
    element keyboard
    {
       datum _sortIndex
       {
-         value = "9";
+         value = "11";
          type = "int";
       }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
    }
    element keyboard.key_events
    {
@@ -81,107 +104,179 @@
          type = "String";
       }
    }
-   element ocm_null
+   element mouse_btn_in
    {
       datum _sortIndex
       {
-         value = "2";
+         value = "19";
          type = "int";
       }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element mouse_btn_in.s1
+   {
+      datum baseAddress
+      {
+         value = "20800";
+         type = "String";
+      }
    }
-   element osu_sysid
+   element mouse_btn_out
    {
       datum _sortIndex
       {
-         value = "5";
+         value = "18";
          type = "int";
       }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
    }
-   element osu_sysid.control_slave
+   element mouse_btn_out.s1
    {
       datum baseAddress
       {
-         value = "8328";
+         value = "20800";
          type = "String";
       }
    }
-   element otogame
+   element mouse_scroll_in
    {
-      datum _originalDeviceFamily
+      datum _sortIndex
       {
-         value = "Cyclone IV E";
+         value = "17";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element mouse_scroll_in.s1
+   {
+      datum baseAddress
+      {
+         value = "20784";
          type = "String";
       }
    }
-   element otogame
+   element mouse_scroll_out
    {
-      datum _originalDeviceFamily
+      datum _sortIndex
       {
-         value = "Cyclone IV E";
+         value = "16";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element mouse_scroll_out.s1
+   {
+      datum baseAddress
+      {
+         value = "20784";
          type = "String";
       }
    }
-   element otogame
+   element mouse_x_in
    {
-      datum _originalDeviceFamily
+      datum _sortIndex
       {
-         value = "Cyclone IV E";
+         value = "13";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element mouse_x_in.s1
+   {
+      datum baseAddress
+      {
+         value = "20752";
          type = "String";
       }
    }
-   element proc_main
+   element mouse_x_out
    {
       datum _sortIndex
       {
-         value = "1";
+         value = "12";
          type = "int";
       }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
    }
-   element proc_main.jtag_debug_module
+   element mouse_x_out.s1
    {
       datum baseAddress
       {
-         value = "6144";
+         value = "20752";
          type = "String";
       }
    }
-   element sdram
+   element mouse_y_in
    {
       datum _sortIndex
       {
-         value = "3";
+         value = "15";
          type = "int";
       }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
    }
-   element sdram.s1
+   element mouse_y_in.s1
    {
       datum baseAddress
       {
-         value = "268435456";
+         value = "20768";
          type = "String";
       }
    }
-   element sdram_pll
+   element mouse_y_out
    {
       datum _sortIndex
       {
-         value = "4";
+         value = "14";
          type = "int";
       }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
    }
-   element sdram_pll.pll_slave
+   element mouse_y_out.s1
    {
       datum baseAddress
       {
-         value = "48";
+         value = "20768";
          type = "String";
       }
    }
-   element timer
+   element ocm_null
    {
       datum _sortIndex
       {
-         value = "7";
+         value = "8";
          type = "int";
       }
       datum sopceditor_expanded
@@ -190,129 +285,1100 @@
          type = "boolean";
       }
    }
-   element timer.s1
+   element otg_clock_crossing_bridge
+   {
+      datum _sortIndex
+      {
+         value = "25";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
+   }
+   element otg_clock_crossing_bridge.s0
    {
       datum baseAddress
       {
-         value = "64";
+         value = "805306368";
          type = "String";
       }
    }
-}
-]]></parameter>
- <parameter name="clockCrossingAdapter" value="HANDSHAKE" />
- <parameter name="device" value="EP4CE115F29C7" />
- <parameter name="deviceFamily" value="Cyclone IV E" />
- <parameter name="deviceSpeedGrade" value="7" />
- <parameter name="fabricMode" value="QSYS" />
- <parameter name="generateLegacySim" value="false" />
- <parameter name="generationId" value="0" />
- <parameter name="globalResetBus" value="false" />
- <parameter name="hdlLanguage" value="VERILOG" />
- <parameter name="hideFromIPCatalog" value="false" />
- <parameter name="lockedInterfaceDefinition" value="" />
- <parameter name="maxAdditionalLatency" value="1" />
- <parameter name="projectName" value="osu_fpga.qpf" />
- <parameter name="sopcBorderPoints" value="false" />
- <parameter name="systemHash" value="0" />
- <parameter name="testBenchDutName" value="" />
- <parameter name="timeStamp" value="0" />
- <parameter name="useTestBenchNamingPattern" value="false" />
- <instanceScript></instanceScript>
- <interface name="clk" internal="clk_50.clk_in" type="clock" dir="end" />
- <interface name="ps2_clk" internal="keyboard.ps2_clk" type="conduit" dir="end" />
- <interface name="ps2_clock_conn" internal="keyboard.ps2_clock_conn" />
- <interface name="ps2_conn" internal="keyboard.ps2_export" />
- <interface name="ps2_data" internal="keyboard.ps2_data" type="conduit" dir="end" />
- <interface name="ps2_data_conn" internal="keyboard.ps2_data_conn" />
- <interface name="reset" internal="clk_50.clk_in_reset" type="reset" dir="end" />
- <interface name="sdram_clk" internal="sdram_pll.c1" type="clock" dir="start" />
- <interface name="sdram_wire" internal="sdram.wire" type="conduit" dir="end" />
- <module name="clk_50" kind="clock_source" version="17.0" enabled="1">
-  <parameter name="clockFrequency" value="50000000" />
-  <parameter name="clockFrequencyKnown" value="true" />
-  <parameter name="inputClockFrequency" value="0" />
-  <parameter name="resetSynchronousEdges" value="NONE" />
- </module>
- <module
-   name="flash"
-   kind="Altera_UP_Flash_Memory_IP_Core_Avalon_Interface"
-   version="17.0"
-   enabled="0">
-  <parameter name="AUTO_CLK_CLOCK_RATE" value="50000000" />
-  <parameter name="AUTO_DEVICE_FAMILY" value="Cyclone IV E" />
-  <parameter name="FLASH_MEMORY_ADDRESS_WIDTH" value="22" />
- </module>
- <module
-   name="jtag_uart"
-   kind="altera_avalon_jtag_uart"
-   version="17.0"
-   enabled="1">
-  <parameter name="allowMultipleConnections" value="false" />
-  <parameter name="avalonSpec" value="2.0" />
-  <parameter name="clkFreq" value="50000000" />
-  <parameter name="hubInstanceID" value="0" />
-  <parameter name="readBufferDepth" value="64" />
-  <parameter name="readIRQThreshold" value="8" />
-  <parameter name="simInputCharacterStream" value="" />
-  <parameter name="simInteractiveOptions">NO_INTERACTIVE_WINDOWS</parameter>
-  <parameter name="useRegistersForReadBuffer" value="false" />
-  <parameter name="useRegistersForWriteBuffer" value="false" />
-  <parameter name="useRelativePathForSimFile" value="false" />
-  <parameter name="writeBufferDepth" value="64" />
-  <parameter name="writeIRQThreshold" value="8" />
- </module>
- <module name="keyboard" kind="ps2kb" version="1.0" enabled="1" />
- <module
-   name="ocm_null"
-   kind="altera_avalon_onchip_memory2"
-   version="17.0"
-   enabled="1">
-  <parameter name="allowInSystemMemoryContentEditor" value="false" />
-  <parameter name="autoInitializationFileName">$${FILENAME}_ocm_null</parameter>
-  <parameter name="blockType" value="AUTO" />
-  <parameter name="copyInitFile" value="false" />
-  <parameter name="dataWidth" value="32" />
-  <parameter name="dataWidth2" value="32" />
-  <parameter name="deviceFamily" value="Cyclone IV E" />
-  <parameter name="deviceFeatures">ADDRESS_STALL 1 ADVANCED_INFO 0 ALLOWS_COMPILING_OTHER_FAMILY_IP 1 ANY_QFP 0 CELL_LEVEL_BACK_ANNOTATION_DISABLED 0 COMPILER_SUPPORT 1 DSP 0 DSP_SHIFTER_BLOCK 0 DUMP_ASM_LAB_BITS_FOR_POWER 1 EMUL 1 ENABLE_ADVANCED_IO_ANALYSIS_GUI_FEATURES 1 ENABLE_PIN_PLANNER 0 ENGINEERING_SAMPLE 0 EPCS 1 ESB 0 FAKE1 0 FAKE2 0 FAKE3 0 FAMILY_LEVEL_INSTALLATION_ONLY 1 FASTEST 0 FINAL_TIMING_MODEL 0 FITTER_USE_FALLING_EDGE_DELAY 0 FPP_COMPLETELY_PLACES_AND_ROUTES_PERIPHERY 0 GENERATE_DC_ON_CURRENT_WARNING_FOR_INTERNAL_CLAMPING_DIODE 0 HARDCOPY 0 HAS_18_BIT_MULTS 0 HAS_ACE_SUPPORT 1 HAS_ACTIVE_PARALLEL_FLASH_SUPPORT 0 HAS_ADJUSTABLE_OUTPUT_IO_TIMING_MEAS_POINT 0 HAS_ADVANCED_IO_INVERTED_CORNER 0 HAS_ADVANCED_IO_POWER_SUPPORT 1 HAS_ADVANCED_IO_TIMING_SUPPORT 1 HAS_ALM_SUPPORT 0 HAS_ATOM_AND_ROUTING_POWER_MODELED_TOGETHER 0 HAS_AUTO_DERIVE_CLOCK_UNCERTAINTY_SUPPORT 0 HAS_AUTO_FIT_SUPPORT 1 HAS_BALANCED_OPT_TECHNIQUE_SUPPORT 1 HAS_BENEFICIAL_SKEW_SUPPORT 1 HAS_BITLEVEL_DRIVE_STRENGTH_CONTROL 1 HAS_BSDL_FILE_GENERATION 1 HAS_CDB_RE_NETWORK_PRESERVATION_SUPPORT 0 HAS_CGA_SUPPORT 1 HAS_CHECK_NETLIST_SUPPORT 0 HAS_CLOCK_REGION_CHECKER_ENABLED 1 HAS_CORE_JUNCTION_TEMP_DERATING 0 HAS_CROSSTALK_SUPPORT 0 HAS_CUSTOM_REGION_SUPPORT 1 HAS_DAP_JTAG_FROM_HPS 0 HAS_DATA_DRIVEN_ACVQ_HSSI_SUPPORT 0 HAS_DDB_FDI_SUPPORT 0 HAS_DESIGN_ANALYZER_SUPPORT 1 HAS_DETAILED_IO_RAIL_POWER_MODEL 1 HAS_DETAILED_LEIM_STATIC_POWER_MODEL 1 HAS_DETAILED_LE_POWER_MODEL 1 HAS_DETAILED_ROUTING_MUX_STATIC_POWER_MODEL 1 HAS_DETAILED_THERMAL_CIRCUIT_PARAMETER_SUPPORT 1 HAS_DEVICE_MIGRATION_SUPPORT 1 HAS_DIAGONAL_MIGRATION_SUPPORT 0 HAS_EMIF_TOOLKIT_SUPPORT 0 HAS_ERROR_DETECTION_SUPPORT 0 HAS_FAMILY_VARIANT_MIGRATION_SUPPORT 0 HAS_FANOUT_FREE_NODE_SUPPORT 1 HAS_FAST_FIT_SUPPORT 1 HAS_FITTER_ECO_SUPPORT 1 HAS_FIT_NETLIST_OPT_RETIME_SUPPORT 1 HAS_FIT_NETLIST_OPT_SUPPORT 1 HAS_FORMAL_VERIFICATION_SUPPORT 1 HAS_FPGA_XCHANGE_SUPPORT 1 HAS_FSAC_LUTRAM_REGISTER_PACKING_SUPPORT 0 HAS_FULL_DAT_MIN_TIMING_SUPPORT 1 HAS_FULL_INCREMENTAL_DESIGN_SUPPORT 1 HAS_FUNCTIONAL_SIMULATION_SUPPORT 1 HAS_FUNCTIONAL_VERILOG_SIMULATION_SUPPORT 0 HAS_FUNCTIONAL_VHDL_SIMULATION_SUPPORT 0 HAS_GLITCH_FILTERING_SUPPORT 1 HAS_HARDCOPYII_SUPPORT 0 HAS_HC_READY_SUPPORT 0 HAS_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 0 HAS_HOLD_TIME_AVOIDANCE_ACROSS_CLOCK_SPINE_SUPPORT 1 HAS_HSPICE_WRITER_SUPPORT 1 HAS_HSSI_POWER_CALCULATOR 0 HAS_IBISO_WRITER_SUPPORT 0 HAS_ICD_DATA_IP 0 HAS_IDB_SUPPORT 1 HAS_INCREMENTAL_DAT_SUPPORT 1 HAS_INCREMENTAL_SYNTHESIS_SUPPORT 1 HAS_IO_ASSIGNMENT_ANALYSIS_SUPPORT 1 HAS_IO_DECODER 0 HAS_IO_PLACEMENT_OPTIMIZATION_SUPPORT 1 HAS_IO_PLACEMENT_USING_GEOMETRY_RULE 0 HAS_IO_PLACEMENT_USING_PHYSIC_RULE 0 HAS_IO_SMART_RECOMPILE_SUPPORT 0 HAS_JITTER_SUPPORT 1 HAS_JTAG_SLD_HUB_SUPPORT 1 HAS_LOGIC_LOCK_SUPPORT 1 HAS_MICROPROCESSOR 0 HAS_MIF_SMART_COMPILE_SUPPORT 1 HAS_MINMAX_TIMING_MODELING_SUPPORT 1 HAS_MIN_TIMING_ANALYSIS_SUPPORT 1 HAS_MUX_RESTRUCTURE_SUPPORT 1 HAS_NADDER_STYLE_CLOCKING 0 HAS_NADDER_STYLE_FF 0 HAS_NADDER_STYLE_LCELL_COMB 0 HAS_NEW_CDB_NAME_FOR_M20K_SCLR 0 HAS_NEW_HC_FLOW_SUPPORT 0 HAS_NEW_SERDES_MAX_RESOURCE_COUNT_REPORTING_SUPPORT 1 HAS_NEW_VPR_SUPPORT 1 HAS_NONSOCKET_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_NO_HARDBLOCK_PARTITION_SUPPORT 0 HAS_NO_JTAG_USERCODE_SUPPORT 0 HAS_OPERATING_SETTINGS_AND_CONDITIONS_REPORTING_SUPPORT 1 HAS_PAD_LOCATION_ASSIGNMENT_SUPPORT 0 HAS_PARTIAL_RECONFIG_SUPPORT 0 HAS_PASSIVE_PARALLEL_SUPPORT 0 HAS_PDN_MODEL_STATUS 0 HAS_PHYSICAL_DESIGN_PLANNER_SUPPORT 0 HAS_PHYSICAL_NETLIST_OUTPUT 0 HAS_PHYSICAL_ROUTING_SUPPORT 0 HAS_PIN_SPECIFIC_VOLTAGE_SUPPORT 1 HAS_PLDM_REF_SUPPORT 1 HAS_POWER_BINNING_LIMITS_DATA 0 HAS_POWER_ESTIMATION_SUPPORT 1 HAS_PRELIMINARY_CLOCK_UNCERTAINTY_NUMBERS 0 HAS_PRE_FITTER_FPP_SUPPORT 0 HAS_PRE_FITTER_LUTRAM_NETLIST_CHECKER_ENABLED 0 HAS_PVA_SUPPORT 1 HAS_QUARTUS_HIERARCHICAL_DESIGN_SUPPORT 0 HAS_RAPID_RECOMPILE_SUPPORT 0 HAS_RCF_SUPPORT 1 HAS_RCF_SUPPORT_FOR_DEBUGGING 0 HAS_RED_BLACK_SEPARATION_SUPPORT 0 HAS_RE_LEVEL_TIMING_GRAPH_SUPPORT 1 HAS_RISEFALL_DELAY_SUPPORT 1 HAS_SIGNAL_PROBE_SUPPORT 1 HAS_SIGNAL_TAP_SUPPORT 1 HAS_SIMULATOR_SUPPORT 0 HAS_SPLIT_IO_SUPPORT 1 HAS_SPLIT_LC_SUPPORT 1 HAS_STRICT_PRESERVATION_SUPPORT 1 HAS_SYNTHESIS_ON_ATOMS 0 HAS_SYNTH_FSYN_NETLIST_OPT_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_RETIME_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_SUPPORT 1 HAS_TCL_FITTER_SUPPORT 0 HAS_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_TEMPLATED_REGISTER_PACKING_SUPPORT 1 HAS_TIME_BORROWING_SUPPORT 0 HAS_TIMING_DRIVEN_SYNTHESIS_SUPPORT 1 HAS_TIMING_INFO_SUPPORT 1 HAS_TIMING_OPERATING_CONDITIONS 1 HAS_TIMING_SIMULATION_SUPPORT 1 HAS_TITAN_BASED_MAC_REGISTER_PACKER_SUPPORT 0 HAS_U2B2_SUPPORT 0 HAS_USER_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 0 HAS_USE_FITTER_INFO_SUPPORT 1 HAS_VCCPD_POWER_RAIL 0 HAS_VERTICAL_MIGRATION_SUPPORT 1 HAS_VIEWDRAW_SYMBOL_SUPPORT 0 HAS_VIO_SUPPORT 1 HAS_VIRTUAL_DEVICES 0 HAS_WYSIWYG_DFFEAS_SUPPORT 1 HAS_XIBISO2_WRITER_SUPPORT 0 HAS_XIBISO_WRITER_SUPPORT 1 IFP_USE_LEGACY_IO_CHECKER 0 INCREMENTAL_DESIGN_SUPPORTS_COMPATIBLE_CONSTRAINTS 1 INSTALLED 0 INTERNAL_POF_SUPPORT_ENABLED 0 INTERNAL_USE_ONLY 0 ISSUE_MILITARY_TEMPERATURE_WARNING 0 IS_BARE_DIE 0 IS_CONFIG_ROM 0 IS_DEFAULT_FAMILY 0 IS_FOR_INTERNAL_TESTING_ONLY 0 IS_HARDCOPY_FAMILY 0 IS_HBGA_PACKAGE 0 IS_HIGH_CURRENT_PART 0 IS_LOW_POWER_PART 0 IS_REVE_SILICON 0 IS_SDM_ONLY_PACKAGE 0 IS_SMI_PART 0 LOAD_BLK_TYPE_DATA_FROM_ATOM_WYS_INFO 0 LVDS_IO 1 M10K_MEMORY 0 M144K_MEMORY 0 M20K_MEMORY 0 M4K_MEMORY 0 M512_MEMORY 0 M9K_MEMORY 1 MLAB_MEMORY 0 MRAM_MEMORY 0 NOT_LISTED 0 NOT_MIGRATABLE 0 NO_FITTER_DELAY_CACHE_GENERATED 0 NO_PIN_OUT 0 NO_POF 0 NO_RPE_SUPPORT 0 NO_SUPPORT_FOR_LOGICLOCK_CONTENT_BACK_ANNOTATION 1 NO_SUPPORT_FOR_STA_CLOCK_UNCERTAINTY_CHECK 0 NO_TDC_SUPPORT 0 POSTFIT_BAK_DATABASE_EXPORT_ENABLED 1 POSTMAP_BAK_DATABASE_EXPORT_ENABLED 1 PROGRAMMER_ONLY 0 PROGRAMMER_SUPPORT 1 PVA_SUPPORTS_ONLY_SUBSET_OF_ATOMS 0 QFIT_IN_DEVELOPMENT 0 QMAP_IN_DEVELOPMENT 0 RAM_LOGICAL_NAME_CHECKING_IN_CUT_ENABLED 1 REPORTS_METASTABILITY_MTBF 1 REQUIRES_INSTALLATION_PATCH 0 REQUIRES_LIST_OF_TEMPERATURE_AND_VOLTAGE_OPERATING_CONDITIONS 1 REQUIRE_QUARTUS_HIERARCHICAL_DESIGN 0 REQUIRE_SPECIAL_HANDLING_FOR_LOCAL_LABLINE 1 RESERVES_SIGNAL_PROBE_PINS 0 RESOLVE_MAX_FANOUT_EARLY 1 RESOLVE_MAX_FANOUT_LATE 0 RESPECTS_FIXED_SIZED_LOCKED_LOCATION_LOGICLOCK 1 RESTRICTED_USER_SELECTION 0 RESTRICT_PARTIAL_RECONFIG 0 RISEFALL_SUPPORT_IS_HIDDEN 0 SHOW_HIDDEN_FAMILY_IN_PROGRAMMER 0 STRICT_TIMING_DB_CHECKS 0 SUPPORTS_ADDITIONAL_OPTIONS_FOR_UNUSED_IO 0 SUPPORTS_CRC 1 SUPPORTS_DIFFERENTIAL_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_DSP_BALANCING_BACK_ANNOTATION 0 SUPPORTS_GENERATION_OF_EARLY_POWER_ESTIMATOR_FILE 1 SUPPORTS_GLOBAL_SIGNAL_BACK_ANNOTATION 0 SUPPORTS_HIPI_RETIMING 0 SUPPORTS_LICENSE_FREE_PARTIAL_RECONFIG 0 SUPPORTS_MAC_CHAIN_OUT_ADDER 0 SUPPORTS_RAM_PACKING_BACK_ANNOTATION 0 SUPPORTS_REG_PACKING_BACK_ANNOTATION 0 SUPPORTS_SIGNALPROBE_REGISTER_PIPELINING 1 SUPPORTS_SINGLE_ENDED_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_USER_MANUAL_LOGIC_DUPLICATION 1 SUPPORTS_VID 0 SUPPORT_HIGH_SPEED_HPS 0 TMV_RUN_CUSTOMIZABLE_VIEWER 1 TMV_RUN_INTERNAL_DETAILS 1 TMV_RUN_INTERNAL_DETAILS_ON_IO 0 TMV_RUN_INTERNAL_DETAILS_ON_IOBUF 1 TMV_RUN_INTERNAL_DETAILS_ON_LCELL 0 TMV_RUN_INTERNAL_DETAILS_ON_LRAM 0 TRANSCEIVER_3G_BLOCK 0 TRANSCEIVER_6G_BLOCK 0 USES_ACV_FOR_FLED 1 USES_ADB_FOR_BACK_ANNOTATION 1 USES_ALTERA_LNSIM 0 USES_ASIC_ROUTING_POWER_CALCULATOR 0 USES_DATA_DRIVEN_PLL_COMPUTATION_UTIL 1 USES_DEV 1 USES_ICP_FOR_ECO_FITTER 0 USES_LIBERTY_TIMING 0 USES_NETWORK_ROUTING_POWER_CALCULATOR 0 USES_PART_INFO_FOR_DISPLAYING_CORE_VOLTAGE_VALUE 0 USES_POWER_SIGNAL_ACTIVITIES 1 USES_PVAFAM2 0 USES_SECOND_GENERATION_PART_INFO 0 USES_SECOND_GENERATION_POWER_ANALYZER 0 USES_THIRD_GENERATION_TIMING_MODELS_TIS 1 USES_U2B2_TIMING_MODELS 0 USES_XML_FORMAT_FOR_EMIF_PIN_MAP_FILE 0 USE_ADVANCED_IO_POWER_BY_DEFAULT 1 USE_ADVANCED_IO_TIMING_BY_DEFAULT 1 USE_BASE_FAMILY_DDB_PATH 0 USE_OCT_AUTO_CALIBRATION 1 USE_RELAX_IO_ASSIGNMENT_RULES 0 USE_RISEFALL_ONLY 1 USE_SEPARATE_LIST_FOR_TECH_MIGRATION 0 USE_SINGLE_COMPILER_PASS_PLL_MIF_FILE_WRITER 1 USE_TITAN_IO_BASED_IO_REGISTER_PACKER_UTIL 0 USING_28NM_OR_OLDER_TIMING_METHODOLOGY 1 WYSIWYG_BUS_WIDTH_CHECKING_IN_CUT_ENABLED 1</parameter>
-  <parameter name="dualPort" value="false" />
-  <parameter name="ecc_enabled" value="false" />
-  <parameter name="enPRInitMode" value="false" />
-  <parameter name="enableDiffWidth" value="false" />
-  <parameter name="initMemContent" value="true" />
-  <parameter name="initializationFileName" value="onchip_mem.hex" />
-  <parameter name="instanceID" value="NONE" />
-  <parameter name="memorySize" value="16" />
-  <parameter name="readDuringWriteMode" value="DONT_CARE" />
-  <parameter name="resetrequest_enabled" value="true" />
-  <parameter name="simAllowMRAMContentsFile" value="false" />
-  <parameter name="simMemInitOnlyFilename" value="0" />
-  <parameter name="singleClockOperation" value="false" />
-  <parameter name="slave1Latency" value="1" />
-  <parameter name="slave2Latency" value="1" />
-  <parameter name="useNonDefaultInitFile" value="false" />
-  <parameter name="useShallowMemBlocks" value="false" />
-  <parameter name="writable" value="true" />
- </module>
- <module
-   name="osu_sysid"
-   kind="altera_avalon_sysid_qsys"
-   version="17.0"
-   enabled="1">
-  <parameter name="id" value="1869837601" />
+   element otg_hpi_address
+   {
+      datum _sortIndex
+      {
+         value = "21";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element otg_hpi_address.s1
+   {
+      datum baseAddress
+      {
+         value = "8720";
+         type = "String";
+      }
+   }
+   element otg_hpi_cs
+   {
+      datum _sortIndex
+      {
+         value = "20";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element otg_hpi_cs.s1
+   {
+      datum baseAddress
+      {
+         value = "8704";
+         type = "String";
+      }
+   }
+   element otg_hpi_data
+   {
+      datum _sortIndex
+      {
+         value = "22";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element otg_hpi_data.s1
+   {
+      datum baseAddress
+      {
+         value = "8736";
+         type = "String";
+      }
+   }
+   element otg_hpi_r
+   {
+      datum _sortIndex
+      {
+         value = "23";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element otg_hpi_r.s1
+   {
+      datum baseAddress
+      {
+         value = "8752";
+         type = "String";
+      }
+   }
+   element otg_hpi_w
+   {
+      datum _sortIndex
+      {
+         value = "24";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element otg_hpi_w.s1
+   {
+      datum baseAddress
+      {
+         value = "8768";
+         type = "String";
+      }
+   }
+   element otogame
+   {
+      datum _originalDeviceFamily
+      {
+         value = "Cyclone IV E";
+         type = "String";
+      }
+   }
+   element otogame
+   {
+      datum _originalDeviceFamily
+      {
+         value = "Cyclone IV E";
+         type = "String";
+      }
+   }
+   element otogame
+   {
+      datum _originalDeviceFamily
+      {
+         value = "Cyclone IV E";
+         type = "String";
+      }
+   }
+   element pio_hex
+   {
+      datum _sortIndex
+      {
+         value = "26";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element pio_hex.s1
+   {
+      datum baseAddress
+      {
+         value = "8448";
+         type = "String";
+      }
+   }
+   element pio_ledg
+   {
+      datum _sortIndex
+      {
+         value = "28";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element pio_ledg.s1
+   {
+      datum baseAddress
+      {
+         value = "8480";
+         type = "String";
+      }
+   }
+   element pio_ledr
+   {
+      datum _sortIndex
+      {
+         value = "27";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "0";
+         type = "boolean";
+      }
+   }
+   element pio_ledr.s1
+   {
+      datum baseAddress
+      {
+         value = "8464";
+         type = "String";
+      }
+   }
+   element pll
+   {
+      datum _sortIndex
+      {
+         value = "7";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
+   }
+   element pll.pll_slave
+   {
+      datum baseAddress
+      {
+         value = "48";
+         type = "String";
+      }
+   }
+   element proc_main
+   {
+      datum _sortIndex
+      {
+         value = "3";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
+   }
+   element proc_main.clk
+   {
+      datum _tags
+      {
+         value = "";
+         type = "String";
+      }
+   }
+   element proc_main.jtag_debug_module
+   {
+      datum baseAddress
+      {
+         value = "4096";
+         type = "String";
+      }
+   }
+   element proc_usb
+   {
+      datum _sortIndex
+      {
+         value = "5";
+         type = "int";
+      }
+   }
+   element proc_usb.jtag_debug_module
+   {
+      datum baseAddress
+      {
+         value = "6144";
+         type = "String";
+      }
+   }
+   element sdram
+   {
+      datum _sortIndex
+      {
+         value = "9";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
+   }
+   element sdram.s1
+   {
+      datum baseAddress
+      {
+         value = "268435456";
+         type = "String";
+      }
+   }
+   element sysid_main
+   {
+      datum _sortIndex
+      {
+         value = "4";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
+   }
+   element sysid_main.control_slave
+   {
+      datum baseAddress
+      {
+         value = "8320";
+         type = "String";
+      }
+   }
+   element sysid_usb
+   {
+      datum _sortIndex
+      {
+         value = "6";
+         type = "int";
+      }
+   }
+   element sysid_usb.control_slave
+   {
+      datum baseAddress
+      {
+         value = "8320";
+         type = "String";
+      }
+   }
+   element timer
+   {
+      datum _sortIndex
+      {
+         value = "2";
+         type = "int";
+      }
+      datum sopceditor_expanded
+      {
+         value = "1";
+         type = "boolean";
+      }
+   }
+   element timer.irq
+   {
+      datum _tags
+      {
+         value = "";
+         type = "String";
+      }
+   }
+   element timer.reset
+   {
+      datum _tags
+      {
+         value = "";
+         type = "String";
+      }
+   }
+   element timer.s1
+   {
+      datum baseAddress
+      {
+         value = "64";
+         type = "String";
+      }
+   }
+}
+]]></parameter>
+ <parameter name="clockCrossingAdapter" value="HANDSHAKE" />
+ <parameter name="device" value="EP4CE115F29C7" />
+ <parameter name="deviceFamily" value="Cyclone IV E" />
+ <parameter name="deviceSpeedGrade" value="7" />
+ <parameter name="fabricMode" value="QSYS" />
+ <parameter name="generateLegacySim" value="false" />
+ <parameter name="generationId" value="0" />
+ <parameter name="globalResetBus" value="false" />
+ <parameter name="hdlLanguage" value="VERILOG" />
+ <parameter name="hideFromIPCatalog" value="false" />
+ <parameter name="lockedInterfaceDefinition" value="" />
+ <parameter name="maxAdditionalLatency" value="1" />
+ <parameter name="projectName" value="osu_fpga.qpf" />
+ <parameter name="sopcBorderPoints" value="false" />
+ <parameter name="systemHash" value="0" />
+ <parameter name="testBenchDutName" value="" />
+ <parameter name="timeStamp" value="0" />
+ <parameter name="useTestBenchNamingPattern" value="false" />
+ <instanceScript></instanceScript>
+ <interface name="clk" internal="clk_50.clk_in" type="clock" dir="end" />
+ <interface
+   name="flash_conn"
+   internal="flash.conduit_end"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="hex"
+   internal="pio_hex.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="ledg"
+   internal="pio_ledg.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="ledr"
+   internal="pio_ledr.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="otg_hpi_address"
+   internal="otg_hpi_address.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="otg_hpi_cs"
+   internal="otg_hpi_cs.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="otg_hpi_data"
+   internal="otg_hpi_data.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="otg_hpi_r"
+   internal="otg_hpi_r.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface
+   name="otg_hpi_w"
+   internal="otg_hpi_w.external_connection"
+   type="conduit"
+   dir="end" />
+ <interface name="ps2_clk" internal="keyboard.ps2_clk" type="conduit" dir="end" />
+ <interface name="ps2_clock_conn" internal="keyboard.ps2_clock_conn" />
+ <interface name="ps2_conn" internal="keyboard.ps2_export" />
+ <interface name="ps2_data" internal="keyboard.ps2_data" type="conduit" dir="end" />
+ <interface name="ps2_data_conn" internal="keyboard.ps2_data_conn" />
+ <interface name="reset" internal="clk_50.clk_in_reset" type="reset" dir="end" />
+ <interface name="sdram_clk" internal="pll.c1" type="clock" dir="start" />
+ <interface name="sdram_wire" internal="sdram.wire" type="conduit" dir="end" />
+ <module name="clk_50" kind="clock_source" version="17.1" enabled="1">
+  <parameter name="clockFrequency" value="50000000" />
+  <parameter name="clockFrequencyKnown" value="true" />
+  <parameter name="inputClockFrequency" value="0" />
+  <parameter name="resetSynchronousEdges" value="NONE" />
+ </module>
+ <module
+   name="flash"
+   kind="Altera_UP_Flash_Memory_IP_Core_Avalon_Interface"
+   version="17.1"
+   enabled="1">
+  <parameter name="AUTO_CLK_CLOCK_RATE" value="50000000" />
+  <parameter name="AUTO_DEVICE_FAMILY" value="Cyclone IV E" />
+  <parameter name="FLASH_MEMORY_ADDRESS_WIDTH" value="23" />
+ </module>
+ <module
+   name="jtag_uart"
+   kind="altera_avalon_jtag_uart"
+   version="17.1"
+   enabled="1">
+  <parameter name="allowMultipleConnections" value="false" />
+  <parameter name="avalonSpec" value="2.0" />
+  <parameter name="clkFreq" value="50000000" />
+  <parameter name="hubInstanceID" value="0" />
+  <parameter name="readBufferDepth" value="64" />
+  <parameter name="readIRQThreshold" value="8" />
+  <parameter name="simInputCharacterStream" value="" />
+  <parameter name="simInteractiveOptions">NO_INTERACTIVE_WINDOWS</parameter>
+  <parameter name="useRegistersForReadBuffer" value="false" />
+  <parameter name="useRegistersForWriteBuffer" value="false" />
+  <parameter name="useRelativePathForSimFile" value="false" />
+  <parameter name="writeBufferDepth" value="64" />
+  <parameter name="writeIRQThreshold" value="8" />
+ </module>
+ <module name="keyboard" kind="ps2kb" version="1.0" enabled="1" />
+ <module
+   name="mouse_btn_in"
+   kind="altera_avalon_pio"
+   version="17.1"
+   enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Input" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="3" />
+ </module>
+ <module
+   name="mouse_btn_out"
+   kind="altera_avalon_pio"
+   version="17.1"
+   enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="3" />
+ </module>
+ <module
+   name="mouse_scroll_in"
+   kind="altera_avalon_pio"
+   version="17.1"
+   enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Input" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="8" />
+ </module>
+ <module
+   name="mouse_scroll_out"
+   kind="altera_avalon_pio"
+   version="17.1"
+   enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="8" />
+ </module>
+ <module name="mouse_x_in" kind="altera_avalon_pio" version="17.1" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Input" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="16" />
+ </module>
+ <module
+   name="mouse_x_out"
+   kind="altera_avalon_pio"
+   version="17.1"
+   enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="16" />
+ </module>
+ <module name="mouse_y_in" kind="altera_avalon_pio" version="17.1" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Input" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="16" />
+ </module>
+ <module
+   name="mouse_y_out"
+   kind="altera_avalon_pio"
+   version="17.1"
+   enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="16" />
+ </module>
+ <module
+   name="ocm_null"
+   kind="altera_avalon_onchip_memory2"
+   version="17.1"
+   enabled="1">
+  <parameter name="allowInSystemMemoryContentEditor" value="false" />
+  <parameter name="autoInitializationFileName">$${FILENAME}_ocm_null</parameter>
+  <parameter name="blockType" value="AUTO" />
+  <parameter name="copyInitFile" value="false" />
+  <parameter name="dataWidth" value="32" />
+  <parameter name="dataWidth2" value="32" />
+  <parameter name="deviceFamily" value="Cyclone IV E" />
+  <parameter name="deviceFeatures">ADDRESS_STALL 1 ADVANCED_INFO 0 ALLOWS_COMPILING_OTHER_FAMILY_IP 1 ANY_QFP 0 CELL_LEVEL_BACK_ANNOTATION_DISABLED 0 COMPILER_SUPPORT 1 DSP 0 DSP_SHIFTER_BLOCK 0 DUMP_ASM_LAB_BITS_FOR_POWER 1 EMUL 1 ENABLE_ADVANCED_IO_ANALYSIS_GUI_FEATURES 1 ENABLE_PIN_PLANNER 0 ENGINEERING_SAMPLE 0 EPCS 1 ESB 0 FAKE1 0 FAKE2 0 FAKE3 0 FAMILY_LEVEL_INSTALLATION_ONLY 1 FASTEST 0 FINAL_TIMING_MODEL 0 FITTER_USE_FALLING_EDGE_DELAY 0 FPP_COMPLETELY_PLACES_AND_ROUTES_PERIPHERY 0 GENERATE_DC_ON_CURRENT_WARNING_FOR_INTERNAL_CLAMPING_DIODE 0 HARDCOPY 0 HAS_18_BIT_MULTS 0 HAS_ACE_SUPPORT 1 HAS_ACTIVE_PARALLEL_FLASH_SUPPORT 0 HAS_ADJUSTABLE_OUTPUT_IO_TIMING_MEAS_POINT 0 HAS_ADVANCED_IO_INVERTED_CORNER 0 HAS_ADVANCED_IO_POWER_SUPPORT 1 HAS_ADVANCED_IO_TIMING_SUPPORT 1 HAS_ALM_SUPPORT 0 HAS_ATOM_AND_ROUTING_POWER_MODELED_TOGETHER 0 HAS_AUTO_DERIVE_CLOCK_UNCERTAINTY_SUPPORT 0 HAS_AUTO_FIT_SUPPORT 1 HAS_BALANCED_OPT_TECHNIQUE_SUPPORT 1 HAS_BENEFICIAL_SKEW_SUPPORT 1 HAS_BITLEVEL_DRIVE_STRENGTH_CONTROL 1 HAS_BSDL_FILE_GENERATION 1 HAS_CDB_RE_NETWORK_PRESERVATION_SUPPORT 0 HAS_CGA_SUPPORT 1 HAS_CHECK_NETLIST_SUPPORT 0 HAS_CLOCK_REGION_CHECKER_ENABLED 1 HAS_CORE_JUNCTION_TEMP_DERATING 0 HAS_CROSSTALK_SUPPORT 0 HAS_CUSTOM_REGION_SUPPORT 1 HAS_DAP_JTAG_FROM_HPS 0 HAS_DATA_DRIVEN_ACVQ_HSSI_SUPPORT 0 HAS_DDB_FDI_SUPPORT 0 HAS_DESIGN_ANALYZER_SUPPORT 1 HAS_DETAILED_IO_RAIL_POWER_MODEL 1 HAS_DETAILED_LEIM_STATIC_POWER_MODEL 1 HAS_DETAILED_LE_POWER_MODEL 1 HAS_DETAILED_ROUTING_MUX_STATIC_POWER_MODEL 1 HAS_DETAILED_THERMAL_CIRCUIT_PARAMETER_SUPPORT 1 HAS_DEVICE_MIGRATION_SUPPORT 1 HAS_DIAGONAL_MIGRATION_SUPPORT 0 HAS_EMIF_TOOLKIT_SUPPORT 0 HAS_ERROR_DETECTION_SUPPORT 0 HAS_FAMILY_VARIANT_MIGRATION_SUPPORT 0 HAS_FANOUT_FREE_NODE_SUPPORT 1 HAS_FAST_FIT_SUPPORT 1 HAS_FITTER_ECO_SUPPORT 1 HAS_FIT_NETLIST_OPT_RETIME_SUPPORT 1 HAS_FIT_NETLIST_OPT_SUPPORT 1 HAS_FORMAL_VERIFICATION_SUPPORT 1 HAS_FPGA_XCHANGE_SUPPORT 1 HAS_FSAC_LUTRAM_REGISTER_PACKING_SUPPORT 0 HAS_FULL_DAT_MIN_TIMING_SUPPORT 1 HAS_FULL_INCREMENTAL_DESIGN_SUPPORT 1 HAS_FUNCTIONAL_SIMULATION_SUPPORT 1 HAS_FUNCTIONAL_VERILOG_SIMULATION_SUPPORT 0 HAS_FUNCTIONAL_VHDL_SIMULATION_SUPPORT 0 HAS_GLITCH_FILTERING_SUPPORT 1 HAS_HARDCOPYII_SUPPORT 0 HAS_HC_READY_SUPPORT 0 HAS_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 0 HAS_HOLD_TIME_AVOIDANCE_ACROSS_CLOCK_SPINE_SUPPORT 1 HAS_HSPICE_WRITER_SUPPORT 1 HAS_HSSI_POWER_CALCULATOR 0 HAS_IBISO_WRITER_SUPPORT 0 HAS_ICD_DATA_IP 0 HAS_IDB_SUPPORT 1 HAS_INCREMENTAL_DAT_SUPPORT 1 HAS_INCREMENTAL_SYNTHESIS_SUPPORT 1 HAS_IO_ASSIGNMENT_ANALYSIS_SUPPORT 1 HAS_IO_DECODER 0 HAS_IO_PLACEMENT_OPTIMIZATION_SUPPORT 1 HAS_IO_PLACEMENT_USING_GEOMETRY_RULE 0 HAS_IO_PLACEMENT_USING_PHYSIC_RULE 0 HAS_IO_SMART_RECOMPILE_SUPPORT 0 HAS_JITTER_SUPPORT 1 HAS_JTAG_SLD_HUB_SUPPORT 1 HAS_LOGIC_LOCK_SUPPORT 1 HAS_MICROPROCESSOR 0 HAS_MIF_SMART_COMPILE_SUPPORT 1 HAS_MINMAX_TIMING_MODELING_SUPPORT 1 HAS_MIN_TIMING_ANALYSIS_SUPPORT 1 HAS_MUX_RESTRUCTURE_SUPPORT 1 HAS_NADDER_STYLE_CLOCKING 0 HAS_NADDER_STYLE_FF 0 HAS_NADDER_STYLE_LCELL_COMB 0 HAS_NEW_CDB_NAME_FOR_M20K_SCLR 0 HAS_NEW_HC_FLOW_SUPPORT 0 HAS_NEW_SERDES_MAX_RESOURCE_COUNT_REPORTING_SUPPORT 1 HAS_NEW_VPR_SUPPORT 1 HAS_NONSOCKET_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_NO_HARDBLOCK_PARTITION_SUPPORT 0 HAS_NO_JTAG_USERCODE_SUPPORT 0 HAS_OPERATING_SETTINGS_AND_CONDITIONS_REPORTING_SUPPORT 1 HAS_PAD_LOCATION_ASSIGNMENT_SUPPORT 0 HAS_PARTIAL_RECONFIG_SUPPORT 0 HAS_PASSIVE_PARALLEL_SUPPORT 0 HAS_PDN_MODEL_STATUS 0 HAS_PHYSICAL_DESIGN_PLANNER_SUPPORT 0 HAS_PHYSICAL_NETLIST_OUTPUT 0 HAS_PHYSICAL_ROUTING_SUPPORT 0 HAS_PIN_SPECIFIC_VOLTAGE_SUPPORT 1 HAS_PLDM_REF_SUPPORT 1 HAS_POWER_BINNING_LIMITS_DATA 0 HAS_POWER_ESTIMATION_SUPPORT 1 HAS_PRELIMINARY_CLOCK_UNCERTAINTY_NUMBERS 0 HAS_PRE_FITTER_FPP_SUPPORT 0 HAS_PRE_FITTER_LUTRAM_NETLIST_CHECKER_ENABLED 0 HAS_PVA_SUPPORT 1 HAS_QUARTUS_HIERARCHICAL_DESIGN_SUPPORT 0 HAS_RAPID_RECOMPILE_SUPPORT 0 HAS_RCF_SUPPORT 1 HAS_RCF_SUPPORT_FOR_DEBUGGING 0 HAS_RED_BLACK_SEPARATION_SUPPORT 0 HAS_RE_LEVEL_TIMING_GRAPH_SUPPORT 1 HAS_RISEFALL_DELAY_SUPPORT 1 HAS_SIGNAL_PROBE_SUPPORT 1 HAS_SIGNAL_TAP_SUPPORT 1 HAS_SIMULATOR_SUPPORT 0 HAS_SPLIT_IO_SUPPORT 1 HAS_SPLIT_LC_SUPPORT 1 HAS_STRICT_PRESERVATION_SUPPORT 1 HAS_SYNTHESIS_ON_ATOMS 0 HAS_SYNTH_FSYN_NETLIST_OPT_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_RETIME_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_SUPPORT 1 HAS_TCL_FITTER_SUPPORT 0 HAS_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_TEMPLATED_REGISTER_PACKING_SUPPORT 1 HAS_TIME_BORROWING_SUPPORT 0 HAS_TIMING_DRIVEN_SYNTHESIS_SUPPORT 1 HAS_TIMING_INFO_SUPPORT 1 HAS_TIMING_OPERATING_CONDITIONS 1 HAS_TIMING_SIMULATION_SUPPORT 1 HAS_TITAN_BASED_MAC_REGISTER_PACKER_SUPPORT 0 HAS_U2B2_SUPPORT 0 HAS_USER_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 0 HAS_USE_FITTER_INFO_SUPPORT 1 HAS_VCCPD_POWER_RAIL 0 HAS_VERTICAL_MIGRATION_SUPPORT 1 HAS_VIEWDRAW_SYMBOL_SUPPORT 0 HAS_VIO_SUPPORT 1 HAS_VIRTUAL_DEVICES 0 HAS_WYSIWYG_DFFEAS_SUPPORT 1 HAS_XIBISO2_WRITER_SUPPORT 0 HAS_XIBISO_WRITER_SUPPORT 1 IFP_USE_LEGACY_IO_CHECKER 0 INCREMENTAL_DESIGN_SUPPORTS_COMPATIBLE_CONSTRAINTS 1 INSTALLED 0 INTERNAL_POF_SUPPORT_ENABLED 0 INTERNAL_USE_ONLY 0 ISSUE_MILITARY_TEMPERATURE_WARNING 0 IS_BARE_DIE 0 IS_CONFIG_ROM 0 IS_DEFAULT_FAMILY 0 IS_FOR_INTERNAL_TESTING_ONLY 0 IS_HARDCOPY_FAMILY 0 IS_HBGA_PACKAGE 0 IS_HIGH_CURRENT_PART 0 IS_LOW_POWER_PART 0 IS_REVE_SILICON 0 IS_SDM_ONLY_PACKAGE 0 IS_SMI_PART 0 LOAD_BLK_TYPE_DATA_FROM_ATOM_WYS_INFO 0 LVDS_IO 1 M10K_MEMORY 0 M144K_MEMORY 0 M20K_MEMORY 0 M4K_MEMORY 0 M512_MEMORY 0 M9K_MEMORY 1 MLAB_MEMORY 0 MRAM_MEMORY 0 NOT_LISTED 0 NOT_MIGRATABLE 0 NO_FITTER_DELAY_CACHE_GENERATED 0 NO_PIN_OUT 0 NO_POF 0 NO_RPE_SUPPORT 0 NO_SUPPORT_FOR_LOGICLOCK_CONTENT_BACK_ANNOTATION 1 NO_SUPPORT_FOR_STA_CLOCK_UNCERTAINTY_CHECK 0 NO_TDC_SUPPORT 0 POSTFIT_BAK_DATABASE_EXPORT_ENABLED 1 POSTMAP_BAK_DATABASE_EXPORT_ENABLED 1 PROGRAMMER_ONLY 0 PROGRAMMER_SUPPORT 1 PVA_SUPPORTS_ONLY_SUBSET_OF_ATOMS 0 QFIT_IN_DEVELOPMENT 0 QMAP_IN_DEVELOPMENT 0 RAM_LOGICAL_NAME_CHECKING_IN_CUT_ENABLED 1 REPORTS_METASTABILITY_MTBF 1 REQUIRES_INSTALLATION_PATCH 0 REQUIRES_LIST_OF_TEMPERATURE_AND_VOLTAGE_OPERATING_CONDITIONS 1 REQUIRE_QUARTUS_HIERARCHICAL_DESIGN 0 REQUIRE_SPECIAL_HANDLING_FOR_LOCAL_LABLINE 1 RESERVES_SIGNAL_PROBE_PINS 0 RESOLVE_MAX_FANOUT_EARLY 1 RESOLVE_MAX_FANOUT_LATE 0 RESPECTS_FIXED_SIZED_LOCKED_LOCATION_LOGICLOCK 1 RESTRICTED_USER_SELECTION 0 RESTRICT_PARTIAL_RECONFIG 0 RISEFALL_SUPPORT_IS_HIDDEN 0 SHOW_HIDDEN_FAMILY_IN_PROGRAMMER 0 STRICT_TIMING_DB_CHECKS 0 SUPPORTS_ADDITIONAL_OPTIONS_FOR_UNUSED_IO 0 SUPPORTS_CRC 1 SUPPORTS_DIFFERENTIAL_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_DSP_BALANCING_BACK_ANNOTATION 0 SUPPORTS_GENERATION_OF_EARLY_POWER_ESTIMATOR_FILE 1 SUPPORTS_GLOBAL_SIGNAL_BACK_ANNOTATION 0 SUPPORTS_HIPI_RETIMING 0 SUPPORTS_LICENSE_FREE_PARTIAL_RECONFIG 0 SUPPORTS_MAC_CHAIN_OUT_ADDER 0 SUPPORTS_RAM_PACKING_BACK_ANNOTATION 0 SUPPORTS_REG_PACKING_BACK_ANNOTATION 0 SUPPORTS_SIGNALPROBE_REGISTER_PIPELINING 1 SUPPORTS_SINGLE_ENDED_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_USER_MANUAL_LOGIC_DUPLICATION 1 SUPPORTS_VID 0 SUPPORT_HIGH_SPEED_HPS 0 TMV_RUN_CUSTOMIZABLE_VIEWER 1 TMV_RUN_INTERNAL_DETAILS 1 TMV_RUN_INTERNAL_DETAILS_ON_IO 0 TMV_RUN_INTERNAL_DETAILS_ON_IOBUF 1 TMV_RUN_INTERNAL_DETAILS_ON_LCELL 0 TMV_RUN_INTERNAL_DETAILS_ON_LRAM 0 TRANSCEIVER_3G_BLOCK 0 TRANSCEIVER_6G_BLOCK 0 USES_ACV_FOR_FLED 1 USES_ADB_FOR_BACK_ANNOTATION 1 USES_ALTERA_LNSIM 0 USES_ASIC_ROUTING_POWER_CALCULATOR 0 USES_DATA_DRIVEN_PLL_COMPUTATION_UTIL 1 USES_DEV 1 USES_ICP_FOR_ECO_FITTER 0 USES_LIBERTY_TIMING 0 USES_NETWORK_ROUTING_POWER_CALCULATOR 0 USES_PART_INFO_FOR_DISPLAYING_CORE_VOLTAGE_VALUE 0 USES_POWER_SIGNAL_ACTIVITIES 1 USES_PVAFAM2 0 USES_SECOND_GENERATION_PART_INFO 0 USES_SECOND_GENERATION_POWER_ANALYZER 0 USES_THIRD_GENERATION_TIMING_MODELS_TIS 1 USES_U2B2_TIMING_MODELS 0 USES_XML_FORMAT_FOR_EMIF_PIN_MAP_FILE 0 USE_ADVANCED_IO_POWER_BY_DEFAULT 1 USE_ADVANCED_IO_TIMING_BY_DEFAULT 1 USE_BASE_FAMILY_DDB_PATH 0 USE_OCT_AUTO_CALIBRATION 1 USE_RELAX_IO_ASSIGNMENT_RULES 0 USE_RISEFALL_ONLY 1 USE_SEPARATE_LIST_FOR_TECH_MIGRATION 0 USE_SINGLE_COMPILER_PASS_PLL_MIF_FILE_WRITER 1 USE_TITAN_IO_BASED_IO_REGISTER_PACKER_UTIL 0 USING_28NM_OR_OLDER_TIMING_METHODOLOGY 1 WYSIWYG_BUS_WIDTH_CHECKING_IN_CUT_ENABLED 1</parameter>
+  <parameter name="dualPort" value="false" />
+  <parameter name="ecc_enabled" value="false" />
+  <parameter name="enPRInitMode" value="false" />
+  <parameter name="enableDiffWidth" value="false" />
+  <parameter name="initMemContent" value="true" />
+  <parameter name="initializationFileName" value="onchip_mem.hex" />
+  <parameter name="instanceID" value="NONE" />
+  <parameter name="memorySize" value="16" />
+  <parameter name="readDuringWriteMode" value="DONT_CARE" />
+  <parameter name="resetrequest_enabled" value="true" />
+  <parameter name="simAllowMRAMContentsFile" value="false" />
+  <parameter name="simMemInitOnlyFilename" value="0" />
+  <parameter name="singleClockOperation" value="false" />
+  <parameter name="slave1Latency" value="1" />
+  <parameter name="slave2Latency" value="1" />
+  <parameter name="useNonDefaultInitFile" value="false" />
+  <parameter name="useShallowMemBlocks" value="false" />
+  <parameter name="writable" value="true" />
+ </module>
+ <module
+   name="otg_clock_crossing_bridge"
+   kind="altera_avalon_mm_clock_crossing_bridge"
+   version="17.1"
+   enabled="1">
+  <parameter name="ADDRESS_UNITS" value="SYMBOLS" />
+  <parameter name="ADDRESS_WIDTH" value="10" />
+  <parameter name="COMMAND_FIFO_DEPTH" value="32" />
+  <parameter name="DATA_WIDTH" value="32" />
+  <parameter name="MASTER_SYNC_DEPTH" value="3" />
+  <parameter name="MAX_BURST_SIZE" value="1" />
+  <parameter name="RESPONSE_FIFO_DEPTH" value="32" />
+  <parameter name="SLAVE_SYNC_DEPTH" value="3" />
+  <parameter name="SYMBOL_WIDTH" value="8" />
+  <parameter name="SYSINFO_ADDR_WIDTH" value="14" />
+  <parameter name="USE_AUTO_ADDRESS_WIDTH" value="1" />
+ </module>
+ <module
+   name="otg_hpi_address"
+   kind="altera_avalon_pio"
+   version="17.1"
+   enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="10000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="2" />
+ </module>
+ <module name="otg_hpi_cs" kind="altera_avalon_pio" version="17.1" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="10000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="1" />
+ </module>
+ <module
+   name="otg_hpi_data"
+   kind="altera_avalon_pio"
+   version="17.1"
+   enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="10000000" />
+  <parameter name="direction" value="InOut" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="16" />
+ </module>
+ <module name="otg_hpi_r" kind="altera_avalon_pio" version="17.1" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="10000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="1" />
+ </module>
+ <module name="otg_hpi_w" kind="altera_avalon_pio" version="17.1" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="10000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="1" />
+ </module>
+ <module name="pio_hex" kind="altera_avalon_pio" version="17.1" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="32" />
+ </module>
+ <module name="pio_ledg" kind="altera_avalon_pio" version="17.1" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="9" />
+ </module>
+ <module name="pio_ledr" kind="altera_avalon_pio" version="17.1" enabled="1">
+  <parameter name="bitClearingEdgeCapReg" value="false" />
+  <parameter name="bitModifyingOutReg" value="false" />
+  <parameter name="captureEdge" value="false" />
+  <parameter name="clockRate" value="50000000" />
+  <parameter name="direction" value="Output" />
+  <parameter name="edgeType" value="RISING" />
+  <parameter name="generateIRQ" value="false" />
+  <parameter name="irqType" value="LEVEL" />
+  <parameter name="resetValue" value="0" />
+  <parameter name="simDoTestBenchWiring" value="false" />
+  <parameter name="simDrivenValue" value="0" />
+  <parameter name="width" value="18" />
+ </module>
+ <module name="pll" kind="altpll" version="17.1" enabled="1">
+  <parameter name="AUTO_DEVICE_FAMILY" value="Cyclone IV E" />
+  <parameter name="AUTO_INCLK_INTERFACE_CLOCK_RATE" value="50000000" />
+  <parameter name="AVALON_USE_SEPARATE_SYSCLK" value="NO" />
+  <parameter name="BANDWIDTH" value="" />
+  <parameter name="BANDWIDTH_TYPE" value="AUTO" />
+  <parameter name="CLK0_DIVIDE_BY" value="1" />
+  <parameter name="CLK0_DUTY_CYCLE" value="50" />
+  <parameter name="CLK0_MULTIPLY_BY" value="1" />
+  <parameter name="CLK0_PHASE_SHIFT" value="0" />
+  <parameter name="CLK1_DIVIDE_BY" value="1" />
+  <parameter name="CLK1_DUTY_CYCLE" value="50" />
+  <parameter name="CLK1_MULTIPLY_BY" value="1" />
+  <parameter name="CLK1_PHASE_SHIFT" value="-3000" />
+  <parameter name="CLK2_DIVIDE_BY" value="5" />
+  <parameter name="CLK2_DUTY_CYCLE" value="50" />
+  <parameter name="CLK2_MULTIPLY_BY" value="1" />
+  <parameter name="CLK2_PHASE_SHIFT" value="0" />
+  <parameter name="CLK3_DIVIDE_BY" value="1" />
+  <parameter name="CLK3_DUTY_CYCLE" value="50" />
+  <parameter name="CLK3_MULTIPLY_BY" value="2" />
+  <parameter name="CLK3_PHASE_SHIFT" value="0" />
+  <parameter name="CLK4_DIVIDE_BY" value="" />
+  <parameter name="CLK4_DUTY_CYCLE" value="" />
+  <parameter name="CLK4_MULTIPLY_BY" value="" />
+  <parameter name="CLK4_PHASE_SHIFT" value="" />
+  <parameter name="CLK5_DIVIDE_BY" value="" />
+  <parameter name="CLK5_DUTY_CYCLE" value="" />
+  <parameter name="CLK5_MULTIPLY_BY" value="" />
+  <parameter name="CLK5_PHASE_SHIFT" value="" />
+  <parameter name="CLK6_DIVIDE_BY" value="" />
+  <parameter name="CLK6_DUTY_CYCLE" value="" />
+  <parameter name="CLK6_MULTIPLY_BY" value="" />
+  <parameter name="CLK6_PHASE_SHIFT" value="" />
+  <parameter name="CLK7_DIVIDE_BY" value="" />
+  <parameter name="CLK7_DUTY_CYCLE" value="" />
+  <parameter name="CLK7_MULTIPLY_BY" value="" />
+  <parameter name="CLK7_PHASE_SHIFT" value="" />
+  <parameter name="CLK8_DIVIDE_BY" value="" />
+  <parameter name="CLK8_DUTY_CYCLE" value="" />
+  <parameter name="CLK8_MULTIPLY_BY" value="" />
+  <parameter name="CLK8_PHASE_SHIFT" value="" />
+  <parameter name="CLK9_DIVIDE_BY" value="" />
+  <parameter name="CLK9_DUTY_CYCLE" value="" />
+  <parameter name="CLK9_MULTIPLY_BY" value="" />
+  <parameter name="CLK9_PHASE_SHIFT" value="" />
+  <parameter name="COMPENSATE_CLOCK" value="CLK0" />
+  <parameter name="DOWN_SPREAD" value="" />
+  <parameter name="DPA_DIVIDER" value="" />
+  <parameter name="DPA_DIVIDE_BY" value="" />
+  <parameter name="DPA_MULTIPLY_BY" value="" />
+  <parameter name="ENABLE_SWITCH_OVER_COUNTER" value="" />
+  <parameter name="EXTCLK0_DIVIDE_BY" value="" />
+  <parameter name="EXTCLK0_DUTY_CYCLE" value="" />
+  <parameter name="EXTCLK0_MULTIPLY_BY" value="" />
+  <parameter name="EXTCLK0_PHASE_SHIFT" value="" />
+  <parameter name="EXTCLK1_DIVIDE_BY" value="" />
+  <parameter name="EXTCLK1_DUTY_CYCLE" value="" />
+  <parameter name="EXTCLK1_MULTIPLY_BY" value="" />
+  <parameter name="EXTCLK1_PHASE_SHIFT" value="" />
+  <parameter name="EXTCLK2_DIVIDE_BY" value="" />
+  <parameter name="EXTCLK2_DUTY_CYCLE" value="" />
+  <parameter name="EXTCLK2_MULTIPLY_BY" value="" />
+  <parameter name="EXTCLK2_PHASE_SHIFT" value="" />
+  <parameter name="EXTCLK3_DIVIDE_BY" value="" />
+  <parameter name="EXTCLK3_DUTY_CYCLE" value="" />
+  <parameter name="EXTCLK3_MULTIPLY_BY" value="" />
+  <parameter name="EXTCLK3_PHASE_SHIFT" value="" />
+  <parameter name="FEEDBACK_SOURCE" value="" />
+  <parameter name="GATE_LOCK_COUNTER" value="" />
+  <parameter name="GATE_LOCK_SIGNAL" value="" />
+  <parameter name="HIDDEN_CONSTANTS">CT#CLK2_DIVIDE_BY 5 CT#PORT_clk5 PORT_UNUSED CT#PORT_clk4 PORT_UNUSED CT#PORT_clk3 PORT_USED CT#PORT_clk2 PORT_USED CT#PORT_clk1 PORT_USED CT#PORT_clk0 PORT_USED CT#CLK0_MULTIPLY_BY 1 CT#PORT_SCANWRITE PORT_UNUSED CT#PORT_SCANACLR PORT_UNUSED CT#PORT_PFDENA PORT_UNUSED CT#CLK3_DUTY_CYCLE 50 CT#CLK3_DIVIDE_BY 1 CT#PORT_PLLENA PORT_UNUSED CT#PORT_SCANDATA PORT_UNUSED CT#CLK3_PHASE_SHIFT 0 CT#PORT_SCANCLKENA PORT_UNUSED CT#WIDTH_CLOCK 5 CT#PORT_SCANDATAOUT PORT_UNUSED CT#LPM_TYPE altpll CT#PLL_TYPE AUTO CT#CLK0_PHASE_SHIFT 0 CT#CLK1_DUTY_CYCLE 50 CT#PORT_PHASEDONE PORT_UNUSED CT#OPERATION_MODE NORMAL CT#PORT_CONFIGUPDATE PORT_UNUSED CT#CLK1_MULTIPLY_BY 1 CT#COMPENSATE_CLOCK CLK0 CT#PORT_CLKSWITCH PORT_UNUSED CT#INCLK0_INPUT_FREQUENCY 20000 CT#PORT_SCANDONE PORT_UNUSED CT#PORT_CLKLOSS PORT_UNUSED CT#PORT_INCLK1 PORT_UNUSED CT#AVALON_USE_SEPARATE_SYSCLK NO CT#PORT_INCLK0 PORT_USED CT#PORT_clkena5 PORT_UNUSED CT#PORT_clkena4 PORT_UNUSED CT#PORT_clkena3 PORT_UNUSED CT#PORT_clkena2 PORT_UNUSED CT#PORT_clkena1 PORT_UNUSED CT#PORT_clkena0 PORT_UNUSED CT#CLK1_PHASE_SHIFT -3000 CT#PORT_ARESET PORT_UNUSED CT#BANDWIDTH_TYPE AUTO CT#CLK2_MULTIPLY_BY 1 CT#INTENDED_DEVICE_FAMILY {Cyclone IV E} CT#PORT_SCANREAD PORT_UNUSED CT#CLK2_DUTY_CYCLE 50 CT#PORT_PHASESTEP PORT_UNUSED CT#PORT_SCANCLK PORT_UNUSED CT#PORT_CLKBAD1 PORT_UNUSED CT#PORT_CLKBAD0 PORT_UNUSED CT#PORT_FBIN PORT_UNUSED CT#PORT_PHASEUPDOWN PORT_UNUSED CT#PORT_extclk3 PORT_UNUSED CT#PORT_extclk2 PORT_UNUSED CT#PORT_extclk1 PORT_UNUSED CT#PORT_PHASECOUNTERSELECT PORT_UNUSED CT#PORT_extclk0 PORT_UNUSED CT#PORT_ACTIVECLOCK PORT_UNUSED CT#CLK2_PHASE_SHIFT 0 CT#CLK0_DUTY_CYCLE 50 CT#CLK0_DIVIDE_BY 1 CT#CLK1_DIVIDE_BY 1 CT#CLK3_MULTIPLY_BY 2 CT#PORT_LOCKED PORT_UNUSED</parameter>
+  <parameter name="HIDDEN_CUSTOM_ELABORATION">altpll_avalon_elaboration</parameter>
+  <parameter name="HIDDEN_CUSTOM_POST_EDIT">altpll_avalon_post_edit</parameter>
+  <parameter name="HIDDEN_IF_PORTS">IF#phasecounterselect {input 4} IF#locked {output 0} IF#reset {input 0} IF#clk {input 0} IF#phaseupdown {input 0} IF#scandone {output 0} IF#readdata {output 32} IF#write {input 0} IF#scanclk {input 0} IF#phasedone {output 0} IF#c3 {output 0} IF#address {input 2} IF#c2 {output 0} IF#c1 {output 0} IF#c0 {output 0} IF#writedata {input 32} IF#read {input 0} IF#areset {input 0} IF#scanclkena {input 0} IF#scandataout {output 0} IF#configupdate {input 0} IF#phasestep {input 0} IF#scandata {input 0}</parameter>
+  <parameter name="HIDDEN_IS_FIRST_EDIT" value="0" />
+  <parameter name="HIDDEN_IS_NUMERIC">IN#WIDTH_CLOCK 1 IN#CLK0_DUTY_CYCLE 1 IN#CLK2_DIVIDE_BY 1 IN#PLL_TARGET_HARCOPY_CHECK 1 IN#CLK3_DIVIDE_BY 1 IN#CLK1_MULTIPLY_BY 1 IN#CLK3_DUTY_CYCLE 1 IN#SWITCHOVER_COUNT_EDIT 1 IN#INCLK0_INPUT_FREQUENCY 1 IN#PLL_LVDS_PLL_CHECK 1 IN#PLL_AUTOPLL_CHECK 1 IN#PLL_FASTPLL_CHECK 1 IN#CLK1_DUTY_CYCLE 1 IN#PLL_ENHPLL_CHECK 1 IN#CLK2_MULTIPLY_BY 1 IN#DIV_FACTOR3 1 IN#DIV_FACTOR2 1 IN#DIV_FACTOR1 1 IN#DIV_FACTOR0 1 IN#LVDS_MODE_DATA_RATE_DIRTY 1 IN#GLOCK_COUNTER_EDIT 1 IN#CLK2_DUTY_CYCLE 1 IN#CLK0_DIVIDE_BY 1 IN#CLK3_MULTIPLY_BY 1 IN#MULT_FACTOR3 1 IN#MULT_FACTOR2 1 IN#MULT_FACTOR1 1 IN#MULT_FACTOR0 1 IN#CLK0_MULTIPLY_BY 1 IN#USE_MIL_SPEED_GRADE 1 IN#CLK1_DIVIDE_BY 1</parameter>
+  <parameter name="HIDDEN_MF_PORTS">MF#areset 1 MF#clk 1 MF#locked 1 MF#inclk 1</parameter>
+  <parameter name="HIDDEN_PRIVATES">PT#GLOCKED_FEATURE_ENABLED 0 PT#SPREAD_FEATURE_ENABLED 0 PT#BANDWIDTH_FREQ_UNIT MHz PT#CUR_DEDICATED_CLK c0 PT#INCLK0_FREQ_EDIT 50.000 PT#BANDWIDTH_PRESET Low PT#PLL_LVDS_PLL_CHECK 0 PT#BANDWIDTH_USE_PRESET 0 PT#AVALON_USE_SEPARATE_SYSCLK NO PT#OUTPUT_FREQ_UNIT3 MHz PT#PLL_ENHPLL_CHECK 0 PT#OUTPUT_FREQ_UNIT2 MHz PT#OUTPUT_FREQ_UNIT1 MHz PT#OUTPUT_FREQ_UNIT0 MHz PT#PHASE_RECONFIG_FEATURE_ENABLED 1 PT#CREATE_CLKBAD_CHECK 0 PT#CLKSWITCH_CHECK 0 PT#INCLK1_FREQ_EDIT 100.000 PT#NORMAL_MODE_RADIO 1 PT#SRC_SYNCH_COMP_RADIO 0 PT#PLL_ARESET_CHECK 0 PT#LONG_SCAN_RADIO 1 PT#SCAN_FEATURE_ENABLED 1 PT#USE_CLK3 1 PT#USE_CLK2 1 PT#PHASE_RECONFIG_INPUTS_CHECK 0 PT#USE_CLK1 1 PT#USE_CLK0 1 PT#PRIMARY_CLK_COMBO inclk0 PT#BANDWIDTH 1.000 PT#GLOCKED_COUNTER_EDIT_CHANGED 1 PT#PLL_FASTPLL_CHECK 0 PT#SPREAD_FREQ_UNIT KHz PT#LVDS_PHASE_SHIFT_UNIT3 deg PT#PLL_AUTOPLL_CHECK 1 PT#LVDS_PHASE_SHIFT_UNIT2 deg PT#OUTPUT_FREQ_MODE3 1 PT#LVDS_PHASE_SHIFT_UNIT1 deg PT#OUTPUT_FREQ_MODE2 1 PT#LVDS_PHASE_SHIFT_UNIT0 deg PT#OUTPUT_FREQ_MODE1 0 PT#SWITCHOVER_FEATURE_ENABLED 0 PT#MIG_DEVICE_SPEED_GRADE Any PT#OUTPUT_FREQ_MODE0 0 PT#BANDWIDTH_FEATURE_ENABLED 1 PT#INCLK0_FREQ_UNIT_COMBO MHz PT#ZERO_DELAY_RADIO 0 PT#OUTPUT_FREQ3 100.00000000 PT#OUTPUT_FREQ2 10.00000000 PT#OUTPUT_FREQ1 100.00000000 PT#OUTPUT_FREQ0 100.00000000 PT#SHORT_SCAN_RADIO 0 PT#LVDS_MODE_DATA_RATE_DIRTY 0 PT#CUR_FBIN_CLK c0 PT#PLL_ADVANCED_PARAM_CHECK 0 PT#CLKBAD_SWITCHOVER_CHECK 0 PT#PHASE_SHIFT_STEP_ENABLED_CHECK 0 PT#DEVICE_SPEED_GRADE 7 PT#PLL_FBMIMIC_CHECK 0 PT#LVDS_MODE_DATA_RATE {Not Available} PT#LOCKED_OUTPUT_CHECK 0 PT#SPREAD_PERCENT 0.500 PT#PHASE_SHIFT3 0.00000000 PT#PHASE_SHIFT2 0.00000000 PT#DIV_FACTOR3 1 PT#PHASE_SHIFT1 -3.00000000 PT#DIV_FACTOR2 1 PT#PHASE_SHIFT0 0.00000000 PT#DIV_FACTOR1 1 PT#DIV_FACTOR0 1 PT#CNX_NO_COMPENSATE_RADIO 0 PT#USE_CLKENA3 0 PT#USE_CLKENA2 0 PT#USE_CLKENA1 0 PT#USE_CLKENA0 0 PT#CREATE_INCLK1_CHECK 0 PT#GLOCK_COUNTER_EDIT 1048575 PT#INCLK1_FREQ_UNIT_COMBO MHz PT#EFF_OUTPUT_FREQ_VALUE3 100.000000 PT#EFF_OUTPUT_FREQ_VALUE2 10.000000 PT#EFF_OUTPUT_FREQ_VALUE1 50.000000 PT#EFF_OUTPUT_FREQ_VALUE0 50.000000 PT#SPREAD_FREQ 50.000 PT#USE_MIL_SPEED_GRADE 0 PT#EXPLICIT_SWITCHOVER_COUNTER 0 PT#STICKY_CLK3 1 PT#STICKY_CLK2 1 PT#STICKY_CLK1 1 PT#STICKY_CLK0 1 PT#EXT_FEEDBACK_RADIO 0 PT#MIRROR_CLK3 0 PT#MIRROR_CLK2 0 PT#MIRROR_CLK1 0 PT#SWITCHOVER_COUNT_EDIT 1 PT#MIRROR_CLK0 0 PT#SELF_RESET_LOCK_LOSS 0 PT#PLL_PFDENA_CHECK 0 PT#INT_FEEDBACK__MODE_RADIO 1 PT#INCLK1_FREQ_EDIT_CHANGED 1 PT#SYNTH_WRAPPER_GEN_POSTFIX 0 PT#CLKLOSS_CHECK 0 PT#PHASE_SHIFT_UNIT3 deg PT#PHASE_SHIFT_UNIT2 deg PT#PHASE_SHIFT_UNIT1 ns PT#PHASE_SHIFT_UNIT0 ns PT#BANDWIDTH_USE_AUTO 1 PT#HAS_MANUAL_SWITCHOVER 1 PT#MULT_FACTOR3 1 PT#MULT_FACTOR2 1 PT#MULT_FACTOR1 1 PT#MULT_FACTOR0 1 PT#SPREAD_USE 0 PT#GLOCKED_MODE_CHECK 0 PT#DUTY_CYCLE3 50.00000000 PT#DUTY_CYCLE2 50.00000000 PT#SACN_INPUTS_CHECK 0 PT#DUTY_CYCLE1 50.00000000 PT#INTENDED_DEVICE_FAMILY {Cyclone IV E} PT#DUTY_CYCLE0 50.00000000 PT#PLL_TARGET_HARCOPY_CHECK 0 PT#INCLK1_FREQ_UNIT_CHANGED 1 PT#RECONFIG_FILE ALTPLL1508019453416741.mif PT#ACTIVECLK_CHECK 0</parameter>
+  <parameter name="HIDDEN_USED_PORTS">UP#locked used UP#c3 used UP#c2 used UP#c1 used UP#c0 used UP#areset used UP#inclk0 used</parameter>
+  <parameter name="INCLK0_INPUT_FREQUENCY" value="20000" />
+  <parameter name="INCLK1_INPUT_FREQUENCY" value="" />
+  <parameter name="INTENDED_DEVICE_FAMILY" value="Cyclone IV E" />
+  <parameter name="INVALID_LOCK_MULTIPLIER" value="" />
+  <parameter name="LOCK_HIGH" value="" />
+  <parameter name="LOCK_LOW" value="" />
+  <parameter name="OPERATION_MODE" value="NORMAL" />
+  <parameter name="PLL_TYPE" value="AUTO" />
+  <parameter name="PORT_ACTIVECLOCK" value="PORT_UNUSED" />
+  <parameter name="PORT_ARESET" value="PORT_UNUSED" />
+  <parameter name="PORT_CLKBAD0" value="PORT_UNUSED" />
+  <parameter name="PORT_CLKBAD1" value="PORT_UNUSED" />
+  <parameter name="PORT_CLKLOSS" value="PORT_UNUSED" />
+  <parameter name="PORT_CLKSWITCH" value="PORT_UNUSED" />
+  <parameter name="PORT_CONFIGUPDATE" value="PORT_UNUSED" />
+  <parameter name="PORT_ENABLE0" value="" />
+  <parameter name="PORT_ENABLE1" value="" />
+  <parameter name="PORT_FBIN" value="PORT_UNUSED" />
+  <parameter name="PORT_FBOUT" value="" />
+  <parameter name="PORT_INCLK0" value="PORT_USED" />
+  <parameter name="PORT_INCLK1" value="PORT_UNUSED" />
+  <parameter name="PORT_LOCKED" value="PORT_UNUSED" />
+  <parameter name="PORT_PFDENA" value="PORT_UNUSED" />
+  <parameter name="PORT_PHASECOUNTERSELECT" value="PORT_UNUSED" />
+  <parameter name="PORT_PHASEDONE" value="PORT_UNUSED" />
+  <parameter name="PORT_PHASESTEP" value="PORT_UNUSED" />
+  <parameter name="PORT_PHASEUPDOWN" value="PORT_UNUSED" />
+  <parameter name="PORT_PLLENA" value="PORT_UNUSED" />
+  <parameter name="PORT_SCANACLR" value="PORT_UNUSED" />
+  <parameter name="PORT_SCANCLK" value="PORT_UNUSED" />
+  <parameter name="PORT_SCANCLKENA" value="PORT_UNUSED" />
+  <parameter name="PORT_SCANDATA" value="PORT_UNUSED" />
+  <parameter name="PORT_SCANDATAOUT" value="PORT_UNUSED" />
+  <parameter name="PORT_SCANDONE" value="PORT_UNUSED" />
+  <parameter name="PORT_SCANREAD" value="PORT_UNUSED" />
+  <parameter name="PORT_SCANWRITE" value="PORT_UNUSED" />
+  <parameter name="PORT_SCLKOUT0" value="" />
+  <parameter name="PORT_SCLKOUT1" value="" />
+  <parameter name="PORT_VCOOVERRANGE" value="" />
+  <parameter name="PORT_VCOUNDERRANGE" value="" />
+  <parameter name="PORT_clk0" value="PORT_USED" />
+  <parameter name="PORT_clk1" value="PORT_USED" />
+  <parameter name="PORT_clk2" value="PORT_USED" />
+  <parameter name="PORT_clk3" value="PORT_USED" />
+  <parameter name="PORT_clk4" value="PORT_UNUSED" />
+  <parameter name="PORT_clk5" value="PORT_UNUSED" />
+  <parameter name="PORT_clk6" value="" />
+  <parameter name="PORT_clk7" value="" />
+  <parameter name="PORT_clk8" value="" />
+  <parameter name="PORT_clk9" value="" />
+  <parameter name="PORT_clkena0" value="PORT_UNUSED" />
+  <parameter name="PORT_clkena1" value="PORT_UNUSED" />
+  <parameter name="PORT_clkena2" value="PORT_UNUSED" />
+  <parameter name="PORT_clkena3" value="PORT_UNUSED" />
+  <parameter name="PORT_clkena4" value="PORT_UNUSED" />
+  <parameter name="PORT_clkena5" value="PORT_UNUSED" />
+  <parameter name="PORT_extclk0" value="PORT_UNUSED" />
+  <parameter name="PORT_extclk1" value="PORT_UNUSED" />
+  <parameter name="PORT_extclk2" value="PORT_UNUSED" />
+  <parameter name="PORT_extclk3" value="PORT_UNUSED" />
+  <parameter name="PORT_extclkena0" value="" />
+  <parameter name="PORT_extclkena1" value="" />
+  <parameter name="PORT_extclkena2" value="" />
+  <parameter name="PORT_extclkena3" value="" />
+  <parameter name="PRIMARY_CLOCK" value="" />
+  <parameter name="QUALIFY_CONF_DONE" value="" />
+  <parameter name="SCAN_CHAIN" value="" />
+  <parameter name="SCAN_CHAIN_MIF_FILE" value="" />
+  <parameter name="SCLKOUT0_PHASE_SHIFT" value="" />
+  <parameter name="SCLKOUT1_PHASE_SHIFT" value="" />
+  <parameter name="SELF_RESET_ON_GATED_LOSS_LOCK" value="" />
+  <parameter name="SELF_RESET_ON_LOSS_LOCK" value="" />
+  <parameter name="SKIP_VCO" value="" />
+  <parameter name="SPREAD_FREQUENCY" value="" />
+  <parameter name="SWITCH_OVER_COUNTER" value="" />
+  <parameter name="SWITCH_OVER_ON_GATED_LOCK" value="" />
+  <parameter name="SWITCH_OVER_ON_LOSSCLK" value="" />
+  <parameter name="SWITCH_OVER_TYPE" value="" />
+  <parameter name="USING_FBMIMICBIDIR_PORT" value="" />
+  <parameter name="VALID_LOCK_MULTIPLIER" value="" />
+  <parameter name="VCO_DIVIDE_BY" value="" />
+  <parameter name="VCO_FREQUENCY_CONTROL" value="" />
+  <parameter name="VCO_MULTIPLY_BY" value="" />
+  <parameter name="VCO_PHASE_SHIFT_STEP" value="" />
+  <parameter name="WIDTH_CLOCK" value="5" />
+  <parameter name="WIDTH_PHASECOUNTERSELECT" value="" />
+ </module>
+ <module name="proc_main" kind="altera_nios2_qsys" version="16.1" enabled="1">
+  <parameter name="bht_ramBlockType" value="Automatic" />
+  <parameter name="breakOffset" value="32" />
+  <parameter name="breakSlave">proc_main.jtag_debug_module</parameter>
+  <parameter name="clockFrequency" value="50000000" />
+  <parameter name="cpuID" value="0" />
+  <parameter name="cpuID_stored" value="0" />
+  <parameter name="cpuReset" value="false" />
+  <parameter name="customInstSlavesSystemInfo" value="&lt;info/&gt;" />
+  <parameter name="dataAddrWidth" value="30" />
+  <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='ocm_null.s1' start='0x0' end='0x10' /><slave name='pll.pll_slave' start='0x30' end='0x40' /><slave name='timer.s1' start='0x40' end='0x60' /><slave name='proc_main.jtag_debug_module' start='0x1000' end='0x1800' /><slave name='sysid_main.control_slave' start='0x2080' end='0x2088' /><slave name='jtag_uart.avalon_jtag_slave' start='0x2090' end='0x2098' /><slave name='pio_hex.s1' start='0x2100' end='0x2110' /><slave name='pio_ledr.s1' start='0x2110' end='0x2120' /><slave name='pio_ledg.s1' start='0x2120' end='0x2130' /><slave name='keyboard.key_events' start='0x5000' end='0x5010' /><slave name='mouse_x_in.s1' start='0x5110' end='0x5120' /><slave name='mouse_y_in.s1' start='0x5120' end='0x5130' /><slave name='mouse_scroll_in.s1' start='0x5130' end='0x5140' /><slave name='mouse_btn_in.s1' start='0x5140' end='0x5150' /><slave name='sdram.s1' start='0x10000000' end='0x18000000' /><slave name='flash.flash_data' start='0x20000000' end='0x20800000' /><slave name='flash.flash_erase_control' start='0x20F00000' end='0x20F00004' /></address-map>]]></parameter>
+  <parameter name="dcache_bursts" value="false" />
+  <parameter name="dcache_lineSize" value="32" />
+  <parameter name="dcache_numTCDM" value="0" />
+  <parameter name="dcache_omitDataMaster" value="false" />
+  <parameter name="dcache_ramBlockType" value="Automatic" />
+  <parameter name="dcache_size" value="2048" />
+  <parameter name="dcache_tagramBlockType" value="Automatic" />
+  <parameter name="dcache_victim_buf_impl" value="ram" />
+  <parameter name="debug_OCIOnchipTrace" value="_128" />
+  <parameter name="debug_assignJtagInstanceID" value="false" />
+  <parameter name="debug_debugReqSignals" value="false" />
+  <parameter name="debug_embeddedPLL" value="true" />
+  <parameter name="debug_jtagInstanceID" value="0" />
+  <parameter name="debug_level" value="Level1" />
+  <parameter name="debug_triggerArming" value="true" />
+  <parameter name="deviceFamilyName" value="Cyclone IV E" />
+  <parameter name="deviceFeaturesSystemInfo">ADDRESS_STALL 1 ADVANCED_INFO 0 ALLOWS_COMPILING_OTHER_FAMILY_IP 1 ANY_QFP 0 CELL_LEVEL_BACK_ANNOTATION_DISABLED 0 COMPILER_SUPPORT 1 DSP 0 DSP_SHIFTER_BLOCK 0 DUMP_ASM_LAB_BITS_FOR_POWER 1 EMUL 1 ENABLE_ADVANCED_IO_ANALYSIS_GUI_FEATURES 1 ENABLE_PIN_PLANNER 0 ENGINEERING_SAMPLE 0 EPCS 1 ESB 0 FAKE1 0 FAKE2 0 FAKE3 0 FAMILY_LEVEL_INSTALLATION_ONLY 1 FASTEST 0 FINAL_TIMING_MODEL 0 FITTER_USE_FALLING_EDGE_DELAY 0 FPP_COMPLETELY_PLACES_AND_ROUTES_PERIPHERY 0 GENERATE_DC_ON_CURRENT_WARNING_FOR_INTERNAL_CLAMPING_DIODE 0 HARDCOPY 0 HAS_18_BIT_MULTS 0 HAS_ACE_SUPPORT 1 HAS_ACTIVE_PARALLEL_FLASH_SUPPORT 0 HAS_ADJUSTABLE_OUTPUT_IO_TIMING_MEAS_POINT 0 HAS_ADVANCED_IO_INVERTED_CORNER 0 HAS_ADVANCED_IO_POWER_SUPPORT 1 HAS_ADVANCED_IO_TIMING_SUPPORT 1 HAS_ALM_SUPPORT 0 HAS_ATOM_AND_ROUTING_POWER_MODELED_TOGETHER 0 HAS_AUTO_DERIVE_CLOCK_UNCERTAINTY_SUPPORT 0 HAS_AUTO_FIT_SUPPORT 1 HAS_BALANCED_OPT_TECHNIQUE_SUPPORT 1 HAS_BENEFICIAL_SKEW_SUPPORT 1 HAS_BITLEVEL_DRIVE_STRENGTH_CONTROL 1 HAS_BSDL_FILE_GENERATION 1 HAS_CDB_RE_NETWORK_PRESERVATION_SUPPORT 0 HAS_CGA_SUPPORT 1 HAS_CHECK_NETLIST_SUPPORT 0 HAS_CLOCK_REGION_CHECKER_ENABLED 1 HAS_CORE_JUNCTION_TEMP_DERATING 0 HAS_CROSSTALK_SUPPORT 0 HAS_CUSTOM_REGION_SUPPORT 1 HAS_DAP_JTAG_FROM_HPS 0 HAS_DATA_DRIVEN_ACVQ_HSSI_SUPPORT 0 HAS_DDB_FDI_SUPPORT 0 HAS_DESIGN_ANALYZER_SUPPORT 1 HAS_DETAILED_IO_RAIL_POWER_MODEL 1 HAS_DETAILED_LEIM_STATIC_POWER_MODEL 1 HAS_DETAILED_LE_POWER_MODEL 1 HAS_DETAILED_ROUTING_MUX_STATIC_POWER_MODEL 1 HAS_DETAILED_THERMAL_CIRCUIT_PARAMETER_SUPPORT 1 HAS_DEVICE_MIGRATION_SUPPORT 1 HAS_DIAGONAL_MIGRATION_SUPPORT 0 HAS_EMIF_TOOLKIT_SUPPORT 0 HAS_ERROR_DETECTION_SUPPORT 0 HAS_FAMILY_VARIANT_MIGRATION_SUPPORT 0 HAS_FANOUT_FREE_NODE_SUPPORT 1 HAS_FAST_FIT_SUPPORT 1 HAS_FITTER_ECO_SUPPORT 1 HAS_FIT_NETLIST_OPT_RETIME_SUPPORT 1 HAS_FIT_NETLIST_OPT_SUPPORT 1 HAS_FORMAL_VERIFICATION_SUPPORT 1 HAS_FPGA_XCHANGE_SUPPORT 1 HAS_FSAC_LUTRAM_REGISTER_PACKING_SUPPORT 0 HAS_FULL_DAT_MIN_TIMING_SUPPORT 1 HAS_FULL_INCREMENTAL_DESIGN_SUPPORT 1 HAS_FUNCTIONAL_SIMULATION_SUPPORT 1 HAS_FUNCTIONAL_VERILOG_SIMULATION_SUPPORT 0 HAS_FUNCTIONAL_VHDL_SIMULATION_SUPPORT 0 HAS_GLITCH_FILTERING_SUPPORT 1 HAS_HARDCOPYII_SUPPORT 0 HAS_HC_READY_SUPPORT 0 HAS_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 0 HAS_HOLD_TIME_AVOIDANCE_ACROSS_CLOCK_SPINE_SUPPORT 1 HAS_HSPICE_WRITER_SUPPORT 1 HAS_HSSI_POWER_CALCULATOR 0 HAS_IBISO_WRITER_SUPPORT 0 HAS_ICD_DATA_IP 0 HAS_IDB_SUPPORT 1 HAS_INCREMENTAL_DAT_SUPPORT 1 HAS_INCREMENTAL_SYNTHESIS_SUPPORT 1 HAS_IO_ASSIGNMENT_ANALYSIS_SUPPORT 1 HAS_IO_DECODER 0 HAS_IO_PLACEMENT_OPTIMIZATION_SUPPORT 1 HAS_IO_PLACEMENT_USING_GEOMETRY_RULE 0 HAS_IO_PLACEMENT_USING_PHYSIC_RULE 0 HAS_IO_SMART_RECOMPILE_SUPPORT 0 HAS_JITTER_SUPPORT 1 HAS_JTAG_SLD_HUB_SUPPORT 1 HAS_LOGIC_LOCK_SUPPORT 1 HAS_MICROPROCESSOR 0 HAS_MIF_SMART_COMPILE_SUPPORT 1 HAS_MINMAX_TIMING_MODELING_SUPPORT 1 HAS_MIN_TIMING_ANALYSIS_SUPPORT 1 HAS_MUX_RESTRUCTURE_SUPPORT 1 HAS_NADDER_STYLE_CLOCKING 0 HAS_NADDER_STYLE_FF 0 HAS_NADDER_STYLE_LCELL_COMB 0 HAS_NEW_CDB_NAME_FOR_M20K_SCLR 0 HAS_NEW_HC_FLOW_SUPPORT 0 HAS_NEW_SERDES_MAX_RESOURCE_COUNT_REPORTING_SUPPORT 1 HAS_NEW_VPR_SUPPORT 1 HAS_NONSOCKET_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_NO_HARDBLOCK_PARTITION_SUPPORT 0 HAS_NO_JTAG_USERCODE_SUPPORT 0 HAS_OPERATING_SETTINGS_AND_CONDITIONS_REPORTING_SUPPORT 1 HAS_PAD_LOCATION_ASSIGNMENT_SUPPORT 0 HAS_PARTIAL_RECONFIG_SUPPORT 0 HAS_PASSIVE_PARALLEL_SUPPORT 0 HAS_PDN_MODEL_STATUS 0 HAS_PHYSICAL_DESIGN_PLANNER_SUPPORT 0 HAS_PHYSICAL_NETLIST_OUTPUT 0 HAS_PHYSICAL_ROUTING_SUPPORT 0 HAS_PIN_SPECIFIC_VOLTAGE_SUPPORT 1 HAS_PLDM_REF_SUPPORT 1 HAS_POWER_BINNING_LIMITS_DATA 0 HAS_POWER_ESTIMATION_SUPPORT 1 HAS_PRELIMINARY_CLOCK_UNCERTAINTY_NUMBERS 0 HAS_PRE_FITTER_FPP_SUPPORT 0 HAS_PRE_FITTER_LUTRAM_NETLIST_CHECKER_ENABLED 0 HAS_PVA_SUPPORT 1 HAS_QUARTUS_HIERARCHICAL_DESIGN_SUPPORT 0 HAS_RAPID_RECOMPILE_SUPPORT 0 HAS_RCF_SUPPORT 1 HAS_RCF_SUPPORT_FOR_DEBUGGING 0 HAS_RED_BLACK_SEPARATION_SUPPORT 0 HAS_RE_LEVEL_TIMING_GRAPH_SUPPORT 1 HAS_RISEFALL_DELAY_SUPPORT 1 HAS_SIGNAL_PROBE_SUPPORT 1 HAS_SIGNAL_TAP_SUPPORT 1 HAS_SIMULATOR_SUPPORT 0 HAS_SPLIT_IO_SUPPORT 1 HAS_SPLIT_LC_SUPPORT 1 HAS_STRICT_PRESERVATION_SUPPORT 1 HAS_SYNTHESIS_ON_ATOMS 0 HAS_SYNTH_FSYN_NETLIST_OPT_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_RETIME_SUPPORT 1 HAS_SYNTH_NETLIST_OPT_SUPPORT 1 HAS_TCL_FITTER_SUPPORT 0 HAS_TECHNOLOGY_MIGRATION_SUPPORT 0 HAS_TEMPLATED_REGISTER_PACKING_SUPPORT 1 HAS_TIME_BORROWING_SUPPORT 0 HAS_TIMING_DRIVEN_SYNTHESIS_SUPPORT 1 HAS_TIMING_INFO_SUPPORT 1 HAS_TIMING_OPERATING_CONDITIONS 1 HAS_TIMING_SIMULATION_SUPPORT 1 HAS_TITAN_BASED_MAC_REGISTER_PACKER_SUPPORT 0 HAS_U2B2_SUPPORT 0 HAS_USER_HIGH_SPEED_LOW_POWER_TILE_SUPPORT 0 HAS_USE_FITTER_INFO_SUPPORT 1 HAS_VCCPD_POWER_RAIL 0 HAS_VERTICAL_MIGRATION_SUPPORT 1 HAS_VIEWDRAW_SYMBOL_SUPPORT 0 HAS_VIO_SUPPORT 1 HAS_VIRTUAL_DEVICES 0 HAS_WYSIWYG_DFFEAS_SUPPORT 1 HAS_XIBISO2_WRITER_SUPPORT 0 HAS_XIBISO_WRITER_SUPPORT 1 IFP_USE_LEGACY_IO_CHECKER 0 INCREMENTAL_DESIGN_SUPPORTS_COMPATIBLE_CONSTRAINTS 1 INSTALLED 0 INTERNAL_POF_SUPPORT_ENABLED 0 INTERNAL_USE_ONLY 0 ISSUE_MILITARY_TEMPERATURE_WARNING 0 IS_BARE_DIE 0 IS_CONFIG_ROM 0 IS_DEFAULT_FAMILY 0 IS_FOR_INTERNAL_TESTING_ONLY 0 IS_HARDCOPY_FAMILY 0 IS_HBGA_PACKAGE 0 IS_HIGH_CURRENT_PART 0 IS_LOW_POWER_PART 0 IS_REVE_SILICON 0 IS_SDM_ONLY_PACKAGE 0 IS_SMI_PART 0 LOAD_BLK_TYPE_DATA_FROM_ATOM_WYS_INFO 0 LVDS_IO 1 M10K_MEMORY 0 M144K_MEMORY 0 M20K_MEMORY 0 M4K_MEMORY 0 M512_MEMORY 0 M9K_MEMORY 1 MLAB_MEMORY 0 MRAM_MEMORY 0 NOT_LISTED 0 NOT_MIGRATABLE 0 NO_FITTER_DELAY_CACHE_GENERATED 0 NO_PIN_OUT 0 NO_POF 0 NO_RPE_SUPPORT 0 NO_SUPPORT_FOR_LOGICLOCK_CONTENT_BACK_ANNOTATION 1 NO_SUPPORT_FOR_STA_CLOCK_UNCERTAINTY_CHECK 0 NO_TDC_SUPPORT 0 POSTFIT_BAK_DATABASE_EXPORT_ENABLED 1 POSTMAP_BAK_DATABASE_EXPORT_ENABLED 1 PROGRAMMER_ONLY 0 PROGRAMMER_SUPPORT 1 PVA_SUPPORTS_ONLY_SUBSET_OF_ATOMS 0 QFIT_IN_DEVELOPMENT 0 QMAP_IN_DEVELOPMENT 0 RAM_LOGICAL_NAME_CHECKING_IN_CUT_ENABLED 1 REPORTS_METASTABILITY_MTBF 1 REQUIRES_INSTALLATION_PATCH 0 REQUIRES_LIST_OF_TEMPERATURE_AND_VOLTAGE_OPERATING_CONDITIONS 1 REQUIRE_QUARTUS_HIERARCHICAL_DESIGN 0 REQUIRE_SPECIAL_HANDLING_FOR_LOCAL_LABLINE 1 RESERVES_SIGNAL_PROBE_PINS 0 RESOLVE_MAX_FANOUT_EARLY 1 RESOLVE_MAX_FANOUT_LATE 0 RESPECTS_FIXED_SIZED_LOCKED_LOCATION_LOGICLOCK 1 RESTRICTED_USER_SELECTION 0 RESTRICT_PARTIAL_RECONFIG 0 RISEFALL_SUPPORT_IS_HIDDEN 0 SHOW_HIDDEN_FAMILY_IN_PROGRAMMER 0 STRICT_TIMING_DB_CHECKS 0 SUPPORTS_ADDITIONAL_OPTIONS_FOR_UNUSED_IO 0 SUPPORTS_CRC 1 SUPPORTS_DIFFERENTIAL_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_DSP_BALANCING_BACK_ANNOTATION 0 SUPPORTS_GENERATION_OF_EARLY_POWER_ESTIMATOR_FILE 1 SUPPORTS_GLOBAL_SIGNAL_BACK_ANNOTATION 0 SUPPORTS_HIPI_RETIMING 0 SUPPORTS_LICENSE_FREE_PARTIAL_RECONFIG 0 SUPPORTS_MAC_CHAIN_OUT_ADDER 0 SUPPORTS_RAM_PACKING_BACK_ANNOTATION 0 SUPPORTS_REG_PACKING_BACK_ANNOTATION 0 SUPPORTS_SIGNALPROBE_REGISTER_PIPELINING 1 SUPPORTS_SINGLE_ENDED_AIOT_BOARD_TRACE_MODEL 1 SUPPORTS_USER_MANUAL_LOGIC_DUPLICATION 1 SUPPORTS_VID 0 SUPPORT_HIGH_SPEED_HPS 0 TMV_RUN_CUSTOMIZABLE_VIEWER 1 TMV_RUN_INTERNAL_DETAILS 1 TMV_RUN_INTERNAL_DETAILS_ON_IO 0 TMV_RUN_INTERNAL_DETAILS_ON_IOBUF 1 TMV_RUN_INTERNAL_DETAILS_ON_LCELL 0 TMV_RUN_INTERNAL_DETAILS_ON_LRAM 0 TRANSCEIVER_3G_BLOCK 0 TRANSCEIVER_6G_BLOCK 0 USES_ACV_FOR_FLED 1 USES_ADB_FOR_BACK_ANNOTATION 1 USES_ALTERA_LNSIM 0 USES_ASIC_ROUTING_POWER_CALCULATOR 0 USES_DATA_DRIVEN_PLL_COMPUTATION_UTIL 1 USES_DEV 1 USES_ICP_FOR_ECO_FITTER 0 USES_LIBERTY_TIMING 0 USES_NETWORK_ROUTING_POWER_CALCULATOR 0 USES_PART_INFO_FOR_DISPLAYING_CORE_VOLTAGE_VALUE 0 USES_POWER_SIGNAL_ACTIVITIES 1 USES_PVAFAM2 0 USES_SECOND_GENERATION_PART_INFO 0 USES_SECOND_GENERATION_POWER_ANALYZER 0 USES_THIRD_GENERATION_TIMING_MODELS_TIS 1 USES_U2B2_TIMING_MODELS 0 USES_XML_FORMAT_FOR_EMIF_PIN_MAP_FILE 0 USE_ADVANCED_IO_POWER_BY_DEFAULT 1 USE_ADVANCED_IO_TIMING_BY_DEFAULT 1 USE_BASE_FAMILY_DDB_PATH 0 USE_OCT_AUTO_CALIBRATION 1 USE_RELAX_IO_ASSIGNMENT_RULES 0 USE_RISEFALL_ONLY 1 USE_SEPARATE_LIST_FOR_TECH_MIGRATION 0 USE_SINGLE_COMPILER_PASS_PLL_MIF_FILE_WRITER 1 USE_TITAN_IO_BASED_IO_REGISTER_PACKER_UTIL 0 USING_28NM_OR_OLDER_TIMING_METHODOLOGY 1 WYSIWYG_BUS_WIDTH_CHECKING_IN_CUT_ENABLED 1</parameter>
+  <parameter name="exceptionOffset" value="32" />
+  <parameter name="exceptionSlave" value="sdram.s1" />
+  <parameter name="icache_burstType" value="None" />
+  <parameter name="icache_numTCIM" value="0" />
+  <parameter name="icache_ramBlockType" value="Automatic" />
+  <parameter name="icache_size" value="4096" />
+  <parameter name="icache_tagramBlockType" value="Automatic" />
+  <parameter name="impl" value="Tiny" />
+  <parameter name="instAddrWidth" value="29" />
+  <parameter name="instSlaveMapParam"><![CDATA[<address-map><slave name='ocm_null.s1' start='0x0' end='0x10' /><slave name='proc_main.jtag_debug_module' start='0x1000' end='0x1800' /><slave name='sysid_main.control_slave' start='0x2080' end='0x2088' /><slave name='jtag_uart.avalon_jtag_slave' start='0x2090' end='0x2098' /><slave name='sdram.s1' start='0x10000000' end='0x18000000' /></address-map>]]></parameter>
+  <parameter name="internalIrqMaskSystemInfo" value="3" />
+  <parameter name="manuallyAssignCpuID" value="true" />
+  <parameter name="mmu_TLBMissExcOffset" value="0" />
+  <parameter name="mmu_TLBMissExcSlave" value="None" />
+  <parameter name="mmu_autoAssignTlbPtrSz" value="true" />
+  <parameter name="mmu_enabled" value="false" />
+  <parameter name="mmu_processIDNumBits" value="8" />
+  <parameter name="mmu_ramBlockType" value="Automatic" />
+  <parameter name="mmu_tlbNumWays" value="16" />
+  <parameter name="mmu_tlbPtrSz" value="7" />
+  <parameter name="mmu_udtlbNumEntries" value="6" />
+  <parameter name="mmu_uitlbNumEntries" value="4" />
+  <parameter name="mpu_enabled" value="false" />
+  <parameter name="mpu_minDataRegionSize" value="12" />
+  <parameter name="mpu_minInstRegionSize" value="12" />
+  <parameter name="mpu_numOfDataRegion" value="8" />
+  <parameter name="mpu_numOfInstRegion" value="8" />
+  <parameter name="mpu_useLimit" value="false" />
+  <parameter name="muldiv_divider" value="false" />
+  <parameter name="muldiv_multiplierType" value="EmbeddedMulFast" />
+  <parameter name="ocimem_ramBlockType" value="Automatic" />
+  <parameter name="regfile_ramBlockType" value="Automatic" />
+  <parameter name="resetOffset" value="0" />
+  <parameter name="resetSlave" value="sdram.s1" />
+  <parameter name="resetrequest_enabled" value="true" />
+  <parameter name="setting_HBreakTest" value="false" />
+  <parameter name="setting_HDLSimCachesCleared" value="true" />
+  <parameter name="setting_activateModelChecker" value="false" />
+  <parameter name="setting_activateMonitors" value="true" />
+  <parameter name="setting_activateTestEndChecker" value="false" />
+  <parameter name="setting_activateTrace" value="true" />
+  <parameter name="setting_activateTrace_user" value="false" />
+  <parameter name="setting_allowFullAddressRange" value="false" />
+  <parameter name="setting_alwaysEncrypt" value="true" />
+  <parameter name="setting_asic_enabled" value="false" />
+  <parameter name="setting_asic_synopsys_translate_on_off" value="false" />
+  <parameter name="setting_avalonDebugPortPresent" value="false" />
+  <parameter name="setting_bhtIndexPcOnly" value="false" />
+  <parameter name="setting_bhtPtrSz" value="8" />
+  <parameter name="setting_bigEndian" value="false" />
+  <parameter name="setting_bit31BypassDCache" value="true" />
+  <parameter name="setting_branchPredictionType" value="Automatic" />
+  <parameter name="setting_breakslaveoveride" value="false" />
+  <parameter name="setting_clearXBitsLDNonBypass" value="true" />
+  <parameter name="setting_dc_ecc_present" value="false" />
+  <parameter name="setting_debugSimGen" value="false" />
+  <parameter name="setting_dtcm_ecc_present" value="false" />
+  <parameter name="setting_ecc_present" value="false" />
+  <parameter name="setting_ecc_sim_test_ports" value="false" />
+  <parameter name="setting_exportPCB" value="false" />
+  <parameter name="setting_export_large_RAMs" value="false" />
+  <parameter name="setting_exportvectors" value="false" />
+  <parameter name="setting_extraExceptionInfo" value="false" />
+  <parameter name="setting_fullWaveformSignals" value="false" />
+  <parameter name="setting_ic_ecc_present" value="true" />
+  <parameter name="setting_illegalInstructionsTrap" value="false" />
+  <parameter name="setting_illegalMemAccessDetection" value="false" />
+  <parameter name="setting_interruptControllerType" value="Internal" />
+  <parameter name="setting_itcm_ecc_present" value="false" />
+  <parameter name="setting_mmu_ecc_present" value="true" />
+  <parameter name="setting_oci_export_jtag_signals" value="false" />
+  <parameter name="setting_perfCounterWidth" value="32" />
+  <parameter name="setting_performanceCounter" value="false" />
+  <parameter name="setting_preciseDivisionErrorException" value="false" />
+  <parameter name="setting_preciseIllegalMemAccessException" value="false" />
+  <parameter name="setting_preciseSlaveAccessErrorException" value="false" />
+  <parameter name="setting_removeRAMinit" value="false" />
+  <parameter name="setting_rf_ecc_present" value="true" />
+  <parameter name="setting_shadowRegisterSets" value="0" />
+  <parameter name="setting_showInternalSettings" value="false" />
+  <parameter name="setting_showUnpublishedSettings" value="false" />
+  <parameter name="tightlyCoupledDataMaster0AddrWidth" value="1" />
+  <parameter name="tightlyCoupledDataMaster0MapParam" value="" />
+  <parameter name="tightlyCoupledDataMaster1AddrWidth" value="1" />
+  <parameter name="tightlyCoupledDataMaster1MapParam" value="" />
+  <parameter name="tightlyCoupledDataMaster2AddrWidth" value="1" />
+  <parameter name="tightlyCoupledDataMaster2MapParam" value="" />
+  <parameter name="tightlyCoupledDataMaster3AddrWidth" value="1" />
+  <parameter name="tightlyCoupledDataMaster3MapParam" value="" />
+  <parameter name="tightlyCoupledInstructionMaster0AddrWidth" value="1" />
+  <parameter name="tightlyCoupledInstructionMaster0MapParam" value="" />
+  <parameter name="tightlyCoupledInstructionMaster1AddrWidth" value="1" />
+  <parameter name="tightlyCoupledInstructionMaster1MapParam" value="" />
+  <parameter name="tightlyCoupledInstructionMaster2AddrWidth" value="1" />
+  <parameter name="tightlyCoupledInstructionMaster2MapParam" value="" />
+  <parameter name="tightlyCoupledInstructionMaster3AddrWidth" value="1" />
+  <parameter name="tightlyCoupledInstructionMaster3MapParam" value="" />
+  <parameter name="userDefinedSettings" value="" />
  </module>
- <module name="proc_main" kind="altera_nios2_qsys" version="16.1" enabled="1">
+ <module name="proc_usb" kind="altera_nios2_qsys" version="16.1" enabled="1">
   <parameter name="bht_ramBlockType" value="Automatic" />
   <parameter name="breakOffset" value="32" />
-  <parameter name="breakSlave">proc_main.jtag_debug_module</parameter>
+  <parameter name="breakSlave">proc_usb.jtag_debug_module</parameter>
   <parameter name="clockFrequency" value="50000000" />
   <parameter name="cpuID" value="0" />
   <parameter name="cpuID_stored" value="0" />
   <parameter name="cpuReset" value="false" />
   <parameter name="customInstSlavesSystemInfo" value="&lt;info/&gt;" />
-  <parameter name="dataAddrWidth" value="29" />
-  <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='ocm_null.s1' start='0x0' end='0x10' /><slave name='sdram_pll.pll_slave' start='0x30' end='0x40' /><slave name='timer.s1' start='0x40' end='0x60' /><slave name='proc_main.jtag_debug_module' start='0x1800' end='0x2000' /><slave name='osu_sysid.control_slave' start='0x2088' end='0x2090' /><slave name='jtag_uart.avalon_jtag_slave' start='0x2090' end='0x2098' /><slave name='keyboard.key_events' start='0x5000' end='0x5010' /><slave name='sdram.s1' start='0x10000000' end='0x18000000' /></address-map>]]></parameter>
+  <parameter name="dataAddrWidth" value="30" />
+  <parameter name="dataSlaveMapParam"><![CDATA[<address-map><slave name='ocm_null.s1' start='0x0' end='0x10' /><slave name='timer.s1' start='0x40' end='0x60' /><slave name='proc_usb.jtag_debug_module' start='0x1800' end='0x2000' /><slave name='sysid_usb.control_slave' start='0x2080' end='0x2088' /><slave name='jtag_uart.avalon_jtag_slave' start='0x2090' end='0x2098' /><slave name='otg_hpi_cs.s1' start='0x2200' end='0x2210' /><slave name='otg_hpi_address.s1' start='0x2210' end='0x2220' /><slave name='otg_hpi_data.s1' start='0x2220' end='0x2230' /><slave name='otg_hpi_r.s1' start='0x2230' end='0x2240' /><slave name='otg_hpi_w.s1' start='0x2240' end='0x2250' /><slave name='mouse_x_out.s1' start='0x5110' end='0x5120' /><slave name='mouse_y_out.s1' start='0x5120' end='0x5130' /><slave name='mouse_scroll_out.s1' start='0x5130' end='0x5140' /><slave name='mouse_btn_out.s1' start='0x5140' end='0x5150' /><slave name='sdram.s1' start='0x10000000' end='0x18000000' /><slave name='otg_hpi_cs.s1' start='0x30002200' end='0x30002210' /><slave name='otg_hpi_address.s1' start='0x30002210' end='0x30002220' /><slave name='otg_hpi_data.s1' start='0x30002220' end='0x30002230' /><slave name='otg_hpi_r.s1' start='0x30002230' end='0x30002240' /><slave name='otg_hpi_w.s1' start='0x30002240' end='0x30002250' /></address-map>]]></parameter>
   <parameter name="dcache_bursts" value="false" />
   <parameter name="dcache_lineSize" value="32" />
   <parameter name="dcache_numTCDM" value="0" />
@@ -339,7 +1405,7 @@
   <parameter name="icache_tagramBlockType" value="Automatic" />
   <parameter name="impl" value="Tiny" />
   <parameter name="instAddrWidth" value="29" />
-  <parameter name="instSlaveMapParam"><![CDATA[<address-map><slave name='ocm_null.s1' start='0x0' end='0x10' /><slave name='sdram_pll.pll_slave' start='0x30' end='0x40' /><slave name='proc_main.jtag_debug_module' start='0x1800' end='0x2000' /><slave name='osu_sysid.control_slave' start='0x2088' end='0x2090' /><slave name='sdram.s1' start='0x10000000' end='0x18000000' /></address-map>]]></parameter>
+  <parameter name="instSlaveMapParam"><![CDATA[<address-map><slave name='ocm_null.s1' start='0x0' end='0x10' /><slave name='proc_usb.jtag_debug_module' start='0x1800' end='0x2000' /><slave name='sysid_usb.control_slave' start='0x2080' end='0x2088' /><slave name='jtag_uart.avalon_jtag_slave' start='0x2090' end='0x2098' /><slave name='sdram.s1' start='0x10000000' end='0x18000000' /></address-map>]]></parameter>
   <parameter name="internalIrqMaskSystemInfo" value="3" />
   <parameter name="manuallyAssignCpuID" value="true" />
   <parameter name="mmu_TLBMissExcOffset" value="0" />
@@ -432,7 +1498,7 @@
  <module
    name="sdram"
    kind="altera_avalon_new_sdram_controller"
-   version="17.0"
+   version="17.1"
    enabled="1">
   <parameter name="TAC" value="5.5" />
   <parameter name="TMRD" value="3" />
@@ -458,174 +1524,21 @@
   <parameter name="registerDataIn" value="true" />
   <parameter name="rowWidth" value="13" />
  </module>
- <module name="sdram_pll" kind="altpll" version="17.0" enabled="1">
-  <parameter name="AUTO_DEVICE_FAMILY" value="Cyclone IV E" />
-  <parameter name="AUTO_INCLK_INTERFACE_CLOCK_RATE" value="50000000" />
-  <parameter name="AVALON_USE_SEPARATE_SYSCLK" value="NO" />
-  <parameter name="BANDWIDTH" value="" />
-  <parameter name="BANDWIDTH_TYPE" value="AUTO" />
-  <parameter name="CLK0_DIVIDE_BY" value="1" />
-  <parameter name="CLK0_DUTY_CYCLE" value="50" />
-  <parameter name="CLK0_MULTIPLY_BY" value="1" />
-  <parameter name="CLK0_PHASE_SHIFT" value="0" />
-  <parameter name="CLK1_DIVIDE_BY" value="1" />
-  <parameter name="CLK1_DUTY_CYCLE" value="50" />
-  <parameter name="CLK1_MULTIPLY_BY" value="1" />
-  <parameter name="CLK1_PHASE_SHIFT" value="-3000" />
-  <parameter name="CLK2_DIVIDE_BY" value="" />
-  <parameter name="CLK2_DUTY_CYCLE" value="" />
-  <parameter name="CLK2_MULTIPLY_BY" value="" />
-  <parameter name="CLK2_PHASE_SHIFT" value="" />
-  <parameter name="CLK3_DIVIDE_BY" value="" />
-  <parameter name="CLK3_DUTY_CYCLE" value="" />
-  <parameter name="CLK3_MULTIPLY_BY" value="" />
-  <parameter name="CLK3_PHASE_SHIFT" value="" />
-  <parameter name="CLK4_DIVIDE_BY" value="" />
-  <parameter name="CLK4_DUTY_CYCLE" value="" />
-  <parameter name="CLK4_MULTIPLY_BY" value="" />
-  <parameter name="CLK4_PHASE_SHIFT" value="" />
-  <parameter name="CLK5_DIVIDE_BY" value="" />
-  <parameter name="CLK5_DUTY_CYCLE" value="" />
-  <parameter name="CLK5_MULTIPLY_BY" value="" />
-  <parameter name="CLK5_PHASE_SHIFT" value="" />
-  <parameter name="CLK6_DIVIDE_BY" value="" />
-  <parameter name="CLK6_DUTY_CYCLE" value="" />
-  <parameter name="CLK6_MULTIPLY_BY" value="" />
-  <parameter name="CLK6_PHASE_SHIFT" value="" />
-  <parameter name="CLK7_DIVIDE_BY" value="" />
-  <parameter name="CLK7_DUTY_CYCLE" value="" />
-  <parameter name="CLK7_MULTIPLY_BY" value="" />
-  <parameter name="CLK7_PHASE_SHIFT" value="" />
-  <parameter name="CLK8_DIVIDE_BY" value="" />
-  <parameter name="CLK8_DUTY_CYCLE" value="" />
-  <parameter name="CLK8_MULTIPLY_BY" value="" />
-  <parameter name="CLK8_PHASE_SHIFT" value="" />
-  <parameter name="CLK9_DIVIDE_BY" value="" />
-  <parameter name="CLK9_DUTY_CYCLE" value="" />
-  <parameter name="CLK9_MULTIPLY_BY" value="" />
-  <parameter name="CLK9_PHASE_SHIFT" value="" />
-  <parameter name="COMPENSATE_CLOCK" value="CLK0" />
-  <parameter name="DOWN_SPREAD" value="" />
-  <parameter name="DPA_DIVIDER" value="" />
-  <parameter name="DPA_DIVIDE_BY" value="" />
-  <parameter name="DPA_MULTIPLY_BY" value="" />
-  <parameter name="ENABLE_SWITCH_OVER_COUNTER" value="" />
-  <parameter name="EXTCLK0_DIVIDE_BY" value="" />
-  <parameter name="EXTCLK0_DUTY_CYCLE" value="" />
-  <parameter name="EXTCLK0_MULTIPLY_BY" value="" />
-  <parameter name="EXTCLK0_PHASE_SHIFT" value="" />
-  <parameter name="EXTCLK1_DIVIDE_BY" value="" />
-  <parameter name="EXTCLK1_DUTY_CYCLE" value="" />
-  <parameter name="EXTCLK1_MULTIPLY_BY" value="" />
-  <parameter name="EXTCLK1_PHASE_SHIFT" value="" />
-  <parameter name="EXTCLK2_DIVIDE_BY" value="" />
-  <parameter name="EXTCLK2_DUTY_CYCLE" value="" />
-  <parameter name="EXTCLK2_MULTIPLY_BY" value="" />
-  <parameter name="EXTCLK2_PHASE_SHIFT" value="" />
-  <parameter name="EXTCLK3_DIVIDE_BY" value="" />
-  <parameter name="EXTCLK3_DUTY_CYCLE" value="" />
-  <parameter name="EXTCLK3_MULTIPLY_BY" value="" />
-  <parameter name="EXTCLK3_PHASE_SHIFT" value="" />
-  <parameter name="FEEDBACK_SOURCE" value="" />
-  <parameter name="GATE_LOCK_COUNTER" value="" />
-  <parameter name="GATE_LOCK_SIGNAL" value="" />
-  <parameter name="HIDDEN_CONSTANTS">CT#PORT_clk5 PORT_UNUSED CT#PORT_clk4 PORT_UNUSED CT#PORT_clk3 PORT_UNUSED CT#PORT_clk2 PORT_UNUSED CT#PORT_clk1 PORT_USED CT#PORT_clk0 PORT_USED CT#CLK0_MULTIPLY_BY 1 CT#PORT_SCANWRITE PORT_UNUSED CT#PORT_SCANACLR PORT_UNUSED CT#PORT_PFDENA PORT_UNUSED CT#PORT_PLLENA PORT_UNUSED CT#PORT_SCANDATA PORT_UNUSED CT#PORT_SCANCLKENA PORT_UNUSED CT#WIDTH_CLOCK 5 CT#PORT_SCANDATAOUT PORT_UNUSED CT#LPM_TYPE altpll CT#PLL_TYPE AUTO CT#CLK0_PHASE_SHIFT 0 CT#CLK1_DUTY_CYCLE 50 CT#PORT_PHASEDONE PORT_UNUSED CT#OPERATION_MODE NORMAL CT#PORT_CONFIGUPDATE PORT_UNUSED CT#CLK1_MULTIPLY_BY 1 CT#COMPENSATE_CLOCK CLK0 CT#PORT_CLKSWITCH PORT_UNUSED CT#INCLK0_INPUT_FREQUENCY 20000 CT#PORT_SCANDONE PORT_UNUSED CT#PORT_CLKLOSS PORT_UNUSED CT#PORT_INCLK1 PORT_UNUSED CT#AVALON_USE_SEPARATE_SYSCLK NO CT#PORT_INCLK0 PORT_USED CT#PORT_clkena5 PORT_UNUSED CT#PORT_clkena4 PORT_UNUSED CT#PORT_clkena3 PORT_UNUSED CT#PORT_clkena2 PORT_UNUSED CT#PORT_clkena1 PORT_UNUSED CT#PORT_clkena0 PORT_UNUSED CT#CLK1_PHASE_SHIFT -3000 CT#PORT_ARESET PORT_UNUSED CT#BANDWIDTH_TYPE AUTO CT#INTENDED_DEVICE_FAMILY {Cyclone IV E} CT#PORT_SCANREAD PORT_UNUSED CT#PORT_PHASESTEP PORT_UNUSED CT#PORT_SCANCLK PORT_UNUSED CT#PORT_CLKBAD1 PORT_UNUSED CT#PORT_CLKBAD0 PORT_UNUSED CT#PORT_FBIN PORT_UNUSED CT#PORT_PHASEUPDOWN PORT_UNUSED CT#PORT_extclk3 PORT_UNUSED CT#PORT_extclk2 PORT_UNUSED CT#PORT_extclk1 PORT_UNUSED CT#PORT_PHASECOUNTERSELECT PORT_UNUSED CT#PORT_extclk0 PORT_UNUSED CT#PORT_ACTIVECLOCK PORT_UNUSED CT#CLK0_DUTY_CYCLE 50 CT#CLK0_DIVIDE_BY 1 CT#CLK1_DIVIDE_BY 1 CT#PORT_LOCKED PORT_UNUSED</parameter>
-  <parameter name="HIDDEN_CUSTOM_ELABORATION">altpll_avalon_elaboration</parameter>
-  <parameter name="HIDDEN_CUSTOM_POST_EDIT">altpll_avalon_post_edit</parameter>
-  <parameter name="HIDDEN_IF_PORTS">IF#phasecounterselect {input 4} IF#locked {output 0} IF#reset {input 0} IF#clk {input 0} IF#phaseupdown {input 0} IF#scandone {output 0} IF#readdata {output 32} IF#write {input 0} IF#scanclk {input 0} IF#phasedone {output 0} IF#address {input 2} IF#c1 {output 0} IF#c0 {output 0} IF#writedata {input 32} IF#read {input 0} IF#areset {input 0} IF#scanclkena {input 0} IF#scandataout {output 0} IF#configupdate {input 0} IF#phasestep {input 0} IF#scandata {input 0}</parameter>
-  <parameter name="HIDDEN_IS_FIRST_EDIT" value="0" />
-  <parameter name="HIDDEN_IS_NUMERIC">IN#WIDTH_CLOCK 1 IN#CLK0_DUTY_CYCLE 1 IN#PLL_TARGET_HARCOPY_CHECK 1 IN#CLK1_MULTIPLY_BY 1 IN#SWITCHOVER_COUNT_EDIT 1 IN#INCLK0_INPUT_FREQUENCY 1 IN#PLL_LVDS_PLL_CHECK 1 IN#PLL_AUTOPLL_CHECK 1 IN#PLL_FASTPLL_CHECK 1 IN#CLK1_DUTY_CYCLE 1 IN#PLL_ENHPLL_CHECK 1 IN#DIV_FACTOR1 1 IN#DIV_FACTOR0 1 IN#LVDS_MODE_DATA_RATE_DIRTY 1 IN#GLOCK_COUNTER_EDIT 1 IN#CLK0_DIVIDE_BY 1 IN#MULT_FACTOR1 1 IN#MULT_FACTOR0 1 IN#CLK0_MULTIPLY_BY 1 IN#USE_MIL_SPEED_GRADE 1 IN#CLK1_DIVIDE_BY 1</parameter>
-  <parameter name="HIDDEN_MF_PORTS">MF#areset 1 MF#clk 1 MF#locked 1 MF#inclk 1</parameter>
-  <parameter name="HIDDEN_PRIVATES">PT#GLOCKED_FEATURE_ENABLED 0 PT#SPREAD_FEATURE_ENABLED 0 PT#BANDWIDTH_FREQ_UNIT MHz PT#CUR_DEDICATED_CLK c0 PT#INCLK0_FREQ_EDIT 50.000 PT#BANDWIDTH_PRESET Low PT#PLL_LVDS_PLL_CHECK 0 PT#BANDWIDTH_USE_PRESET 0 PT#AVALON_USE_SEPARATE_SYSCLK NO PT#PLL_ENHPLL_CHECK 0 PT#OUTPUT_FREQ_UNIT1 MHz PT#OUTPUT_FREQ_UNIT0 MHz PT#PHASE_RECONFIG_FEATURE_ENABLED 1 PT#CREATE_CLKBAD_CHECK 0 PT#CLKSWITCH_CHECK 0 PT#INCLK1_FREQ_EDIT 100.000 PT#NORMAL_MODE_RADIO 1 PT#SRC_SYNCH_COMP_RADIO 0 PT#PLL_ARESET_CHECK 0 PT#LONG_SCAN_RADIO 1 PT#SCAN_FEATURE_ENABLED 1 PT#PHASE_RECONFIG_INPUTS_CHECK 0 PT#USE_CLK1 1 PT#USE_CLK0 1 PT#PRIMARY_CLK_COMBO inclk0 PT#BANDWIDTH 1.000 PT#GLOCKED_COUNTER_EDIT_CHANGED 1 PT#PLL_FASTPLL_CHECK 0 PT#SPREAD_FREQ_UNIT KHz PT#PLL_AUTOPLL_CHECK 1 PT#LVDS_PHASE_SHIFT_UNIT1 deg PT#LVDS_PHASE_SHIFT_UNIT0 deg PT#OUTPUT_FREQ_MODE1 0 PT#SWITCHOVER_FEATURE_ENABLED 0 PT#MIG_DEVICE_SPEED_GRADE Any PT#OUTPUT_FREQ_MODE0 0 PT#BANDWIDTH_FEATURE_ENABLED 1 PT#INCLK0_FREQ_UNIT_COMBO MHz PT#ZERO_DELAY_RADIO 0 PT#OUTPUT_FREQ1 100.00000000 PT#OUTPUT_FREQ0 100.00000000 PT#SHORT_SCAN_RADIO 0 PT#LVDS_MODE_DATA_RATE_DIRTY 0 PT#CUR_FBIN_CLK c0 PT#PLL_ADVANCED_PARAM_CHECK 0 PT#CLKBAD_SWITCHOVER_CHECK 0 PT#PHASE_SHIFT_STEP_ENABLED_CHECK 0 PT#DEVICE_SPEED_GRADE 7 PT#PLL_FBMIMIC_CHECK 0 PT#LVDS_MODE_DATA_RATE {Not Available} PT#LOCKED_OUTPUT_CHECK 0 PT#SPREAD_PERCENT 0.500 PT#PHASE_SHIFT1 -3.00000000 PT#PHASE_SHIFT0 0.00000000 PT#DIV_FACTOR1 1 PT#DIV_FACTOR0 1 PT#CNX_NO_COMPENSATE_RADIO 0 PT#USE_CLKENA1 0 PT#USE_CLKENA0 0 PT#CREATE_INCLK1_CHECK 0 PT#GLOCK_COUNTER_EDIT 1048575 PT#INCLK1_FREQ_UNIT_COMBO MHz PT#EFF_OUTPUT_FREQ_VALUE1 50.000000 PT#EFF_OUTPUT_FREQ_VALUE0 50.000000 PT#SPREAD_FREQ 50.000 PT#USE_MIL_SPEED_GRADE 0 PT#EXPLICIT_SWITCHOVER_COUNTER 0 PT#STICKY_CLK1 1 PT#STICKY_CLK0 1 PT#EXT_FEEDBACK_RADIO 0 PT#MIRROR_CLK1 0 PT#MIRROR_CLK0 0 PT#SWITCHOVER_COUNT_EDIT 1 PT#SELF_RESET_LOCK_LOSS 0 PT#PLL_PFDENA_CHECK 0 PT#INT_FEEDBACK__MODE_RADIO 1 PT#INCLK1_FREQ_EDIT_CHANGED 1 PT#CLKLOSS_CHECK 0 PT#SYNTH_WRAPPER_GEN_POSTFIX 0 PT#PHASE_SHIFT_UNIT1 ns PT#PHASE_SHIFT_UNIT0 ns PT#BANDWIDTH_USE_AUTO 1 PT#HAS_MANUAL_SWITCHOVER 1 PT#MULT_FACTOR1 1 PT#MULT_FACTOR0 1 PT#SPREAD_USE 0 PT#GLOCKED_MODE_CHECK 0 PT#SACN_INPUTS_CHECK 0 PT#DUTY_CYCLE1 50.00000000 PT#INTENDED_DEVICE_FAMILY {Cyclone IV E} PT#DUTY_CYCLE0 50.00000000 PT#PLL_TARGET_HARCOPY_CHECK 0 PT#INCLK1_FREQ_UNIT_CHANGED 1 PT#RECONFIG_FILE ALTPLL1508019453416741.mif PT#ACTIVECLK_CHECK 0</parameter>
-  <parameter name="HIDDEN_USED_PORTS">UP#locked used UP#c1 used UP#c0 used UP#areset used UP#inclk0 used</parameter>
-  <parameter name="INCLK0_INPUT_FREQUENCY" value="20000" />
-  <parameter name="INCLK1_INPUT_FREQUENCY" value="" />
-  <parameter name="INTENDED_DEVICE_FAMILY" value="Cyclone IV E" />
-  <parameter name="INVALID_LOCK_MULTIPLIER" value="" />
-  <parameter name="LOCK_HIGH" value="" />
-  <parameter name="LOCK_LOW" value="" />
-  <parameter name="OPERATION_MODE" value="NORMAL" />
-  <parameter name="PLL_TYPE" value="AUTO" />
-  <parameter name="PORT_ACTIVECLOCK" value="PORT_UNUSED" />
-  <parameter name="PORT_ARESET" value="PORT_UNUSED" />
-  <parameter name="PORT_CLKBAD0" value="PORT_UNUSED" />
-  <parameter name="PORT_CLKBAD1" value="PORT_UNUSED" />
-  <parameter name="PORT_CLKLOSS" value="PORT_UNUSED" />
-  <parameter name="PORT_CLKSWITCH" value="PORT_UNUSED" />
-  <parameter name="PORT_CONFIGUPDATE" value="PORT_UNUSED" />
-  <parameter name="PORT_ENABLE0" value="" />
-  <parameter name="PORT_ENABLE1" value="" />
-  <parameter name="PORT_FBIN" value="PORT_UNUSED" />
-  <parameter name="PORT_FBOUT" value="" />
-  <parameter name="PORT_INCLK0" value="PORT_USED" />
-  <parameter name="PORT_INCLK1" value="PORT_UNUSED" />
-  <parameter name="PORT_LOCKED" value="PORT_UNUSED" />
-  <parameter name="PORT_PFDENA" value="PORT_UNUSED" />
-  <parameter name="PORT_PHASECOUNTERSELECT" value="PORT_UNUSED" />
-  <parameter name="PORT_PHASEDONE" value="PORT_UNUSED" />
-  <parameter name="PORT_PHASESTEP" value="PORT_UNUSED" />
-  <parameter name="PORT_PHASEUPDOWN" value="PORT_UNUSED" />
-  <parameter name="PORT_PLLENA" value="PORT_UNUSED" />
-  <parameter name="PORT_SCANACLR" value="PORT_UNUSED" />
-  <parameter name="PORT_SCANCLK" value="PORT_UNUSED" />
-  <parameter name="PORT_SCANCLKENA" value="PORT_UNUSED" />
-  <parameter name="PORT_SCANDATA" value="PORT_UNUSED" />
-  <parameter name="PORT_SCANDATAOUT" value="PORT_UNUSED" />
-  <parameter name="PORT_SCANDONE" value="PORT_UNUSED" />
-  <parameter name="PORT_SCANREAD" value="PORT_UNUSED" />
-  <parameter name="PORT_SCANWRITE" value="PORT_UNUSED" />
-  <parameter name="PORT_SCLKOUT0" value="" />
-  <parameter name="PORT_SCLKOUT1" value="" />
-  <parameter name="PORT_VCOOVERRANGE" value="" />
-  <parameter name="PORT_VCOUNDERRANGE" value="" />
-  <parameter name="PORT_clk0" value="PORT_USED" />
-  <parameter name="PORT_clk1" value="PORT_USED" />
-  <parameter name="PORT_clk2" value="PORT_UNUSED" />
-  <parameter name="PORT_clk3" value="PORT_UNUSED" />
-  <parameter name="PORT_clk4" value="PORT_UNUSED" />
-  <parameter name="PORT_clk5" value="PORT_UNUSED" />
-  <parameter name="PORT_clk6" value="" />
-  <parameter name="PORT_clk7" value="" />
-  <parameter name="PORT_clk8" value="" />
-  <parameter name="PORT_clk9" value="" />
-  <parameter name="PORT_clkena0" value="PORT_UNUSED" />
-  <parameter name="PORT_clkena1" value="PORT_UNUSED" />
-  <parameter name="PORT_clkena2" value="PORT_UNUSED" />
-  <parameter name="PORT_clkena3" value="PORT_UNUSED" />
-  <parameter name="PORT_clkena4" value="PORT_UNUSED" />
-  <parameter name="PORT_clkena5" value="PORT_UNUSED" />
-  <parameter name="PORT_extclk0" value="PORT_UNUSED" />
-  <parameter name="PORT_extclk1" value="PORT_UNUSED" />
-  <parameter name="PORT_extclk2" value="PORT_UNUSED" />
-  <parameter name="PORT_extclk3" value="PORT_UNUSED" />
-  <parameter name="PORT_extclkena0" value="" />
-  <parameter name="PORT_extclkena1" value="" />
-  <parameter name="PORT_extclkena2" value="" />
-  <parameter name="PORT_extclkena3" value="" />
-  <parameter name="PRIMARY_CLOCK" value="" />
-  <parameter name="QUALIFY_CONF_DONE" value="" />
-  <parameter name="SCAN_CHAIN" value="" />
-  <parameter name="SCAN_CHAIN_MIF_FILE" value="" />
-  <parameter name="SCLKOUT0_PHASE_SHIFT" value="" />
-  <parameter name="SCLKOUT1_PHASE_SHIFT" value="" />
-  <parameter name="SELF_RESET_ON_GATED_LOSS_LOCK" value="" />
-  <parameter name="SELF_RESET_ON_LOSS_LOCK" value="" />
-  <parameter name="SKIP_VCO" value="" />
-  <parameter name="SPREAD_FREQUENCY" value="" />
-  <parameter name="SWITCH_OVER_COUNTER" value="" />
-  <parameter name="SWITCH_OVER_ON_GATED_LOCK" value="" />
-  <parameter name="SWITCH_OVER_ON_LOSSCLK" value="" />
-  <parameter name="SWITCH_OVER_TYPE" value="" />
-  <parameter name="USING_FBMIMICBIDIR_PORT" value="" />
-  <parameter name="VALID_LOCK_MULTIPLIER" value="" />
-  <parameter name="VCO_DIVIDE_BY" value="" />
-  <parameter name="VCO_FREQUENCY_CONTROL" value="" />
-  <parameter name="VCO_MULTIPLY_BY" value="" />
-  <parameter name="VCO_PHASE_SHIFT_STEP" value="" />
-  <parameter name="WIDTH_CLOCK" value="5" />
-  <parameter name="WIDTH_PHASECOUNTERSELECT" value="" />
+ <module
+   name="sysid_main"
+   kind="altera_avalon_sysid_qsys"
+   version="17.1"
+   enabled="1">
+  <parameter name="id" value="1869837601" />
+ </module>
+ <module
+   name="sysid_usb"
+   kind="altera_avalon_sysid_qsys"
+   version="17.1"
+   enabled="1">
+  <parameter name="id" value="1970496033" />
  </module>
- <module name="timer" kind="altera_avalon_timer" version="17.0" enabled="1">
+ <module name="timer" kind="altera_avalon_timer" version="17.1" enabled="1">
   <parameter name="alwaysRun" value="false" />
   <parameter name="counterSize" value="32" />
   <parameter name="fixedPeriod" value="false" />
@@ -639,79 +1552,268 @@
  </module>
  <connection
    kind="avalon"
-   version="17.0"
-   start="proc_main.data_master"
-   end="jtag_uart.avalon_jtag_slave">
+   version="17.1"
+   start="proc_main.data_master"
+   end="jtag_uart.avalon_jtag_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2090" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="jtag_uart.avalon_jtag_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2090" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_main.data_master"
+   end="sysid_main.control_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2080" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="sysid_usb.control_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2080" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_main.data_master"
+   end="flash.flash_data">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x20000000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_main.data_master"
+   end="flash.flash_erase_control">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x20f00000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_main.data_master"
+   end="proc_main.jtag_debug_module">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x1000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="proc_usb.jtag_debug_module">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x1800" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_main.data_master"
+   end="keyboard.key_events">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x5000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_main.data_master"
+   end="pll.pll_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0030" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="otg_clock_crossing_bridge.s0">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x30000000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_main.data_master"
+   end="timer.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0040" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="timer.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x2090" />
+  <parameter name="baseAddress" value="0x0040" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.data_master"
-   end="osu_sysid.control_slave">
+   end="mouse_x_in.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x5110" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="mouse_x_out.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x5110" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="mouse_y_out.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x2088" />
+  <parameter name="baseAddress" value="0x5120" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.data_master"
-   end="flash.flash_data">
+   end="mouse_y_in.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x5120" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="mouse_scroll_out.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x18000000" />
+  <parameter name="baseAddress" value="0x5130" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.data_master"
-   end="flash.flash_erase_control">
+   end="mouse_scroll_in.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x5130" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="mouse_btn_out.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x18400000" />
+  <parameter name="baseAddress" value="0x5140" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.data_master"
-   end="proc_main.jtag_debug_module">
+   end="mouse_btn_in.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x1800" />
+  <parameter name="baseAddress" value="0x5140" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.data_master"
-   end="keyboard.key_events">
+   end="pio_hex.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x5000" />
+  <parameter name="baseAddress" value="0x2100" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.data_master"
-   end="sdram_pll.pll_slave">
+   end="pio_ledr.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x0030" />
+  <parameter name="baseAddress" value="0x2110" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.data_master"
-   end="ocm_null.s1">
+   end="pio_ledg.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x0000" />
+  <parameter name="baseAddress" value="0x2120" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="otg_hpi_cs.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2200" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="otg_hpi_address.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2210" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="otg_hpi_data.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2220" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="otg_hpi_r.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2230" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="otg_hpi_w.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2240" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.data_master"
    end="sdram.s1">
   <parameter name="arbitrationPriority" value="1" />
@@ -720,52 +1822,106 @@
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="sdram.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x10000000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
    start="proc_main.data_master"
-   end="timer.s1">
+   end="ocm_null.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x0040" />
+  <parameter name="baseAddress" value="0x0000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.data_master"
+   end="ocm_null.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x0000" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.instruction_master"
-   end="osu_sysid.control_slave">
+   end="jtag_uart.avalon_jtag_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2090" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.instruction_master"
+   end="jtag_uart.avalon_jtag_slave">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x2088" />
+  <parameter name="baseAddress" value="0x2090" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.instruction_master"
-   end="flash.flash_data">
+   end="sysid_main.control_slave">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2080" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.instruction_master"
+   end="sysid_usb.control_slave">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x18000000" />
+  <parameter name="baseAddress" value="0x2080" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.instruction_master"
    end="proc_main.jtag_debug_module">
   <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x1000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="proc_usb.instruction_master"
+   end="proc_usb.jtag_debug_module">
+  <parameter name="arbitrationPriority" value="1" />
   <parameter name="baseAddress" value="0x1800" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
+   start="proc_usb.instruction_master"
+   end="sdram.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x10000000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
    start="proc_main.instruction_master"
-   end="sdram_pll.pll_slave">
+   end="sdram.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x0030" />
+  <parameter name="baseAddress" value="0x10000000" />
   <parameter name="defaultConnection" value="false" />
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
+   version="17.1"
    start="proc_main.instruction_master"
    end="ocm_null.s1">
   <parameter name="arbitrationPriority" value="1" />
@@ -774,85 +1930,363 @@
  </connection>
  <connection
    kind="avalon"
-   version="17.0"
-   start="proc_main.instruction_master"
-   end="sdram.s1">
+   version="17.1"
+   start="proc_usb.instruction_master"
+   end="ocm_null.s1">
   <parameter name="arbitrationPriority" value="1" />
-  <parameter name="baseAddress" value="0x10000000" />
+  <parameter name="baseAddress" value="0x0000" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="otg_clock_crossing_bridge.m0"
+   end="otg_hpi_w.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2240" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="otg_clock_crossing_bridge.m0"
+   end="otg_hpi_r.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2230" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="otg_clock_crossing_bridge.m0"
+   end="otg_hpi_data.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2220" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="otg_clock_crossing_bridge.m0"
+   end="otg_hpi_address.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2210" />
+  <parameter name="defaultConnection" value="false" />
+ </connection>
+ <connection
+   kind="avalon"
+   version="17.1"
+   start="otg_clock_crossing_bridge.m0"
+   end="otg_hpi_cs.s1">
+  <parameter name="arbitrationPriority" value="1" />
+  <parameter name="baseAddress" value="0x2200" />
   <parameter name="defaultConnection" value="false" />
  </connection>
- <connection kind="clock" version="17.0" start="sdram_pll.c0" end="sdram.clk" />
- <connection kind="clock" version="17.0" start="clk_50.clk" end="osu_sysid.clk" />
- <connection kind="clock" version="17.0" start="clk_50.clk" end="proc_main.clk" />
- <connection kind="clock" version="17.0" start="clk_50.clk" end="jtag_uart.clk" />
- <connection kind="clock" version="17.0" start="clk_50.clk" end="timer.clk" />
- <connection kind="clock" version="17.0" start="clk_50.clk" end="flash.clk" />
- <connection kind="clock" version="17.0" start="clk_50.clk" end="ocm_null.clk1" />
- <connection kind="clock" version="17.0" start="clk_50.clk" end="keyboard.clock" />
+ <connection kind="clock" version="17.1" start="pll.c2" end="otg_hpi_cs.clk" />
+ <connection kind="clock" version="17.1" start="pll.c2" end="otg_hpi_address.clk" />
+ <connection kind="clock" version="17.1" start="pll.c2" end="otg_hpi_data.clk" />
+ <connection kind="clock" version="17.1" start="pll.c2" end="otg_hpi_r.clk" />
+ <connection kind="clock" version="17.1" start="pll.c2" end="otg_hpi_w.clk" />
+ <connection
+   kind="clock"
+   version="17.1"
+   start="pll.c2"
+   end="otg_clock_crossing_bridge.m0_clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="timer.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="flash.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="pio_hex.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="pio_ledr.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="pio_ledg.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="mouse_x_in.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="mouse_x_out.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="mouse_y_out.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="mouse_y_in.clk" />
+ <connection
+   kind="clock"
+   version="17.1"
+   start="clk_50.clk"
+   end="mouse_scroll_out.clk" />
+ <connection
+   kind="clock"
+   version="17.1"
+   start="clk_50.clk"
+   end="mouse_scroll_in.clk" />
+ <connection
+   kind="clock"
+   version="17.1"
+   start="clk_50.clk"
+   end="mouse_btn_out.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="mouse_btn_in.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="sdram.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="proc_usb.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="sysid_usb.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="jtag_uart.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="proc_main.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="sysid_main.clk" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="ocm_null.clk1" />
+ <connection kind="clock" version="17.1" start="clk_50.clk" end="keyboard.clock" />
+ <connection
+   kind="clock"
+   version="17.1"
+   start="clk_50.clk"
+   end="pll.inclk_interface" />
  <connection
    kind="clock"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk"
-   end="sdram_pll.inclk_interface" />
+   end="otg_clock_crossing_bridge.s0_clk" />
+ <connection
+   kind="conduit"
+   version="17.1"
+   start="mouse_x_out.external_connection"
+   end="mouse_x_in.external_connection">
+  <parameter name="endPort" value="" />
+  <parameter name="endPortLSB" value="0" />
+  <parameter name="startPort" value="" />
+  <parameter name="startPortLSB" value="0" />
+  <parameter name="width" value="0" />
+ </connection>
+ <connection
+   kind="conduit"
+   version="17.1"
+   start="mouse_y_out.external_connection"
+   end="mouse_y_in.external_connection">
+  <parameter name="endPort" value="" />
+  <parameter name="endPortLSB" value="0" />
+  <parameter name="startPort" value="" />
+  <parameter name="startPortLSB" value="0" />
+  <parameter name="width" value="0" />
+ </connection>
+ <connection
+   kind="conduit"
+   version="17.1"
+   start="mouse_scroll_in.external_connection"
+   end="mouse_scroll_out.external_connection">
+  <parameter name="endPort" value="" />
+  <parameter name="endPortLSB" value="0" />
+  <parameter name="startPort" value="" />
+  <parameter name="startPortLSB" value="0" />
+  <parameter name="width" value="0" />
+ </connection>
+ <connection
+   kind="conduit"
+   version="17.1"
+   start="mouse_btn_out.external_connection"
+   end="mouse_btn_in.external_connection">
+  <parameter name="endPort" value="" />
+  <parameter name="endPortLSB" value="0" />
+  <parameter name="startPort" value="" />
+  <parameter name="startPortLSB" value="0" />
+  <parameter name="width" value="0" />
+ </connection>
  <connection
    kind="interrupt"
-   version="17.0"
-   start="proc_main.d_irq"
+   version="17.1"
+   start="proc_usb.d_irq"
+   end="timer.irq">
+  <parameter name="irqNumber" value="1" />
+ </connection>
+ <connection
+   kind="interrupt"
+   version="17.1"
+   start="proc_usb.d_irq"
    end="jtag_uart.irq">
   <parameter name="irqNumber" value="0" />
  </connection>
  <connection
    kind="interrupt"
-   version="17.0"
+   version="17.1"
    start="proc_main.d_irq"
    end="timer.irq">
   <parameter name="irqNumber" value="1" />
  </connection>
+ <connection
+   kind="interrupt"
+   version="17.1"
+   start="proc_main.d_irq"
+   end="jtag_uart.irq">
+  <parameter name="irqNumber" value="0" />
+ </connection>
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk_reset"
-   end="sdram_pll.inclk_interface_reset" />
+   end="pll.inclk_interface_reset" />
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk_reset"
-   end="sdram.reset" />
+   end="otg_clock_crossing_bridge.m0_reset" />
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk_reset"
-   end="osu_sysid.reset" />
+   end="sdram.reset" />
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk_reset"
-   end="jtag_uart.reset" />
+   end="timer.reset" />
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk_reset"
-   end="timer.reset" />
+   end="keyboard.reset" />
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk_reset"
    end="flash.reset" />
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk_reset"
-   end="keyboard.reset" />
+   end="pio_hex.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="pio_ledr.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="pio_ledg.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="mouse_x_in.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="mouse_y_out.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="mouse_y_in.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="mouse_scroll_out.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="mouse_scroll_in.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="mouse_btn_out.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="mouse_btn_in.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="otg_hpi_cs.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="otg_hpi_address.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="otg_hpi_data.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="otg_hpi_r.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="otg_hpi_w.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="mouse_x_out.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="sysid_usb.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="jtag_uart.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="sysid_main.reset" />
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
    start="clk_50.clk_reset"
    end="ocm_null.reset1" />
  <connection
    kind="reset"
-   version="17.0"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="proc_usb.reset_n" />
+ <connection
+   kind="reset"
+   version="17.1"
    start="clk_50.clk_reset"
    end="proc_main.reset_n" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="clk_50.clk_reset"
+   end="otg_clock_crossing_bridge.s0_reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="proc_usb.jtag_debug_module_reset"
+   end="otg_clock_crossing_bridge.m0_reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="proc_usb.jtag_debug_module_reset"
+   end="otg_hpi_w.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="proc_usb.jtag_debug_module_reset"
+   end="otg_hpi_r.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="proc_usb.jtag_debug_module_reset"
+   end="otg_hpi_data.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="proc_usb.jtag_debug_module_reset"
+   end="otg_hpi_address.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="proc_usb.jtag_debug_module_reset"
+   end="otg_hpi_cs.reset" />
+ <connection
+   kind="reset"
+   version="17.1"
+   start="proc_usb.jtag_debug_module_reset"
+   end="otg_clock_crossing_bridge.s0_reset" />
  <interconnectRequirement for="$system" name="qsys_mm.clockCrossingAdapter" value="HANDSHAKE" />
  <interconnectRequirement for="$system" name="qsys_mm.enableEccProtection" value="FALSE" />
  <interconnectRequirement for="$system" name="qsys_mm.insertDefaultSlave" value="FALSE" />
diff --git a/software/osu_main/.cproject b/software/osu_main/.cproject
index 745f9bc7f730c10066ff75b73856d6195f86b021..60ab71ea6f74e27b4ed2639307398ffaba4faa15 100644
--- a/software/osu_main/.cproject
+++ b/software/osu_main/.cproject
@@ -1,32 +1,32 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
 	<storageModule moduleId="org.eclipse.cdt.core.settings">
-		<buildSystem id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065">
-			<storageModule id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065" moduleId="org.eclipse.cdt.core.settings"/>
+		<buildSystem id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195">
+			<storageModule id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195" moduleId="org.eclipse.cdt.core.settings"/>
 		</buildSystem>
-		<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065">
+		<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195">
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-				<configuration buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065" name="Nios II" parent="org.eclipse.cdt.build.core.prefbase.cfg">
-					<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065." name="/" resourcePath="">
-						<toolChain id="altera.nios2.mingw.gcc4.1695715586" name="MinGW Nios II GCC4" superClass="altera.nios2.mingw.gcc4">
-							<targetPlatform id="altera.nios2.mingw.gcc4.2130013499" name="Nios II" superClass="altera.nios2.mingw.gcc4"/>
-							<builder buildPath="${workspace_loc://osu_main}" id="altera.tool.gnu.builder.mingw.1243813729" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="altera.tool.gnu.builder.mingw"/>
-							<tool id="altera.tool.gnu.c.compiler.mingw.1512907719" name="Nios II GCC C Compiler" superClass="altera.tool.gnu.c.compiler.mingw">
-								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1040711810" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+				<configuration buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195" name="Nios II" parent="org.eclipse.cdt.build.core.prefbase.cfg">
+					<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195." name="/" resourcePath="">
+						<toolChain id="altera.nios2.mingw.gcc4.351469300" name="MinGW Nios II GCC4" superClass="altera.nios2.mingw.gcc4">
+							<targetPlatform id="altera.nios2.mingw.gcc4.26023271" name="Nios II" superClass="altera.nios2.mingw.gcc4"/>
+							<builder buildPath="${workspace_loc://osu_main}" id="altera.tool.gnu.builder.mingw.45764510" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="altera.tool.gnu.builder.mingw"/>
+							<tool id="altera.tool.gnu.c.compiler.mingw.1227833858" name="Nios II GCC C Compiler" superClass="altera.tool.gnu.c.compiler.mingw">
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.240421295" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
 							</tool>
-							<tool id="altera.tool.gnu.cpp.compiler.mingw.1573963372" name="Nios II GCC C++ Compiler" superClass="altera.tool.gnu.cpp.compiler.mingw">
-								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.232317194" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+							<tool id="altera.tool.gnu.cpp.compiler.mingw.1606977472" name="Nios II GCC C++ Compiler" superClass="altera.tool.gnu.cpp.compiler.mingw">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.372136993" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
 							</tool>
-							<tool id="altera.tool.gnu.archiver.mingw.1684988338" name="Nios II GCC Archiver" superClass="altera.tool.gnu.archiver.mingw"/>
-							<tool id="altera.tool.gnu.c.linker.mingw.1482049235" name="Nios II GCC C Linker" superClass="altera.tool.gnu.c.linker.mingw"/>
-							<tool id="altera.tool.gnu.assembler.mingw.1402728829" name="Nios II GCC Assembler" superClass="altera.tool.gnu.assembler.mingw">
-								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.422854114" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							<tool id="altera.tool.gnu.archiver.mingw.1316883666" name="Nios II GCC Archiver" superClass="altera.tool.gnu.archiver.mingw"/>
+							<tool id="altera.tool.gnu.c.linker.mingw.1006047636" name="Nios II GCC C Linker" superClass="altera.tool.gnu.c.linker.mingw"/>
+							<tool id="altera.tool.gnu.assembler.mingw.1720644171" name="Nios II GCC Assembler" superClass="altera.tool.gnu.assembler.mingw">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.736097008" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
 							</tool>
 						</toolChain>
 					</folderInfo>
 				</configuration>
 			</storageModule>
-			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065" moduleId="org.eclipse.cdt.core.settings" name="Nios II">
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195" moduleId="org.eclipse.cdt.core.settings" name="Nios II">
 				<externalSettings/>
 				<extensions>
 					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
@@ -45,10 +45,10 @@
 	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 	<storageModule moduleId="scannerConfiguration">
 		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
-		<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065.;altera.tool.gnu.cpp.compiler.mingw.1573963372;cdt.managedbuild.tool.gnu.cpp.compiler.input.232317194">
+		<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195.;altera.tool.gnu.cpp.compiler.mingw.1606977472;cdt.managedbuild.tool.gnu.cpp.compiler.input.372136993">
 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1934673065.;altera.tool.gnu.c.compiler.mingw.1512907719;cdt.managedbuild.tool.gnu.c.compiler.input.1040711810">
+		<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1776890195.;altera.tool.gnu.c.compiler.mingw.1227833858;cdt.managedbuild.tool.gnu.c.compiler.input.240421295">
 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
 	</storageModule>
diff --git a/software/osu_main/Makefile b/software/osu_main/Makefile
index 472b0189bd2c8ba3037f630b44a747250162c7de..24d9434ac9d06bc97af7fe54e97a72c2e28563e2 100644
--- a/software/osu_main/Makefile
+++ b/software/osu_main/Makefile
@@ -129,12 +129,12 @@ BUILD_CONFIGS := default
 
 # This following VERSION comment indicates the version of the tool used to 
 # generate this makefile. A makefile variable is provided for VERSION as well. 
-# ACDS_VERSION: 17.0
-ACDS_VERSION := 17.0
+# ACDS_VERSION: 17.1
+ACDS_VERSION := 17.1
 
 # This following BUILD_NUMBER comment indicates the build number of the tool 
 # used to generate this makefile. 
-# BUILD_NUMBER: 595
+# BUILD_NUMBER: 590
 
 # Define path to the application ELF. 
 # It may be used by the makefile fragments so is defined before including them. 
@@ -152,7 +152,7 @@ OBJ_ROOT_DIR := obj
 
 # Options to control objdump.
 CREATE_OBJDUMP := 1
-OBJDUMP_INCLUDE_SOURCE := 1
+OBJDUMP_INCLUDE_SOURCE := 0
 OBJDUMP_FULL_CONTENTS := 0
 
 # Options to enable/disable optional files.
@@ -177,7 +177,7 @@ CRT0 :=
 SYS_LIB :=
 
 # Define path to the root of the BSP.
-BSP_ROOT_DIR := ../otofpga_main_bsp/
+BSP_ROOT_DIR := ../proc_main_bsp/
 
 # List of application specific include directories, library directories and library names
 APP_INCLUDE_DIRS :=
@@ -188,7 +188,6 @@ APP_LIBRARY_NAMES :=
 BUILD_PRE_PROCESS :=
 BUILD_POST_PROCESS :=
 
-QUARTUS_PROJECT_DIR := ../../
 
 
 #END GENERATED
diff --git a/software/osu_main/create-this-app b/software/osu_main/create-this-app
deleted file mode 100644
index 4e1d5e0c1b6a31a836ecfdcb2603d9cdb64b0810..0000000000000000000000000000000000000000
--- a/software/osu_main/create-this-app
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/bash
-#
-# This script creates the blank_project application in this directory.
-
-
-BSP_DIR=../otofpga_main_bsp
-QUARTUS_PROJECT_DIR=../../
-NIOS2_APP_GEN_ARGS="--elf-name osu_main.elf --no-src --set OBJDUMP_INCLUDE_SOURCE 1"
-
-
-# First, check to see if $SOPC_KIT_NIOS2 environmental variable is set.
-# This variable is required for the command line tools to execute correctly.
-if [ -z "${SOPC_KIT_NIOS2}" ]
-then
-    echo Required \$SOPC_KIT_NIOS2 Environmental Variable is not set!
-    exit 1
-fi
-
-
-# Also make sure that the APP has not been created already.  Check for
-# existence of Makefile in the app directory
-if [ -f ./Makefile ]
-then
-    echo Application has already been created!  Delete Makefile if you want to create a new application makefile
-    exit 1
-fi
-
-
-# We are selecting hal_default bsp because it supports this application.
-# Check to see if the hal_default has already been generated by checking for
-# existence of the public.mk file.  If not, we need to run
-# create-this-bsp file to generate the bsp.
-if [ ! -f ${BSP_DIR}/public.mk ]; then
-    # Since BSP doesn't exist, create the BSP
-    # Pass any command line arguments passed to this script to the BSP.
-    pushd ${BSP_DIR} >> /dev/null
-    ./create-this-bsp "$@" || {
-        echo "create-this-bsp failed"
-        exit 1
-    }
-    popd >> /dev/null
-fi
-
-
-# Don't run make if create-this-app script is called with --no-make arg
-SKIP_MAKE=
-while [ $# -gt 0 ]
-do
-  case "$1" in
-      --no-make)
-          SKIP_MAKE=1
-          ;;
-  esac
-  shift
-done
-
-
-# Now we also need to go copy the sources for this application to the
-# local directory.
-find "${SOPC_KIT_NIOS2}/examples/software/blank_project/" -name '*.c' -or -name '*.h' -or -name 'hostfs*' | xargs -i cp -L {} ./ || {
-        echo "failed during copying example source files"
-        exit 1
-}
-
-find "${SOPC_KIT_NIOS2}/examples/software/blank_project/" -name 'readme.txt' -or -name 'Readme.txt' | xargs -i cp -L {} ./ || {
-        echo "failed copying readme file"
-}
-
-if [ -d "${SOPC_KIT_NIOS2}/examples/software/blank_project/system" ]
-then
-        cp -RL "${SOPC_KIT_NIOS2}/examples/software/blank_project/system" . || {
-                echo "failed during copying project support files"
-                exit 1
-        }
-fi
-
-chmod -R +w . || {
-        echo "failed during changing file permissions"
-        exit 1
-}
-
-cmd="nios2-app-generate-makefile --bsp-dir ${BSP_DIR} --set QUARTUS_PROJECT_DIR=${QUARTUS_PROJECT_DIR} ${NIOS2_APP_GEN_ARGS}"
-
-echo "create-this-app: Running \"${cmd}\""
-$cmd || {
-    echo "nios2-app-generate-makefile failed"
-    exit 1
-}
-
-if [ -z "$SKIP_MAKE" ]; then
-        cmd="make"
-
-        echo "create-this-app: Running \"$cmd\""
-        $cmd || {
-        echo "make failed"
-            exit 1
-        }
-
-        echo
-        echo "To download and run the application:"
-        echo "    1. Make sure the board is connected to the system."
-        echo "    2. Run 'nios2-configure-sof <SOF_FILE_PATH>' to configure the FPGA with the hardware design."
-        echo "    3. If you have a stdio device, run 'nios2-terminal' in a different shell."
-        echo "    4. Run 'make download-elf' from the application directory."
-        echo
-        echo "To debug the application:"
-        echo "    Import the project into Nios II Software Build Tools for Eclipse."
-        echo "    Refer to Nios II Software Build Tools for Eclipse Documentation for more information."
-        echo
-        echo -e ""
-fi
-
-
-exit 0
diff --git a/software/osu_main/readme.txt b/software/osu_main/readme.txt
deleted file mode 100644
index 57f6738b0b6536b3a08e6855442fe02dbf19d94a..0000000000000000000000000000000000000000
--- a/software/osu_main/readme.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-This template is starting point for creating a project based on your custom C code.
-It will provide you a default project to which you can add your software files. To
-add files to a project, manually copy the file into the application directory (e.g. 
-using Windows Explorer), then right click on your application project and select 
-refresh.
-
-You can also add files to the project using the Nios II Software Build Tools for Eclipse import function. 
-Select File -> Import. 
-Expand General and select File System in the Import Window and click Next.
-Identify the appropriate source and destination directories.
-Check the files you want to add and click Finish.
diff --git a/software/usb/.cproject b/software/usb/.cproject
new file mode 100644
index 0000000000000000000000000000000000000000..03862f211d1a54f7f2338524a461c51cc5f22cab
--- /dev/null
+++ b/software/usb/.cproject
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+	<storageModule moduleId="org.eclipse.cdt.core.settings">
+		<buildSystem id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521">
+			<storageModule id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521" moduleId="org.eclipse.cdt.core.settings"/>
+		</buildSystem>
+		<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521">
+			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+				<configuration buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521" name="Nios II" parent="org.eclipse.cdt.build.core.prefbase.cfg">
+					<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521." name="/" resourcePath="">
+						<toolChain id="altera.nios2.mingw.gcc4.1031452200" name="MinGW Nios II GCC4" superClass="altera.nios2.mingw.gcc4">
+							<targetPlatform id="altera.nios2.mingw.gcc4.1988300270" name="Nios II" superClass="altera.nios2.mingw.gcc4"/>
+							<builder buildPath="${workspace_loc://usb}" id="altera.tool.gnu.builder.mingw.1474740644" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="altera.tool.gnu.builder.mingw"/>
+							<tool id="altera.tool.gnu.c.compiler.mingw.315425200" name="Nios II GCC C Compiler" superClass="altera.tool.gnu.c.compiler.mingw">
+								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.478849116" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+							</tool>
+							<tool id="altera.tool.gnu.cpp.compiler.mingw.698791399" name="Nios II GCC C++ Compiler" superClass="altera.tool.gnu.cpp.compiler.mingw">
+								<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1958547914" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+							</tool>
+							<tool id="altera.tool.gnu.archiver.mingw.791354557" name="Nios II GCC Archiver" superClass="altera.tool.gnu.archiver.mingw"/>
+							<tool id="altera.tool.gnu.c.linker.mingw.334312366" name="Nios II GCC C Linker" superClass="altera.tool.gnu.c.linker.mingw"/>
+							<tool id="altera.tool.gnu.assembler.mingw.312261571" name="Nios II GCC Assembler" superClass="altera.tool.gnu.assembler.mingw">
+								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.2113592241" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+							</tool>
+						</toolChain>
+					</folderInfo>
+				</configuration>
+			</storageModule>
+			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521" moduleId="org.eclipse.cdt.core.settings" name="Nios II">
+				<externalSettings/>
+				<extensions>
+					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+				</extensions>
+			</storageModule>
+			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+		</cconfiguration>
+	</storageModule>
+	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+		<project id="usb.null.1123325621" name="usb"/>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+	<storageModule moduleId="scannerConfiguration">
+		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521.;altera.tool.gnu.cpp.compiler.mingw.698791399;cdt.managedbuild.tool.gnu.cpp.compiler.input.1958547914">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.380090521.;altera.tool.gnu.c.compiler.mingw.315425200;cdt.managedbuild.tool.gnu.c.compiler.input.478849116">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+		</scannerConfigBuildInfo>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
+		<buildTargets>
+			<target name="mem_init_install" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+				<buildCommand>make</buildCommand>
+				<buildArguments/>
+				<buildTarget>mem_init_install</buildTarget>
+				<stopOnError>true</stopOnError>
+				<useDefaultCommand>false</useDefaultCommand>
+				<runAllBuilders>false</runAllBuilders>
+			</target>
+			<target name="mem_init_generate" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+				<buildCommand>make</buildCommand>
+				<buildArguments/>
+				<buildTarget>mem_init_generate</buildTarget>
+				<stopOnError>true</stopOnError>
+				<useDefaultCommand>false</useDefaultCommand>
+				<runAllBuilders>false</runAllBuilders>
+			</target>
+			<target name="help" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+				<buildCommand>make</buildCommand>
+				<buildArguments/>
+				<buildTarget>help</buildTarget>
+				<stopOnError>true</stopOnError>
+				<useDefaultCommand>false</useDefaultCommand>
+				<runAllBuilders>false</runAllBuilders>
+			</target>
+		</buildTargets>
+	</storageModule>
+</cproject>
diff --git a/software/usb/.project b/software/usb/.project
new file mode 100644
index 0000000000000000000000000000000000000000..bb655aac79c21916ed1b7153a99167c6e699594e
--- /dev/null
+++ b/software/usb/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>usb</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.altera.sbtgui.project.makefileBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.altera.sbtgui.project.makefileBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<triggers>full,incremental,</triggers>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
+		<nature>com.altera.sbtgui.project.SBTGUINature</nature>
+		<nature>com.altera.sbtgui.project.SBTGUIAppNature</nature>
+		<nature>com.altera.sbtgui.project.SBTGUIManagedNature</nature>
+	</natures>
+</projectDescription>
diff --git a/software/usb/Makefile b/software/usb/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..fcf5ba3c31035825314c2d3c7ed5d575d4971c73
--- /dev/null
+++ b/software/usb/Makefile
@@ -0,0 +1,1083 @@
+#------------------------------------------------------------------------------
+#              VARIABLES APPENDED TO BY INCLUDED MAKEFILE FRAGMENTS
+#------------------------------------------------------------------------------
+
+# List of include directories for -I compiler option (-I added when used).
+# Includes the BSP.
+ALT_INCLUDE_DIRS :=
+
+# List of library directories for -L linker option (-L added when used).
+# Includes the BSP.
+ALT_LIBRARY_DIRS :=
+
+# List of library names for -l linker option (-l added when used).
+# Includes the BSP.
+ALT_LIBRARY_NAMES :=
+
+# List of library names for -msys-lib linker option (-msys-lib added when used).
+# These are libraries that might be located in the BSP and depend on the BSP
+# library, or vice versa
+ALT_BSP_DEP_LIBRARY_NAMES :=
+
+# List of dependencies for the linker.  This is usually the full pathname
+# of each library (*.a) file.
+# Includes the BSP.
+ALT_LDDEPS :=
+
+# List of root library directories that support running make to build them.
+# Includes the BSP and any ALT libraries.
+MAKEABLE_LIBRARY_ROOT_DIRS :=
+
+# Generic flags passed to the compiler for different types of input files.
+ALT_CFLAGS :=
+ALT_CXXFLAGS :=
+ALT_CPPFLAGS :=
+ALT_ASFLAGS :=
+ALT_LDFLAGS :=
+
+
+#------------------------------------------------------------------------------
+#                         The adjust-path macro
+# 
+# If COMSPEC/ComSpec is defined, Make is launched from Windows through
+# Cygwin.  The adjust-path macro converts absolute windows paths into
+# unix style paths (Example: c:/dir -> /c/dir). This will ensture
+# paths are readable by GNU Make.
+#
+# If COMSPEC/ComSpec is not defined, Make is launched from linux, and no 
+# adjustment is necessary
+#
+#------------------------------------------------------------------------------
+
+ifndef COMSPEC
+ifdef ComSpec
+COMSPEC = $(ComSpec)
+endif # ComSpec
+endif # COMSPEC
+
+ifdef COMSPEC # if Windows OS
+
+ifeq ($(MAKE_VERSION),3.81) 
+#
+# adjust-path/adjust-path-mixed for Mingw Gnu Make on Windows
+#
+# Example Usage:
+# $(call adjust-path,c:/aaa/bbb) => /c/aaa/bbb
+# $(call adjust-path-mixed,/c/aaa/bbb) => c:/aaa/bbb
+# $(call adjust-path-mixed,/cygdrive/c/aaa/bbb) => c:/aaa/bbb
+#
+
+#
+# adjust-path
+#  - converts back slash characters into forward slashes 
+#  - if input arg ($1) is an empty string then return the empty string
+#  - if input arg ($1) does not contain the string ":/", then return input arg
+#  - using sed, convert mixed path [c:/...] into mingw path [/c/...] 
+define adjust-path
+$(strip \
+$(if $1,\
+$(if $(findstring :/,$(subst \,/,$1)),\
+$(shell echo $(subst \,/,$1) | sed -e 's,^\([a-zA-Z]\):/,/\1/,'),\
+$(subst \,/,$1))))
+endef
+
+#
+# adjust-path-mixed
+#  - converts back slash characters into forward slashes 
+#  - if input arg ($1) is an empty string then return the empty string
+#  - if input arg ($1) does not begin with a forward slash '/' char, then 
+#    return input arg
+#  - using sed, convert mingw path [/c/...] or cygwin path [/c/cygdrive/...] 
+#    into a mixed path [c:/...] 
+define adjust-path-mixed 
+$(strip \
+$(if $1,\
+$(if $(findstring $(subst \,/,$1),$(patsubst /%,%,$(subst \,/,$1))),\
+$(subst \,/,$1),\
+$(shell echo $(subst \,/,$1) | sed -e 's,^/cygdrive/\([a-zA-Z]\)/,\1:/,' -e 's,^/\([a-zA-Z]\)/,\1:/,'))))
+endef
+
+else # MAKE_VERSION != 3.81 (MAKE_VERSION == 3.80 or MAKE_VERSION == 3.79) 
+#
+#  adjust-path for Cygwin Gnu Make
+# $(call adjust-path,c:/aaa/bbb) = /cygdrive/c/aaa/bbb
+# $(call adjust-path-mixed,/cygdrive/c/aaa/bbb) = c:/aaa/bbb
+#
+adjust-path = $(if $1,$(shell cygpath -u "$1"),)
+adjust-path-mixed = $(if $1,$(shell cygpath -m "$1"),)
+endif
+
+else # !COMSPEC
+
+adjust-path = $1
+adjust-path-mixed = $1
+
+endif # COMSPEC
+
+
+#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+#                           GENERATED SETTINGS START                         v
+#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+
+#START GENERATED
+ACTIVE_BUILD_CONFIG := default
+BUILD_CONFIGS := default
+
+# The following TYPE comment allows tools to identify the 'type' of target this 
+# makefile is associated with. 
+# TYPE: APP_MAKEFILE
+
+# This following VERSION comment indicates the version of the tool used to 
+# generate this makefile. A makefile variable is provided for VERSION as well. 
+# ACDS_VERSION: 17.1
+ACDS_VERSION := 17.1
+
+# This following BUILD_NUMBER comment indicates the build number of the tool 
+# used to generate this makefile. 
+# BUILD_NUMBER: 590
+
+# Define path to the application ELF. 
+# It may be used by the makefile fragments so is defined before including them. 
+# 
+ELF := usb.elf
+
+# Paths to C, C++, and assembly source files.
+C_SRCS += src/io_handler.c
+C_SRCS += src/main.c
+C_SRCS += src/usb.c
+CXX_SRCS :=
+ASM_SRCS :=
+
+
+# Path to root of object file tree.
+OBJ_ROOT_DIR := obj
+
+# Options to control objdump.
+CREATE_OBJDUMP := 1
+OBJDUMP_INCLUDE_SOURCE := 0
+OBJDUMP_FULL_CONTENTS := 0
+
+# Options to enable/disable optional files.
+CREATE_ELF_DERIVED_FILES := 0
+CREATE_LINKER_MAP := 1
+
+# Common arguments for ALT_CFLAGSs
+APP_CFLAGS_DEFINED_SYMBOLS :=
+APP_CFLAGS_UNDEFINED_SYMBOLS :=
+APP_CFLAGS_OPTIMIZATION := -O0
+APP_CFLAGS_DEBUG_LEVEL := -g
+APP_CFLAGS_WARNINGS := -Wall
+APP_CFLAGS_USER_FLAGS :=
+
+APP_ASFLAGS_USER :=
+APP_LDFLAGS_USER :=
+
+# Linker options that have default values assigned later if not
+# assigned here.
+LINKER_SCRIPT :=
+CRT0 :=
+SYS_LIB :=
+
+# Define path to the root of the BSP.
+BSP_ROOT_DIR := ../proc_usb_bsp/
+
+# List of application specific include directories, library directories and library names
+APP_INCLUDE_DIRS :=
+APP_LIBRARY_DIRS :=
+APP_LIBRARY_NAMES :=
+
+# Pre- and post- processor settings.
+BUILD_PRE_PROCESS :=
+BUILD_POST_PROCESS :=
+
+
+
+#END GENERATED
+
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#                            GENERATED SETTINGS END                           ^
+#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+
+#------------------------------------------------------------------------------
+#                           DEFAULT TARGET
+#------------------------------------------------------------------------------
+
+# Define the variable used to echo output if not already defined.
+ifeq ($(ECHO),)
+ECHO := echo
+endif
+
+# Put "all" rule before included makefile fragments because they may
+# define rules and we don't want one of those to become the default rule.
+.PHONY : all
+
+all:
+	@$(ECHO) [$(APP_NAME) build complete]
+
+all : build_pre_process libs app build_post_process 
+
+
+#------------------------------------------------------------------------------
+#                 VARIABLES DEPENDENT ON GENERATED CONTENT
+#------------------------------------------------------------------------------
+
+# Define object file directory per build configuration
+CONFIG_OBJ_DIR := $(OBJ_ROOT_DIR)/$(ACTIVE_BUILD_CONFIG)
+
+ifeq ($(BSP_ROOT_DIR),)
+$(error Edit Makefile and provide a value for BSP_ROOT_DIR)
+endif
+
+ifeq ($(wildcard $(BSP_ROOT_DIR)),)
+$(error BSP directory does not exist: $(BSP_ROOT_DIR))
+endif
+
+# Define absolute path to the root of the BSP.
+ABS_BSP_ROOT_DIR := $(call adjust-path-mixed,$(shell cd "$(BSP_ROOT_DIR)"; pwd))
+
+# Include makefile fragments.  Define variable ALT_LIBRARY_ROOT_DIR before
+# including each makefile fragment so that it knows the path to itself.
+BSP_INCLUDE_FILE := $(BSP_ROOT_DIR)/public.mk
+ALT_LIBRARY_ROOT_DIR := $(BSP_ROOT_DIR)
+include $(BSP_INCLUDE_FILE)
+# C2H will need this to touch the BSP public.mk and avoid the sopc file 
+# out-of-date error during a BSP make
+ABS_BSP_INCLUDE_FILE := $(ABS_BSP_ROOT_DIR)/public.mk
+
+
+ifneq ($(WARNING.SMALL_STACK_SIZE),)
+# This WARNING is here to protect you from unknowingly using a very small stack
+# If the warning is set, increase your stack size or enable the BSP small stack 
+# setting to eliminate the warning
+$(warning WARNING: $(WARNING.SMALL_STACK_SIZE))
+endif
+
+# If the BSP public.mk indicates that ALT_SIM_OPTIMIZE is set, rename the ELF 
+# by prefixing it with RUN_ON_HDL_SIMULATOR_ONLY_.  
+ifneq ($(filter -DALT_SIM_OPTIMIZE,$(ALT_CPPFLAGS)),)
+ELF := RUN_ON_HDL_SIMULATOR_ONLY_$(ELF)
+endif
+
+# If the BSP public.mk indicates that ALT_PROVIDE_GMON is set, add option to 
+# download_elf target
+ifneq ($(filter -DALT_PROVIDE_GMON,$(ALT_CPPFLAGS)),)
+GMON_OUT_FILENAME := gmon.out
+WRITE_GMON_OPTION := --write-gmon $(GMON_OUT_FILENAME)
+endif
+
+# Name of ELF application.
+APP_NAME := $(basename $(ELF))
+
+# Set to defaults if variables not already defined in settings.
+ifeq ($(LINKER_SCRIPT),)
+LINKER_SCRIPT := $(BSP_LINKER_SCRIPT)
+endif
+ifeq ($(CRT0),)
+CRT0 := $(BSP_CRT0)
+endif
+ifeq ($(SYS_LIB),)
+SYS_LIB := $(BSP_SYS_LIB)
+endif
+
+OBJDUMP_NAME := $(APP_NAME).objdump
+OBJDUMP_FLAGS := --disassemble --syms --all-header
+ifeq ($(OBJDUMP_INCLUDE_SOURCE),1)
+OBJDUMP_FLAGS += --source
+endif
+ifeq ($(OBJDUMP_FULL_CONTENTS),1)
+OBJDUMP_FLAGS += --full-contents
+endif
+
+# Create list of linker dependencies (*.a files).
+APP_LDDEPS := $(ALT_LDDEPS) $(LDDEPS)
+
+# Take lists and add required prefixes.
+APP_INC_DIRS := $(addprefix -I, $(ALT_INCLUDE_DIRS) $(APP_INCLUDE_DIRS) $(INC_DIRS))
+ASM_INC_PREFIX := -Wa,-I
+APP_ASM_INC_DIRS := $(addprefix $(ASM_INC_PREFIX), $(ALT_INCLUDE_DIRS) $(APP_INCLUDE_DIRS) $(INC_DIRS))
+APP_LIB_DIRS := $(addprefix -L, $(ALT_LIBRARY_DIRS) $(APP_LIBRARY_DIRS) $(LIB_DIRS))
+APP_LIBS := $(addprefix -l, $(ALT_LIBRARY_NAMES) $(APP_LIBRARY_NAMES) $(LIBS))
+
+ifneq ($(AVOID_NIOS2_GCC3_OPTIONS),)
+
+#
+# Avoid Nios II GCC 3.X options.
+#
+
+# Detect if small newlib C library is requested.
+# If yes, remove the -msmallc option because it is
+# now handled by other means.
+ifneq ($(filter -msmallc,$(ALT_LDFLAGS)),)
+	ALT_LDFLAGS := $(filter-out -msmallc,$(ALT_LDFLAGS))
+	ALT_C_LIBRARY := smallc
+else
+	ALT_C_LIBRARY := c
+endif
+
+# Put each BSP dependent library in a group to avoid circular dependencies.
+APP_BSP_DEP_LIBS := $(foreach l,$(ALT_BSP_DEP_LIBRARY_NAMES),-Wl,--start-group -l$(ALT_C_LIBRARY) -lgcc -lm -l$(l) -Wl,--end-group)
+
+else # !AVOID_NIOS2_GCC3_OPTIONS
+
+#
+# Use Nios II GCC 3.X options.
+#
+ALT_BSP_DEP_LIBRARY_NAMES += $(ALT_BSP_DEP_LIBRARY_NAMES) m
+APP_BSP_DEP_LIBS := $(addprefix -msys-lib=, $(ALT_BSP_DEP_LIBRARY_NAMES))
+
+endif # !AVOID_NIOS2_GCC3_OPTIONS
+
+# Arguments for the C preprocessor, C/C++ compiler, assembler, and linker.
+APP_CFLAGS := $(APP_CFLAGS_DEFINED_SYMBOLS) \
+              $(APP_CFLAGS_UNDEFINED_SYMBOLS) \
+              $(APP_CFLAGS_OPTIMIZATION) \
+              $(APP_CFLAGS_DEBUG_LEVEL) \
+              $(APP_CFLAGS_WARNINGS) \
+              $(APP_CFLAGS_USER_FLAGS) \
+              $(ALT_CFLAGS) \
+              $(CFLAGS)
+
+# Arguments only for the C++ compiler.
+APP_CXXFLAGS := $(ALT_CXXFLAGS) $(CXXFLAGS)
+
+# Arguments only for the C preprocessor.
+# Prefix each include directory with -I.
+APP_CPPFLAGS := $(APP_INC_DIRS) \
+                $(ALT_CPPFLAGS) \
+                $(CPPFLAGS)
+
+# Arguments only for the assembler.
+APP_ASFLAGS := $(APP_ASM_INC_DIRS) \
+               $(ALT_ASFLAGS) \
+               $(APP_ASFLAGS_USER) \
+               $(ASFLAGS)
+
+# Arguments only for the linker.
+APP_LDFLAGS := $(APP_LDFLAGS_USER)
+
+ifneq ($(LINKER_SCRIPT),)
+APP_LDFLAGS += -T'$(LINKER_SCRIPT)'
+endif
+
+ifneq ($(AVOID_NIOS2_GCC3_OPTIONS),)
+
+# Avoid Nios II GCC 3.x options.
+ifneq ($(CRT0),)
+APP_LDFLAGS += $(CRT0)
+endif
+
+# The equivalent of the -msys-lib option is provided
+# by the GROUP() command in the linker script.
+# Note this means the SYS_LIB variable is now ignored.
+
+else # !AVOID_NIOS2_GCC3_OPTIONS
+
+# Use Nios II GCC 3.x options.
+ifneq ($(CRT0),)
+APP_LDFLAGS += -msys-crt0='$(CRT0)'
+endif
+ifneq ($(SYS_LIB),)
+APP_LDFLAGS += -msys-lib=$(SYS_LIB)
+endif
+
+endif # !AVOID_NIOS2_GCC3_OPTIONS
+
+APP_LDFLAGS += \
+           $(APP_LIB_DIRS) \
+           $(ALT_LDFLAGS) \
+           $(LDFLAGS)
+
+LINKER_MAP_NAME := $(APP_NAME).map
+ifeq ($(CREATE_LINKER_MAP), 1)
+APP_LDFLAGS += -Wl,-Map=$(LINKER_MAP_NAME)
+endif
+
+# QUARTUS_PROJECT_DIR and SOPC_NAME need to be defined if you want the 
+# mem_init_install target of the mem_init.mk (located in the associated BSP) 
+# to know how to copy memory initialization files (e.g. .dat, .hex) into 
+# directories required for Quartus compilation or RTL simulation.
+
+# Defining QUARTUS_PROJECT_DIR causes mem_init_install to copy memory 
+# initialization files into your Quartus project directory. This is required 
+# to provide the initial memory contents of FPGA memories that can be 
+# initialized by the programming file (.sof) or Hardcopy ROMs. It is also used 
+# for VHDL simulation of on-chip memories.
+
+# Defining SOPC_NAME causes the mem_init_install target to copy memory 
+# initialization files into your RTL simulation directory.  This is required 
+# to provide the initial memory contents of all memories that can be 
+# initialized by RTL simulation. This variable should be set to the same name 
+# as your SOPC Builder system name. For example, if you have a system called 
+# "foo.sopc", this variable should be set to "foo".
+
+# If SOPC_NAME is not set and QUARTUS_PROJECT_DIR is set, then derive SOPC_NAME.
+ifeq ($(SOPC_NAME),)
+ifneq ($(QUARTUS_PROJECT_DIR),)
+SOPC_NAME := $(basename $(notdir $(wildcard $(QUARTUS_PROJECT_DIR)/*.sopcinfo)))
+endif
+endif
+
+# Defining JDI_FILE is required to specify the JTAG Debug Information File 
+# path. This file is generated by Quartus, and is needed along with the 
+# .sopcinfo file to resolve processor instance ID's from names in a multi-CPU 
+# systems. For multi-CPU systems, the processor instance ID is used to select 
+# from multiple CPU's during ELF download.
+
+# Both JDI_FILE and SOPCINFO_FILE are provided by the BSP if they found during 
+# BSP creation. If JDI_FILE is not set and QUARTUS_PROJECT_DIR is set, then 
+# derive JDI_FILE. We do not attempt to derive SOPCINFO_FILE since there may be 
+# multiple .sopcinfo files in a Quartus project. 
+ifeq ($(JDI_FILE),)
+ifneq ($(QUARTUS_PROJECT_DIR),)
+JDI_FILE := $(firstword $(wildcard $(QUARTUS_PROJECT_DIR)/output_files/*.jdi) $(wildcard $(QUARTUS_PROJECT_DIR)/*.jdi))
+endif
+endif
+
+# Path to root runtime directory used for hdl simulation 
+RUNTIME_ROOT_DIR := $(CONFIG_OBJ_DIR)/runtime
+
+
+
+#------------------------------------------------------------------------------
+#           MAKEFILE INCLUDES DEPENDENT ON GENERATED CONTENT
+#------------------------------------------------------------------------------
+# mem_init.mk is a generated makefile fragment. This file defines all targets
+# used to generate HDL initialization simulation files and pre-initialized
+# onchip memory files.
+MEM_INIT_FILE :=  $(BSP_ROOT_DIR)/mem_init.mk
+include $(MEM_INIT_FILE)
+
+# Create list of object files to be built using the list of source files.
+# The source file hierarchy is preserved in the object tree.
+# The supported file extensions are:
+#
+# .c            - for C files
+# .cxx .cc .cpp - for C++ files
+# .S .s         - for assembler files
+#
+# Handle source files specified by --src-dir & --src-rdir differently, to
+# save some processing time in calling the adjust-path macro.
+
+OBJ_LIST_C 		:= $(patsubst %.c,%.o,$(filter %.c,$(C_SRCS)))
+OBJ_LIST_CPP	:= $(patsubst %.cpp,%.o,$(filter %.cpp,$(CXX_SRCS)))
+OBJ_LIST_CXX 	:= $(patsubst %.cxx,%.o,$(filter %.cxx,$(CXX_SRCS)))
+OBJ_LIST_CC 	:= $(patsubst %.cc,%.o,$(filter %.cc,$(CXX_SRCS)))
+OBJ_LIST_S 		:= $(patsubst %.S,%.o,$(filter %.S,$(ASM_SRCS)))
+OBJ_LIST_SS		:= $(patsubst %.s,%.o,$(filter %.s,$(ASM_SRCS)))
+
+OBJ_LIST := $(sort $(OBJ_LIST_C) $(OBJ_LIST_CPP) $(OBJ_LIST_CXX) \
+				$(OBJ_LIST_CC) $(OBJ_LIST_S) $(OBJ_LIST_SS))
+
+SDIR_OBJ_LIST_C		:= $(patsubst %.c,%.o,$(filter %.c,$(SDIR_C_SRCS)))
+SDIR_OBJ_LIST_CPP	:= $(patsubst %.cpp,%.o,$(filter %.cpp,$(SDIR_CXX_SRCS)))
+SDIR_OBJ_LIST_CXX 	:= $(patsubst %.cxx,%.o,$(filter %.cxx,$(SDIR_CXX_SRCS)))
+SDIR_OBJ_LIST_CC 	:= $(patsubst %.cc,%.o,$(filter %.cc,$(SDIR_CXX_SRCS)))
+SDIR_OBJ_LIST_S		:= $(patsubst %.S,%.o,$(filter %.S,$(SDIR_ASM_SRCS)))
+SDIR_OBJ_LIST_SS	:= $(patsubst %.s,%.o,$(filter %.s,$(SDIR_ASM_SRCS)))
+
+SDIR_OBJ_LIST := $(sort $(SDIR_OBJ_LIST_C) $(SDIR_OBJ_LIST_CPP) \
+				$(SDIR_OBJ_LIST_CXX) $(SDIR_OBJ_LIST_CC) $(SDIR_OBJ_LIST_S) \
+				$(SDIR_OBJ_LIST_SS))
+
+# Relative-pathed objects that being with "../" are handled differently.
+#
+# Regular objects are created as 
+#   $(CONFIG_OBJ_DIR)/<path>/<filename>.o
+# where the path structure is maintained under the obj directory.  This
+# applies for both absolute and relative paths; in the absolute path
+# case this means the entire source path will be recreated under the obj
+# directory.  This is done to allow two source files with the same name
+# to be included as part of the project.
+#
+# Note: On Cygwin, the path recreated under the obj directory will be 
+# the cygpath -u output path.
+#
+# Relative-path objects that begin with "../" cause problems under this 
+# scheme, as $(CONFIG_OBJ_DIR)/../<rest of path>/ can potentially put the object
+# files anywhere in the system, creating clutter and polluting the source tree.
+# As such, their paths are flattened - the object file created will be 
+# $(CONFIG_OBJ_DIR)/<filename>.o.  Due to this, two files specified with 
+# "../" in the beginning cannot have the same name in the project.  VPATH 
+# will be set for these sources to allow make to relocate the source file 
+# via %.o rules.
+#
+# The following lines separate the object list into the flatten and regular
+# lists, and then handles them as appropriate.
+
+FLATTEN_OBJ_LIST := $(filter ../%,$(OBJ_LIST))
+FLATTEN_APP_OBJS := $(addprefix $(CONFIG_OBJ_DIR)/,$(notdir $(FLATTEN_OBJ_LIST)))
+
+REGULAR_OBJ_LIST 		:= $(filter-out $(FLATTEN_OBJ_LIST),$(OBJ_LIST))
+REGULAR_OBJ_LIST_C 		:= $(filter $(OBJ_LIST_C),$(REGULAR_OBJ_LIST))
+REGULAR_OBJ_LIST_CPP	:= $(filter $(OBJ_LIST_CPP),$(REGULAR_OBJ_LIST))
+REGULAR_OBJ_LIST_CXX 	:= $(filter $(OBJ_LIST_CXX),$(REGULAR_OBJ_LIST))
+REGULAR_OBJ_LIST_CC 	:= $(filter $(OBJ_LIST_CC),$(REGULAR_OBJ_LIST))
+REGULAR_OBJ_LIST_S 		:= $(filter $(OBJ_LIST_S),$(REGULAR_OBJ_LIST))
+REGULAR_OBJ_LIST_SS		:= $(filter $(OBJ_LIST_SS),$(REGULAR_OBJ_LIST))
+
+FLATTEN_SDIR_OBJ_LIST := $(filter ../%,$(SDIR_OBJ_LIST))
+FLATTEN_SDIR_APP_OBJS := $(addprefix $(CONFIG_OBJ_DIR)/,$(notdir $(FLATTEN_SDIR_OBJ_LIST)))
+
+REGULAR_SDIR_OBJ_LIST 		:= $(filter-out $(FLATTEN_SDIR_OBJ_LIST),$(SDIR_OBJ_LIST))
+REGULAR_SDIR_OBJ_LIST_C 	:= $(filter $(SDIR_OBJ_LIST_C),$(REGULAR_SDIR_OBJ_LIST))
+REGULAR_SDIR_OBJ_LIST_CPP	:= $(filter $(SDIR_OBJ_LIST_CPP),$(REGULAR_SDIR_OBJ_LIST))
+REGULAR_SDIR_OBJ_LIST_CXX 	:= $(filter $(SDIR_OBJ_LIST_CXX),$(REGULAR_SDIR_OBJ_LIST))
+REGULAR_SDIR_OBJ_LIST_CC 	:= $(filter $(SDIR_OBJ_LIST_CC),$(REGULAR_SDIR_OBJ_LIST))
+REGULAR_SDIR_OBJ_LIST_S 	:= $(filter $(SDIR_OBJ_LIST_S),$(REGULAR_SDIR_OBJ_LIST))
+REGULAR_SDIR_OBJ_LIST_SS	:= $(filter $(SDIR_OBJ_LIST_SS),$(REGULAR_SDIR_OBJ_LIST))
+
+VPATH := $(sort $(dir $(FLATTEN_OBJ_LIST)) $(dir $(FLATTEN_SDIR_OBJ_LIST)))
+
+APP_OBJS_C := $(addprefix $(CONFIG_OBJ_DIR)/,\
+	$(REGULAR_SDIR_OBJ_LIST_C) \
+	$(foreach s,$(REGULAR_OBJ_LIST_C),$(call adjust-path,$s)))
+
+APP_OBJS_CPP := $(addprefix $(CONFIG_OBJ_DIR)/,\
+	$(REGULAR_SDIR_OBJ_LIST_CPP) \
+	$(foreach s,$(REGULAR_OBJ_LIST_CPP),$(call adjust-path,$s)))
+
+APP_OBJS_CXX := $(addprefix $(CONFIG_OBJ_DIR)/,\
+	$(REGULAR_SDIR_OBJ_LIST_CXX) \
+	$(foreach s,$(REGULAR_OBJ_LIST_CXX),$(call adjust-path,$s)))
+
+APP_OBJS_CC := $(addprefix $(CONFIG_OBJ_DIR)/,\
+	$(REGULAR_SDIR_OBJ_LIST_CC) \
+	$(foreach s,$(REGULAR_OBJ_LIST_CC),$(call adjust-path,$s)))
+
+APP_OBJS_S := $(addprefix $(CONFIG_OBJ_DIR)/,\
+	$(REGULAR_SDIR_OBJ_LIST_S) \
+	$(foreach s,$(REGULAR_OBJ_LIST_S),$(call adjust-path,$s)))
+
+APP_OBJS_SS := $(addprefix $(CONFIG_OBJ_DIR)/,\
+	$(REGULAR_SDIR_OBJ_LIST_SS) \
+	$(foreach s,$(REGULAR_OBJ_LIST_SS),$(call adjust-path,$s)))
+
+APP_OBJS := $(APP_OBJS_C) $(APP_OBJS_CPP) $(APP_OBJS_CXX) $(APP_OBJS_CC) \
+	$(APP_OBJS_S) $(APP_OBJS_SS) \
+	$(FLATTEN_APP_OBJS) $(FLATTEN_SDIR_APP_OBJS)
+
+# Add any extra user-provided object files.
+APP_OBJS += $(OBJS)
+
+# Create list of dependancy files for each object file.
+APP_DEPS := $(APP_OBJS:.o=.d)
+
+# Patch the Elf file with system specific information
+
+# Patch the Elf with the name of the sopc system
+ifneq ($(SOPC_NAME),)
+ELF_PATCH_FLAG += --sopc_system_name $(SOPC_NAME)
+endif
+
+# Patch the Elf with the absolute path to the Quartus Project Directory
+ifneq ($(QUARTUS_PROJECT_DIR),)
+ABS_QUARTUS_PROJECT_DIR := $(call adjust-path-mixed,$(shell cd "$(QUARTUS_PROJECT_DIR)"; pwd))
+ELF_PATCH_FLAG += --quartus_project_dir "$(ABS_QUARTUS_PROJECT_DIR)"
+endif
+
+# Patch the Elf and download args with the JDI_FILE if specified
+ifneq ($(wildcard $(JDI_FILE)),)
+ELF_PATCH_FLAG += --jdi $(JDI_FILE)
+DOWNLOAD_JDI_FLAG := --jdi $(JDI_FILE)
+endif
+
+# Patch the Elf with the SOPCINFO_FILE if specified
+ifneq ($(wildcard $(SOPCINFO_FILE)),)
+ELF_PATCH_FLAG += --sopcinfo $(SOPCINFO_FILE)
+endif
+
+# Use the DOWNLOAD_CABLE variable to specify which JTAG cable to use. 
+# This is not needed if you only have one cable.
+ifneq ($(DOWNLOAD_CABLE),)
+DOWNLOAD_CABLE_FLAG := --cable '$(DOWNLOAD_CABLE)'
+endif
+
+
+#------------------------------------------------------------------------------
+#                           BUILD PRE/POST PROCESS
+#------------------------------------------------------------------------------
+build_pre_process :
+	$(BUILD_PRE_PROCESS)
+
+build_post_process :
+	$(BUILD_POST_PROCESS)
+
+.PHONY: build_pre_process build_post_process
+
+
+#------------------------------------------------------------------------------
+#                                 TOOLS
+#------------------------------------------------------------------------------
+
+#
+# Set tool default variables if not already defined.
+# If these are defined, they would typically be defined in an
+# included makefile fragment.
+#
+ifeq ($(DEFAULT_CROSS_COMPILE),)
+DEFAULT_CROSS_COMPILE := nios2-elf-
+endif
+
+ifeq ($(DEFAULT_STACKREPORT),)
+DEFAULT_STACKREPORT := nios2-stackreport
+endif
+
+ifeq ($(DEFAULT_DOWNLOAD),)
+DEFAULT_DOWNLOAD := nios2-download
+endif
+
+ifeq ($(DEFAULT_FLASHPROG),)
+DEFAULT_FLASHPROG := nios2-flash-programmer
+endif
+
+ifeq ($(DEFAULT_ELFPATCH),)
+DEFAULT_ELFPATCH := nios2-elf-insert
+endif
+
+ifeq ($(DEFAULT_RM),)
+DEFAULT_RM := rm -f
+endif
+
+ifeq ($(DEFAULT_CP),)
+DEFAULT_CP := cp -f
+endif
+
+ifeq ($(DEFAULT_MKDIR),)
+DEFAULT_MKDIR := mkdir -p
+endif
+
+#
+# Set tool variables to defaults if not already defined.
+# If these are defined, they would typically be defined by a
+# setting in the generated portion of this makefile.
+#
+ifeq ($(CROSS_COMPILE),)
+CROSS_COMPILE := $(DEFAULT_CROSS_COMPILE)
+endif
+
+ifeq ($(origin CC),default)
+CC := $(CROSS_COMPILE)gcc -xc
+endif
+
+ifeq ($(origin CXX),default)
+CXX := $(CROSS_COMPILE)gcc -xc++
+endif
+
+ifeq ($(origin AS),default)
+AS := $(CROSS_COMPILE)gcc
+endif
+
+ifeq ($(origin AR),default)
+AR := $(CROSS_COMPILE)ar
+endif
+
+ifeq ($(origin LD),default)
+LD := $(CROSS_COMPILE)g++
+endif
+
+ifeq ($(origin RM),default)
+RM := $(DEFAULT_RM)
+endif
+
+ifeq ($(NM),)
+NM := $(CROSS_COMPILE)nm
+endif
+
+ifeq ($(CP),)
+CP := $(DEFAULT_CP)
+endif
+
+ifeq ($(OBJDUMP),)
+OBJDUMP := $(CROSS_COMPILE)objdump
+endif
+
+ifeq ($(OBJCOPY),)
+OBJCOPY := $(CROSS_COMPILE)objcopy
+endif
+
+ifeq ($(STACKREPORT),)
+STACKREPORT := $(DEFAULT_STACKREPORT) --prefix $(CROSS_COMPILE)
+else
+DISABLE_STACKREPORT := 1
+endif
+
+ifeq ($(DOWNLOAD),)
+DOWNLOAD := $(DEFAULT_DOWNLOAD)
+endif
+
+ifeq ($(FLASHPROG),)
+FLASHPROG := $(DEFAULT_FLASHPROG)
+endif
+
+ifeq ($(ELFPATCH),)
+ELFPATCH := $(DEFAULT_ELFPATCH)
+endif
+
+ifeq ($(MKDIR),)
+MKDIR := $(DEFAULT_MKDIR)
+endif
+
+#------------------------------------------------------------------------------
+#                     PATTERN RULES TO BUILD OBJECTS
+#------------------------------------------------------------------------------
+
+define compile.c
+@$(ECHO) Info: Compiling $< to $@
+@$(MKDIR) $(@D)
+$(CC) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CFLAGS) -o $@ $<
+$(CC_POST_PROCESS)
+endef
+
+define compile.cpp
+@$(ECHO) Info: Compiling $< to $@
+@$(MKDIR) $(@D)
+$(CXX) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<
+$(CXX_POST_PROCESS)
+endef
+
+# If assembling with the compiler, ensure "-Wa," is prepended to all APP_ASFLAGS
+ifeq ($(AS),$(patsubst %as,%,$(AS)))
+COMMA := ,
+APP_ASFLAGS :=  $(filter-out $(APP_CFLAGS),$(addprefix -Wa$(COMMA),$(patsubst -Wa$(COMMA)%,%,$(APP_ASFLAGS))))
+endif
+
+define compile.s
+@$(ECHO) Info: Assembling $< to $@
+@$(MKDIR) $(@D)
+$(AS) -MP -MMD -c $(APP_CPPFLAGS) $(APP_CFLAGS) $(APP_ASFLAGS) -o $@ $<
+$(AS_POST_PROCESS)
+endef
+
+ifeq ($(MAKE_VERSION),3.81) 
+.SECONDEXPANSION:
+
+$(APP_OBJS_C): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.c)
+	$(compile.c)
+
+$(APP_OBJS_CPP): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.cpp)
+	$(compile.cpp)
+
+$(APP_OBJS_CC): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.cc)
+	$(compile.cpp)
+
+$(APP_OBJS_CXX): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.cxx)
+	$(compile.cpp)
+
+$(APP_OBJS_S): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.S)
+	$(compile.s)
+
+$(APP_OBJS_SS): $(CONFIG_OBJ_DIR)/%.o: $$(call adjust-path-mixed,%.s)
+	$(compile.s)
+
+endif # MAKE_VERSION != 3.81
+
+$(CONFIG_OBJ_DIR)/%.o: %.c
+	$(compile.c)
+
+$(CONFIG_OBJ_DIR)/%.o: %.cpp
+	$(compile.cpp)
+
+$(CONFIG_OBJ_DIR)/%.o: %.cc
+	$(compile.cpp)
+
+$(CONFIG_OBJ_DIR)/%.o: %.cxx
+	$(compile.cpp)
+
+$(CONFIG_OBJ_DIR)/%.o: %.S
+	$(compile.s)
+
+$(CONFIG_OBJ_DIR)/%.o: %.s
+	$(compile.s)
+
+
+#------------------------------------------------------------------------------
+#                     PATTERN RULES TO INTERMEDIATE FILES
+#------------------------------------------------------------------------------
+
+$(CONFIG_OBJ_DIR)/%.s: %.c
+	@$(ECHO) Info: Compiling $< to $@
+	@$(MKDIR) $(@D)
+	$(CC) -S $(APP_CPPFLAGS) $(APP_CFLAGS) -o $@ $<
+
+$(CONFIG_OBJ_DIR)/%.s: %.cpp
+	@$(ECHO) Info: Compiling $< to $@
+	@$(MKDIR) $(@D)
+	$(CXX) -S $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<
+
+$(CONFIG_OBJ_DIR)/%.s: %.cc
+	@$(ECHO) Info: Compiling $< to $@
+	@$(MKDIR) $(@D)
+	$(CXX) -S $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<
+
+$(CONFIG_OBJ_DIR)/%.s: %.cxx
+	@$(ECHO) Info: Compiling $< to $@
+	@$(MKDIR) $(@D)
+	$(CXX) -S $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<
+
+$(CONFIG_OBJ_DIR)/%.i: %.c
+	@$(ECHO) Info: Compiling $< to $@
+	@$(MKDIR) $(@D)
+	$(CC) -E $(APP_CPPFLAGS) $(APP_CFLAGS) -o $@ $<
+
+$(CONFIG_OBJ_DIR)/%.i: %.cpp
+	@$(ECHO) Info: Compiling $< to $@
+	@$(MKDIR) $(@D)
+	$(CXX) -E $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<
+
+$(CONFIG_OBJ_DIR)/%.i: %.cc
+	@$(ECHO) Info: Compiling $< to $@
+	@$(MKDIR) $(@D)
+	$(CXX) -E $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<
+
+$(CONFIG_OBJ_DIR)/%.i: %.cxx
+	@$(ECHO) Info: Compiling $< to $@
+	@$(MKDIR) $(@D)
+	$(CXX) -E $(APP_CPPFLAGS) $(APP_CXXFLAGS) $(APP_CFLAGS) -o $@ $<
+
+
+#------------------------------------------------------------------------------
+#                        TARGET RULES
+#------------------------------------------------------------------------------
+
+.PHONY : help
+help :
+	@$(ECHO) "Summary of Makefile targets"
+	@$(ECHO) "  Build targets:"
+	@$(ECHO) "    all (default)     - Application and all libraries (including BSP)"
+	@$(ECHO) "    bsp               - Just the BSP"
+	@$(ECHO) "    libs              - All libraries (including BSP)"
+	@$(ECHO) "    flash             - All flash files"
+	@$(ECHO) "    mem_init_generate - All memory initialization files"
+	@$(ECHO)
+	@$(ECHO) "  Clean targets:"
+	@$(ECHO) "    clean_all         - Application and all libraries (including BSP)"
+	@$(ECHO) "    clean             - Just the application"
+	@$(ECHO) "    clean_bsp         - Just the BSP"
+	@$(ECHO) "    clean_libs        - All libraries (including BSP)"
+	@$(ECHO)
+	@$(ECHO) "  Run targets:"
+	@$(ECHO) "    download-elf      - Download and run your elf executable"
+	@$(ECHO) "    program-flash     - Program flash contents to the board"
+
+# Handy rule to skip making libraries and just make application.
+.PHONY : app
+app : $(ELF)
+
+ifeq ($(CREATE_OBJDUMP), 1)
+app : $(OBJDUMP_NAME)
+endif
+
+ifeq ($(CREATE_ELF_DERIVED_FILES),1)
+app : elf_derived_files
+endif
+
+.PHONY: elf_derived_files
+elf_derived_files: default_mem_init
+
+# Handy rule for making just the BSP.
+.PHONY : bsp
+bsp :
+	@$(ECHO) Info: Building $(BSP_ROOT_DIR)
+	@$(MAKE) --no-print-directory -C $(BSP_ROOT_DIR)
+
+
+# Make sure all makeable libraries (including the BSP) are up-to-date.
+LIB_TARGETS := $(patsubst %,%-recurs-make-lib,$(MAKEABLE_LIBRARY_ROOT_DIRS))
+
+.PHONY : libs
+libs : $(LIB_TARGETS)
+
+ifneq ($(strip $(LIB_TARGETS)),)
+$(LIB_TARGETS): %-recurs-make-lib:
+	@$(ECHO) Info: Building $*
+	$(MAKE) --no-print-directory -C $*
+endif
+
+ifneq ($(strip $(APP_LDDEPS)),)
+$(APP_LDDEPS): libs
+	@true
+endif
+
+# Rules to force your project to rebuild or relink
+# .force_relink file will cause any application that depends on this project to relink
+# .force_rebuild file will cause this project to rebuild object files
+# .force_rebuild_all file will cause this project and any project that depends on this project to rebuild object files
+
+FORCE_RELINK_DEP  := .force_relink
+FORCE_REBUILD_DEP := .force_rebuild
+FORCE_REBUILD_ALL_DEP := .force_rebuild_all
+FORCE_REBUILD_DEP_LIST := $(CONFIG_OBJ_DIR)/$(FORCE_RELINK_DEP) $(CONFIG_OBJ_DIR)/$(FORCE_REBUILD_DEP) $(FORCE_REBUILD_ALL_DEP)
+
+$(FORCE_REBUILD_DEP_LIST):
+
+$(APP_OBJS): $(wildcard $(CONFIG_OBJ_DIR)/$(FORCE_REBUILD_DEP)) $(wildcard $(addsuffix /$(FORCE_REBUILD_ALL_DEP), . $(ALT_LIBRARY_DIRS)))
+
+$(ELF): $(wildcard $(addsuffix /$(FORCE_RELINK_DEP), $(CONFIG_OBJ_DIR) $(ALT_LIBRARY_DIRS)))
+
+
+# Clean just the application.
+.PHONY : clean
+ifeq ($(CREATE_ELF_DERIVED_FILES),1)
+clean : clean_elf_derived_files
+endif
+
+clean :
+	@$(RM) -r $(ELF) $(OBJDUMP_NAME) $(LINKER_MAP_NAME) $(OBJ_ROOT_DIR) $(RUNTIME_ROOT_DIR) $(FORCE_REBUILD_DEP_LIST)
+	@$(ECHO) [$(APP_NAME) clean complete]
+
+# Clean just the BSP.
+.PHONY : clean_bsp
+clean_bsp :
+	@$(ECHO) Info: Cleaning $(BSP_ROOT_DIR)
+	@$(MAKE) --no-print-directory -C $(BSP_ROOT_DIR) clean
+
+# Clean all makeable libraries including the BSP.
+LIB_CLEAN_TARGETS := $(patsubst %,%-recurs-make-clean-lib,$(MAKEABLE_LIBRARY_ROOT_DIRS))
+
+.PHONY : clean_libs
+clean_libs : $(LIB_CLEAN_TARGETS)
+
+ifneq ($(strip $(LIB_CLEAN_TARGETS)),)
+$(LIB_CLEAN_TARGETS): %-recurs-make-clean-lib:
+	@$(ECHO) Info: Cleaning $*
+	$(MAKE) --no-print-directory -C $* clean
+endif
+
+.PHONY: clean_elf_derived_files
+clean_elf_derived_files: mem_init_clean
+
+# Clean application and all makeable libraries including the BSP.
+.PHONY : clean_all
+clean_all : clean mem_init_clean clean_libs
+
+# Include the dependency files unless the make goal is performing a clean
+# of the application.
+ifneq ($(firstword $(MAKECMDGOALS)),clean)
+ifneq ($(firstword $(MAKECMDGOALS)),clean_all)
+-include $(APP_DEPS)
+endif
+endif
+
+.PHONY : download-elf
+download-elf : $(ELF)
+	@if [ "$(DOWNLOAD)" = "none" ]; \
+	then \
+		$(ECHO) Downloading $(ELF) not supported; \
+	else \
+		$(ECHO) Info: Downloading $(ELF); \
+		$(DOWNLOAD) --go --cpu_name=$(CPU_NAME) $(DOWNLOAD_CABLE_FLAG) $(SOPC_SYSID_FLAG) $(DOWNLOAD_JDI_FLAG) $(WRITE_GMON_OPTION) $(ELF); \
+	fi
+
+# Delete the target of a rule if it has changed and its commands exit
+# with a nonzero exit status.
+.DELETE_ON_ERROR:
+
+# Rules for flash programming commands
+PROGRAM_FLASH_SUFFIX := -program
+PROGRAM_FLASH_TARGET := $(addsuffix $(PROGRAM_FLASH_SUFFIX), $(FLASH_FILES))
+
+.PHONY : program-flash
+program-flash : $(PROGRAM_FLASH_TARGET)
+
+.PHONY : $(PROGRAM_FLASH_TARGET)
+$(PROGRAM_FLASH_TARGET) : flash
+	@if [ "$(FLASHPROG)" = "none" ]; \
+	then \
+		$(ECHO) Programming flash not supported; \
+	else \
+		$(ECHO) Info: Programming $(basename $@).flash; \
+		if [ -z "$($(basename $@)_EPCS_FLAGS)" ]; \
+		then \
+			$(ECHO) $(FLASHPROG) $(SOPC_SYSID_FLAG) --base=$($(basename $@)_START) $(basename $@).flash; \
+			$(FLASHPROG) $(DOWNLOAD_CABLE_FLAG) $(SOPC_SYSID_FLAG) --base=$($(basename $@)_START) $(basename $@).flash; \
+		else \
+			$(ECHO) $(FLASHPROG) $(SOPC_SYSID_FLAG) --epcs --base=$($(basename $@)_START) $(basename $@).flash; \
+			$(FLASHPROG) $(DOWNLOAD_CABLE_FLAG) $(SOPC_SYSID_FLAG) --epcs --base=$($(basename $@)_START) $(basename $@).flash; \
+		fi \
+	fi
+
+
+# Rules for simulating with an HDL Simulator [QSYS only]
+ifeq ($(QSYS),1)
+#Create a top level modelsim script load_sim.tcl to source generate msim_setup.tcl and copy mem initialization files
+CREATE_TOP_SIM_SCRIPT := alt-create-top-sim-script
+
+ifeq ($(VSIM),)
+VSIM_EXE := "$(if $(VSIM_DIR),$(VSIM_DIR)/,)vsim"
+ifeq ($(ENABLE_VSIM_GUI),1)
+VSIM := $(VSIM_EXE) -gui
+else
+VSIM := $(VSIM_EXE) -c
+endif # ENABLE_VSIM_GUI == 1
+endif # VSIM not set
+
+ifeq ($(SPD),)
+ifneq ($(ABS_QUARTUS_PROJECT_DIR),)
+ifneq ($(SOPC_NAME),)
+SPD_LOCATION = $(ABS_QUARTUS_PROJECT_DIR)/$(SOPC_NAME)_tb/$(SOPC_NAME)_tb/$(SOPC_NAME)_tb.spd
+LEGACY_SPD_LOCATION = $(ABS_QUARTUS_PROJECT_DIR)/$(SOPC_NAME)_tb.spd
+SPD = $(if $(wildcard $(SPD_LOCATION)),$(SPD_LOCATION),$(LEGACY_SPD_LOCATION))
+endif # SOPC_NAME set
+endif # ABS_QUARTUS_PROJECT_DIR set
+endif # SPD == empty string
+
+
+ifeq ($(LOAD_SIM_SCRIPT),)
+SIM_SCRIPT_DIR := $(RUNTIME_ROOT_DIR)/sim
+LOAD_SIM_SCRIPT := $(SIM_SCRIPT_DIR)/mentor/load_sim.tcl
+endif # LOAD_SIM_SCRIPT == empty string
+
+ifeq ($(MAKE_VERSION),3.81)
+ABS_MEM_INIT_DESCRIPTOR_FILE := $(abspath $(MEM_INIT_DESCRIPTOR_FILE))
+else
+ABS_MEM_INIT_DESCRIPTOR_FILE := $(call adjust-path-mixed,$(shell pwd))/$(MEM_INIT_DESCRIPTOR_FILE)
+endif
+
+$(LOAD_SIM_SCRIPT): $(SPD) $(MEM_INIT_DESCRIPTOR_FILE)
+ifeq ($(SPD),)
+	$(error No SPD file specified. Ensure QUARTUS_PROJECT_DIR variable is set)
+endif
+	@$(MKDIR) $(SIM_SCRIPT_DIR)
+	$(CREATE_TOP_SIM_SCRIPT) --spd=$(SPD) --mem-init-spd=$(abspath $(MEM_INIT_DESCRIPTOR_FILE)) --output-directory=$(SIM_SCRIPT_DIR)
+
+VSIM_COMMAND = \
+	cd $(dir $(LOAD_SIM_SCRIPT)) && \
+	$(VSIM) -do "do $(notdir $(LOAD_SIM_SCRIPT)); ld; $(if $(VSIM_RUN_TIME),run ${VSIM_RUN_TIME};quit;)"
+
+.PHONY: sim
+sim: $(LOAD_SIM_SCRIPT) mem_init_generate
+ifeq ($(LOAD_SIM_SCRIPT),)
+	$(error LOAD_SIM_SCRIPT not set)
+endif
+	$(VSIM_COMMAND)
+
+endif # QSYS == 1
+
+
+
+
+#------------------------------------------------------------------------------
+#                         ELF TARGET RULE
+#------------------------------------------------------------------------------
+# Rule for constructing the executable elf file.
+$(ELF) : $(APP_OBJS) $(LINKER_SCRIPT) $(APP_LDDEPS)
+	@$(ECHO) Info: Linking $@
+	$(LD) $(APP_LDFLAGS) $(APP_CFLAGS) -o $@ $(filter-out $(CRT0),$(APP_OBJS)) $(APP_LIBS) $(APP_BSP_DEP_LIBS)
+ifneq ($(DISABLE_ELFPATCH),1)
+	$(ELFPATCH) $@ $(ELF_PATCH_FLAG)
+endif
+ifneq ($(DISABLE_STACKREPORT),1)
+	@bash -c "$(STACKREPORT) $@"
+endif
+
+$(OBJDUMP_NAME) : $(ELF)
+	@$(ECHO) Info: Creating $@
+	$(OBJDUMP) $(OBJDUMP_FLAGS) $< >$@
+
+# Rule for printing the name of the elf file
+.PHONY: print-elf-name
+print-elf-name:
+	@$(ECHO) $(ELF)
+
+
diff --git a/software/usb/src/cy7c67200.h b/software/usb/src/cy7c67200.h
new file mode 100644
index 0000000000000000000000000000000000000000..50715778a2ba6468aaa7a51734382cb8af036a2f
--- /dev/null
+++ b/software/usb/src/cy7c67200.h
@@ -0,0 +1,3327 @@
+#ifndef CY7C67200_H_
+#define CY7C67200_H_
+
+/* ---------------------------------------------------------------------
+ * Cypress C67x00 register definitions
+ */
+
+/* Hardware Revision Register */
+#define HW_REV_REG      0xC004
+
+/* usb controller base address */
+#define CY7C67200_BASE CY7C67200_IF_0_BASE
+//#define CY7C67200_IF_0_IRQ CY7C67200_IF_0_IRQ
+
+/* General USB registers */
+/* ===================== */
+//set for port 1A(0)(Device port 1) and 2A(1)(Host port 2)
+//Note: all the register are 16-bits
+/* USB Control Register */
+//port 1 : 0
+#define USB_CTL_REG(x)      ((x) ? 0xC0AA : 0xC08A)
+
+//bit 0  
+#define SOF_EOP_EN          (0x0001)
+//bit 2 default disable
+#define SUSPEND_EN          (0x0004)
+//bit 3 4  default normal state
+#define FORCEDSTATUS        (0x0000)     //normal state  
+//bit 7 default disable
+#define PORT_RES_EN         (0x0080)     //hardware not connect  
+//bit 9 port mode select 
+#define PORT_MODE_HOST      (0x0200)
+//bit 10 default full speed        
+#define LOW_SPEED_PORT      (0x0400)
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/* USB Device 0 only registers */  
+/* ============================= */
+/* USB ENDPOINTn CTL register */  //only support endpoint 0 if want to support n need to fix the value to if statement
+#define  USB_DEVICE_ENDPOINTn_CTL_REG  0x0200
+//bit 0
+#define  DEVICE_ENDPOINTn_ARM_EN(x)  ((x) ? 0x0001 : 0x0000)    //enable arm endpoint
+//bit 1
+#define  DEVICE_ENDPOINTn_Enable(x)  ((x) ? 0x0002 : 0x0000)    //enable transmit to endpoint 0 from port 0
+//bit 2  1 (OUT transfer Host-->Slave the bit set as 1)  (IN transfer Slave-->Host,the bit set as 0)
+#define  DEVICE_ENDPOINTn_Direction_Selection(x)  ((x) ? 0x0004 : 0x0000)    //enable transmit to endpoint 0 from port 0
+//bit 3
+#define  DEVICE_ENDPOINTn_NAK_INT_EN(x)    ((x) ? 0x0008 : 0x0000)     //enable endpoint NAK (response to host) interrupt to port 0
+//bit 4 iso transmit enable (Valid for Endpoint1-7)
+#define  DEVICE_ENDPOINTn_ISO_EN(x)        ((x) ? 0x0010 : 0x0000)     //enable endpoint iso transmit to port 0
+//bit 5
+#define  DEVICE_ENDPOINTn_Stall_EN(x)      ((x) ? 0x0020 : 0x0000)     //enable send stall in response to the next request
+//bit 6 (1:Data1 0:Data0) impact on tx only
+#define  DEVICE_ENDPOINTn_Seq_Sel()        ((x) ? 0x0040 : 0x0000)     //the sequence data net data toggle
+//bit 7 
+#define  DEVICE_ENDPOINT0_Inout_Ignore(x)  ((x) ? 0x0080 : 0x0000)     //enable Endpoint 0 inout
+
+/* USB ENDPOINTn  Address register */
+//assign the address in the memory space for endpoint n transaction  can allocate in the user space 0x04A4- 0x3FFF
+#define USB_DEVICE_ENDPOINTn_Address_REG         (x0202) 
+
+/* USB ENDPOINTn  Count register */
+//assign the OUT max packet size from PC and In max packet size to the Host   10-bit
+# define USB_DEVICE_ENDPOINTn_Count_REG          (x0204)  
+
+/* USB ENDPOINTn  Status register */   //MUST initial to 0x0000 at first,then forbidden to write to
+//assign the OUT max packet size from PC and In max packet size to the Host   10-bit
+# define USB_DEVICE_ENDPOINTn_Status_REG         (0x0206) 
+//Note: all bits should be write to 0s for initial
+//bit 0  indicate the last transaction occur or not
+# define DEVICE_ENDPOINTn_ACK_FLAG               (0x0001)
+//bit 1 CRC5,CRC12 or incorrect packet type received
+# define DEVICE_ENDPOINTn_Error_FLAG             (0x0002)
+//bit 2  last transaction Timeout or not
+# define DEVICE_ENDPOINTn_Timeout_FLAG           (0x0004)
+//bit 3  indicate the last data toggle received was a data1 or data0
+#define  DEVICE_ENDPOINTn_Sequence_FLAG          (0x0008)
+//bit 4  indicate the setup packet was received or not, for device 1 the setup packet are stored at mem location 0x0300
+#define  DEVICE_ENDPOINTn_Setup_FLAG             (0x0010)
+//bit 5  indicate the length in last transaction same or not to the endpoint count reg
+#define  DEVICE_ENDPOINTn_Length_Exception_FLAG  (0x0020)
+//bit 6  indicate the NAK flag packet was sent to the host or not
+#define  DEVICE_ENDPOINTn_NAK_FLAG               (0x0040)
+//bit 7 indicate the stall packet was sent to host or not
+#define  DEVICE_ENDPOINTn_Stall_FLAG             (0x0080)
+//bit 8 IN Exception Flag
+#define  DEVICE_ENDPOINTn_IN_Exception_FLAG      (0x0100)
+// 1 : Received IN when armed for OUT
+// 0 : Received OUT when armed for OUT
+//bit 9 OUT Exception Flag
+#define  DEVICE_ENDPOINTn_OUT_Exception_FLAG     (0x0200)
+// 1 : Received OUT when armed for IN
+// 0 : Received IN  when armed for IN
+//bit 10
+#define  DEVICE_ENDPOINTn_Underflow_FLAG         (0x0400)
+//bit 11
+#define  DEVICE_ENDPOINTn_Overflow_FLAG          (0x0800)
+              
+/* USB ENDPOINTn  Count result register */   //MUST initial to 0x0000 at first,then forbidden to write to
+//assign the difference of packet size between the length assigned in the count register and the actual length received (overflow/underflow)
+# define USB_DEVICE_ENDPOINTn_CountResult_REG       (x0208) 
+//all bits should be write to 0s
+
+/* USB DEVICE 0 interrupt enable register */
+//The Device n Interrupt Enable register provides control over
+//device-related interrupts including eight different endpoint interrupts.
+#define USB_DEVICE_INT_EN_REG    (0xC08C)
+
+//bit 0
+#define DEVICE_EPO_INT_EN(x)    ((x) ? 0x0001 : 0x0000)     //enable Endpoint 0 interrupt
+//bit 1
+#define DEVICE_EP1_INT_EN(x)    ((x) ? 0x0002 : 0x0000)     //enable Endpoint 1 interrupt
+//bit 2
+#define DEVICE_EP2_INT_EN(x)    ((x) ? 0x0004 : 0x0000)     //enable Endpoint 2 interrupt
+//bit 3
+#define DEVICE_EP3_INT_EN(x)    ((x) ? 0x0008 : 0x0000)     //enable Endpoint 3 interrupt
+//bit 4
+#define DEVICE_EP4_INT_EN(x)    ((x) ? 0x0010 : 0x0000)     //enable Endpoint 4 interrupt
+//bit 5
+#define DEVICE_EP5_INT_EN(x)    ((x) ? 0x0020 : 0x0000)     //enable Endpoint 5 interrupt
+//bit 6
+#define DEVICE_EP6_INT_EN(x)    ((x) ? 0x0040 : 0x0000)     //enable Endpoint 6 interrupt
+//bit 7
+#define DEVICE_EP7_INT_EN(x)    ((x) ? 0x0080 : 0x0000)     //enable Endpoint 7 interrupt
+//bit 8 usb reset interrupt enable
+#define DEVICE_USB_ResetDetect_INT_EN(x)    ((x) ? 0x0100 : 0x0000)     //enable USB device reset interrupt
+//bit 9 
+#define DEVICE_SOF_EOP_INT_EN(x)            ((x) ? 0x0200 : 0x0000)     //enable SOP/EOP interrupt         
+//bit 11 
+#define DEVICE_SOF_EOP_Timeout_INT_EN(x)    ((x) ? 0x0800 : 0x0000)     //enable SOF/EOP Timeout interrupt  
+//bit 14 (OTG ID edge detection)
+#define DEVICE_ID_INT_EN(x)                 ((x) ? 0x4000 : 0x0000)     //enable OTG ID interrupt  
+//bit 15 (OTG VBUS interrupt enable)
+#define DEVICE_VBUS_INT_EN(x)               ((x) ? 0x8000 : 0x0000)     //enable OTG VBUS interrupt  
+
+/* USB DEVICE 0 address register */
+//The Device n address register holds the address assigned by the host
+//
+#define USB_DEVICE_Address_REG       (0xC08E)
+//the register should be write the device address assigned by host
+
+/* USB DEVICE 0 status register */
+//The Device n status register provides status information for device operation
+//
+#define USB_DEVICEn_Status_REG       (0xC090)
+//Pending interrupts can be cleared by writing a ¡®1¡¯ to the corresponding bit. 
+//bit 0
+#define DEVICE_EP0_INT_Flag          (0x0001)
+//bit 1
+#define DEVICE_EP1_INT_Flag          (0x0002)
+//bit 2
+#define DEVICE_EP2_INT_Flag          (0x0004)
+//bit 3
+#define DEVICE_EP3_INT_Flag          (0x0008)
+//bit 4
+#define DEVICE_EP4_INT_Flag          (0x0010)
+//bit 5
+#define DEVICE_EP5_INT_Flag          (0x0020)
+//bit 6
+#define DEVICE_EP6_INT_Flag          (0x0040)
+//bit 7
+#define DEVICE_EP7_INT_Flag          (0x0080)
+//bit 8
+#define DEVICE_Reset_INT_Flag        (0x0100)
+//bit 9
+#define DEVICE_SOF_EOP_INT_Flag      (0x0200)
+//bit 14
+#define DEVICE_OTG_ID_INT_Flag       (0x4000)
+//bit 15
+#define DEVICE_VBUS_INT_Flag         (0x8000)
+	
+/* USB DEVICE 0 Frame Num register */
+//The Device n Frame Number register is a read only register contains the Frame number of the last sof packet
+//read only
+#define USB_DEVICEn_FrameNum_REG            (0xC092)
+//bit 10-0
+#define DEVICE_FrameNum                     (0x07FF)
+//bit 14-12
+#define DEVICE_SOF_EOP_Timeout_INT_Count    (0x7000)
+//bit 15
+#define DEVICE_SOF_EOP_INT_Flag1            (0x8000)
+
+/* USB DEVICE 0 Frame Num register */
+//The Device n SOF/EOP count register is a write only register contains the time interval between SOF/EOP
+//write only
+#define DEVICE_SOF_EOP_COUNT_REG            (0x3FFF)
+#define DEVICE_SOF_EOP_COUNT_NUM            (0x2EE0+0x0010)
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	
+/* USB Host 1 only registers */  
+/* ============================= */
+
+/* USB Host 1 Control register */
+//The Host n Control register allows high-level USB transaction control.
+//read only
+#define USB_HOSTn_CTL_REG     (0xC0A0)
+//bit 0
+#define HOST_ARM_EN                 (0x0001)
+//bit 4
+#define HOST_ISO_EN                 (0x0010) //for ISO transaction
+//bit 5
+#define HOST_SYN_EN                 (0x0020)
+//	1: The next enabled packet will be transferred after the SOF
+//or EOP packet is transmitted
+//  0: The next enabled packet will be transferred as soon as the
+//SIE is free
+//bit 6
+#define HOST_SEQ_SEL                (0x0040)
+//bit 7
+#define HOST_PRE_EN                 (0x0080)	//preamble for low speed device
+
+/* USB Host 1 Address register */  
+//The Host n Address register is used as the base pointer into memory space for the current host transactions.
+//read only  16 bit
+#define USB_HOSTn_Address_REG      (0xC0A2)
+
+/* USB Host 1 Count register */
+//The Host n Count register is used to hold the number of bytes (packet length) for the current transaction. The maximum
+//packet length is 1023 bytes in ISO mode.
+//read only  10 bit
+#define USB_HOSTn_Count_REG       (0xC0A4)
+
+#define HOST_COUNT_MASK           (0x03FF)	
+
+/* USB Host 1 PID register */
+//The Host n PID register is a write-only register that provides the PID and Endpoint information to the USB SIE to be used
+//in the next transaction.
+//write only  
+#define USB_HOSTn_PID_REG       (0xC0A6)
+//bit0-3
+#define HOST_ENDPOINT_SEL       (0x000F)	
+//bit4-7
+#define HOST_PID_SEL            (0x00F0)
+
+/* USB Host 1 Count Result register */
+//The Host n Count Result register is a read-only register that contains the size difference in bytes between the Host Count
+//Value specified in the Host n Count register and the last packet received.
+//in the next transaction.
+//read only  
+#define USB_HOSTn_Count_Result_REG       (0xC0A8)
+//bit0-15
+#define HOST_Count_Result_MASK           (0xFFFF)	
+
+/* USB Host 1 Device Address register */
+//The Host n Device Address register is a write-only register that contains the USB Device Address that the host wishes to communicate with.
+//read only  
+#define USB_HOSTn_Device_Address_REG       (0xC0A8)
+//bit0-15
+#define HOST_Device_Address_MASK           (0x007F)
+
+/* USB Host 1 Interrupt Enable register */
+//The Host n Interrupt Enable register allows control over host-related interrupts.
+//R/W  
+#define USB_HOSTn_INT_EN_REG       (0xC0AC)
+//bit0
+#define HOST_DONE_INT_EN           (0x0001)
+//bit4
+#define HOST_CON_CHANGE_EN         (0x0010)	
+//bit6
+#define HOST_WAKE_INT_EN           (0x0040)	
+//bit9
+#define HOST_SOF_EOP_INT_EN        (0x0200)
+//bit14
+#define HOST_OTG_ID_INT_EN         (0x4000)
+//bit15
+#define HOST_VBUS_INT_EN           (0x8000)
+
+/* USB Host 1 Status register */
+//The Host n Status register provides status information for host operation.
+//R/W  
+#define USB_HOSTn_STATUS_REG       (0xC0B0)
+//bit0
+#define HOST_DONE_INT_FLAG         (0x0001)
+//bit2
+#define HOST_SE0_FLAG              (0x0002)	
+//bit4
+#define HOST_CONNECT_CHANGE_INT_FLAG  (0x0010)	
+//bit6
+#define HOST_WAKE_INT_FLAG        (0x0040)
+//bit9
+#define HOST_SOF_EOP_INT_FLAG     (0x0200)
+//bit14
+#define HOST_OTG_ID_INT_FLAG      (0x4000)
+//bit15
+#define HOST_VBUS_INT_FLAG        (0x8000)
+	
+
+/* USB Host 1 SOF EOP Count register */
+//The Host n SOF/EOP Count register contains the SOF/EOP
+//Count Value that is loaded into the SOF/EOP counter
+//R/W  
+#define USB_HOSTn_SOF_EOP_COUNT_REG       (0xC0B2)
+//bit 0-13	
+#define HOST_SOF_EOP_COUNT_MASK           (0x3FFF)
+
+/* USB Host 1 SOF EOP Count register */
+//The Host n SOF/EOP Counter register contains the current
+//value of the SOF/EOP down counter
+//R
+#define USB_HOSTn_SOF_EOP_COUNT_REG1       (0xC0B4)
+//bit 0-13	
+#define HOST_SOF_EOP_COUNT_MASK           (0x3FFF)
+
+/* USB Host 1 FRAME Count register */
+//The Host n Frame register maintains the next frame number
+//to be transmitted (current frame number + 1)
+//R
+#define USB_HOSTn_FRAME_COUNT_REG1       (0xC0B6)
+//bit 0-13	
+#define HOST_FRAME_COUNT_MASK              (0x07FF)	
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+	
+/* USB HPI registers */  
+/* ============================= */
+
+/* USB HPI breakpoint register */
+//The HPI Breakpoint register is a special on-chip memory location, which the external processor can access using normal HPI
+//memory read/write cycles.
+//R/W for HPI
+#define HPI_BreakPoint_REG   (0x0140)	
+
+/* USB HPI interrupt routing register */
+//The Interrupt Routing register allows the HPI port to take over
+//some or all of the SIE interrupts that usually go to the on-chip CPU.
+//R/W for HPI
+#define HPI_INT_ROUTING_REG   (0x0142)	
+
+//bit 0 & 8 not swap setting
+#define HPI_SWAP_EN           (0x0000)
+//bit except 1 2  
+#define HPI_ROUTE_EN          (0xFECE)
+	
+/* USB HPI SIEmsg register */
+//The SIEXmsg register allows an interrupt to be generated on the HPI port
+//R/W for HPI
+#define HPI_SIEmsg1_REG   (0x0144)	
+#define HPI_SIEmsg2_REG   (0x0148)	
+//bit 0-15
+#define HPI_SIEmsg_MASK   (0xFFFF)
+
+/* USB HPI Mailbox register */
+//The HPI Mailbox register provides a common mailbox between the CY7C67200 and the external host processor.
+#define HPI_Mailbox_REG   (0xC0C6)
+//bit 0-15
+#define HPI_Mailbox_MASK  (0xFFFF)
+
+/* USB HPI Status register */
+//The HPI Status Port provides the external host processor with
+//the MailBox status bits plus several SIE status bits
+#define HPI_STATUS_REG   //A1 A0 =  1 1
+//bit 0
+#define HPI_STATUS_Mailbox_Out_FLAG  (0x0001)
+//bit 1
+#define HPI_STATUS_RESET1_FLAG       (0x0002)
+//bit 2
+#define HPI_STATUS_DONE1_FLAG        (0x0004)
+//bit 3
+#define HPI_STATUS_DONE2_FLAG        (0x0008)
+//bit 4
+#define HPI_STATUS_SIE1msg_FLAG      (0x0010)
+//bit 5
+#define HPI_STATUS_SIE2msg_FLAG      (0x0020)
+//bit 6
+#define HPI_STATUS_Resume1_FLAG      (0x0040)
+//bit 7
+#define HPI_STATUS_Resume2_FLAG      (0x0080)
+//bit 8
+#define HPI_STATUS_Mailbox_In_FLAG   (0x0100)
+//bit 9
+//#define HPI_STATUS_RESET1_FLAG          (0x0200)
+//bit 10
+#define HPI_STATUS_SOF_EOP1_FLAG        (0x0400)
+//bit 12
+#define HPI_STATUS_SOF_EOP2_FLAG        (0x1000)
+//bit 14
+#define HPI_STATUS_SOF_OTG_ID_FLAG      (0x4000)
+//bit 15
+#define HPI_STATUS_VBUS_FLAG            (0x8000)
+
+
+
+
+
+/*********************************************************/
+/* FILE        : 63700.H                                 */
+/*********************************************************/
+/* DATE        : 06/24/02                                */
+/* BY          : Barry Hatton                            */
+/* VERSION     : 00.04                                   */
+/*                                                       */
+/* History:                                              */
+/*   SBN: Update to the latest spec     July/26/02       */
+/*        Change Label to start with character           */
+/*                                                       */
+/*   SBN: Add                           July/28/02       */
+/*        New definition to work with current BIOS code  */
+/*        Update HPI HW change address 0x120-0x122       */
+/*                                                       */
+/*   SBN: Copy SPI/HPI/IDE definition from sys_memmap.cds*/
+/*   SBN: Add HSS definition from sys_memmap.cds         */
+/*                                                       */
+/* DESCRIPTION : This file contains the register and     */
+/*               field definitions for the CY7C63700.    */
+/*                                                       */
+/* NOTICE      : This file is provided as-is for         */
+/*               reference purposes only. No warranty is */
+/*               made as to functionality or suitability */
+/*               for any particular purpose or           */
+/*               application.                            */
+/*                                                       */
+/* COPYRIGHT 2002, CYPRESS SEMICONDUCTOR CORP.           */
+/*********************************************************/
+
+/*********************************************************/
+/* REGISTER/FIELD NAMING CONVENTIONS                     */
+/*********************************************************/
+/*                                                       */
+/* Fieldss can be considered either:                     */
+/* (a) BOOLEAN (1 or 0, On or Off, True or False) or     */
+/* (b) BINARY (Numeric value)                            */
+/*                                                       */
+/* Multiple-bit fields contain numeric values only.      */
+/*                                                       */
+/* Boolean fields are identified by the _EN suffix?      */
+/*                                                       */
+/* Binary fields are defined by the field name. In       */
+/* addition, all legal values for the binary field are   */
+/* identified.                                           */
+/*                                                       */
+/* Either ALL register names should include REG as part  */
+/* of the label or NO register names should include REG  */
+/* as part of the label.                                 */
+/*                                                       */
+/* Certain nomenclature is applied universally within    */
+/* this file. Commonly applied abbreviations include:    */
+/*                                                       */
+/*  EN      Enable                                       */
+/*  DIS     Disable                                      */
+/*  SEL     Select                                       */
+/*  FLG     Flag                                         */
+/*  STB     Strobe                                       */
+/*                                                       */
+/*  ADDR    Address                                      */
+/*  CTL     Control                                      */
+/*  CNTRL   Control                                      */
+/*  CFG     Config                                       */
+/*  RST     Reset                                        */
+/*  BFR     Buffer                                       */
+/*  REG     Register                                     */
+/*  SIE     Serial Interface Engine                      */
+/*  DEV     Device                                       */
+/*  HOST    Host                                         */
+/*  EP      Endpoint                                     */
+/*  IRQ     Interrupt                                    */
+/*  BKPT    Breakpoint                                   */
+/*  STAT    Status                                       */
+/*  CNT     Count                                        */
+/*  CTR     Counter                                      */
+/*  TMR     Timer                                        */
+/*  MAX     Maximum                                      */
+/*  MIN     Minimum                                      */
+/*  POL     Polarity                                     */
+/*  BLK     Block                                        */
+/*  WDT     Watchdog Timer                               */
+/*  RX      Receive                                      */
+/*  RXD     Received                                     */
+/*  TX      Transmit                                     */
+/*  TXD     Transmitted                                  */
+/*  ACK     Acknowledge                                  */
+/*  ACKD    Acknowledged                                 */
+/*  MBX     Mailbox                                      */
+/*  CLR     Clear                                        */
+/*  bm      Bit Mask  (prefix)                           */
+/*  XRAM    External RAM                                 */
+/*                                                       */
+/*********************************************************/
+
+/*********************************************************/
+/* REGISTER SUMMARY                                      */
+/*********************************************************/
+/*                                                       */
+/* PROC_FLAGS_REG                                        */
+/* REG_BANK_REG                                          */
+/* HW_REV_REG                                            */
+/* IRQ_EN_REG                                            */
+/* CPU_SPEED_REG                                         */
+/* POWER_CTL_REG                                         */
+/* BKPT_REG                                              */
+/* USB_DIAG_REG                                          */
+/* MEM_DIAG_REG                                          */
+/*                                                       */
+/* PGn_MAP_REG                                           */
+/* DRAM_CTL_REG                                          */
+/* XMEM_CTL_REG                                          */
+/*                                                       */
+/* WDT_REG                                               */
+/* TMRn_REG                                              */
+/*                                                       */
+/* USBn_CTL_REG                                          */
+/*                                                       */
+/* HOSTn_IRQ_EN_REG                                      */
+/* HOSTn_STAT_REG                                        */
+/* HOSTn_CTL_REG                                         */
+/* HOSTn_ADDR_REG                                        */
+/* HOSTn_CNT_REG                                         */
+/* HOSTn_PID_REG                                         */
+/* HOSTn_EP_STAT_REG                                     */
+/* HOSTn_DEV_ADDR_REG                                    */
+/* HOSTn_CTR_REG                                         */
+/* HOSTn_SOF_EOP_CNT_REG                                 */
+/* HOSTn_SOF_EOP_CTR_REG                                 */
+/* HOSTn_FRAME_REG                                       */
+/*                                                       */
+/* DEVn_IRQ_EN_REG                                       */
+/* DEVn_STAT_REG                                         */
+/* DEVn_ADDR_REG                                         */
+/* DEVn_FRAME_REG                                        */
+/* DEVn_EPn_CTL_REG                                      */
+/* DEVn_EPn_ADDR_REG                                     */
+/* DEVn_EPn_CNT_REG                                      */
+/* DEVn_EPn_STAT_REG                                     */
+/* DEVn_EPn_CTR_REG                                      */
+/*                                                       */
+/* OTG_CTL_REG                                           */
+/*                                                       */
+/* GPIO_CTL_REG                                          */
+/* GPIOn_OUT_DATA_REG                                    */
+/* GPIOn_IN_DATA_REG                                     */
+/* GPIOn_DIR_REG                                         */
+/*                                                       */
+/* EPP_CTL_REG                                           */
+/* EPP_DATA_REG                                          */
+/* EPP_BFR_READ_REG                                      */
+/* EPP_ADDR_REG                                          */
+/*                                                       */
+/* IDE_MODE_REG                                          */
+/* IDE_START_ADDR_REG                                    */
+/* IDE_STOP_ADDR_REG                                     */
+/* IDE_CTL_REG                                           */
+/* IDE_PIO_DATA_REG                                      */
+/* IDE_PIO_ERR_REG                                       */
+/* IDE_PIO_SECT_CNT_REG                                  */
+/* IDE_PIO_SECT_NUM_REG                                  */
+/* IDE_PIO_CYL_LO_REG                                    */
+/* IDE_PIO_CYL_HI_REG                                    */
+/* IDE_PIO_DEV_HD_REG                                    */
+/* IDE_PIO_CMD_REG                                       */
+/* IDE_PIO_DEV_CTL_REG                                   */
+/*                                                       */
+/* MDMA_MODE_REG                                         */
+/* MDMA_START_ADDR_REG                                   */
+/* MDMA_STOP_ADDR_REG                                    */
+/* MDMA_CTL_REG                                          */
+/*                                                       */
+/* HSS_CTL_REG                                           */
+/* HSS_BAUD_REG                                          */
+/* HSS_TX_GAP_REG                                        */
+/* HSS_DATA_REG                                          */
+/* HSS_RX_ADDR_REG                                       */
+/* HSS_RX_CTR_REG                                        */
+/* HSS_TX_ADDR_REG                                       */
+/* HSS_TX_CTR_REG                                        */
+/*                                                       */
+/* SPI_CFG_REG                                           */
+/* SPI_CTL_REG                                           */
+/* SPI_IRQ_EN_REG                                        */
+/* SPI_STAT_REG                                          */
+/* SPI_IRQ_CLR_REG                                       */
+/* SPI_CRC_CTL_REG                                       */
+/* SPI_CRC_VALUE_REG                                     */
+/* SPI_DATA_REG                                          */
+/* SPI_TX_ADDR_REG                                       */
+/* SPI_TX_CNT_REG                                        */
+/* SPI_RX_ADDR_REG                                       */
+/* SPI_RX_CNT_REG                                        */
+/*                                                       */
+/* UART_CTL_REG                                          */
+/* UART_STAT_REG                                         */
+/* UART_DATA_REG                                         */
+/*                                                       */
+/* PWM_CTL_REG                                           */
+/* PWM_MAX_CNT_REG                                       */
+/* PWMn_START_REG                                        */
+/* PWMn_STOP_REG                                         */
+/* PWM_CYCLE_CNT_REG                                     */
+/*                                                       */
+/* HPI_MBX_REG                                           */
+/* HPI_BKPT_REG                                          */
+/* IRQ_ROUTING_REG                                       */
+/*                                                       */
+/* HPI_DATA_PORT                                         */
+/* HPI_ADDR_PORT                                         */
+/* HPI_MBX_PORT                                          */
+/* HPI_STAT_PORT                                         */
+/*                                                       */
+/*********************************************************/
+
+/*********************************************************/
+/*********************************************************/
+/* CPU REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* CPU FLAGS REGISTER [R]                                */
+/*********************************************************/
+#define CPU_FLAGS_REG                                        0xC000 /* CPU Flags Register [R] */
+#define flags                                                0xC000
+
+/* FIELDS */
+
+#define GLOBAL_IRQ_EN                                        0x0010 /* Global Interrupt Enable */
+#define NEG_FLG                                              0x0008 /* Negative Sign Flag */
+#define OVF_FLG                                              0x0004 /* Overflow Flag */
+#define CARRY_FLG                                            0x0002 /* Carry/Borrow Flag */
+#define ZER0_FLG                                             0x0001 /* Zero Flag */
+
+/*********************************************************/
+/* BANK REGISTER [R/W]                                   */
+/*********************************************************/
+
+#define BANK_REG                                             0xC002 /* Bank Register [R/W] */
+#define regbuf                                               0xC002 /* alias for BIOS code */
+
+#define BANK                                                 0xFFE0 /* Bank */
+
+/*********************************************************/
+/* HARDWARE REVISION REGISTER [R]                        */
+/*********************************************************/
+/* First Silicon Revision is 0x0101. Revision number     */
+/* will be incremented by one for each revision change.  */
+/*********************************************************/
+
+#define HW_REV_REG                                           0xC004 /* Hardware Revision Register [R] */
+
+/*********************************************************/
+/* INTERRUPT ENABLE REGISTER [R/W]                       */
+/*********************************************************/
+
+#define IRQ_EN_REG                                           0xC00E /* Interrupt Enable Register [R/W] */
+#define intenb                                               0xC00E /* Alias for BIOS code */
+#define INT_EN_REG                                           0xC00E /* BIOS Interrupt Enable Register Alias */
+
+/* FIELDS */
+
+#define OTG_IRQ_EN                                           0x1000 /* OTG Interrupt Enable */
+#define SPI_IRQ_EN                                           0x0800 /* SPI Interrupt Enable */
+#define HOST2_IRQ_EN                                         0x0200 /* Host 2 Interrupt Enable */
+#define DEV2_IRQ_EN                                          0x0200 /* Device 2 Interrupt Enable */
+#define HOST1_IRQ_EN                                         0x0100 /* Host 1 Interrupt Enable */
+#define DEV1_IRQ_EN                                          0x0100 /* Device 1 Interrupt Enable */
+#define HSS_IRQ_EN                                           0x0080 /* HSS Interrupt Enable */
+#define IN_MBX_IRQ_EN                                        0x0040 /* In Mailbox Interrupt Enable */
+#define OUT_MBX_IRQ_EN                                       0x0020 /* Out Mailbox Interrupt Enable */
+#define DMA_IRQ_EN                                           0x0010 /* DMA Interrupt Enable */
+#define UART_IRQ_EN                                          0x0008 /* UART Interrupt Enable */
+#define GPIO_IRQ_EN                                          0x0004 /* GPIO Interrupt Enable */
+#define TMR1_IRQ_EN                                          0x0002 /* Timer 1 Interrupt Enable */
+#define TMR0_IRQ_EN                                          0x0001 /* Timer 0 Interrupt Enable */
+
+/*  Alias bit mask definition for register IRQ_EN_REG */
+#define bmINT_EN_TM0                                         0x0001
+#define bmINT_EN_TM1                                         0x0002
+#define bmINT_EN_GPIO                                        0x0004
+#define bmINT_EN_UART                                        0x0008
+#define bmINT_EN_DMA                                         0x0010
+#define bmINT_EN_MBX_OUT                                     0x0020
+#define bmINT_EN_MBX_IN                                      0x0040
+#define bmINT_EN_HSP                                         0x0080
+#define bmINT_EN_SIE1                                        0x0100
+#define bmINT_EN_SIE2                                        0x0200
+#define bmINT_EN_SPI                                         0x0800
+#define bmINT_EN_OTG                                         0x1000
+
+/* another define from sys_memmap */
+#define GIO_IntCtl_MSK                                       0x0000
+#define GIO_IntCtl_IRQ0En_BIT                                0x0000
+#define GIO_IntCtl_IRQ0En_BM                                 0x0001
+#define GIO_IntCtl_IRQ0Pol_BIT                               0x0001
+#define GIO_IntCtl_IRQ0Pol_BM                                0x0002
+#define GIO_IntCtl_IRQ1En_BIT                                0x0002
+#define GIO_IntCtl_IRQ1En_BM                                 0x0004
+#define GIO_IntCtl_IRQ1Pol_BIT                               0x0003
+#define GIO_IntCtl_IRQ1Pol_BM                                0x0008
+#define GIO_IntCtl_SX_BIT                                    0x0004
+#define GIO_IntCtl_SX_BM                                     0x0010
+#define GIO_IntCtl_SG_BIT                                    0x0005
+#define GIO_IntCtl_SG_BM                                     0x0020
+#define GIO_IntCtl_HX_BIT                                    0x0006
+#define GIO_IntCtl_HX_BM                                     0x0040
+#define GIO_IntCtl_HG_BIT                                    0x0007
+#define GIO_IntCtl_HG_BM                                     0x0080
+
+#define GIO_IntCtl_Mode_POS                                  0x0008
+#define GIO_IntCtl_Mode_SIZ                                  0x0003
+#define GIO_IntCtl_Mode_GPIO                                 0x0000
+#define GIO_IntCtl_Mode_GPIObm                               0x0000
+#define GIO_IntCtl_Mode_Flash                                0x0001
+#define GIO_IntCtl_Mode_Flashbm                              0x0100
+#define GIO_IntCtl_Mode_EPP                                  0x0002
+#define GIO_IntCtl_Mode_EPPbm                                0x0200
+#define GIO_IntCtl_Mode_SLV                                  0x0003
+#define GIO_IntCtl_Mode_SLVbm                                0x0300
+#define GIO_IntCtl_Mode_IDE                                  0x0004
+#define GIO_IntCtl_Mode_IDEbm                                0x0400
+#define GIO_IntCtl_Mode_HPI                                  0x0005
+#define GIO_IntCtl_Mode_HPIbm                                0x0500
+#define GIO_IntCtl_Mode_SCAN                                 0x0006
+#define GIO_IntCtl_Mode_SCANbm                               0x0600
+#define GIO_IntCtl_Mode_MDiag                                0x0007
+#define GIO_IntCtl_Mode_MDiagbm                              0x0700
+
+#define GIO_IntCtl_Bond_POS                                  0x000B
+#define GIO_IntCtl_Bond_SIZ                                  0x0002
+#define GIO_IntCtl_Bond_Embed                                0x0000
+#define GIO_IntCtl_Bond_Embedbm                              0x0000
+#define GIO_IntCtl_Bond_Flash                                0x0001
+#define GIO_IntCtl_Bond_Flashbm                              0x0800
+#define GIO_IntCtl_Bond_Mobile                               0x0002
+#define GIO_IntCtl_Bond_Mobilebm                             0x1000
+
+#define GIO_IntCtl_MD_BIT                                    0x000F
+
+#define INT_Enable_T0_BIT                                    0x0000
+#define INT_Enable_T0_BM                                     0x0001
+#define INT_Enable_T1_BIT                                    0x0001
+#define INT_Enable_T1_BM                                     0x0002
+#define INT_Enable_GP_BIT                                    0x0002
+#define INT_Enable_GP_BM                                     0x0004
+#define INT_Enable_UART_BIT                                  0x0003
+#define INT_Enable_UART_BM                                   0x0008
+#define INT_Enable_FDMA_BIT                                  0x0004
+#define INT_Enable_FDMA_BM                                   0x0010
+#define INT_Enable_MBX_BIT                                   0x0006
+#define INT_Enable_MBX_BM                                    0x0040
+#define INT_Enable_HSS_BIT                                   0x0007
+#define INT_Enable_HSS_BM                                    0x0080
+#define INT_Enable_SIE1_BIT                                  0x0008
+#define INT_Enable_SIE1_BM                                   0x0100
+#define INT_Enable_SIE2_BIT                                  0x0009
+#define INT_Enable_SIE2_BM                                   0x0200
+#define INT_Enable_SPI_BIT                                   0x000B
+#define INT_Enable_SPI_BM                                    0x0800
+
+/*********************************************************/
+/* CPU SPEED REGISTER [R/W]                              */
+/*********************************************************/
+
+#define CPU_SPEED_REG                                        0xC008 /* CPU Speed Register [R/W] */
+#define P_SPEED                                              0xC008 /* Alias for BIOS code */
+
+/* CPU SPEED REGISTER FIELDS 
+**
+** The Speed field in the CPU Speed Register provides a mechanism to
+** divide the external clock signal down to operate the CPU at a lower 
+** clock speed (presumedly for lower-power operation). The value loaded 
+** into this field is a divisor and is calculated as (n+1). For instance, 
+** if 3 is loaded into the field, the resulting CPU speed will be PCLK/4.
+*/
+
+#define CPU_SPEED                                            0x000F /* CPU Speed */
+
+/*********************************************************/
+/* POWER CONTROL REGISTER [R/W]                          */
+/*********************************************************/
+
+#define POWER_CTL_REG                                        0xC00A /* Power Control Register [R/W] */
+
+/* FIELDS */
+
+#define HOST2_WAKE_EN                                        0x4000 /* Host 2 Wake Enable */
+#define DEV2_WAKE_EN                                         0x4000 /* Device 2 Wake Enable */
+#define HOST1_WAKE_EN                                        0x1000 /* Host 1 Wake Enable */
+#define DEV1_WAKE_EN                                         0x1000 /* Device 1 Wake Enable */
+#define OTG_WAKE_EN                                          0x0800 /* OTG Wake Enable  */
+#define HSS_WAKE_EN                                          0x0200 /* HSS Wake Enable  */
+#define SPI_WAKE_EN                                          0x0100 /* SPI Wake Enable  */
+#define HPI_WAKE_EN                                          0x0080 /* HPI Wake Enable  */
+#define GPIO_WAKE_EN                                         0x0010 /* GPIO Wake Enable  */
+#define SLEEP_EN                                             0x0002 /* Sleep Enable */
+#define HALT_EN                                              0x0001 /* Halt Enable */
+
+/*********************************************************/
+/* BREAKPOINT REGISTER [R/W]                             */
+/*********************************************************/
+
+#define BKPT_REG                                             0xC014 /* Breakpoint Register [R/W] */
+
+/*********************************************************/
+/* USB DIAGNOSTIC REGISTER [W]                           */
+/*********************************************************/
+
+#define USB_DIAG_REG                                         0xC03C /* USB Diagnostic Register [R/W] */
+
+/* FIELDS */
+
+#define c2B_DIAG_EN                                          0x8000 /* Port 2B Diagnostic Enable */
+#define c2A_DIAG_EN                                          0x4000 /* Port 2A Diagnostic Enable */
+#define c1B_DIAG_EN                                          0x2000 /* Port 1B Diagnostic Enable */
+#define c1A_DIAG_EN                                          0x1000 /* Port 1A Diagnostic Enable */
+#define PULLDOWN_EN                                          0x0040 /* Pull-down resistors enable */
+#define LS_PULLUP_EN                                         0x0020 /* Low-speed pull-up resistor enable */
+#define FS_PULLUP_EN                                         0x0010 /* Full-speed pull-up resistor enable */
+#define FORCE_SEL                                            0x0007 /* Control D+/- lines */
+
+/* FORCE FIELD VALUES */
+
+#define ASSERT_SE0                                           0x0004 /* Assert SE0 on selected ports */
+#define TOGGLE_JK                                            0x0002 /* Toggle JK state on selected ports */
+#define ASSERT_J                                             0x0001 /* Assert J state on selected ports */
+#define ASSERT_K                                             0x0000 /* Assert K state on selected ports */
+
+/*********************************************************/
+/* MEMORY DIAGNOSTIC REGISTER [W]                        */
+/*********************************************************/
+
+#define MEM_DIAG_REG                                         0xC03E /* Memory Diagnostic Register [W] */
+
+/* FIELDS */
+
+#define FAST_REFRESH_EN                                      0x8000 /* Fast Refresh Enable (15x acceleration) */
+#define MEM_ARB_SEL                                          0x0700 /* Memory Arbitration */
+#define MONITOR_EN                                           0x0001 /* Monitor Enable (Echoes internal address bus externally) */
+
+/* MEMORY ARBITRATION SELECT FIELD VALUES */
+#define MEM_ARB_7                                            0x0700 /* Number of dead cycles out of 8 possible */
+#define MEM_ARB_6                                            0x0600 /* Should not use any cycle >= 6 */
+#define MEM_ARB_5                                            0x0500 /*  */
+#define MEM_ARB_4                                            0x0400 /* */
+#define MEM_ARB_3                                            0x0300 /* */
+#define MEM_ARB_2                                            0x0200 /* */
+#define MEM_ARB_1                                            0x0100 /*  */
+#define MEM_ARB_0                                            0x0000 /* Power up default */
+
+/*********************************************************/
+/* EXTENDED PAGE n MAP REGISTER [R/W]                    */
+/*********************************************************/
+
+#define PG1_MAP_REG                                          0xC018 /* Page 1 Map Register [R/W] */
+#define PG2_MAP_REG                                          0xC01A /* Page 2 Map Register [R/W] */
+
+/*********************************************************/
+/* DRAM CONTROL REGISTER [R/W]                           */
+/*********************************************************/
+
+#define DRAM_CTL_REG                                         0xC038 /* DRAM Control Register [R/W] */
+
+/* FIELDS */
+
+#define DRAM_DIS                                             0x0008 /* DRAM Disable */
+#define TURBO_EN                                             0x0004 /* Turbo Mode */
+#define PAGE_MODE_EN                                         0x0002 /* Page Mode */
+#define REFRESH_EN                                           0x0001 /* Refresh  */
+
+/*********************************************************/
+/* EXTERNAL MEMORY CONTROL REGISTER [R/W]                */
+/*********************************************************/
+
+#define XMEM_CTL_REG                                         0xC03A /* External Memory Control Register [R/W] */
+#define X_MEM_CNTRL                                          0xC03A /* Alias for BIOS code */
+
+#define XRAM_BEGIN                                           0x4000 /* External SRAM begin */
+#define XROM_BEGIN                                           0xC100 /* External ROM Begin */
+#define IROM_BEGIN                                           0xE000 /* Internal ROM Begin */
+
+
+/* FIELDS */
+#define XRAM_MERGE_EN                                        0x2000 /* Overlay XRAMSEL w/ XMEMSEL */
+#define XROM_MERGE_EN                                        0x1000 /* Overlay XROMSEL w/ XMEMSEL */
+#define XMEM_WIDTH_SEL                                       0x0800 /* External MEM Width Select */
+#define XMEM_WAIT_SEL                                        0x0700 /* Number of Extended Memory wait states (0-7) */
+#define XROM_WIDTH_SEL                                       0x0080 /* External ROM Width Select */
+#define XROM_WAIT_SEL                                        0x0070 /* Number of External ROM wait states (0-7) */
+#define XRAM_WIDTH_SEL                                       0x0008 /* External RAM Width Select */
+#define XRAM_WAIT_SEL                                        0x0007 /* Number of External RAM wait states (0-7) */
+
+/* XMEM_WIDTH FIELD VALUES */
+
+#define XMEM_8                                               0x0800 /*  */
+#define XMEM_16                                              0x0000 /*  */
+
+/* XRAM_WIDTH FIELD VALUES */
+
+#define XROM_8                                               0x0080 /*  */
+#define XROM_16                                              0x0000 /*  */
+
+/* XRAM_WIDTH FIELD VALUES */
+
+#define XRAM_8                                               0x0008 /*  */
+#define XRAM_16                                              0x0000 /*  */
+
+
+/*********************************************************/
+/* WATCHDOG TIMER REGISTER [R/W]                         */
+/*********************************************************/
+
+#define WDT_REG                                              0xC00C /* Watchdog Timer Register [R/W] */
+
+/* FIELDS */
+
+#define WDT_TIMEOUT_FLG                                      0x0020 /* WDT timeout flag */
+#define WDT_PERIOD_SEL                                       0x0018 /* WDT period select (options below) */
+#define WDT_LOCK_EN                                          0x0004 /* WDT enable */
+#define WDT_EN                                               0x0002 /* WDT lock enable */
+#define WDT_RST_STB                                          0x0001 /* WDT reset Strobe */
+
+/* WATCHDOG PERIOD FIELD VALUES */
+
+#define WDT_64MS                                             0x0003 /* 64.38 ms */
+#define WDT_21MS                                             0x0002 /* 21.68 ms */
+#define WDT_5MS                                              0x0001 /* 5.67 ms */
+#define WDT_1MS                                              0x0000 /* 1.67 ms */
+
+/*********************************************************/
+/* TIMER n REGISTER [R/W]                                */
+/*********************************************************/
+
+#define TMR0_REG                                             0xC010 /* Timer 0 Register [R/W] */
+#define TIMER_0                                              0xC010 /* Alias for BIOS code */
+#define TMR1_REG                                             0xC012 /* Timer 1 Register [R/W] */
+#define TIMER_1                                              0xC012 /* Alias for BIOS code */
+
+/*********************************************************/
+/*********************************************************/
+/* USB REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* USB n CONTROL REGISTERS [R/W]                         */
+/*********************************************************/
+
+#define USB1_CTL_REG                                         0xC08A /* USB 1 Control Register [R/W] */
+#define SIE1_USB_CONTROL                                     0xC08A
+
+#define USB2_CTL_REG                                         0xC0AA /* USB 2 Control Register [R/W] */
+#define SIE2_USB_CONTROL                                     0xC0AA
+
+/* FIELDS */
+#define B_DP_STAT                                            0x8000 /* Port B D+ status */
+#define B_DM_STAT                                            0x4000 /* Port B D- status */
+#define A_DP_STAT                                            0x2000 /* Port A D+ status */
+#define A_DM_STAT                                            0x1000 /* Port A D- status */
+#define B_SPEED_SEL                                          0x0800 /* Port B Speed select (See below) */
+#define A_SPEED_SEL                                          0x0400 /* Port A Speed select (See below) */
+#define MODE_SEL                                             0x0200 /* Mode (See below) */
+#define B_RES_EN                                             0x0100 /* Port B Resistors enable */
+#define A_RES_EN                                             0x0080 /* Port A Resistors enable */
+#define B_FORCE_SEL                                          0x0060 /* Port B Force D+/- state (See below) */
+#define A_FORCE_SEL                                          0x0018 /* Port A Force D+/- state (See below) */
+#define SUSP_EN                                              0x0004 /* Suspend enable */
+#define B_SOF_EOP_EN                                         0x0002 /* Port B SOF/EOP enable */
+#define A_SOF_EOP_EN                                         0x0001 /* Port A SOF/EOP enable */
+
+
+/* USB Control Register1 (0xC08A/0xC0AA) bit mask         */
+#define bmHOST_CTL1_SOF0                                     0x0001
+#define bmHOST_CTL1_SOF1                                     0x0002
+#define bmHOST_CTL1_SUSPEND                                  0x0004
+#define bmHOST_CTL1_JKState0                                 0x0008
+#define bmHOST_CTL1_USBReset0                                0x0010
+#define bmHOST_CTL1_JKState1                                 0x0020
+#define bmHOST_CTL1_USBReset1                                0x0040
+#define bmHOST_CTL1_UD0                                      0x0080
+#define bmHOST_CTL1_UD1                                      0x0100
+#define bmHOST_CTL1_HOST                                     0x0200
+#define bmHOST_CTL1_LOA                                      0x0400
+#define bmHOST_CTL1_LOB                                      0x0800
+#define bmHOST_CTL1_D0m                                      0x1000
+#define bmHOST_CTL1_D0p                                      0x2000
+#define bmHOST_CTL1_D1m                                      0x4000
+#define bmHOST_CTL1_D1p                                      0x8000
+
+
+/* MODE FIELD VALUES */
+
+#define HOST_MODE                                            0x0200 /* Host mode */
+#define DEVICE_MODE                                          0x0000 /* Device mode */
+
+/* p_SPEED SELECT FIELD VALUES */
+
+#define LOW_SPEED                                            0xFFFF /* Low speed */
+#define FULL_SPEED                                           0x0000 /* Full speed */
+
+#define B_SPEED_LOW                                          0x0800
+#define B_SPEED_FULL                                         0x0000
+#define A_SPEED_LOW                                          0x0400
+#define A_SPEED_FULL                                         0x0000
+
+/* FORCEn FIELD VALUES */
+
+#define FORCE_K                                              0x0078 /* Force K state on associated port */
+#define FORCE_SE0                                            0x0050 /* Force SE0 state on associated port */
+#define FORCE_J                                              0x0028 /* Force J state on associated port */
+#define FORCE_NORMAL                                         0x0000 /* Don't force associated port */
+
+#define A_FORCE_K                                            0x0018 /* Force K state on A port */
+#define A_FORCE_SE0                                          0x0010 /* Force SE0 state on associated port */
+#define A_FORCE_J                                            0x0008 /* Force J state on associated port */
+#define A_FORCE_NORMAL                                       0x0000 /* Don't force associated port */
+
+#define B_FORCE_K                                            0x0060 /* Force K state on associated port */
+#define B_FORCE_SE0                                          0x0040 /* Force SE0 state on associated port */
+#define B_FORCE_J                                            0x0020 /* Force J state on associated port */
+#define B_FORCE_NORMAL                                       0x0000 /* Don't force associated port */
+
+
+/*********************************************************/
+/*********************************************************/
+/* HOST REGISTERS                                        */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* HOST n INTERRUPT ENABLE REGISTER [R/W]                */
+/*********************************************************/
+
+#define HOST1_IRQ_EN_REG                                     0xC08C /* Host 1 Interrupt Enable Register [R/W] */
+#define SIE1_INT_EN_REG                                      0xC08C
+
+#define HOST2_IRQ_EN_REG                                     0xC0AC /* Host 2 Interrupt Enable Register [R/W] */
+#define SIE2_INT_EN_REG                                      0xC0AC
+
+/* FIELDS */
+
+#define VBUS_IRQ_EN                                          0x8000 /* VBUS Interrupt Enable (Available on HOST1 only)  */
+#define ID_IRQ_EN                                            0x4000 /* ID Interrupt Enable (Available on HOST1 only) */
+#define SOF_EOP_IRQ_EN                                       0x0200 /* SOF/EOP Interrupt Enable  */
+#define B_WAKE_IRQ_EN                                        0x0080 /* Port B Wake Interrupt Enable  */
+#define A_WAKE_IRQ_EN                                        0x0040 /* Port A Wake Interrupt Enable  */
+#define B_CHG_IRQ_EN                                         0x0020 /* Port B Connect Change Interrupt Enable  */
+#define A_CHG_IRQ_EN                                         0x0010 /* Port A Connect Change Interrupt Enable  */
+#define DONE_IRQ_EN                                          0x0001 /* Done Interrupt Enable  */
+
+
+/* Host Interrupt enable (0xC08C/0xC0AC)  bit mask      */
+#define bmHOST_INTEN_XFERDONE                                0x0001
+#define bmHOST_INTEN_INSRMV0                                 0x0010
+#define bmHOST_INTEN_INSRMV1                                 0x0020
+#define bmHOST_INTEN_WAKEUP0                                 0x0040
+#define bmHOST_INTEN_WAKEUP1                                 0x0080
+#define bmHOST_INTEN_SOFINTR                                 0x0200
+#define bmHOST_INTEN_IEXP                                    0x0400
+#define bmHOST_INTEN_OTG_ID                                  0x4000
+#define bmHOST_INTEN_OTG_44V                                 0x8000
+
+
+
+/*********************************************************/
+/* HOST n STATUS REGISTER [R/W]                          */
+/*********************************************************/
+/* In order to clear status for a particular IRQ bit,    */
+/* write a '1' to that bit location.                     */
+/*********************************************************/
+
+#define HOST1_STAT_REG                                       0xC090 /* Host 1 Status Register [R/W] */
+#define SIE1_INT_STATUS_REG                                  0xC090
+
+#define HOST2_STAT_REG                                       0xC0B0 /* Host 2 Status Register [R/W] */
+#define SIE2_INT_STATUS_REG                                  0xC0B0
+
+/* FIELDS */
+
+#define VBUS_IRQ_FLG                                         0x8000 /* VBUS Interrupt Request (HOST1 only) */
+#define ID_IRQ_FLG                                           0x4000 /* ID Interrupt Request (HOST1 only) */
+
+#define SOF_EOP_IRQ_FLG                                      0x0200 /* SOF/EOP Interrupt Request  */
+#define B_WAKE_IRQ_FLG                                       0x0080 /* Port B Wake Interrupt Request  */
+#define A_WAKE_IRQ_FLG                                       0x0040 /* Port A Wake Interrupt Request  */
+#define B_CHG_IRQ_FLG                                        0x0020 /* Port B Connect Change Interrupt Request  */
+#define A_CHG_IRQ_FLG                                        0x0010 /* Port A Connect Change Interrupt Request  */
+#define B_SE0_STAT                                           0x0008 /* Port B SE0 status */
+#define A_SE0_STAT                                           0x0004 /* Port A SE0 status */
+#define DONE_IRQ_FLG                                         0x0001 /* Done Interrupt Request  */
+
+/* Host interrupt status register (0xC090/0xC0B0) bit mask */
+#define bmHOST_INT_XFERDONE                                  0x0001
+#define bmHOST_INT_USBRST0                                   0x0004
+#define bmHOST_INT_USBRST1                                   0x0008
+#define bmHOST_INT_INSRMV0                                   0x0010
+#define bmHOST_INT_INSRMV1                                   0x0020
+#define bmHOST_INT_WAKEUP0                                   0x0040
+#define bmHOST_INT_WAKEUP1                                   0x0080
+#define bmHOST_INT_SOFINTR                                   0x0200
+#define bmHOST_INT_OTG_ID                                    0x4000
+#define bmHOST_INT_OTG_44V                                   0x8000
+
+/*********************************************************/
+/* HOST n CONTROL REGISTERS [R/W]                        */
+/*********************************************************/
+
+#define HOST1_CTL_REG                                        0xC080 /* Host 1 Control Register [R/W] */
+#define SIE1_USB_CTRL_REG0                                   0xC080
+#define SIE1_REG_BASE                                        0xC080 /* Alias for susb.asm */
+
+
+#define HOST2_CTL_REG                                        0xC0A0 /* Host 2 Control Register [R/W] */
+#define SIE2_USB_CTRL_REG0                                   0xC0A0
+#define SIE2_REG_BASE                                        0xC0A0 /* Alias for susb.asm */
+
+
+/* FIELDS */
+#define PREAMBLE_EN                                          0x0080 /* Preamble enable */
+#define SEQ_SEL                                              0x0040 /* Data Toggle Sequence Bit Select (Write next/read last) */
+#define SYNC_EN                                              0x0020 /* (1:Send next packet at SOF/EOP, 0: Send next packet immediately) */
+#define ISO_EN                                               0x0010 /* Isochronous enable  */
+#define TIMEOUT_SEL                                          0x0008 /* Timeout select (1:22 bit times, 0:18 bit times) */
+#define DIR_SEL                                              0x0004 /* Transfer direction (1:OUT, 0:IN) */
+#define EN                                                   0x0002 /* Enable operation */
+#define ARM_EN                                               0x0001 /* Arm operation */
+#define BSY_FLG                                              0x0001 /* Busy flag */
+
+/* Use in the 0xc080 and 0xc0a0 */
+#define bmHOST_HCTL_ARM                                      0x0001
+#define bmHOST_HCTL_ISOCH                                    0x0010
+#define bmHOST_HCTL_AFTERSOF                                 0x0020
+#define bmHOST_HCTL_DT                                       0x0040
+#define bmHOST_HCTL_PREAMBLE                                 0x0080
+
+
+/*********************************************************/
+/* HOST n ADDRESS REGISTERS [R/W]                        */
+/*********************************************************/
+
+#define HOST1_ADDR_REG                                       0xC082 /* Host 1 Address Register [R/W] */
+#define SIE1_USB_BASE_ADDR                                   0xC082
+
+#define HOST2_ADDR_REG                                       0xC0A2 /* Host 2 Address Register [R/W] */
+#define SIE2_USB_BASE_ADDR                                   0xC0A2
+
+/*********************************************************/
+/* HOST n COUNT REGISTERS [R/W]                          */
+/*********************************************************/
+
+#define HOST1_CNT_REG                                        0xC084 /* Host 1 Count Register [R/W] */
+#define SIE1_USB_LENGTH                                      0xC084
+
+
+#define HOST2_CNT_REG                                        0xC0A4 /* Host 2 Count Register [R/W] */
+#define SIE2_USB_LENGTH                                      0xC0A4
+
+/* FIELDS */
+#define PORT_SEL                                             0x4000 /* Port Select (1:PortB, 0:PortA) */
+#define HOST_CNT                                             0x03FF /* Host Count */
+
+/* Base Length register (0xC084/0xC0A4)bit mask          */
+#define bmHOST_PORT_SEL                                      0x4000
+
+/*********************************************************/
+/* HOST n PID REGISTERS [W]                              */
+/*********************************************************/
+
+#define HOST1_PID_REG                                        0xC086 /* Host 1 PID Register [W] */
+#define SIE1_USB_HOST_PID                                    0xC086
+#define SIE1_USB_ERR_STATUS                                  0xC086 /* When read */
+
+
+#define HOST2_PID_REG                                        0xC0A6 /* Host 2 PID Register [W] */
+#define SIE2_USB_HOST_PID                                    0xC0A6
+#define SIE2_USB_ERR_STATUS                                  0xC0A6 /* When read */
+
+/* Packet status register (0xC086/0xC0A6)bit mask       */
+#define bmHOST_STATMASK_ACK                                  0x0001
+#define bmHOST_STATMASK_ERROR                                0x0002
+#define bmHOST_STATMASK_TMOUT                                0x0004
+#define bmHOST_STATMASK_SEQ                                  0x0008
+#define bmHOST_STATMASK_SETUP                                0x0010
+#define bmHOST_STATMASK_OVF                                  0x0020
+#define bmHOST_STATMASK_NAK                                  0x0040
+#define bmHOST_STATMASK_STALL                                0x0080
+
+/* FIELDS */
+#define PID_SEL                                              0x00F0 /* Packet ID (see below) */
+#define EP_SEL                                               0x000F /* Endpoint number */
+
+/* PID FIELD VALUES */
+#define SETUP_PID                                            0x000D /* SETUP */
+#define IN_PID                                               0x0009 /* IN */
+#define OUT_PID                                              0x0001 /* OUT */
+#define SOF_PID                                              0x0005 /* SOF */
+#define PRE_PID                                              0x000C /* PRE */
+#define NAK_PID                                              0x000A /* NAK */
+#define STALL_PID                                            0x000E /* STALL */
+#define DATA0_PID                                            0x0003 /* DATA0 */
+#define DATA1_PID                                            0x000B /* DATA1 */
+
+/*********************************************************/
+/* LYBERTY HOST Define value                             */
+/*********************************************************/
+#define cPortA                                               0x0000
+#define cPortB                                               0x0001
+#define cPortC                                               0x0002
+#define cPortD                                               0x0003
+
+#define cPID_SETUP                                           0x000D
+#define cPID_IN                                              0x0009
+#define cPID_OUT                                             0x0001
+#define cPID_SOF                                             0x0005
+#define cPID_PRE                                             0x000C
+#define cPID_NAK                                             0x000A
+#define cPID_STALL                                           0x000E
+#define cPID_DATA0                                           0x0003
+#define cPID_DATA1                                           0x000B
+#define cPID_ACK                                             0x0002
+
+
+
+
+
+/*********************************************************/
+/* HOST n ENDPOINT STATUS REGISTERS [R]                  */
+/*********************************************************/
+
+#define HOST1_EP_STAT_REG                                    0xC086 /* Host 1 Endpoint Status Register [R] */
+#define HOST2_EP_STAT_REG                                    0xC0A6 /* Host 2 Endpoint Status Register [R] */
+
+/* FIELDS */
+
+#define STALL_FLG                                            0x0080 /* Device returned STALL */
+#define NAK_FLG                                              0x0040 /* Device returned NAK */
+#define OVERFLOW_FLG                                         0x0020 /* Receive overflow */
+#define SEQ_STAT                                             0x0008 /* Data Toggle value */
+#define TIMEOUT_FLG                                          0x0004 /* Timeout occurred */
+#define ERROR_FLG                                            0x0002 /* Error occurred */
+#define ACK_FLG                                              0x0001 /* Transfer ACK'd        */
+
+/*********************************************************/
+/* HOST n DEVICE ADDRESS REGISTERS [W]                   */
+/*********************************************************/
+
+#define HOST1_DEV_ADDR_REG                                   0xC088 /* Host 1 Device Address Register [W] */
+#define SIE1_USB_HOST_DEV                                    0xC088
+#define SIE1_USB_LEFT_BYTE                                   0xC088 /* When read */
+
+
+#define HOST2_DEV_ADDR_REG                                   0xC0A8 /* Host 2 Device Address Register [W] */
+#define SIE2_USB_HOST_DEV                                    0xC0A8
+#define SIE2_USB_LEFT_BYTE                                   0xC0A8 /* When read */
+
+
+/* FIELDS */
+
+#define DEV_ADDR                                             0x007F /* Device Address */
+
+/*********************************************************/
+/* HOST n COUNT RESULT REGISTERS [R]                     */
+/*********************************************************/
+
+#define HOST1_CTR_REG                                        0xC088 /* Host 1 Counter Register [R] */
+#define HOST2_CTR_REG                                        0xC0A8 /* Host 2 Counter Register [R] */
+
+/* FIELDS*/
+
+#define HOST_RESULT                                          0x00FF /* Host Count Result */
+
+/*********************************************************/
+/* HOST n SOF/EOP COUNT REGISTER [R/W]                   */
+/*********************************************************/
+
+#define HOST1_SOF_EOP_CNT_REG                                0xC092 /* Host 1 SOF/EOP Count Register [R/W] */
+#define SIE1_USB_SOF_COUNT                                   0xC092
+
+#define HOST2_SOF_EOP_CNT_REG                                0xC0B2 /* Host 2 SOF/EOP Count Register [R/W] */
+#define SIE2_USB_SOF_COUNT                                   0xC0B2
+
+/* FIELDS */
+
+#define SOF_EOP_CNT                                          0x3FFF /* SOF/EOP Count */
+
+/*********************************************************/
+/* HOST n SOF/EOP COUNTER REGISTER [R]                       */
+/*********************************************************/
+
+#define HOST1_SOF_EOP_CTR_REG                                0xC094 /* Host 1 SOF/EOP Counter Register [R] */
+#define SIE1_USB_SOF_TIMER                                   0xC094
+
+
+#define HOST2_SOF_EOP_CTR_REG                                0xC0B4 /* Host 2 SOF/EOP Counter Register [R] */
+#define SIE2_USB_SOF_TIMER                                   0xC0B4
+
+/* FIELDS */
+
+#define SOF_EOP_CTR                                          0x3FFF /* SOF/EOP Counter */
+
+/*********************************************************/
+/* HOST n FRAME REGISTER [R]                             */
+/*********************************************************/
+
+#define HOST1_FRAME_REG                                      0xC096 /* Host 1 Frame Register [R] */
+#define SIE1_USB_FRAME_NO                                    0xC096
+
+#define HOST2_FRAME_REG                                      0xC0B6 /* Host 2 Frame Register [R] */
+#define SIE2_USB_FRAME_NO                                    0xC0B6
+
+/* FIELDS */
+
+#define HOST_FRAME_NUM                                       0x07FF /* Frame */
+
+
+/*********************************************************/
+/*********************************************************/
+/* DEVICE REGISTERS                                      */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* DEVICE n PORT SELECT REGISTERS [R/W]                  */
+/*********************************************************/
+
+#define DEV1_SEL_REG                                         0xC084 /* Device 1 Port Select Register [R/W] */
+#define DEV2_SEL_REG                                         0xC0A4 /* Device 2 Port Select Register [R/W] */
+
+/* FIELDS */
+
+/*********************************************************/
+/* DEVICE n INTERRUPT ENABLE REGISTER [R/W]              */
+/*********************************************************/
+
+#define DEV1_IRQ_EN_REG                                      0xC08C /* Device 1 Interrupt Enable Register [R/W] */
+#define DEV2_IRQ_EN_REG                                      0xC0AC /* Device 2 Interrupt Enable Register [R/W] */
+
+/* FIELDS */
+
+/* Defined in Host Interrupt Enable Register */
+/*#define VBUS_IRQ_EN         0x8000  // VBUS Interrupt Enable (DEV1 only)  */
+/*#define ID_IRQ_EN           0x4000  // ID Interrupt Enable (DEV1 only) */
+
+#define WAKE_IRQ_EN                                          0x0400 /* Wake Interrupt Enable  */
+#define RST_IRQ_EN                                           0x0100 /* Reset Interrupt Enable  */
+#define EP7_IRQ_EN                                           0x0080 /* EP7 Interrupt Enable  */
+#define EP6_IRQ_EN                                           0x0040 /* EP6 Interrupt Enable  */
+#define EP5_IRQ_EN                                           0x0020 /* EP5 Interrupt Enable  */
+#define EP4_IRQ_EN                                           0x0010 /* EP4 Interrupt Enable  */
+#define EP3_IRQ_EN                                           0x0008 /* EP3 Interrupt Enable  */
+#define EP2_IRQ_EN                                           0x0004 /* EP2 Interrupt Enable  */
+#define EP1_IRQ_EN                                           0x0002 /* EP1 Interrupt Enable  */
+#define EP0_IRQ_EN                                           0x0001 /* EP0 Interrupt Enable  */
+
+/*********************************************************/
+/* DEVICE n STATUS REGISTER [R/W]                        */
+/*********************************************************/
+/* In order to clear status for a particular IRQ bit,    */
+/* write a '1' to that bit location.                     */
+/*********************************************************/
+
+#define DEV1_STAT_REG                                        0xC090 /* Device 1 Status Register [R/W] */
+#define DEV2_STAT_REG                                        0xC0B0 /* Device 2 Status Register [R/W] */
+
+/* FIELDS */
+
+/* Defined in Host Status Register */
+/*#define VBUS_IRQ_FLG        0x8000  // VBUS Interrupt Request (DEV1 only) */
+/*#define ID_IRQ_FLG          0x4000  // ID Interrupt Request (DEV1 only) */
+/*#define SOF_EOP_IRQ_FLG     0x0200  // SOF/EOP Interrupt Request  */
+
+#define WAKE_IRQ_FLG                                         0x0400 /* Wakeup Interrupt Request */
+#define RST_IRQ_FLG                                          0x0100 /* Reset Interrupt Request */
+#define EP7_IRQ_FLG                                          0x0080 /* EP7 Interrupt Request */
+#define EP6_IRQ_FLG                                          0x0040 /* EP6 Interrupt Request */
+#define EP5_IRQ_FLG                                          0x0020 /* EP5 Interrupt Request */
+#define EP4_IRQ_FLG                                          0x0010 /* EP4 Interrupt Request */
+#define EP3_IRQ_FLG                                          0x0008 /* EP3 Interrupt Request */
+#define EP2_IRQ_FLG                                          0x0004 /* EP2 Interrupt Request */
+#define EP1_IRQ_FLG                                          0x0002 /* EP1 Interrupt Request */
+#define EP0_IRQ_FLG                                          0x0001 /* EP0 Interrupt Request */
+
+/*********************************************************/
+/* DEVICE n ADDRESS REGISTERS [R/W]                      */
+/*********************************************************/
+
+#define DEV1_ADDR_REG                                        0xC08E /* Device 1 Address Register [R/W] */
+#define DEV2_ADDR_REG                                        0xC0AE /* Device 2 Address Register [R/W] */
+
+/* FIELDS */
+
+#define DEV_ADDR_SEL                                         0x007F /* Device Address */
+
+/*********************************************************/
+/* DEVICE n FRAME NUMBER REGISTER [R]                    */
+/*********************************************************/
+
+#define DEV1_FRAME_REG                                       0xC092 /* Device 1 Frame Register [R] */
+#define DEV2_FRAME_REG                                       0xC0B2 /* Device 2 Frame Register [R] */
+
+/* FIELDS */
+
+#define DEV_FRAME_STAT                                       0x07FF /* Device Frame */
+
+/*********************************************************/
+/* DEVICE n ENDPOINT n CONTROL REGISTERS [R/W]           */
+/*********************************************************/
+
+#define DEV1_EP0_CTL_REG                                     0x0200 /* Device 1 Endpoint 0 Control Register [R/W] */
+#define DEV1_EP1_CTL_REG                                     0x0210 /* Device 1 Endpoint 1 Control Register [R/W]       */
+#define DEV1_EP2_CTL_REG                                     0x0220 /* Device 1 Endpoint 2 Control Register [R/W] */
+#define DEV1_EP3_CTL_REG                                     0x0230 /* Device 1 Endpoint 3 Control Register [R/W] */
+#define DEV1_EP4_CTL_REG                                     0x0240 /* Device 1 Endpoint 4 Control Register [R/W] */
+#define DEV1_EP5_CTL_REG                                     0x0250 /* Device 1 Endpoint 5 Control Register [R/W] */
+#define DEV1_EP6_CTL_REG                                     0x0260 /* Device 1 Endpoint 6 Control Register [R/W] */
+#define DEV1_EP7_CTL_REG                                     0x0270 /* Device 1 Endpoint 7 Control Register [R/W] */
+
+#define DEV2_EP0_CTL_REG                                     0x0280 /* Device 2 Endpoint 0 Control Register [R/W] */
+#define DEV2_EP1_CTL_REG                                     0x0290 /* Device 2 Endpoint 1 Control Register [R/W]       */
+#define DEV2_EP2_CTL_REG                                     0x02A0 /* Device 2 Endpoint 2 Control Register [R/W] */
+#define DEV2_EP3_CTL_REG                                     0x02B0 /* Device 2 Endpoint 3 Control Register [R/W] */
+#define DEV2_EP4_CTL_REG                                     0x02C0 /* Device 2 Endpoint 4 Control Register [R/W] */
+#define DEV2_EP5_CTL_REG                                     0x02D0 /* Device 2 Endpoint 5 Control Register [R/W] */
+#define DEV2_EP6_CTL_REG                                     0x02E0 /* Device 2 Endpoint 6 Control Register [R/W] */
+#define DEV2_EP7_CTL_REG                                     0x02F0 /* Device 2 Endpoint 7 Control Register [R/W] */
+
+#define SIE1_DEV_REQ                                         0x0300 /* SIE1 Default Setup packet Address */
+#define SIE2_DEV_REQ                                         0x0308 /* SIE2 Default Setup packet Address */
+
+
+/* FIELDS */
+
+/* Defined in Host Control Register */
+#define INOUT_IGN_EN                                         0x0080 /* Ignores IN and OUT requests on EP0     */
+/*#define SEQ_SEL             0x0040  // Endpoint Data Toggle Sequence Bit */
+#define STALL_EN                                             0x0020 /* Endpoint Stall */
+/*#define ISO_EN              0x0010  // Enpoint Isochronous enable */
+#define NAK_INT_EN                                           0x0080 /* NAK Response Interrupt enable  */
+/*#define DIR_SEL             0x0004  // Endpoint Direction (1:IN, 0:OUT) */
+/*#define EN                  0x0002  // Endpoint enable */
+/*#define ARM_EN              0x0001  // Endpoint arm */
+/*#define BSY_FLG             0x0001  // Start host operation (ARM_BUSY?) */
+
+/*********************************************************/
+/* DEVICE n ENDPOINT n ADDRESS REGISTERS [R/W]           */
+/*********************************************************/
+
+#define DEV1_EP0_ADDR_REG                                    0x0202 /* Device 1 Endpoint 0 Address Register [R/W] */
+#define DEV1_EP1_ADDR_REG                                    0x0212 /* Device 1 Endpoint 1 Address Register [R/W]      */
+#define DEV1_EP2_ADDR_REG                                    0x0222 /* Device 1 Endpoint 2 Address Register [R/W] */
+#define DEV1_EP3_ADDR_REG                                    0x0232 /* Device 1 Endpoint 3 Address Register [R/W] */
+#define DEV1_EP4_ADDR_REG                                    0x0242 /* Device 1 Endpoint 4 Address Register [R/W] */
+#define DEV1_EP5_ADDR_REG                                    0x0252 /* Device 1 Endpoint 5 Address Register [R/W] */
+#define DEV1_EP6_ADDR_REG                                    0x0262 /* Device 1 Endpoint 6 Address Register [R/W] */
+#define DEV1_EP7_ADDR_REG                                    0x0272 /* Device 1 Endpoint 7 Address Register [R/W] */
+
+#define DEV2_EP0_ADDR_REG                                    0x0282 /* Device 2 Endpoint 0 Address Register [R/W] */
+#define DEV2_EP1_ADDR_REG                                    0x0292 /* Device 2 Endpoint 1 Address Register [R/W] */
+#define DEV2_EP2_ADDR_REG                                    0x02A2 /* Device 2 Endpoint 2 Address Register [R/W] */
+#define DEV2_EP3_ADDR_REG                                    0x02B2 /* Device 2 Endpoint 3 Address Register [R/W] */
+#define DEV2_EP4_ADDR_REG                                    0x02C2 /* Device 2 Endpoint 4 Address Register [R/W] */
+#define DEV2_EP5_ADDR_REG                                    0x02D2 /* Device 2 Endpoint 5 Address Register [R/W] */
+#define DEV2_EP6_ADDR_REG                                    0x02E2 /* Device 2 Endpoint 6 Address Register [R/W] */
+#define DEV2_EP7_ADDR_REG                                    0x02F2 /* Device 2 Endpoint 7 Address Register [R/W] */
+
+/*********************************************************/
+/* DEVICE n ENDPOINT n COUNT REGISTERS [R/W]             */
+/*********************************************************/
+
+#define DEV1_EP0_CNT_REG                                     0x0204 /* Device 1 Endpoint 0 Count Register [R/W] */
+#define DEV1_EP1_CNT_REG                                     0x0214 /* Device 1 Endpoint 1 Count Register [R/W]       */
+#define DEV1_EP2_CNT_REG                                     0x0224 /* Device 1 Endpoint 2 Count Register [R/W] */
+#define DEV1_EP3_CNT_REG                                     0x0234 /* Device 1 Endpoint 3 Count Register [R/W] */
+#define DEV1_EP4_CNT_REG                                     0x0244 /* Device 1 Endpoint 4 Count Register [R/W] */
+#define DEV1_EP5_CNT_REG                                     0x0254 /* Device 1 Endpoint 5 Count Register [R/W] */
+#define DEV1_EP6_CNT_REG                                     0x0264 /* Device 1 Endpoint 6 Count Register [R/W] */
+#define DEV1_EP7_CNT_REG                                     0x0274 /* Device 1 Endpoint 7 Count Register [R/W] */
+
+#define DEV2_EP0_CNT_REG                                     0x0284 /* Device 2 Endpoint 0 Count Register [R/W] */
+#define DEV2_EP1_CNT_REG                                     0x0294 /* Device 2 Endpoint 1 Count Register [R/W]      */
+#define DEV2_EP2_CNT_REG                                     0x02A4 /* Device 2 Endpoint 2 Count Register [R/W] */
+#define DEV2_EP3_CNT_REG                                     0x02B4 /* Device 2 Endpoint 3 Count Register [R/W] */
+#define DEV2_EP4_CNT_REG                                     0x02C4 /* Device 2 Endpoint 4 Count Register [R/W] */
+#define DEV2_EP5_CNT_REG                                     0x02D4 /* Device 2 Endpoint 5 Count Register [R/W] */
+#define DEV2_EP6_CNT_REG                                     0x02E4 /* Device 2 Endpoint 6 Count Register [R/W] */
+#define DEV2_EP7_CNT_REG                                     0x02F4 /* Device 2 Endpoint 7 Count Register [R/W] */
+
+/* FIELDS */
+
+#define EP_CNT                                               0x03FF /* Endpoint Count */
+
+/*********************************************************/
+/* DEVICE n ENDPOINT n STATUS REGISTERS [R/W]            */
+/*********************************************************/
+
+#define DEV1_EP0_STAT_REG                                    0x0206 /* Device 1 Endpoint 0 Status Register [R/W] */
+#define DEV1_EP1_STAT_REG                                    0x0216 /* Device 1 Endpoint 1 Status Register [R/W]       */
+#define DEV1_EP2_STAT_REG                                    0x0226 /* Device 1 Endpoint 2 Status Register [R/W] */
+#define DEV1_EP3_STAT_REG                                    0x0236 /* Device 1 Endpoint 3 Status Register [R/W] */
+#define DEV1_EP4_STAT_REG                                    0x0246 /* Device 1 Endpoint 4 Status Register [R/W] */
+#define DEV1_EP5_STAT_REG                                    0x0256 /* Device 1 Endpoint 5 Status Register [R/W] */
+#define DEV1_EP6_STAT_REG                                    0x0266 /* Device 1 Endpoint 6 Status Register [R/W] */
+#define DEV1_EP7_STAT_REG                                    0x0276 /* Device 1 Endpoint 7 Status Register [R/W] */
+
+#define DEV2_EP0_STAT_REG                                    0x0286 /* Device 2 Endpoint 0 Status Register [R/W] */
+#define DEV2_EP1_STAT_REG                                    0x0296 /* Device 2 Endpoint 1 Status Register [R/W]      */
+#define DEV2_EP2_STAT_REG                                    0x02A6 /* Device 2 Endpoint 2 Status Register [R/W] */
+#define DEV2_EP3_STAT_REG                                    0x02B6 /* Device 2 Endpoint 3 Status Register [R/W] */
+#define DEV2_EP4_STAT_REG                                    0x02C6 /* Device 2 Endpoint 4 Status Register [R/W] */
+#define DEV2_EP5_STAT_REG                                    0x02D6 /* Device 2 Endpoint 5 Status Register [R/W] */
+#define DEV2_EP6_STAT_REG                                    0x02E6 /* Device 2 Endpoint 6 Status Register [R/W] */
+#define DEV2_EP7_STAT_REG                                    0x02F6 /* Device 2 Endpoint 7 Status Register [R/W] */
+
+/* FIELDS */
+
+#define OUT_EXCEPTION_FLG                                    0x0200 /* OUT received when armed for IN */
+#define IN_EXCEPTION_FLG                                     0x0100 /* IN received when armed for OUT */
+/*#define STALL_FLG            0x0080  // Stall sent */
+/*#define NAK_FLG              0x0040  // NAK sent */
+/*#define OVERFLOW_FLG         0x0020  // Count exceeded during receive */
+#define SETUP_FLG                                            0x0010 /* SETUP packet received */
+/*#define SEQ_STAT             0x0008  // Last Data Toggle Sequence bit sent or received */
+/*#define TIMEOUT_FLG          0x0004  // Last transmission timed out */
+/*#define ERROR_FLG            0x0002  // CRC Error detected in last reception */
+/*#define ACK_FLG              0x0001  // Last transaction ACK'D (sent or received) */
+
+/*********************************************************/
+/* DEVICE n ENDPOINT n COUNT RESULT REGISTERS [R]      */
+/*********************************************************/
+
+#define DEV1_EP0_CTR_REG                                     0x0208 /* Device 1 Endpoint 0 Count Result Register [R] */
+#define DEV1_EP1_CTR_REG                                     0x0218 /* Device 1 Endpoint 1 Count Result Register [R]       */
+#define DEV1_EP2_CTR_REG                                     0x0228 /* Device 1 Endpoint 2 Count Result Register [R] */
+#define DEV1_EP3_CTR_REG                                     0x0238 /* Device 1 Endpoint 3 Count Result Register [R] */
+#define DEV1_EP4_CTR_REG                                     0x0248 /* Device 1 Endpoint 4 Count Result Register [R] */
+#define DEV1_EP5_CTR_REG                                     0x0258 /* Device 1 Endpoint 5 Count Result Register [R] */
+#define DEV1_EP6_CTR_REG                                     0x0268 /* Device 1 Endpoint 6 Count Result Register [R] */
+#define DEV1_EP7_CTR_REG                                     0x0278 /* Device 1 Endpoint 7 Count Result Register [R] */
+
+#define DEV2_EP0_CTR_REG                                     0x0288 /* Device 2 Endpoint 0 Count Result Register [R] */
+#define DEV2_EP1_CTR_REG                                     0x0298 /* Device 2 Endpoint 1 Count Result Register [R]       */
+#define DEV2_EP2_CTR_REG                                     0x02A8 /* Device 2 Endpoint 2 Count Result Register [R] */
+#define DEV2_EP3_CTR_REG                                     0x02B8 /* Device 2 Endpoint 3 Count Result Register [R] */
+#define DEV2_EP4_CTR_REG                                     0x02C8 /* Device 2 Endpoint 4 Count Result Register [R] */
+#define DEV2_EP5_CTR_REG                                     0x02D8 /* Device 2 Endpoint 5 Count Result Register [R] */
+#define DEV2_EP6_CTR_REG                                     0x02E8 /* Device 2 Endpoint 6 Count Result Register [R] */
+#define DEV2_EP7_CTR_REG                                     0x02F8 /* Device 2 Endpoint 7 Count Result Register [R] */
+
+/* FIELDS */
+
+#define EP_RESULT                                            0x00FF /* Endpoint Count Result */
+
+
+/*********************************************************/
+/*********************************************************/
+/* OTG REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* OTG CONTROL REGISTER [R/W]                            */
+/*********************************************************/
+
+#define OTG_CTL_REG                                          0xC098 /* On-The-Go Control Register [R/W] */
+
+/* FIELDS */
+
+#define OTG_RX_DIS                                           0x1000 /* Disable OTG receiver */
+#define CHG_PUMP_EN                                          0x0800 /* OTG Charge Pump enable */
+#define VBUS_DISCH_EN                                        0x0400 /* VBUS discharge enable */
+#define DPLUS_PULLUP_EN                                      0x200  /* DPlus Pullup enable */
+#define DMINUS_PULLUP_EN                                     0x100  /* DMinus Pullup enable */
+#define DPLUS_PULLDOWN_EN                                    0x80   /* DPlus Pulldown enable */
+#define DMINUS_PULLDOWN_EN                                   0x40   /* DMinus Pulldown enable */
+#define OTG_DATA_STAT                                        0x0004 /* TTL logic state of VBUS pin [R] */
+#define OTG_ID_STAT                                          0x0002 /* Value of OTG ID pin [R] */
+#define VBUS_VALID_FLG                                       0x0001 /* VBUS > 4.4V [R] */
+
+
+/*********************************************************/
+/*********************************************************/
+/* GPIO REGISTERS                                        */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* GPIO CONTROL REGISTER [R/W]                           */
+/*********************************************************/
+
+#define GPIO_CTL_REG                                         0xC006 /* GPIO Control Register [R/W] */
+#define GPIO_CONFIG                                          0xC006
+#define GPIO_CNTRL                                           0xC01C /* Alias for BIOS code */
+
+/* FIELDS */
+#define GPIO_WP_EN                                           0x8000 /* GPIO Control Register Write-Protect enable (1:WP) */
+#define GPIO_SAS_EN                                          0x0800 /* 1:SPI SS to GPIO[15] */
+#define GPIO_MODE_SEL                                        0x0700 /* GPIO Mode       */
+#define GPIO_HSS_EN                                          0x0080 /* Connect HSS to GPIO (Dependent on TQFP_PKG) */
+/* TQFP: GPIO [26, 18:16] */
+/* FBGA: GPIO[15:12] */
+#define GPIO_HSS_XD_EN                                       0x0040 /* Connect HSS to XD[15:12] (TQFP only) */
+#define GPIO_SPI_EN                                          0x0020 /* Connect SPI to GPIO[11:8] */
+#define GPIO_SPI_XD_EN                                       0x0010 /* Connect SPI to XD[11:8] */
+#define GPIO_IRQ1_POL_SEL                                    0x0008 /* IRQ1 polarity (1:positive, 0:negative)  */
+#define GPIO_IRQ1_EN                                         0x0004 /* IRQ1 enable */
+#define GPIO_IRQ0_POL_SEL                                    0x0002 /* IRQ0 polarity (1:positive, 0:negative) */
+#define GPIO_IRQ0_EN                                         0x0001 /* IRQ0 enable */
+
+/* GPIO MODE FIELD VALUES */
+
+#define DIAG_MODE                                            0x0007 /* Memory Diagnostic mode */
+#define SCAN_MODE                                            0x0006 /* Boundary Scan mode */
+#define HPI_MODE                                             0x0005 /* HPI mode */
+#define IDE_MODE                                             0x0004 /* IDE mode */
+#define EPP_MODE                                             0x0002 /* EPP mode */
+#define FLASH_MODE                                           0x0001 /* FLASH mode */
+#define GPIO_MODE                                            0x0000 /* GPIO only */
+
+/*********************************************************/
+/* GPIO n REGISTERS                                      */
+/*********************************************************/
+
+#define GPIO0_OUT_DATA_REG                                   0xC01E /* GPIO 0 Output Data Register [R/W] */
+#define GPIO1_OUT_DATA_REG                                   0xC024 /* GPIO 1 Output Data Register [R/W] */
+
+#define GPIO0_IN_DATA_REG                                    0xC020 /* GPIO 0 Input Data Register [R] */
+#define GPIO1_IN_DATA_REG                                    0xC026 /* GPIO 1 Input Data Register [R] */
+
+#define GPIO0_DIR_REG                                        0xC022 /* GPIO 0 Direction Register [R/W] (1:Output, 0:Input) */
+#define GPIO1_DIR_REG                                        0xC028 /* GPIO 1 Direction Register [R/W] (1:Output, 0:Input) */
+#define GPIO_HI_IO                                           0xC024 /* Alias for BIOS */
+#define GPIO_HI_ENB                                          0xC028 /* Alias for BIOS */
+
+
+/*********************************************************/
+/*********************************************************/
+/* EPP REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* EPP CONTROL REGISTER [R/W]                            */
+/*********************************************************/
+
+#define EPP_CTL_REG                                          0xC046 /* EPP Control Register [R/W] */
+
+/* FIELDS */
+
+#define EPP_MODE_SEL                                         0x8000 /* 1: EPP_MODE, 0: COMPATABILITY MODE [R/W] */
+#define EPP_SELECT_STAT                                      0x4000 /* Returns current logic state of the SELECT pin [R] */
+#define EPP_nFAULT_STAT                                      0x2000 /* Returns current logic state of the nFAULT pin [R] */
+#define EPP_pERROR_STAT                                      0x1000 /* Returns current logic state of the pERROR pin [R] */
+
+/* EPP MODE ONLY FIELDS (EPP_MODE_EN = 1) */
+
+#define EPP_nRESET_EN                                        0x0020 /* Reads/Writes current logic state of the nRESET pin [R/W] */
+#define EPP_nDSTRB_EN                                        0x0010 /* Reads/Writes current logic state of the nDSTRB pin [R/W] */
+#define EPP_nASTRB_EN                                        0x0008 /* Reads/Writes current logic state of the nASTRB pin [R/W]  */
+#define EPP_nWRITE_EN                                        0x0004 /* Reads/Writes current logic state of the nWRITE pin [R/W]  */
+#define EPP_IRQ_STAT                                         0x0002 /* ??? [R] */
+#define EPP_WAIT_STAT                                        0x0001 /* ??? [R] */
+
+/* COMPATABILITY MODE ONLY FIELDS (EPP_MODE_EN = 0) */
+
+#define EPP_nINIT_EN                                         0x0020 /* ??? [R/W]  */
+#define EPP_nAUTOFD_EN                                       0x0010 /* ??? [R/W]  */
+#define EPP_ASELECT_EN                                       0x0008 /* ??? [R/W]  */
+#define EPP_nSTROBE_EN                                       0x0004 /* ??? [R/W]  */
+#define EPP_nACK_STAT                                        0x0002 /* ??? [R]  */
+#define EPP_BUSY_STAT                                        0x0001 /* ??? [R]  */
+
+/*********************************************************/
+/* EPP DATA REGISTER [R/W]                               */
+/*********************************************************/
+
+#define EPP_DATA_REG                                         0xC040 /* EPP Data Register [R/W] */
+
+/* FIELDS */
+
+#define EPP_DATA                                             0x00FF /* EPP Data */
+
+/*********************************************************/
+/* EPP BUFFER READ REGISTER [R]                          */
+/*********************************************************/
+
+#define EPP_BFR_READ_REG                                     0xC042 /* EPP Buffer Read Register [R] */
+
+/* FIELDS */
+
+#define EPP_BFR                                              0x00FF /* EPP Buffer */
+
+/*********************************************************/
+/* EPP ADDRESS REGISTER [R/W]                            */
+/*********************************************************/
+
+#define EPP_ADDR_REG                                         0xC044 /* EPP Address Register [R/W] */
+
+/* FIELDS */
+
+#define EPP_ADDR                                             0x00FF /* EPP Address */
+
+
+/*********************************************************/
+/*********************************************************/
+/* IDE REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* IDE MODE REGISTER [R/W]                               */
+/*********************************************************/
+
+#define IDE_MODE_REG                                         0xC048 /* IDE Mode Register [R/W] */
+
+/* FIELDS */
+
+#define IDE_MODE_SEL                                         0x0007 /* IDE Mode (See field values below) */
+
+/* MODE FIELD VALUES */
+
+#define MODE_DIS                                             0x0007 /* Disabled */
+#define MODE_PIO4                                            0x0004 /* PIO Mode 4 */
+#define MODE_PIO3                                            0x0003 /* PIO Mode 3 */
+#define MODE_PIO2                                            0x0002 /* PIO Mode 2 */
+#define MODE_PIO1                                            0x0001 /* PIO Mode 1 */
+#define MODE_PIO0                                            0x0000 /* PIO Mode 0 */
+
+/*********************************************************/
+/* IDE START ADDRESS REGISTER [R/W]                      */
+/*********************************************************/
+
+#define IDE_START_ADDR_REG                                   0xC04A /* IDE Start Address Register [R/W] */
+
+/*********************************************************/
+/* IDE STOP ADDRESS REGISTER [R/W]                       */
+/*********************************************************/
+
+#define IDE_STOP_ADDR_REG                                    0xC04C /* IDE Stop Address Register [R/W] */
+
+/*********************************************************/
+/* IDE CONTROL REGISTER [R/W]                            */
+/*********************************************************/
+
+#define IDE_CTL_REG                                          0xC04E /* IDE Control Register [R/W] */
+
+/* FIELDS */
+
+#define IDE_DIR_SEL                                          0x0008 /* IDE Direction Select */
+#define IDE_IRQ_EN                                           0x0004 /* IDE Interrupt Enable */
+#define IDE_DONE_FLG                                         0x0002 /* IDE Done Flag (Set by silicon, Cleared by writing 0) */
+#define IDE_EN                                               0x0001 /* IDE Enable (Set by writing 1, Cleared by silicon) */
+
+/* DIRECTION SELECT FIELD VALUES */
+
+#define WR_EXT                                               0x0008 /* Write to external device */
+#define RD_EXT                                               0x0000 /* Read from external device */
+
+/*********************************************************/
+/* IDE PIO PORT REGISTERS [R/W]                          */
+/*********************************************************/
+
+#define IDE_PIO_DATA_REG                                     0xC050 /* IDE PIO Data Register [R/W] */
+#define IDE_PIO_ERR_REG                                      0xC052 /* IDE PIO Error Register [R/W] */
+#define IDE_PIO_SCT_CNT_REG                                  0xC054 /* IDE PIO Sector Count Register [R/W] */
+#define IDE_PIO_SCT_NUM_REG                                  0xC056 /* IDE PIO Sector Number Register [R/W] */
+#define IDE_PIO_CYL_LO_REG                                   0xC058 /* IDE PIO Cylinder Low Register [R/W] */
+#define IDE_PIO_CYL_HI_REG                                   0xC05A /* IDE PIO Cylinder High Register [R/W] */
+#define IDE_PIO_DEV_HD_REG                                   0xC05C /* IDE PIO Device/Head Register [R/W] */
+#define IDE_PIO_CMD_REG                                      0xC05E /* IDE PIO Command Register [R/W] */
+#define IDE_PIO_DEV_CTL_REG                                  0xC06C /* IDE PIO Device Control Register [R/W] */
+
+
+/*********************************************************/
+/*********************************************************/
+/* MDMA REGISTERS                                        */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* MDMA MODE REGISTER [R/W]                              */
+/*********************************************************/
+
+#define MDMA_MODE_REG                                        0xC048 /* MDMA Mode Register [R/W] */
+
+/* FIELDS */
+
+#define MDMA_PROTOCOL_SEL                                    0x0008 /* 1:MDMA-B, 0:MDMA-A */
+#define MDMA_MODE_SEL                                        0x0007 /* MDMA Mode (See field values below) */
+
+/* MDMA MODE FIELD VALUES */
+
+#define MDMA_DIS                                             0x0007 /* Disabled */
+#define MDMA_16                                              0x0006 /* MDMA Mode, 16-bit */
+#define MDMA_8                                               0x0005 /* MDMA Mode, 8-bit */
+
+/*********************************************************/
+/* MDMA START ADDRESS REGISTER [R/W]                     */
+/*********************************************************/
+
+#define MDMA_START_ADDR_REG                                  0xC04A /* MDMA Start Address Register [R/W] */
+
+/*********************************************************/
+/* MDMA STOP ADDRESS REGISTER [R/W]                      */
+/*********************************************************/
+
+#define MDMA_STOP_ADDR_REG                                   0xC04C /* MDMA Stop Address Register [R/W] */
+
+/*********************************************************/
+/* MDMA CONTROL REGISTER [R/W]                           */
+/*********************************************************/
+
+#define MDMA_CTL_REG                                         0xC04E /* MDMA Control Register [R/W] */
+
+/* FIELDS */
+
+#define MDMA_DIR_SEL                                         0x0008 /* MDMA Direction Select */
+#define MDMA_IRQ_EN                                          0x0004 /* MDMA Interrupt Enable */
+#define MDMA_DONE_FLG                                        0x0002 /* MDMA Done Flag (Set by silicon, Cleared by writing 0) */
+#define MDMA_EN                                              0x0001 /* MDMA Enable (Set by writing 1, Cleared by silicon) */
+
+
+/*********************************************************/
+/*********************************************************/
+/* HSS REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* HSS CONTROL REGISTER [R/W]                            */
+/*********************************************************/
+
+#define HSS_Ctl_REG                                          0xC070 /* HSS Control Register [R/W] */
+
+/* FIELDS */
+
+#define HSS_EN                                               0x8000 /* HSS Enable */
+#define RTS_POL_SEL                                          0x4000 /* RTS Polarity Select */
+#define CTS_POL_SEL                                          0x2000 /* CTS Polarity Select */
+#define XOFF                                                 0x1000 /* XOFF/XON state (1:XOFF received, 0:XON received) [R] */
+#define XOFF_EN                                              0x0800 /* XOFF/XON protocol Enable */
+#define CTS_EN                                               0x0400 /* CTS Enable  */
+#define RX_IRQ_EN                                            0x0200 /* RxRdy/RxPktRdy Interrupt Enable */
+#define HSS_DONE_IRQ_EN                                      0x0100 /* TxDone/RxDone Interrupt Enable */
+#define TX_DONE_IRQ_FLG                                      0x0080 /* TxDone Interrupt (Write 1 to clear) */
+#define RX_DONE_IRQ_FLG                                      0x0040 /* RxDone Interrupt (Write 1 to clear) */
+#define ONE_STOP_BIT                                         0x0020 /* Number of TX Stop bits (1:one TX stop bit, 0:2 TX stop bits) */
+#define HSS_TX_RDY                                           0x0010 /* Tx ready for next byte */
+#define PACKET_MODE_SEL                                      0x0008 /* RxIntr Source (1:RxPktRdy, 0:RxRdy) */
+#define RX_OVF_FLG                                           0x0004 /* Rx FIFO overflow (Write 1 to clear and flush RX FIFO) */
+#define RX_PKT_RDY_FLG                                       0x0002 /* RX FIFO full */
+#define RX_RDY_FLG                                           0x0001 /* RX FIFO not empty */
+
+/* RTS POLARITY SELECT FIELD VALUES */
+
+#define RTS_POL_LO                                           0x4000 /* Low-true polarity */
+#define RTS_POL_HI                                           0x0000 /* High-true polarity */
+
+/* CTS POLARITY SELECT FIELD VALUES */
+
+#define CTS_POL_LO                                           0x2000 /* Low-true polarity */
+#define CTS_POL_HI                                           0x0000 /* High-true polarity */
+
+/*********************************************************/
+/* HSS BAUD RATE REGISTER [???]                          */
+/*********************************************************/
+/* Baud rate is determined as follows: */
+/* */
+/*     48 MHz */
+/* -------------- */
+/* (HSS_BAUD + 1) */
+/*********************************************************/
+
+#define HSS_BAUD_REG                                         0xC072 /* HSS Baud Register [???] */
+
+/* FIELDS */
+
+#define HSS_BAUD_SEL                                         0x1FFF /* HSS Baud */
+
+/*********************************************************/
+/* HSS TX GAP REGISTER [???]                             */
+/*********************************************************/
+/* This register defines the number of stop bits used */
+/* for block mode transmission ONLY. The number of stop  */
+/* bits is determined as follows: */
+/* */
+/* (TX_GAP - 7) */
+/* */
+/* Valid values for TX_GAP are 8-255. */
+/*********************************************************/
+
+#define HSS_TX_GAP_REG                                       0xC074 /* HSS Transmit Gap Register [???] */
+
+/* FIELDS */
+
+#define TX_GAP_SEL                                           0x00FF /* HSS Transmit Gap */
+
+/*********************************************************/
+/* HSS DATA REGISTER [R/W]                               */
+/*********************************************************/
+
+#define HSS_DATA_REG                                         0xC076 /* HSS Data Register [R/W] */
+
+/* FIELDS */
+
+#define HSS_DATA                                             0x00FF /* HSS Data */
+
+/*********************************************************/
+/* HSS RECEIVE ADDRESS REGISTER [???]                    */
+/*********************************************************/
+
+#define HSS_RX_ADDR_REG                                      0xC078 /* HSS Receive Address Register [???] */
+
+/*********************************************************/
+/* HSS RECEIVE COUNTER REGISTER [R/W]                    */
+/*********************************************************/
+
+#define HSS_RX_CTR_REG                                       0xC07A /* HSS Receive Counter Register [R/W] */
+
+/* FIELDS */
+
+#define HSS_RX_CTR                                           0x03FF /* Counts from (n-1) to (0-1) */
+
+/*********************************************************/
+/* HSS TRANSMIT ADDRESS REGISTER [???]                   */
+/*********************************************************/
+
+#define HSS_TX_ADDR_REG                                      0xC07C /* HSS Transmit Address Register [???] */
+
+/*********************************************************/
+/* HSS TRANSMIT COUNTER REGISTER [R/W]                   */
+/*********************************************************/
+
+#define HSS_TX_CTR_REG                                       0xC07E /* HSS Transmit Counter Register [R/W] */
+
+/* FIELDS */
+
+#define HSS_TX_CTR                                           0x03FF /* Counts from (n-1) to (0-1) */
+
+/* ------------------ HIGH SPEED SERIAL INTERFACE ADDRESS ------------------- */
+/* High Speed Serial Control */
+
+#define HSS_RGN                                              0xC070
+#define HSS_STS_REG                                          0xC070
+#define HSS_Ctl_ADR                                          0xC070
+#define HSS_Ctl_MSK                                          0x0000
+#define HSS_Ctl_RxRst_BIT                                    0x0002
+#define HSS_Ctl_RxRst_BM                                     0x0004
+#define HSS_Ctl_PacketMode_BIT                               0x0003
+#define HSS_Ctl_PacketMode_BM                                0x0008
+#define HSS_Ctl_OneStop_BIT                                  0x0005
+#define HSS_Ctl_OneStop_BM                                   0x0020
+#define HSS_Ctl_RBkDoneClr_BIT                               0x0006
+#define HSS_Ctl_RBkDoneClr_BM                                0x0040
+#define HSS_Ctl_TBkDoneClr_BIT                               0x0007
+#define HSS_Ctl_TBkDoneClr_BM                                0x0080
+#define HSS_Ctl_DoneIntrEnab_BIT                             0x0008
+#define HSS_Ctl_DoneIntrEnab_BM                              0x0100
+#define HSS_Ctl_RxIntrEnab_BIT                               0x0009
+#define HSS_Ctl_RxIntrEnab_BM                                0x0200
+#define HSS_Ctl_CTSenab_BIT                                  0x000A
+#define HSS_Ctl_CTSenab_BM                                   0x0400
+#define HSS_Ctl_XOFFenab_BIT                                 0x000B
+#define HSS_Ctl_XOFFenab_BM                                  0x0800
+#define HSS_Ctl_CTSpolarity_BIT                              0x000D
+#define HSS_Ctl_CTSpolarity_BM                               0x2000
+#define HSS_Ctl_RTSpolarity_BIT                              0x000E
+#define HSS_Ctl_RTSpolarity_BM                               0x4000
+#define HSS_Ctl_Enable_BIT                                   0x000F
+#define HSS_Ctl_Enable_BM                                    0x8000
+#define HSS_Ctl_RxRdy_BIT                                    0x0000
+#define HSS_Ctl_RxRdy_BM                                     0x0001
+#define HSS_Ctl_RxPktRdy_BIT                                 0x0001
+#define HSS_Ctl_RxPktRdy_BM                                  0x0002
+#define HSS_Ctl_RxErr_BIT                                    0x0002
+#define HSS_Ctl_RxErr_BM                                     0x0004
+#define HSS_Ctl_TxRdy_BIT                                    0x0004
+#define HSS_Ctl_TxRdy_BM                                     0x0010
+#define HSS_Ctl_RBkDone_BIT                                  0x0006
+#define HSS_Ctl_RBkDone_BM                                   0x0040
+#define HSS_Ctl_TBkDone_BIT                                  0x0007
+#define HSS_Ctl_TBkDone_BM                                   0x0080
+#define HSS_Ctl_XOFFstate_BIT                                0x000C
+#define HSS_Ctl_OFFstate_BM                                  0x1000
+
+/* High Speed Serial BAUD Rate Register */
+#define HSS_BAUDRATE_REG                                     0xC072
+#define HSS_BAUDRate_ADR                                     0xC072
+#define HSS_BAUDRate_MSK                                     0x0000
+#define HSS_BAUDRate_Rate_POS                                0x0000
+#define HSS_BAUDRate_Rate_SIZ                                0x000D
+
+/* High Speed Serial GAP Register */
+#define HSS_GAP_REG                                          0xC074
+#define HSS_GAP_ADR                                          0xC074
+#define HSS_GAP_MSK                                          0x0000
+#define HSS_GAP_GAP_POS                                      0x0000
+#define HSS_GAP_GAP_SIZ                                      0x0010
+
+/* High Speed Serial Data Register */
+#define HSS_RX_DATA_REG                                      0xC076
+#define HSS_TX_DATA_REG                                      0xC076
+#define HSS_Data_ADR                                         0xC076
+#define HSS_Data_MSK                                         0x0000
+#define HSS_Data_Data_POS                                    0x0000
+#define HSS_Data_Data_SIZ                                    0x0008
+
+/* High Speed Serial Block Receive Address Register */
+#define HSS_RX_BLK_ADDR_REG                                  0xC078
+#define HSS_RxBlkAddr_ADR                                    0xC078
+#define HSS_RxBlkAddr_MSK                                    0x0000
+#define HSS_RxBlkAddr_Addr_POS                               0x0000
+#define HSS_RxBlkAddr_Addr_SIZ                               0x0010
+
+/* High Speed Serial Block Receive Length Register */
+#define HSS_RX_BLK_LEN_REG                                   0xC07A
+#define HSS_RxBlkLen_ADR                                     0xC07A
+#define HSS_RxBlkLen_MSK                                     0x0000
+#define HSS_RxBlkLen_POS                                     0x0000
+#define HSS_RxBlkLen_SIZ                                     0x000A
+
+/* High Speed Serial Block Transmit Address Register */
+#define HSS_TX_BLK_ADDR_REG                                  0xC07C
+#define HSS_TxBlkAddr_ADR                                    0xC07C
+#define HSS_TxBlkAddr_MSK                                    0x0000
+#define HSS_TxBlkAddr_Addr_POS                               0x0000
+#define HSS_TxBlkAddr_Addr_SIZ                               0x0010
+
+/* High Speed Serial Block Transmit Length Register */
+#define HSS_TX_BLK_LEN_REG                                   0xC07E
+#define HSS_TxBlkLen_ADR                                     0xC07E
+#define HSS_TxBlkLen_MSK                                     0x0000
+#define HSS_TxBlkLen_POS                                     0x0000
+#define HSS_TxBlkLen_SIZ                                     0x000A
+
+/*********************************************************/
+/*********************************************************/
+/* SPI REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* SPI CONFIGURATION REGISTER [R/W]                      */
+/*********************************************************/
+
+#define SPI_CFG_REG                                          0xC0C8 /* SPI Config Register [R/W] */
+
+/* FIELDS */
+
+#define c3WIRE_EN                                            0x8000 /* MISO/MOSI data lines common */
+#define PHASE_SEL                                            0x0400 /* Advanced SCK phase */
+#define SCK_POL_SEL                                          0x2000 /* Positive SCK Polarity */
+#define SCALE_SEL                                            0x1E00 /* SPI Clock Frequency Scaling */
+#define MSTR_ACTIVE_EN                                       0x0080 /* Master state machine active */
+#define MSTR_EN                                              0x0040 /* Master/Slave select */
+#define SS_EN                                                0x0020 /* SS enable */
+#define SS_DLY_SEL                                           0x001F /* SS delay select */
+
+/* SCALE VALUES */
+#define SPI_SCALE_1E                                         0x1E00 /* */
+#define SPI_SCALE_1C                                         0x1C00 /* */
+#define SPI_SCALE_1A                                         0x1A00 /* */
+#define SPI_SCALE_18                                         0x1800 /* */
+#define SPI_SCALE_16                                         0x1600 /* */
+#define SPI_SCALE_14                                         0x1400 /* */
+#define SPI_SCALE_12                                         0x1200 /* */
+#define SPI_SCALE_10                                         0x1000 /* */
+#define SPI_SCALE_0E                                         0x0E00 /* */
+#define SPI_SCALE_0C                                         0x0C00 /* */
+#define SPI_SCALE_0A                                         0x0A00 /* */
+#define SPI_SCALE_08                                         0x0800 /* */
+#define SPI_SCALE_06                                         0x0600 /* */
+#define SPI_SCALE_04                                         0x0400 /* */
+#define SPI_SCALE_02                                         0x0200 /* */
+#define SPI_SCALE_00                                         0x0000 /* */
+
+/*********************************************************/
+/* SPI CONTROL REGISTER [R/W]                            */
+/*********************************************************/
+
+#define SPI_CTL_REG                                          0xC0CA /* SPI Control Register [R/W] */
+
+/* FIELDS */
+
+#define SCK_STROBE                                           0x8000 /* SCK Strobe */
+#define FIFO_INIT                                            0x4000 /* FIFO Init */
+#define BYTE_MODE                                            0x2000 /* Byte Mode */
+#define FULL_DUPLEX                                          0x1000 /* Full Duplex */
+#define SS_MANUAL                                            0x0800 /* SS Manual */
+#define READ_EN                                              0x0400 /* Read Enable */
+#define SPI_TX_RDY                                           0x0200 /* Transmit Ready */
+#define RX_DATA_RDY                                          0x0100 /* Receive Data Ready */
+#define TX_EMPTY                                             0x0080 /* Transmit Empty */
+#define RX_FULL                                              0x0020 /* Receive Full */
+#define TX_BIT_LEN                                           0x0031 /* Transmit Bit Length */
+#define RX_BIT_LEN                                           0x0007 /* Receive Bit Length */
+
+/*********************************************************/
+/* SPI INTERRUPT ENABLE REGISTER [R/W]                   */
+/*********************************************************/
+
+#define SPI_IRQ_EN_REG                                       0xC0CC /* SPI Interrupt Enable Register [R/W] */
+
+/* FIELDS */
+
+#define SPI_RX_IRQ_EN                                        0x0004 /* SPI Receive Interrupt Enable */
+#define SPI_TX_IRQ_EN                                        0x0002 /* SPI Transmit Interrupt Enable */
+#define SPI_XFR_IRQ_EN                                       0x0001 /* SPI Transfer Interrupt Enable */
+
+/*********************************************************/
+/* SPI STATUS REGISTER [R]                               */
+/*********************************************************/
+
+#define SPI_STAT_REG                                         0xC0CE /* SPI Status Register [R] */
+
+/* FIELDS */
+
+#define SPI_FIFO_ERROR_FLG                                   0x0100 /* FIFO Error occurred */
+#define SPI_RX_IRQ_FLG                                       0x0004 /* SPI Receive Interrupt  */
+#define SPI_TX_IRQ_FLG                                       0x0002 /* SPI Transmit Interrupt */
+#define SPI_XFR_IRQ_FLG                                      0x0001 /* SPI Transfer Interrupt */
+
+/*********************************************************/
+/* SPI INTERRUPT CLEAR REGISTER [W]                      */
+/*********************************************************/
+/* In order to clear a particular IRQ, write a '1' to    */
+/* the appropriate bit location.                         */
+/*********************************************************/
+
+#define SPI_IRQ_CLR_REG                                      0xC0D0 /* SPI Interrupt Clear Register [W] */
+
+/* FIELDS */
+
+#define SPI_TX_IRQ_CLR                                       0x0002 /* SPI Transmit Interrupt Clear */
+#define SPI_XFR_IRQ_CLR                                      0x0001 /* SPI Transfer Interrupt Clear */
+
+/*********************************************************/
+/* SPI CRC CONTROL REGISTER [R/W]                        */
+/*********************************************************/
+
+#define SPI_CRC_CTL_REG                                      0xC0D2 /* SPI CRC Control Register [R/W] */
+
+/* FIELDS */
+
+#define CRC_MODE                                             0xC000 /* CRC Mode */
+#define CRC_EN                                               0x2000 /* CRC Enable */
+#define CRC_CLR                                              0x1000 /* CRC Clear */
+#define RX_CRC                                               0x0800 /* Receive CRC */
+#define ONE_IN_CRC                                           0x0400 /* One in CRC [R] */
+#define ZERO_IN_CRC                                          0x0200 /* Zero in CRC [R] */
+
+/* CRC MODE VALUES */
+
+#define POLYNOMIAL_3                                         0x0003 /* CRC POLYNOMIAL 1 */
+#define POLYNOMIAL_2                                         0x0002 /* CRC POLYNOMIAL X^16+X^15+X^2+1 */
+#define POLYNOMIAL_1                                         0x0001 /* CRC POLYNOMIAL X^7+X^3+1 */
+#define POLYNOMIAL_0                                         0x0000 /* CRC POLYNOMIAL X^16+X^12+X^5+1 */
+
+/*********************************************************/
+/* SPI CRC VALUE REGISTER [R/W]                          */
+/*********************************************************/
+
+#define SPI_CRC_VALUE_REG                                    0xC0D4 /* SPI CRC Value Register [R/W] */
+
+/*********************************************************/
+/* SPI DATA REGISTER [R/W]                               */
+/*********************************************************/
+
+#define SPI_DATA_REG                                         0xC0D6 /* SPI Data Register [R/W] */
+
+/* FIELDS */
+
+#define SPI_DATA                                             0x00FF /* SPI Data */
+
+/*********************************************************/
+/* SPI TRANSMIT ADDRESS REGISTER [R/W]                   */
+/*********************************************************/
+
+#define SPI_TX_ADDR_REG                                      0xC0D8 /* SPI Transmit Address Register [R/W] */
+
+/*********************************************************/
+/* SPI TRANSMIT COUNT REGISTER [R/W]                     */
+/*********************************************************/
+
+#define SPI_TX_CNT_REG                                       0xC0DA /* SPI Transmit Count Register [R/W] */
+
+/* FIELDS */
+
+#define SPI_TX_CNT                                           0x07FF /* SPI Transmit Count */
+
+/*********************************************************/
+/* SPI RECEIVE ADDRESS REGISTER [R/W]                    */
+/*********************************************************/
+
+#define SPI_RX_ADDR_REG                                      0xC0DC /* SPI Receive Address Register [R/W] */
+
+/*********************************************************/
+/* SPI RECEIVE COUNT REGISTER [R/W]                      */
+/*********************************************************/
+
+#define SPI_RX_CNT_REG                                       0xC0DE /* SPI Receive Count Register [R/W] */
+
+/* FIELDS */
+
+#define SPI_RX_CNT                                           0x07FF /* SPI Receive Count */
+#define SPI_RGN                                              0xC0C0 /* SPI memory map start */
+
+/* SPI registers occupies 0xC0C8 to 0xC0DF. */
+/* so SPI_RGN is set to 0xC0C0. The first register is at offset 0x08. */
+/* The last register 0xC0DE is at offset 0x1e. */
+/*   SPI register:   Lyberty Address     AFE offset from 0xC0C0 */
+/*     SPI_RxLen     0xC0DE              0x1e */
+/*     SPI_RxBlk     0xC0DC              0x1c */
+/*     SPI_TxLen     0xC0DA              0x1a */
+/*     SPI_TxBlk     0xC0D8              0x18 */
+/*     SPI_TxRxData  0xC0D6              0x16 */
+/*     SPI_CRCVal    0xC0D4              0x14 */
+/*     SPI_CRCCtl    0xC0D2              0x12 */
+/*     SPI_IntClr    0xC0D0              0x10 */
+/*     SPI_IntVal    0xC0CE              0x0e */
+/*     SPI_IntEnab   0xC0CC              0x0c */
+/*     SPI_Ctl       0xC0CA              0x0a */
+/*     SPI_Cfg       0xC0C8              0x08 */
+
+
+/* SPI 16-bit Configuration Register */
+/*------------------------------------ */
+#define SPI_Cfg_AFE                                          0x0008
+#define SPI_Cfg_ADR                                          0xC0C8
+
+/* b i t   d e f i n i t i o n s */
+#define SPI_Cfg_3WireNot4_BIT                                0x000F
+#define SPI_Cfg_3WireNot4_BM                                 0x8000
+#define SPI_Cfg_CPHA_BIT                                     0x000E
+#define SPI_Cfg_CPHA_BM                                      0x4000
+#define SPI_Cfg_CPOL_BIT                                     0x000D
+#define SPI_Cfg_CPOL_BM                                      0x2000
+/*      SPI_Cfg_Sel                       MSB 12 */
+#define SPI_Cfg_Sel_SIZ                                      0x0004
+#define SPI_Cfg_Sel_POS                                      0x0009
+/* possible selections */
+#define SPI_Cfg_Sel_250                                      0x000B
+#define SPI_Cfg_Sel_250_BM                                   0x1600
+#define SPI_Cfg_Sel_375                                      0x000A
+#define SPI_Cfg_Sel_375_BM                                   0x1400
+#define SPI_Cfg_Sel_500                                      0x0009
+#define SPI_Cfg_Sel_500_BM                                   0x1200
+#define SPI_Cfg_Sel_750                                      0x0008
+#define SPI_Cfg_Sel_750_BM                                   0x1000
+#define SPI_Cfg_Sel_1000                                     0x0007
+#define SPI_Cfg_Sel_1000_BM                                  0x0E00
+#define SPI_Cfg_Sel_1500                                     0x0006
+#define SPI_Cfg_Sel_1500_BM                                  0x0C00
+#define SPI_Cfg_Sel_2M                                       0x0005
+#define SPI_Cfg_Sel_2M_BM                                    0x0A00
+#define SPI_Cfg_Sel_3M                                       0x0004
+#define SPI_Cfg_Sel_3M_BM                                    0x0800
+#define SPI_Cfg_Sel_4M                                       0x0003
+#define SPI_Cfg_Sel_4M_BM                                    0x0600
+#define SPI_Cfg_Sel_6M                                       0x0002
+#define SPI_Cfg_Sel_6M_BM                                    0x0400
+#define SPI_Cfg_Sel_8M                                       0x0001
+#define SPI_Cfg_Sel_8M_BM                                    0x0200
+#define SPI_Cfg_Sel_12M                                      0x0000
+#define SPI_Cfg_Sel_12M_BM                                   0x0000
+/* end  SPI_Cfg_Sel */
+#define SPI_Cfg_RedLine_BIT                                  0x0008
+#define SPI_Cfg_RedLine_BM                                   0x0100
+
+#define SPI_Cfg_MstrActive_BIT                               0x0007
+#define SPI_Cfg_MstrActive_BM                                0x0080
+#define SPI_Cfg_MstrNotSlv_BIT                               0x0006
+#define SPI_Cfg_MstrNotSlv_BM                                0x0040
+#define SPI_Cfg_SSEn_BIT                                     0x0005
+#define SPI_Cfg_SSEn_BM                                      0x0020
+/*      SPI_Cfg_SSDly                     MSB 4 */
+#define SPI_Cfg_SSDly_SIZ                                    0x0005
+#define SPI_Cfg_SSDly_POS                                    0x0000
+/* assign to manual */
+#define SPI_Cfg_SSDly_Manual                                 0x0000
+/* one possible selection */
+#define SPI_Cfg_SSDly_2                                      0x0002
+#define SPI_Cfg_SSDly_2_BM                                   0x0002
+
+
+/* SPI 16-bit Control Register */
+/*------------------------------------ */
+#define SPI_Ctl_AFE                                          0x000A
+#define SPI_Ctl_ADR                                          0xC0CA
+
+/* b i t   d e f i n i t i o n s */
+#define SPI_Ctl_SCKStrobe_BIT                                0x000F
+#define SPI_Ctl_SCKStrobe_BM                                 0x8000
+#define SPI_Ctl_FIFOInit_BIT                                 0x000E
+#define SPI_Ctl_FIFOInit_BM                                  0x4000
+#define SPI_Ctl_ByteMode_BIT                                 0x000D
+#define SPI_Ctl_ByteMode_BM                                  0x2000
+#define SPI_Ctl_FullDuplex_BIT                               0x000C
+#define SPI_Ctl_FullDuplex_BM                                0x1000
+#define SPI_Ctl_SSManVal_BIT                                 0x000B
+#define SPI_Ctl_SSManVal_BM                                  0x0800
+#define SPI_Ctl_DoRead_BIT                                   0x000A
+#define SPI_Ctl_DoRead_BM                                    0x0400
+#define SPI_Ctl_TxRdy_BIT                                    0x0009
+#define SPI_Ctl_TxRdy_BM                                     0x0200
+#define SPI_Ctl_RxDatRdy_BIT                                 0x0008
+#define SPI_Ctl_RxDatRdy_BM                                  0x0100
+
+#define SPI_Ctl_TxEmpty_BIT                                  0x0007
+#define SPI_Ctl_TxEmpty_BM                                   0x0080
+#define SPI_Ctl_RxFull_BIT                                   0x0006
+#define SPI_Ctl_RxFull_BM                                    0x0040
+/*      SPI_Ctl_TxBitLen                  MSB 5 */
+#define SPI_Ctl_TxBitLen_POS                                 0x0003
+#define SPI_Ctl_TxBitLen_SIZ                                 0x0003
+
+/* zero is full byte */
+#define SPI_Ctl_TxBitLen_FullByte                            0x0000
+#define SPI_Ctl_TxBitLen_FullByte_BM                         0x0000
+
+/*      SPI_Ctl_RxBitLen                  MSB 2 */
+#define SPI_Ctl_RxBitLen_POS                                 0x0000
+#define SPI_Ctl_RxBitLen_SIZ                                 0x0003
+
+/* zero is full byte */
+#define SPI_Ctl_RxBitLen_FullByte                            0x0000
+#define SPI_Ctl_RxBitLen_FullByte_BM                         0x0000
+
+
+/* SPI Interrupt Type Bits */
+/* for all Interrupt Registers */
+/* ----------------------------------- */
+#define SPI_Int_XfrBk_BIT                                    0x0000
+#define SPI_Int_Tx_BIT                                       0x0001
+#define SPI_Int_Rx_BIT                                       0x0002
+#define SPI_Int_FIFOErr_BIT                                  0x0007
+
+/* SPI 16-bit Interrupt Enable Register */
+/*------------------------------------ */
+#define SPI_IntEnab_AFE                                      0x000C
+#define SPI_IntEnab_ADR                                      0xC0CC
+
+/* b i t   d e f i n i t i o n s */
+/* reserved BITS                              15 - 8 */
+
+/* reserved BITS                              7 - 3 */
+#define SPI_IntEnab_Rx_BM                                    0x0004
+#define SPI_IntEnab_Tx_BM                                    0x0002
+#define SPI_IntEnab_XfrBk_BM                                 0x0001
+
+
+/* SPI 16-bit Interrupt Value Register */
+/*------------------------------------ */
+#define SPI_IntVal_AFE                                       0x000E
+#define SPI_IntVal_ADR                                       0xC0CE
+
+/* b i t   d e f i n i t i o n s */
+/* reserved BITS                              15 - 8 */
+
+#define SPI_IntVal_FIFOErr_BM                                0x0080
+
+/* reserved BITS                              6 - 3 */
+#define SPI_IntVal_Rx_BM                                     0x0004
+#define SPI_IntVal_Tx_BM                                     0x0002
+#define SPI_IntVal_XfrBk_BM                                  0x0001
+
+/* SPI 16-bit Interrupt Clear Register */
+/*------------------------------------ */
+#define SPI_IntClr_AFE                                       0x0010
+#define SPI_IntClr_ADR                                       0xC0D0
+
+/* b i t   d e f i n i t i o n s */
+/* reserved BITS                              15 - 8 */
+
+/* reserved BITS                              7 - 2 */
+#define SPI_IntClr_Tx_BM                                     0x0002
+#define SPI_IntClr_XfrBk_BM                                  0x0001
+
+
+/* SPI 16-bit CRC Control Register */
+/*------------------------------------ */
+#define SPI_CRCCtl_AFE                                       0x0012
+#define SPI_CRCCtl_ADR                                       0xC0D2
+
+/* b i t   d e f i n i t i o n s */
+/*      SPI_CRCCtl                        MSB 15 */
+#define SPI_CRCCtl_Mode_POS                                  0x000E
+#define SPI_CRCCtl_Mode_SIZ                                  0x0002
+
+/* Mode selections MMC (CCITT), */
+/*  CRC-7, Memory Stick & Reserved */
+#define SPI_CRCCtl_Mode_MMC                                  0x0000
+#define SPI_CRCCtl_Mode_MMC_BM                               0x0000
+#define SPI_CRCCtl_Mode_CRC7                                 0x0001
+#define SPI_CRCCtl_Mode_CRC7_BM                              0x4000
+#define SPI_CRCCtl_Mode_MS                                   0x0002
+#define SPI_CRCCtl_Mode_MS_BM                                0x8000
+#define SPI_CRCCtl_Mode_Res                                  0x0003
+#define SPI_CRCCtl_Mode_Res_BM                               0xC000
+#define SPI_CRCCtl_Active_BIT                                0x000D
+#define SPI_CRCCtl_Active_BM                                 0x2000
+#define SPI_CRCCtl_Clear_BIT                                 0x000C
+#define SPI_CRCCtl_Clear_BM                                  0x1000
+#define SPI_CRCCtl_RxNotTx_BIT                               0x000B
+#define SPI_CRCCtl_RxNotTx_BM                                0x0800
+#define SPI_CRCCtl_OR_BIT                                    0x000A
+#define SPI_CRCCtl_OR_BM                                     0x0400
+#define SPI_CRCCtl_NAND_BIT                                  0x0009
+#define SPI_CRCCtl_NAND_BM                                   0x0200
+/* reserved BIT                               8 */
+
+/* reserved BITS                              7 - 0 */
+
+
+/* SPI 16-bit CRC Value Register */
+/*------------------------------------ */
+#define SPI_CRCVal_AFE                                       0x0014
+#define SPI_CRCVal_ADR                                       0xC0D4
+#define SPI_CRCVal_Port_POS                                  0x0000
+#define SPI_CRCVal_Port_SIZ                                  0x0010
+
+
+/* SPI 8-bit transmit & receive port (PIO) */
+/*------------------------------------ */
+#define SPI_TxRxData_AFE                                     0x0016
+#define SPI_TxRxData_ADR                                     0xC0D6
+#define SPI_TxRxData_Port_POS                                0x0000
+#define SPI_TxRxData_Port_SIZ                                0x0008
+
+
+/* SPI 16-bit DMA transmit base address */
+/*------------------------------------ */
+#define SPI_TxBlk_AFE                                        0x0018
+#define SPI_TxBlk_ADR                                        0xC0D8
+#define SPI_TxBlk_Base_POS                                   0x0000
+#define SPI_TxBlk_Base_SIZ                                   0x0010
+
+
+/* SPI 11-bit DMA transmit length */
+/*------------------------------------ */
+#define SPI_TxLen_AFE                                        0x001A
+#define SPI_TxLen_ADR                                        0xC0DA
+#define SPI_TxLen_Bytes_POS                                  0x0000
+#define SPI_TxLen_Bytes_SIZ                                  0x0010
+
+
+/* SPI 16-bit DMA recieve base address */
+/*------------------------------------ */
+#define SPI_RxBlk_AFE                                        0x001C
+#define SPI_RxBlk_ADR                                        0xC0DC
+#define SPI_RxBlk_Base_POS                                   0x0000
+#define SPI_RxBlk_Base_SIZ                                   0x0010
+
+
+/* SPI 11-bit DMA recieve length */
+/*------------------------------------ */
+#define SPI_RxLen_AFE                                        0x001E
+#define SPI_RxLen_ADR                                        0xC0DE
+#define SPI_RxLen_Bytes_POS                                  0x0000
+#define SPI_RxLen_Bytes_SIZ                                  0x0010
+
+/* ------------------------- IDE PIO MODES ---------------------------------- */
+/* IDE Memory Map */
+/* -------------------------------------------------------------------------- */
+#define IDE_RGN                                              0xC050
+/* IDE 16-bit Data Register */
+#define IDE_Data_ADR                                         0xC050
+#define IDE_Data_MSK                                         0x0000
+#define IDE_Data_Data_POS                                    0x0000
+#define IDE_Data_Data_SIZ                                    0x0010
+
+/* IDE 8-bit Features/Status Register (write) */
+#define IDE_FeaturesStat_ADR                                 0xC052
+#define IDE_FeaturesStat_MSK                                 0x0000
+#define IDE_FeaturesStat_Data_POS                            0x0000
+#define IDE_FeaturesStat_Data_SIZ                            0x0008
+
+/* IDE Sector Count Register */
+#define IDE_SectCount_ADR                                    0xC054
+#define IDE_SectCount_MSK                                    0x0000
+#define IDE_SectCount_Count_POS                              0x0000
+#define IDE_SectCount_Count_SIZ                              0x0008
+
+/* IDE Sector Number Register */
+#define IDE_SectorNum_ADR                                    0xC056
+#define IDE_SectorNum_MSK                                    0x0000
+#define IDE_SectorNum_Count_POS                              0x0000
+#define IDE_SectorNum_Count_SIZ                              0x0008
+
+/* IDE Cylinder Low Register */
+#define IDE_CylLow_ADR                                       0xC058
+#define IDE_CylLow_MSK                                       0x0000
+#define IDE_CylLow_Cyl_POS                                   0x0000
+#define IDE_CylLow_Cyl_SIZ                                   0x0008
+
+/* IDE Cylinder High Register */
+#define IDE_CylHigh_ADR                                      0xC05A
+#define IDE_CylHigh_MSK                                      0x0000
+#define IDE_CylHigh_Cyl_POS                                  0x0000
+#define IDE_CylHigh_Cyl_SIZ                                  0x0008
+
+/* IDE Drive/Head Register */
+#define IDE_DrvHead_ADR                                      0xC05C
+#define IDE_DrvHead_MSK                                      0x0000
+#define IDE_DrvHead_Reg_POS                                  0x0000
+#define IDE_DrvHead_Reg_SIZ                                  0x0008
+
+/* IDE Command/Status Register */
+#define IDE_CmdStatus_ADR                                    0xC05E
+#define IDE_CmdStatus_MSK                                    0x0000
+#define IDE_CmdStatus_Reg_POS                                0x0000
+#define IDE_CmdStatus_Reg_SIZ                                0x0008
+
+/* IDE Status/Alternate Status Register */
+#define IDE_AltStat_ADR                                      0xC06C
+#define IDE_AltStat_MSK                                      0x0000
+#define IDE_AltStat_Reg_POS                                  0x0000
+#define IDE_AltStat_Reg_SIZ                                  0x0008
+
+
+/*********************************************************/
+/*********************************************************/
+/* UART REGISTERS                                        */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* UART CONTROL REGISTER [R/W]                           */
+/*********************************************************/
+
+#define UART_CTL_REG                                         0xC0E0 /* UART Control Register [R/W] */
+#define UART_CNTL                                            0xC0E0 /* Alias for BIOS code */
+
+/*  bit mask for 0xc0e2 */
+#define UART_RX_BUFF_FULL                                    0x0002
+
+/* FIELDS */
+
+#define UART_SCALE_SEL                                       0x0010 /* UART Scale (1:Divide by 8 prescaler for the UART Clock) */
+#define UART_BAUD_SEL                                        0x000E /* UART Baud */
+#define UART_EN                                              0x0001 /* UART Enable */
+
+/* BAUD VALUES */
+
+#define UART_7K2                                             0x000F /* 7.2K Baud (0.9K with DIV8_EN Set) */
+#define UART_9K6                                             0x000E /* 9.6K Baud (1.2K with DIV8_EN Set) */
+#define UART_14K4                                            0x000C /* 14.4K Baud (1.8K with DIV8_EN Set) */
+#define UART_19K2                                            0x000D /* 19.2K Baud (2.4K with DIV8_EN Set) */
+#define UART_28K8                                            0x000B /* 28.8K Baud (3.6K with DIV8_EN Set) */
+#define UART_38K4                                            0x000A /* 38.4K Baud (4.8K with DIV8_EN Set) */
+#define UART_57K6                                            0x0009 /* 57.6K Baud (7.2K with DIV8_EN Set) */
+#define UART_115K2                                           0x0008 /* 115.2K Baud (14.4K with DIV8_EN Set) */
+
+/*********************************************************/
+/* UART STATUS REGISTER [R]                              */
+/*********************************************************/
+
+#define UART_STAT_REG                                        0xC0E2 /* UART Status Register [R] */
+#define UART_STATUS                                          0xC0E2
+
+/* FIELDS */
+
+#define UART_RX_FULL                                         0x0002 /* UART Receive Full */
+#define UART_TX_EMPTY                                        0x0001 /* UART Transmit Empty */
+
+/*********************************************************/
+/* UART DATA REGISTER [R/W]                              */
+/*********************************************************/
+
+#define UART_DATA_REG                                        0xC0E4 /* UART Data Register [R/W] */
+#define UART_RX_REG                                          0xC0E4 /* Alias for BIOS code */
+#define UART_TX_REG                                          0xC0E4 /* Alias for BIOS code */
+
+/* FIELDS */
+#define UART_DATA                                            0x00FF /* UART Data */
+
+
+/*********************************************************/
+/*********************************************************/
+/* PWM REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* PWM CONTROL REGISTER [R/W]                            */
+/*********************************************************/
+
+#define PWM_CTL_REG                                          0xC0E6 /* PWM Control Register [R/W] */
+
+/* FIELDS */
+
+#define PWM_EN                                               0x8000 /* 1:Start, 0:Stop */
+#define PWM_PRESCALE_SEL                                     0x0E00 /* Prescale field (See values below) */
+#define PWM_MODE_SEL                                         0x0100 /* 1:Single cycle, 0:Repetitive cycle */
+#define PWM3_POL_SEL                                         0x0080 /* 1:Positive polarity, 0:Negative polarity  */
+#define PWM2_POL_SEL                                         0x0040 /* 1:Positive polarity, 0:Negative polarity  */
+#define PWM1_POL_SEL                                         0x0020 /* 1:Positive polarity, 0:Negative polarity  */
+#define PWM0_POL_SEL                                         0x0010 /* 1:Positive polarity, 0:Negative polarity  */
+#define PWM3_EN                                              0x0008 /* PWM3 Enable */
+#define PWM2_EN                                              0x0004 /* PWM2 Enable */
+#define PWM1_EN                                              0x0002 /* PWM1 Enable */
+#define PWM0_EN                                              0x0001 /* PWM0 Enable */
+
+/* PRESCALER FIELD VALUES */
+
+#define PWM_5K9                                              0x0007 /* 5.9 KHz  */
+#define PWM_23K5                                             0x0006 /* 23.5 KHz */
+#define PWM_93K8                                             0x0005 /* 93.8 KHz */
+#define PWM_375K                                             0x0004 /* 375 KHz */
+#define PWM_1M5                                              0x0003 /* 1.5 MHz */
+#define PWM_6M                                               0x0002 /* 6.0 MHz */
+#define PWM_24M                                              0x0001 /* 24.0 MHz */
+#define PWM_48M                                              0x0000 /* 48.0 MHz */
+
+/*********************************************************/
+/* PWM MAXIMUM COUNT REGISTER [R/W]                      */
+/*********************************************************/
+
+#define PWM_MAX_CNT_REG                                      0xC0E8 /* PWM Maximum Count Register [R/W] */
+
+/* FIELDS */
+
+#define PWM_MAX_CNT                                          0x03FF /* PWM Maximum Count */
+
+/*********************************************************/
+/* PWM n START REGISTERS [R/W]                           */
+/*********************************************************/
+
+#define PWM0_START_REG                                       0xC0EA /* PWM 0 Start Register [R/W] */
+#define PWM1_START_REG                                       0xC0EE /* PWM 1 Start Register [R/W] */
+#define PWM2_START_REG                                       0xC0F2 /* PWM 2 Start Register [R/W] */
+#define PWM3_START_REG                                       0xC0F6 /* PWM 3 Start Register [R/W] */
+
+/* FIELDS */
+
+#define PWM_START_CNT                                        0x03FF /* */
+
+/*********************************************************/
+/* PWM n STOP REGISTERS [R/W]                            */
+/*********************************************************/
+
+#define PWM0_STOP_REG                                        0xC0EC /* PWM 0 Stop Register [R/W] */
+#define PWM1_STOP_REG                                        0xC0F0 /* PWM 1 Stop Register [R/W] */
+#define PWM2_STOP_REG                                        0xC0F4 /* PWM 2 Stop Register [R/W] */
+#define PWM3_STOP_REG                                        0xC0F8 /* PWM 3 Stop Register [R/W] */
+
+/* FIELDS */
+
+#define PWM_STOP_CNT                                         0x03FF /* PWM Stop Count */
+
+/*********************************************************/
+/* PWM CYCLE COUNT REGISTER [R/W]                        */
+/*********************************************************/
+
+#define PWM_CYCLE_CNT_REG                                    0xC0FA /* PWM Cycle Count Register [R/W] */
+
+
+/*********************************************************/
+/*********************************************************/
+/* HPI REGISTERS                                         */
+/*********************************************************/
+/*********************************************************/
+
+/*********************************************************/
+/* HPI MAILBOX REGISTER [R/W]                            */
+/*********************************************************/
+
+#define HPI_MBX_REG                                          0xC0C4 /* HPI Mailbox Register [R/W] */
+
+/*********************************************************/
+/* HPI BREAKPOINT REGISTER [R]                           */
+/*********************************************************/
+
+#define HPI_BKPT_REG                                         0x0140 /* HPI Breakpoint Register [R] */
+/*********************************************************/
+/* INTERRUPT ROUTING REGISTER [R]                        */
+/*********************************************************/
+#define HPI_IRQ_ROUTING_REG                                  0x0142 /* HPI Interrupt Routing Register [R] */
+#define HPI_SIE_IE                                           0x0142
+#define HPI_SIE1_MSG_ADR                                     0x0144
+#define HPI_RESERVED                                         0x0146
+#define HPI_SIE2_MSG_ADR                                     0x0148
+
+#define HPI_RGN                                              0xC0C0 /* base address */
+
+/* HPI DMA Control Register */
+#define HPI_DMACtl_ADR                                       0xC0C0
+#define HPI_DMACtl_MSK                                       0x0000
+#define HPI_DMACtl_D0_BIT                                    0x0000
+#define HPI_DMACtl_D1_BIT                                    0x0001
+#define HPI_DMACtl_DREQ_BIT                                  0x0002
+
+/* HPI Mailbox Register */
+#define HPI_MAILBOX_REG                                      0xC0C6
+#define HPI_MailBox_ADR                                      0xC0C6
+#define HPI_MailBox_MSK                                      0x0000
+#define HPI_MailBox_POS                                      0x0000
+#define HPI_MailBox_SIZ                                      0x0010
+
+#define VBUS_TO_HPI_EN                                       0x8000 /* Route OTG VBUS Interrupt to HPI */
+#define ID_TO_HPI_EN                                         0x4000 /* Route OTG ID Interrupt to HPI */
+// cjv the following two definitions were swapped - I fixed.
+#define SOFEOP2_TO_CPU_EN                                    0x1000 /* Route SIE2 SOF/EOP Interrupt to CPU */
+#define SOFEOP2_TO_HPI_EN                                    0x2000 /* Route SIE2 SOF/EOP Interrupt to HPI */
+#define SOFEOP1_TO_CPU_EN                                    0x0400 /* Route SIE1 SOF/EOP Interrupt to CPU */
+#define SOFEOP1_TO_HPI_EN                                    0x0800 /* Route SIE1 SOF/EOP Interrupt to HPI */
+#define RST2_TO_HPI_EN                                       0x0200 /* Route SIE2 Reset Interrupt to HPI */
+#define HPI_SWAP_1_EN                                        0x0100 /* Swap HPI MSB/LSB */
+#define RESUME2_TO_HPI_EN                                    0x0080 /* Route SIE2 Resume Interrupt to HPI */
+#define RESUME1_TO_HPI_EN                                    0x0040 /* Route SIE1 Resume Interrupt to HPI */
+#define DONE2_TO_HPI_EN                                      0x0008 /* Route SIE2 Done Interrupt to HPI */
+#define DONE1_TO_HPI_EN                                      0x0004 /* Route SIE1 Done Interrupt to HPI */
+#define RST1_TO_HPI_EN                                       0x0002 /* Route SIE1 Reset Interrupt to HPI */
+#define HPI_SWAP_0_EN                                        0x0001 /* Swap HPI MSB/LSB (*MUST MATCH HPI_SWAP_1) */
+
+/* ALIASES */
+
+#define HOST2_SOEOP_TO_HPI_EN                                0x1000 /* Host 2 SOF/EOP Interrupt */
+#define HOST1_SOFEOP_TO_HPI_EN                               0x0400 /* Host 1 SOF/EOP Interrupt */
+#define DEVICE2_SOFEOP_TO_HPI_EN                             0x1000 /* Device 2 SOF/EOP Interrupt */
+#define DEVICE1_SOFEOP_TO_HPI_EN                             0x0400 /* Device 1 SOF/EOP Interrupt */
+
+#define HOST2_SOFEOP_TO_CPU_EN                               0x2000 /* Host 2 SOF/EOP Interrupt */
+#define HOST1_SOFEOP_TO_CPU_EN                               0x0800 /* Host 1 SOF/EOP Interrupt */
+#define DEVICE2_SOFEOP_TO_CPU_EN                             0x2000 /* Device 2 SOF/EOP Interrupt */
+#define DEVICE1_SOFEOP_TO_CPU_EN                             0x0800 /* Device 1 SOF/EOP Interrupt */
+
+#define HOST2_RESUME_TO_HPI_EN                               0x0080 /* Host 2 Resume Interrupt */
+#define HOST1_RESUME_TO_HPI_EN                               0x0040 /* Host 1 Resume Interrupt */
+#define DEVICE2_RESUME_TO_HPI_EN                             0x0080 /* Device 2 Resume Interrupt */
+#define DEVICE1_RESUME_TO_HPI_EN                             0x0040 /* Device 1 Resume Interrupt */
+
+#define HOST2_DONE_TO_HPI_EN                                 0x0008 /* Host 2 Done Interrupt */
+#define HOST1_DONE_TO_HPI_EN                                 0x0004 /* Host 1 Done Interrupt */
+#define DEVICE2_DONE_TO_HPI_EN                               0x0008 /* Device 2 Done Interrupt */
+#define DEVICE1_DONE_TO_HPI_EN                               0x0004 /* Device 1 Done Interrupt */
+
+#define HOST2_RESET_TO_HPI_EN                                0x0200 /* Host 2 Reset Interrupt */
+#define HOST1_RESET_TO_HPI_EN                                0x0002 /* Host 1 Reset Interrupt */
+#define DEVICE2_RESET_TO_HPI_EN                              0x0200 /* Device 2 Reset Interrupt */
+#define DEVICE1_RESET_TO_HPI_EN                              0x0002 /* Device 1 Reset Interrupt */
+
+/*********************************************************/
+/*********************************************************/
+/* HPI PORTS                                             */
+/*********************************************************/
+/*********************************************************/
+
+//#define HPI_BASE                                             0x0000
+
+/*********************************************************/
+/* HPI DATA PORT                                         */
+/*********************************************************/
+
+#define HPI_DATA_PORT                                        0x0000 /* HPI Data Port */
+
+/*********************************************************/
+/* HPI ADDRESS PORT                                      */
+/*********************************************************/
+
+#define HPI_ADDR_PORT                                        0x0002 /* HPI Address Port */
+
+/*********************************************************/
+/* HPI MAILBOX PORT                                      */
+/*********************************************************/
+
+#define HPI_MBX_PORT                                         0x0001 /* HPI Mailbox Port */
+
+/*********************************************************/
+/* HPI STATUS PORT                                       */
+/*********************************************************/
+
+/*
+** The HPI Status port is only accessible by an external host over the
+** HPI interface. It is accessed by performing an HPI read at the HPI
+** base address + 3.
+*/
+
+#define HPI_STAT_PORT                                        0x0003 /* HPI Status Port */
+
+#define VBUS_FLG                                             0x8000 /* OTG VBUS Interrupt */
+#define ID_FLG                                               0x4000 /* OTG ID Interrupt */
+#define SOFEOP2_FLG                                          0x1000 /* Host 2 SOF/EOP Interrupt */
+#define SOFEOP1_FLG                                          0x0400 /* Host 1 SOF/EOP Interrupt */
+#define RST2_FLG                                             0x0200 /* Host 2 Reset Interrupt */
+#define MBX_IN_FLG                                           0x0100 /* Message in pending (awaiting CPU read) */
+#define RESUME2_FLG                                          0x0080 /* Host 2 Resume Interrupt */
+#define RESUME1_FLG                                          0x0040 /* Host 1 Resume Interrupt */
+#define DONE2_FLG                                            0x0008 /* Host 2 Done Interrupt */
+#define DONE1_FLG                                            0x0004 /* Host 1 Done Interrupt */
+#define RST1_FLG                                             0x0002 /* Host 1 Reset Interrupt */
+#define MBX_OUT_FLG                                          0x0001 /* Message out available (awaiting external host read) */
+
+/* Aliases */
+
+#define HOST2_SOF_EOP_FLG                                    0x1000 /* Host 2 SOF/EOP Interrupt */
+#define HOST1_SOF_EOP_FLG                                    0x0400 /* Host 1 SOF/EOP Interrupt */
+#define DEV2_SOF_EOP_FLG                                     0x1000 /* Device 2 SOF/EOP Interrupt */
+#define DEV1_SOF_EOP_FLG                                     0x0400 /* Device 1 SOF/EOP Interrupt */
+
+#define HOST2_RST_FLG                                        0x0200 /* Host 2 Reset Interrupt */
+#define HOST1_RST_FLG                                        0x0002 /* Host 1 Reset Interrupt */
+#define DEV2_RST_FLG                                         0x0200 /* Device 2 Reset Interrupt */
+#define DEV1_RST_FLG                                         0x0002 /* Device 1 Reset Interrupt */
+
+#define HOST2_RESUME_FLG                                     0x0080 /* Host 2 Resume Interrupt */
+#define HOST1_RESUME_FLG                                     0x0040 /* Host 1 Resume Interrupt */
+#define DEV2_RESUME_FLG                                      0x0080 /* Device 2 Resume Interrupt */
+#define DEV1_RESUME_FLG                                      0x0040 /* Device 1 Resume Interrupt */
+
+#define HOST2_DONE_FLG                                       0x0008 /* Host 2 Done Interrupt */
+#define HOST1_DONE_FLG                                       0x0004 /* Host 1 Done Interrupt */
+#define DEV2_DONE_FLG                                        0x0008 /* Device 2 Done Interrupt */
+#define DEV1_DONE_FLG                                        0x0004 /* Device 1 Done Interrupt */
+
+/*===============================================================*/
+/* usb.inc                                                       */
+/*                                                               */
+/*   A header containing the SL16R slave SIE registers           */
+/*   Updated 8/16/01 For SIE1 and SIE2 New Address Assigned      */
+/*===============================================================*/
+
+#define O_SIE_CTRL0                                          0x0000
+#define O_SIE_BASE                                           0x0002
+#define O_SIE_LENGTH                                         0x0004
+#define O_SIE_PORT_SEL                                       0x0004
+#define O_SIE_PID                                            0x0006
+#define O_SIE_CTRL5                                          0x000A
+#define O_SIE_INT_EN                                         0x000C
+#define O_SIE_USB_ADDR                                       0x000E
+#define O_SIE_INT_STATUS                                     0x0010
+#define O_SIE_SOF_LO                                         0x0012
+#define O_SIE_PORT_SPD_SEL                                   0x0012 /* slave mode */
+#define O_SIE_SOF_HI                                         0x0014
+
+/* Endpoint Register Offsets */
+#define O_EP_BANK                                            0x0010 /* to EP bank offset */
+
+/* SIE Bases and Offsets */
+#define NUM_EP_PER_SIE                                       0x0008
+#define O_SIE1_EP_BASE                                       0x0000
+#define O_SIE2_EP_BASE                                       0x0080
+
+#define SIE_EP_BASE                                          0x0200
+#define SIE1_EP_BASE                                         0x0200
+#define SIE2_EP_BASE                                         0x0280
+
+/* Bank Offsets wrt SIE Base */
+
+#define O_EP0_BANK                                           0x0000
+#define O_EP1_BANK                                           0x0010
+#define O_EP2_BANK                                           0x0020
+#define O_EP3_BANK                                           0x0030
+#define O_EP4_BANK                                           0x0040
+#define O_EP5_BANK                                           0x0050
+#define O_EP6_BANK                                           0x0060
+#define O_EP7_BANK                                           0x0070
+
+/* SIE1 SLAVE EP Register Bank Base Addresses */
+#define SIE1_EP0_BASE                                        0x0200
+#define SIE1_EP1_BASE                                        0x0210
+#define SIE1_EP2_BASE                                        0x0220
+#define SIE1_EP3_BASE                                        0x0230
+#define SIE1_EP4_BASE                                        0x0240
+#define SIE1_EP5_BASE                                        0x0250
+#define SIE1_EP6_BASE                                        0x0260
+#define SIE1_EP7_BASE                                        0x0270
+
+/* SIE2 SLAVE EP Register Bank Base Addresses */
+#define SIE2_EP0_BASE                                        0x0280
+#define SIE2_EP1_BASE                                        0x0290
+#define SIE2_EP2_BASE                                        0x02A0
+#define SIE2_EP3_BASE                                        0x02B0
+#define SIE2_EP4_BASE                                        0x02C0
+#define SIE2_EP5_BASE                                        0x02D0
+#define SIE2_EP6_BASE                                        0x02E0
+#define SIE2_EP7_BASE                                        0x02F0
+
+/* Endpoint Register Offsets */
+#define O_EP_CONTROL                                         0x0000
+#define O_EP_BASE_ADDR                                       0x0002
+#define O_EP_BASE_LENGTH                                     0x0004
+#define O_EP_PACKET_STAT                                     0x0006 /* Read */
+#define O_EP_XFER_COUNT                                      0x0008 /* Read */
+
+/* Generic Processing EP data */
+#define O_EP_MAX_BYTES                                       0x000A
+#define O_EP_GF_BYTES_LEFT                                   0x000C
+#define O_EP_P_GF                                            0x000E
+
+
+/* Endpoint Control Register Bitmasks */
+#define bmEP_CTRL_STICKY                                     0x0080
+#define bmEP_CTRL_DATA1                                      0x0040
+#define bmEP_CTRL_STALL                                      0x0020
+#define bmEP_CTRL_ISO                                        0x0010
+#define bmEP_CTRL_NDS_B                                      0x0008
+#define bmEP_CTRL_DIR_IN                                     0x0004
+#define bmEP_CTRL_ENB                                        0x0002
+#define bmEP_CTRL_ARM                                        0x0001
+#define bmEP_CTRL_EP                                         0x0070
+#define EP_CTRL_OUT                                          0x0000
+
+/* Endpoint Packet Status Register Bitmasks */
+#define bmEP_PSR_ACK                                         0x0001
+#define bmEP_PSR_ERR                                         0x0002
+#define bmEP_PSR_TO                                          0x0004
+#define bmEP_PSR_DAT1                                        0x0008
+#define bmEP_PSR_SETUP                                       0x0010
+#define bmEP_PSR_OVERFLOW                                    0x0020
+#define bmEP_PSR_NAK                                         0x0040
+#define bmEP_PSR_STALL                                       0x0080
+#define bmEP_PSR_IN_ERR                                      0x0100
+#define bmEP_PSR_OUT_ERR                                     0x0200
+
+
+/* SIE Interrupt Status/Enable Register Bitmasks */
+#define bmISR_EP0                                            0x0001
+#define bmISR_EP1                                            0x0002
+#define bmISR_EP2                                            0x0004
+#define bmISR_EP3                                            0x0008
+#define bmISR_EP4                                            0x0010
+#define bmISR_EP5                                            0x0020
+#define bmISR_EP6                                            0x0040
+#define bmISR_EP7                                            0x0080
+
+#define bmISR_USB_RESET                                      0x0100
+#define bmISR_SOF                                            0x0200
+#define bmISR_WAKEUP                                         0x0400
+
+
+#define bmISR_USBA                                           0x0001
+#define bmISR_ALL                                            0x0F6F
+
+/* SIE#_USB_CONTROL Bitmasks   */
+#define bmCTRL_USB_ENABLE                                    0x0001
+#define bmCTRL_SUSPEND                                       0x0004
+
+#define bmCTRL_STANDBY                                       0x0040
+#define bmCTRL_PULLUP_AC                                     0x0080
+#define bmCTRL_PULLUP_BD                                     0x0100
+#define bmCTRL_HOST_MODE                                     0x0200
+#define bmCTRL_PORTAC_LOWSPD                                 0x0400
+#define bmCTRL_PORTBD_LOWSPD                                 0x0800
+#define CTRL_SLAVE_MODE                                      0x0000
+
+/* Force State Bits 3,4 */
+#define bmCTRL_FORCE_NORMAL                                  0x0000
+#define bmCTRL_FORCE_SEO                                     0x0010
+#define bmCTRL_FORCE_K                                       0x0018
+#define bmCTRL_FORCE_J                                       0x0008
+
+/* Port Speed Bitmasks SIE#_USB_PORT_SPEED */
+#define bmPSPD_LOW_SPEED_AC                                  0x4000
+#define bmPSPD_LOW_SPEED_BD                                  0x8000
+#define PSPD_FULL_SPEED                                      0x0000
+
+/* Port Select Bitmasks */
+#define bmPSEL_BD                                            0x4000
+#define PSEL_AC                                              0x0000
+
+/* generic definitions for BIOS */
+#define SUSB_NUM_EPS_ALL                                     0x0010
+#define SUSB_NUM_EPS_PER_SIE                                 0x0008
+
+/*----------------------------------------- */
+/* */
+/*   Chapter 9 Definitions */
+/*----------------------------------------- */
+/*   Device Requests */
+#define DR_GET_STATUS                                        0x0000
+#define DR_CLEAR_FEATURE                                     0x0001
+#define DR_SET_FEATURE                                       0x0003
+#define DR_SET_ADDRESS                                       0x0005
+#define DR_GET_DESCRIPTOR                                    0x0006
+#define DR_SET_DESCRIPTOR                                    0x0007
+#define DR_GET_CONFIG                                        0x0008
+#define DR_SET_CONFIG                                        0x0009
+#define DR_GET_INTERFACE                                     0x0010
+#define DR_SET_INTERFACE                                     0x0011
+
+/* Device Request Offsets */
+#define O_DR_REQTYPE                                         0x0000
+#define O_DR_REQ                                             0x0001
+#define O_DR_VALUE                                           0x0002
+#define O_DR_VALUE_LOBYTE                                    0x0002
+#define O_DR_VALUE_HIBYTE                                    0x0003
+#define O_DR_INDEX                                           0x0004
+#define O_DR_LEN                                             0x0006
+
+/*   Descriptor Types */
+#define DEVICE                                               0x0001
+#define CONFIGURATION                                        0x0002
+#define STRING                                               0x0003
+#define INTERFACE                                            0x0004
+#define ENDPOINT                                             0x0005
+
+
+/* Request Type Bitmasks */
+#define bmRT_DEVICE2HOST                                     0x0080
+#define bmRT_VENDOR_REQ                                      0x0040 /*Request Type */
+#define bmRT_CLASS_REQ                                       0x0020
+#define bmRT_INTERFACE                                       0x0001
+#define bmRT_ENDPOINT                                        0x0002
+#define bmRT_RECIPIENT_BITS                                  0x000F
+#define RT_DEVICE                                            0x0000
+
+/*   Endpoint Types */
+#define EP_TYPE_CONTROL                                      0x0000
+#define EP_TYPE_ISO                                          0x0001
+#define EP_TYPE_BULK                                         0x0002
+#define EP_TYPE_INT                                          0x0003
+
+/* BIOS Specific Default Configuration Definitions */
+#define EP0_BUFFER_LEN                                       0x0040
+#define EP1_BUFFER_LEN                                       0x0040
+#define EP2_BUFFER_LEN                                       0x0040
+
+/*   SUSB ERROR CODES */
+#define SUSB_ERR_NONE                                        0x0000
+#define SUSB_ERR_OUT_OF_RANGE                                0x0001
+#define SUSB_ERR_WRONG_DIR                                   0x0002
+#define SUSB_ERR_NULL_FRAME                                  0x0003
+#define SUSB_ERR_BAD_TRANS_TYPE                              0x0004
+#define SUSB_ERR_OVERFLOW                                    0x0005
+#define SUSB_ERR_SETUP_TERMINATION                           0x0006
+#define SUSB_ERR_EP_Q_FULL                                   0x0007
+#define SUSB_ERR_EP_STALLED                                  0x0008
+#define SUSB_ERR_EP_NOT_ENABLED                              0x0009
+#define SUSB_ERR_BAD_STATE_REQ                               0x000A
+
+/* Generic Ep - endpoint bitmask to indicate */
+/*   internal call to Generic EP where */
+/*   regs are already loaded */
+#define bmGENEP_REGS_LOADED                                  0x8000
+
+/*   Device Descriptor Offsets */
+#define O_DD_LENGTH                                          0x0000
+#define O_DD_TYPE                                            0x0001
+#define O_DD_USB_VERSION                                     0x0002
+#define O_DD_CLASS                                           0x0004
+#define O_DD_SUBCLASS                                        0x0005
+#define O_DD_PROTOCOL                                        0x0006
+#define O_DD_EP0_MAX_BYTES                                   0x0007
+#define O_DD_VID                                             0x0008
+#define O_DD_PID                                             0x000A
+#define O_DD_DEVICE_VERSION                                  0x000C
+#define O_DD_MFR_STRING_IDX                                  0x000E
+#define O_DD_PRODUCT_STRING_IDX                              0x000F
+#define O_DD_SN                                              0x0010
+#define O_DD_NUM_CONFIGS                                     0x0011
+
+/*   Configuration Descriptor Byte Offsets */
+#define O_CD_LENGTH                                          0x0000
+#define O_CD_TYPE                                            0x0001
+#define O_CD_TOTAL_LENGTH                                    0x0002
+#define O_CD_NUM_IFS                                         0x0004
+#define O_CD_CONFIG_NUM                                      0x0005
+#define O_CD_STRING_IDX                                      0x0006
+#define O_CD_ATTRIBUTES                                      0x0007
+#define O_CD_MAX_POWER                                       0x0008
+
+/*   Configuration Descriptor Attribute Bitmasks */
+#define bmCDATTR_RSVD                                        0x001F
+#define bmCDATTR_RWAKEUP                                     0x0020
+#define bmCDATTR_SELF_PWR                                    0x0040
+#define bmCDATTR_BUS_PWR                                     0x0080
+
+/*   Interface Descriptor Byte Offsets */
+#define O_ID_LENGTH                                          0x0000
+#define O_ID_TYPE                                            0x0001
+#define O_ID_IF_NUM                                          0x0002
+#define O_ID_ALT_SETTING                                     0x0003
+#define O_ID_NUM_EPS                                         0x0004
+#define O_ID_IF_CLASS                                        0x0005
+#define O_ID_IF_SUBCLASS                                     0x0006
+#define O_ID_IF_PROTO                                        0x0007
+#define O_ID_STRING_IDX                                      0x0008
+
+/*   Endpoint Descriptor Byte Offsets */
+#define O_ED_LENGTH                                          0x0000
+#define O_ED_TYPE                                            0x0001
+#define O_ED_ADDRESS                                         0x0002
+#define O_ED_ATTRIBUTES                                      0x0003
+#define O_ED_MAX_BYTES                                       0x0004
+#define O_ED_ITERVAL                                         0x0006
+
+#define O_SD_LENGTH                                          0x0000
+#define O_SD_TYPE                                            0x0001
+
+/*   EP Descriptor Address Bitmasks */
+#define bmEDADDR_EP_NUM                                      0x0007
+#define bmEDADDR_UNUSED                                      0x0070
+#define bmEDADDR_DIR_IN                                      0x0080
+
+/*   EP Descriptor Attribute Bitmasks */
+#define bmEDATTR_CONTROL                                     0x0000
+#define bmEDATTR_ISO                                         0x0001
+#define bmEDATTR_BULK                                        0x0010
+#define bmEDATTR_INT                                         0x0011
+#define bmEDATTR_UNUSED                                      0x00FC
+
+/* GetStatus Bitmasks */
+#define bmGS_REMOTE_WAKEUP                                   0x0002
+#define bmGS_SELF_POWERED                                    0x0001
+#define bmGS_EP_HALT                                         0x0001
+
+/* Feature Selectors */
+#define F_SEL_EP_HALT                                        0x0000
+#define F_SEL_RMT_WAKEUP                                     0x0001
+#define F_SEL_TEST_MODE                                      0x0002
+
+/* SUSB Device States */
+#define SUSB_STATE_DEFAULT                                   0x0000
+#define SUSB_STATE_ADDRESSED                                 0x000C
+#define SUSB_STATE_CONFIGD                                   0x0018
+
+/*********************************************************/
+/*  Hardware/Software Interrupt vectors                  */
+/*********************************************************/
+/* ========= HARWDARE INTERRUPTS ===========             */
+#define TIMER0_INT                                           0x0000
+#define TIMER0_VEC                                           0x0000 /* Vector location */
+#define TIMER1_INT                                           0x0001
+#define TIMER1_VEC                                           0x0002
+
+#define GP_IRQ0_INT                                          0x0002
+#define GP_IRQ0_VEC                                          0x0004
+#define GP_IRQ1_INT                                          0x0003
+#define GP_IRQ1_VEC                                          0x0006
+
+#define UART_TX_INT                                          0x0004
+#define UART_TX_VEC                                          0x0008
+#define UART_RX_INT                                          0x0005
+#define UART_RX_VEC                                          0x000A
+
+
+#define HSS_BLK_DONE_INT                                     0x0006
+#define HSS_BLK_DONE_VEC                                     0x000C
+#define HSS_RX_FULL_INT                                      0x0007
+#define HSS_RX_FULL_VEC                                      0x000E
+
+#define IDE_DMA_DONE_INT                                     0x0008
+#define IDE_DMA_DONE_VEC                                     0x0010
+
+#define Reserved9                                            0x0009
+
+#define HPI_MBOX_RX_FULL_INT                                 0x000A
+#define HPI_MBOX_RX_FULL_VEC                                 0x0014
+#define HPI_MBOX_TX_EMPTY_INT                                0x000B
+#define HPI_MBOX_TX_EMPTY_VEC                                0x0016
+
+#define SPI_TX_INT                                           0x000C
+#define SPI_TX_VEC                                           0x0018
+#define SPI_RX_INT                                           0x000D
+#define SPI_RX_VEC                                           0x001A
+#define SPI_DMA_DONE_INT                                     0x000E
+#define SPI_DMA_DONE_VEC                                     0x001C
+
+#define OTG_ID_VBUS_VALID_INT                                0x000F
+#define OTG_ID_VBUS_VALID_VEC                                0x001E
+
+#define SIE1_HOST_DONE_INT                                   0x0010
+#define SIE1_HOST_DONE_VEC                                   0x0020
+#define SIE1_HOST_SOF_INT                                    0x0011
+#define SIE1_HOST_SOF_VEC                                    0x0022
+#define SIE1_HOST_INS_REM_INT                                0x0012
+#define SIE1_HOST_INS_REM_VEC                                0x0024
+
+#define Reserved19                                           0x0013
+
+#define SIE1_SLAVE_RESET_INT                                 0x0014
+#define SIE1_SLAVE_RESET_VEC                                 0x0028
+#define SIE1_SLAVE_SOF_INT                                   0x0015
+#define SIE1_SLAVE_SOF_VEC                                   0x002A
+
+#define Reserved22                                           0x0016
+#define Reserved23                                           0x0017
+
+#define SIE2_HOST_DONE_INT                                   0x0018
+#define SIE2_HOST_DONE_VEC                                   0x0030
+#define SIE2_HOST_SOF_INT                                    0x0019
+#define SIE2_HOST_SOF_VEC                                    0x0032
+#define SIE2_HOST_INS_REM_INT                                0x001A
+#define SIE2_HOST_INS_REM_VEC                                0x0034
+
+#define Reserved27                                           0x001B
+
+#define SIE2_SLAVE_RESET_INT                                 0x001C
+#define SIE2_SLAVE_RESET_VEC                                 0x0038
+#define SIE2_SLAVE_SOF_INT                                   0x001D
+#define SIE2_SLAVE_SOF_VEC                                   0x003A
+
+#define Reserved30                                           0x001E
+#define Reserved31                                           0x001F
+
+#define SIE1_EP0_INT                                         0x0020
+#define SIE1_EP0_VEC                                         0x0040
+#define SIE1_EP1_INT                                         0x0021
+#define SIE1_EP1_VEC                                         0x0042
+#define SIE1_EP2_INT                                         0x0022
+#define SIE1_EP2_VEC                                         0x0044
+#define SIE1_EP3_INT                                         0x0023
+#define SIE1_EP3_VEC                                         0x0046
+#define SIE1_EP4_INT                                         0x0024
+#define SIE1_EP4_VEC                                         0x0048
+#define SIE1_EP5_INT                                         0x0025
+#define SIE1_EP5_VEC                                         0x004A
+#define SIE1_EP6_INT                                         0x0026
+#define SIE1_EP6_VEC                                         0x004C
+#define SIE1_EP7_INT                                         0x0027
+#define SIE1_EP7_VEC                                         0x004E
+
+#define SIE2_EP0_INT                                         0x0028
+#define SIE2_EP0_VEC                                         0x0050
+#define SIE2_EP1_INT                                         0x0029
+#define SIE2_EP1_VEC                                         0x0052
+#define SIE2_EP2_INT                                         0x002A
+#define SIE2_EP2_VEC                                         0x0054
+#define SIE2_EP3_INT                                         0x002B
+#define SIE2_EP3_VEC                                         0x0056
+#define SIE2_EP4_INT                                         0x002C
+#define SIE2_EP4_VEC                                         0x0058
+#define SIE2_EP5_INT                                         0x002D
+#define SIE2_EP5_VEC                                         0x005A
+#define SIE2_EP6_INT                                         0x002E
+#define SIE2_EP6_VEC                                         0x005C
+#define SIE2_EP7_INT                                         0x002F
+#define SIE2_EP7_VEC                                         0x005E
+
+/*********************************************************/
+/*  Interrupts 48 - 63 are reserved for future HW        */
+/*********************************************************/
+/* ========= SOFTWARE INTERRUPTS ===========             */
+
+#define I2C_INT                                              0x0040
+#define LI2C_INT                                             0x0041
+#define UART_INT                                             0x0042
+#define SCAN_INT                                             0x0043
+#define ALLOC_INT                                            0x0044
+#define IDLE_INT                                             0x0046
+#define IDLER_INT                                            0x0047
+#define INSERT_IDLE_INT                                      0x0048
+#define PUSHALL_INT                                          0x0049
+#define POPALL_INT                                           0x004A
+#define FREE_INT                                             0x004B
+#define REDO_ARENA                                           0x004C
+#define HW_SWAP_REG                                          0x004D
+#define HW_REST_REG                                          0x004E
+#define SCAN_DECODE_INT                                      0x004F
+
+/*********************************************************/
+/* -- INTs 80 to 115 for SUSB ---                        */
+/*********************************************************/
+#define SUSB1_SEND_INT                                       0x0050
+#define SUSB1_RECEIVE_INT                                    0x0051
+#define SUSB1_STALL_INT                                      0x0052
+#define SUSB1_STANDARD_INT                                   0x0053
+#define SUSB1_STANDARD_LOADER_VEC                            0x00A8
+#define SUSB1_VENDOR_INT                                     0x0055
+#define SUSB1_VENDOR_LOADER_VEC                              0x00AC
+#define SUSB1_CLASS_INT                                      0x0057
+#define SUSB1_CLASS_LOADER_VEC                               0x00B0
+#define SUSB1_FINISH_INT                                     0x0059
+#define SUSB1_DEV_DESC_VEC                                   0x00B4
+#define SUSB1_CONFIG_DESC_VEC                                0x00B6
+#define SUSB1_STRING_DESC_VEC                                0x00B8
+#define SUSB1_PARSE_CONFIG_INT                               0x005D
+#define SUSB1_LOADER_INT                                     0x005E
+#define SUSB1_DELTA_CONFIG_INT                               0x005F
+
+#define SUSB2_SEND_INT                                       0x0060
+#define SUSB2_RECEIVE_INT                                    0x0061
+#define SUSB2_STALL_INT                                      0x0062
+#define SUSB2_STANDARD_INT                                   0x0063
+#define SUSB2_STANDARD_LOADER_VEC                            0x00C8
+#define SUSB2_VENDOR_INT                                     0x0065
+#define SUSB2_VENDOR_LOADER_VEC                              0x00CC
+#define SUSB2_CLASS_INT                                      0x0067
+#define SUSB2_CLASS_LOADER_VEC                               0x00D0
+#define SUSB2_FINISH_INT                                     0x0069
+#define SUSB2_DEV_DESC_VEC                                   0x00D4
+#define SUSB2_CONFIG_DESC_VEC                                0x00D6
+#define SUSB2_STRING_DESC_VEC                                0x00D8
+#define SUSB2_PARSE_CONFIG_INT                               0x006D
+#define SUSB2_LOADER_INT                                     0x006E
+#define SUSB2_DELTA_CONFIG_INT                               0x006F
+#define USB_INIT_INT                                         0x0070
+#define SUSB_INIT_INT                                        0x0071
+#define REMOTE_WAKEUP_INT                                    0x0077
+#define START_SRP_INT                                        0x0078
+
+/* SW INT OFFSETS */
+/* _VEC suffix indicates value is an address */
+/* _INT suffix indicates the sw INT value (1/2 of address) */
+#define SUSB2_SWINT_BASE                                     0x00C0
+#define SUSB1_SWINT_BASE                                     0x00A0
+#define SUSB_SWINT_BASE                                      0x00A0
+#define O_SWINT_SUSB1                                        0x0000
+#define O_SWINT_SUSB2                                        0x0020
+
+#define O_SWINT_SEND                                         0x0000
+#define O_SWINT_RECEIVE                                      0x0002
+#define O_SWINT_STALL                                        0x0004
+#define O_SWINT_STANDARD                                     0x0006
+#define O_SWINT_STD_LDR                                      0x0008
+#define O_SWINT_VENDOR_INT                                   0x000A
+#define O_SWINT_VENDOR_LDR                                   0x000C
+#define O_SWINT_CLASS                                        0x000E
+#define O_SWINT_CLASS_LDR                                    0x0010
+#define O_SWINT_FINISH                                       0x0012
+#define O_SWINT_DEV_DESC                                     0x0014
+#define O_SWINT_CONFIG_DESC                                  0x0016
+#define O_SWINT_STRING_DESC                                  0x0018
+#define O_SWINT_PARSE_CONFIG                                 0x001A
+#define O_SWINT_LDR                                          0x001C
+#define O_SWINT_DELTA_CONFIG                                 0x001E
+
+/*********************************************************/
+/* --- 114 - 117 for Host SW INT's ---                   */
+/*********************************************************/
+#define HUSB_SIE1_INIT_INT                                   0x0072
+#define HUSB_SIE2_INIT_INT                                   0x0073
+#define HUSB_RESET_INT                                       0x0074
+
+#define SUSB1_OTG_DESC_VEC                                   0x00EE
+#define PWR_DOWN_INT                                         0x0078
+
+/*********************************************************/
+/* -- CMD Processor INTs ---                             */
+/*********************************************************/
+#define SEND_HOST_CMD_INT                                    0x0079
+#define PROCESS_PORT_CMD_INT                                 0x007A
+#define PROCESS_CRB_INT                                      0x007B
+
+/*********************************************************/
+/*--- INT 125, 126 and 127 for Debugger ----             */
+/*********************************************************/
+
+
+
+#endif
+
diff --git a/software/usb/src/io_handler.c b/software/usb/src/io_handler.c
new file mode 100644
index 0000000000000000000000000000000000000000..79905d3d434209f893f8cd0e3facded5413cc2a8
--- /dev/null
+++ b/software/usb/src/io_handler.c
@@ -0,0 +1,43 @@
+//io_handler.c
+#include "io_handler.h"
+#include <stdio.h>
+#include "alt_types.h"
+#include "system.h"
+
+#define otg_hpi_address		(volatile int*) 	OTG_HPI_ADDRESS_BASE
+#define otg_hpi_data		(volatile int*)	    OTG_HPI_DATA_BASE
+#define otg_hpi_r			(volatile char*)	OTG_HPI_R_BASE
+#define otg_hpi_cs			(volatile char*)	OTG_HPI_CS_BASE //FOR SOME REASON CS BASE BEHAVES WEIRDLY MIGHT HAVE TO SET MANUALLY
+#define otg_hpi_w			(volatile char*)	OTG_HPI_W_BASE
+
+
+void IO_init(void)
+{
+	*otg_hpi_cs = 0;
+	*otg_hpi_r = 1;
+	*otg_hpi_w = 1;
+	*otg_hpi_address = 0;
+	*otg_hpi_data = 0;
+}
+
+void IO_write(alt_u8 Address, alt_u16 Data)
+{
+	*otg_hpi_cs = 0;
+	*otg_hpi_r = 1;
+	*otg_hpi_address = Address;
+	*otg_hpi_data = Data;
+	*otg_hpi_w = 0;
+	*otg_hpi_w = 1;
+}
+
+alt_u16 IO_read(alt_u8 Address)
+{
+	alt_u16 ret;
+	*otg_hpi_cs = 0;
+	*otg_hpi_address = Address;
+	*otg_hpi_w = 1;
+	*otg_hpi_r = 0;
+	ret = *otg_hpi_data;
+	*otg_hpi_r = 1;
+	return ret;
+}
diff --git a/software/usb/src/io_handler.h b/software/usb/src/io_handler.h
new file mode 100644
index 0000000000000000000000000000000000000000..4916b00cb0209db644e5c90da7dde2a42b1d3fa6
--- /dev/null
+++ b/software/usb/src/io_handler.h
@@ -0,0 +1,10 @@
+#ifndef IO_HANDLER_H_
+#define IO_HANDLER_H_
+#include "alt_types.h"
+
+void IO_write(alt_u8 Address, alt_u16 Data);
+alt_u16 IO_read(alt_u8 Address);
+void IO_init(void);
+
+
+#endif
diff --git a/software/usb/src/lcp_cmd.h b/software/usb/src/lcp_cmd.h
new file mode 100644
index 0000000000000000000000000000000000000000..46a409de6e92fa6f05e149f0aa73e9f28b21365d
--- /dev/null
+++ b/software/usb/src/lcp_cmd.h
@@ -0,0 +1,101 @@
+#ifndef __Generatedlcp_cmd_
+#define __Generatedlcp_cmd_
+
+/*
+ * This file is machine generated as part of CDS.
+ *
+ * DO NOT EDIT!
+ *
+ * Generated on 01/31/2003, 13:41:00
+ * by program "cds2inc" version 1.15 Beta
+ * from source file "lcp_cmd.cds".
+ *
+ */
+
+/************************************************************ */
+/* LCP COMMUNICATION EQUATES - Common for HPI, HSS and SPI    */
+/************************************************************ */
+/* THESE DEFINITIONS DEFINE THE LYBERTY CONTROL PROTOCOL (LCP) */
+/* SBN: Jan/28/03 Update Host/Slave SIEx Message codde handle */
+/* SBN: Jan/26/03 Remove CRB code */
+
+
+/* ====== Default DTL Ports and CMDS ====== */
+#define PORT_CMD_PROC                                        0x0000
+
+/* --- CMDS --- */
+#define CP_GET_PORT_LIST                                     0x0000
+#define CP_SINGLE_PORT_MODE                                  0x0001 /*-- One port at a time access */
+#define CP_MULTI_PORT_MODE                                   0x0002 /*-- Multiple Ports Active at a time */
+
+#define PORT_HUSB                                            0x0001 /* SIE1/SIE2 and USB_A-USB_D controlled via CMDs */
+
+#define PORT_SUSB                                            0x0002 /* SIE1/SIE2 and USB_A-USB_D controlled via CMDs */
+
+#define PORT_SPI                                             0x0003
+
+#define PORT_HSS                                             0x0004
+
+#define PORT_IDE                                             0x0005
+
+#define PORT_HPI                                             0x0006 /* HPI Master Mode DMA and MailBox control */
+
+#define PORT_DRAM                                            0x0007
+
+
+/* ====== HOST TO LYBERTY PORT COMMAND EQUATES ====== */
+
+/* -- CMDs common to all ports -- */
+#define COMM_RESET                                           0xFA50
+#define COMM_JUMP2CODE                                       0xCE00 /* CE = CMD Equate */
+#define COMM_EXEC_INT                                        0xCE01
+#define COMM_READ_CTRL_REG                                   0xCE02
+#define COMM_WRITE_CTRL_REG                                  0xCE03
+#define COMM_CALL_CODE                                       0xCE04
+#define COMM_READ_XMEM                                       0xCE05 /* Can access IRAM too but uses a small buffer */
+#define COMM_WRITE_XMEM                                      0xCE06 /*   compared to READ_MEM and WRITE_MEM */
+#define COMM_CONFIG                                          0xCE07 /* Uses COMM_BAUD_RATE to change HSS BaudRate etc */
+
+/* -- CMDs for HSS and SPI  -- */
+#define COMM_READ_MEM                                        0xCE08 /* Addr and Len sent as part of CMD  packet  */
+#define COMM_WRITE_MEM                                       0xCE09 /* Addr and Len sent as part of CMD packet  */
+
+/* ====== LYBERTY TO HOST RESPONSE AND COMMAND EQUATES ====== */
+/* ----- Response Equates should Use 0xCxxx, 0xDxxx, 0xExxx, 0xFxxx --- */
+/* General Responses */
+#define COMM_ACK                                             0x0FED /* I ate it just fine. */
+#define COMM_NAK                                             0xDEAD /* Sorry I'm not feeling well. */
+
+/* Message for SIE1 and SIE2 in register 0x144 and 0x148 */
+#define SUSB_EP0_MSG                                         0x0001
+#define SUSB_EP1_MSG                                         0x0002
+#define SUSB_EP2_MSG                                         0x0004
+#define SUSB_EP3_MSG                                         0x0008
+#define SUSB_EP4_MSG                                         0x0010
+#define SUSB_EP5_MSG                                         0x0020
+#define SUSB_EP6_MSG                                         0x0040
+#define SUSB_EP7_MSG                                         0x0080
+#define SUSB_RST_MSG                                         0x0100
+#define SUSB_SOF_MSG                                         0x0200
+#define SUSB_CFG_MSG                                         0x0400 /* send these flags to external processor */
+#define SUSB_SUS_MSG                                         0x0800
+#define SUSB_VBUS_MSG                                        0x8000
+#define SUSB_ID_MSG                                          0x4000
+
+/* ----- Commands To Host (HPI Only) ----- (use -0x00xx - 0x0Fxx) where top byte is Port Num) */
+/* NDX new bit map for Host in both register 0x144 and 0x148 */
+#define HUSB_TDListDone                                      0x1000 /*TDListDone message */
+
+/* Sharing bits */
+#define HUSB_SOF                                             0x2000 /*SOF message */
+#define HUSB_ARMV                                            0x0001 /*Device Remove message */
+#define HUSB_AINS_FS                                         0x0002 /*Full Speed Device Insert message */
+#define HUSB_AINS_LS                                         0x0004 /*Low Speed Device Insert message */
+#define HUSB_AWakeUp                                         0x0008 /*WakeUp message */
+#define HUSB_BRMV                                            0x0010 /*Device Remove message */
+#define HUSB_BINS_FS                                         0x0020 /*Full Speed Device Insert message */
+#define HUSB_BINS_LS                                         0x0040 /*Low Speed Device Insert message */
+#define HUSB_BWakeUp                                         0x0080 /*WakeUp message */
+
+
+#endif /* __Generatedlcp_cmd_ */
diff --git a/software/usb/src/lcp_data.h b/software/usb/src/lcp_data.h
new file mode 100644
index 0000000000000000000000000000000000000000..5857912c32a3add9ede34d3c06c2d1ea5d545d99
--- /dev/null
+++ b/software/usb/src/lcp_data.h
@@ -0,0 +1,79 @@
+#ifndef __Generatedlcp_data_
+#define __Generatedlcp_data_
+
+/*
+ * This file is machine generated as part of CDS.
+ *
+ * DO NOT EDIT!
+ *
+ * Generated on 01/31/2003, 13:41:14
+ * by program "cds2inc" version 1.15 Beta
+ * from source file "lcp_data.cds".
+ *
+ */
+
+/************************************************************ */
+/* Lyberty Data Pointers for Common Data Area */
+/************************************************************ */
+/* SBN: Jan/27/03 update for new LCP code */
+
+#define _start_of_comm                                       0x019A
+#define lcp_table                                            0x019A /* COMM_TRANSPORT */
+#define snd_msg                                              0x019C /* common send msg routine */
+#define lcp_sema                                             0x019E /* lcp_semaphore */
+#define lcp_chain                                            0x01A0 /* chain for lcp idle loop */
+#define lcp_rsp                                              0x01A2 /* CommConfig: location 0x1a4-0x1ae are free */
+
+
+/* -----Memory adress for send the TD list pointer and Semaphore in USB HOST */
+/* -----OWNER: NDX.  */
+#define HUSB_SIE1_pCurrentTDPtr                              0x01B0 /* Address to SIE1 current TD pointer */
+#define HUSB_SIE2_pCurrentTDPtr                              0x01B2 /* Address to SIE2 current TD pointer */
+#define HUSB_pEOT                                            0x01B4 /* Address to End Of Transfer  */
+#define HUSB_SIE1_pTDListDone_Sem                            0x01B6 /* Address to SIE1 TD List Done semaphore */
+#define HUSB_SIE2_pTDListDone_Sem                            0x01B8 /* Address to SIE2 TD List Done semaphore */
+
+/* ===== CMD DATA AREA - UNION for ALL COMMANDS ============   */
+/* --- 8 byte HSS/SPI FIFO Data goes in here --- */
+#define COMM_PORT_CMD                                        0x01BA
+#define COMM_PORT_DATA                                       0x01BC /* Generic Ptr to CMD data in HSS FIFO */
+
+/* -- DATA UNION FOR SIMPLE PORT CMDS -- */
+#define COMM_MEM_ADDR                                        0x01BC /* -- For COMM_RD/WR_MEM */
+#define COMM_MEM_LEN                                         0x01BE /* -- For COMM_RD/WR_MEM */
+#define COMM_LAST_DATA                                       0x01C0 /* -- UNUSED but HSS FiFo can handle this last data */
+
+#define COMM_CTRL_REG_ADDR                                   0x01BC /* -- For COMM_RD/WR_CTRL_REG */
+#define COMM_CTRL_REG_DATA                                   0x01BE /* -- For COMM_RD/WR_CTRL_REG */
+#define COMM_CTRL_REG_LOGIC                                  0x01C0 /* -- User to AND/OR Reg */
+#define REG_WRITE_FLG                                        0x0000
+#define REG_AND_FLG                                          0x0001
+#define REG_OR_FLG                                           0x0002
+
+#define COMM_BAUD_RATE                                       0x01BC /* -- For COMM_SET_BAUD in scalar units for the given I/F */
+#define COMM_TIMEOUT                                         0x01BE /* -- For using Timerout on Sending Response to host. */
+#define COMM_CODE_ADDR                                       0x01BC /* -- For COMM_CALL_CODE and COMM_JUMP2CODE */
+
+/* !!! NOTE: For HSS/SPI all of the above are sent in FIFO */
+/*           For HPI done with HW Access. */
+/* --- Register Buffers for EXEC_INT Commands */
+#define COMM_INT_NUM                                         0x01C2 /* -- For COMM_EXEC_INT */
+#define COMM_R0                                              0x01C4 /* This data struct must be written via MEM_WRITE commands for HSS and SPI */
+#define COMM_R1                                              0x01C6
+#define COMM_R2                                              0x01C8
+#define COMM_R3                                              0x01CA
+#define COMM_R4                                              0x01CC
+#define COMM_R5                                              0x01CE
+#define COMM_R6                                              0x01D0
+#define COMM_R7                                              0x01D2
+#define COMM_R8                                              0x01D4
+#define COMM_R9                                              0x01D6
+#define COMM_R10                                             0x01D8
+#define COMM_R11                                             0x01DA
+#define COMM_R12                                             0x01DC
+#define COMM_R13                                             0x01DE
+
+/*============================================================= */
+/* BIOS free memory area: 0x1E0 - 0x1FE */
+
+#endif /* __Generatedlcp_data_ */
diff --git a/software/usb/src/main.c b/software/usb/src/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..9071444fad1f6bcd28fd06a8b32155c026498e1a
--- /dev/null
+++ b/software/usb/src/main.c
@@ -0,0 +1,565 @@
+/*---------------------------------------------------------------------------
+  --      main.c                                                    	   --
+  --      Christine Chen                                                   --
+  --      Ref. DE2-115 Demonstrations by Terasic Technologies Inc.         --
+  --      Fall 2014                                                        --
+  --                                                                       --
+  --      For use with ECE 298 Experiment 7                                --
+  --      UIUC ECE Department                                              --
+  ---------------------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <io.h>
+#include <fcntl.h>
+
+#include "system.h"
+#include "alt_types.h"
+#include <unistd.h>  // usleep 
+#include "sys/alt_irq.h"
+#include "io_handler.h"
+
+#include "cy7c67200.h"
+#include "usb.h"
+#include "lcp_cmd.h"
+#include "lcp_data.h"
+
+
+//----------------------------------------------------------------------------------------//
+//
+//                                Main function
+//
+//----------------------------------------------------------------------------------------//
+int main(void)
+{
+	IO_init();
+
+	/*while(1)
+	{
+		IO_write(HPI_MAILBOX,COMM_EXEC_INT);
+		printf("[ERROR]:routine mailbox data is %x\n",IO_read(HPI_MAILBOX));
+		//UsbWrite(0xc008,0x000f);
+		//UsbRead(0xc008);
+		usleep(10*10000);
+	}*/
+
+	alt_u16 intStat;
+	alt_u16 usb_ctl_val;
+	static alt_u16 ctl_reg = 0;
+	static alt_u16 no_device = 0;
+	alt_u16 fs_device = 0;
+	int keycode = 0;
+	alt_u8 toggle = 0;
+	alt_u8 data_size;
+	alt_u8 hot_plug_count;
+	alt_u16 code;
+
+	printf("USB keyboard setup...\n\n");
+
+	//----------------------------------------SIE1 initial---------------------------------------------------//
+	USB_HOT_PLUG:
+	UsbSoftReset();
+
+	// STEP 1a:
+	UsbWrite (HPI_SIE1_MSG_ADR, 0);
+	UsbWrite (HOST1_STAT_REG, 0xFFFF);
+
+	/* Set HUSB_pEOT time */
+	UsbWrite(HUSB_pEOT, 600); // adjust the according to your USB device speed
+
+	usb_ctl_val = SOFEOP1_TO_CPU_EN | RESUME1_TO_HPI_EN;// | SOFEOP1_TO_HPI_EN;
+	UsbWrite(HPI_IRQ_ROUTING_REG, usb_ctl_val);
+
+	intStat = A_CHG_IRQ_EN | SOF_EOP_IRQ_EN ;
+	UsbWrite(HOST1_IRQ_EN_REG, intStat);
+	// STEP 1a end
+
+	// STEP 1b begin
+	UsbWrite(COMM_R0,0x0000);//reset time
+	UsbWrite(COMM_R1,0x0000);  //port number
+	UsbWrite(COMM_R2,0x0000);  //r1
+	UsbWrite(COMM_R3,0x0000);  //r1
+	UsbWrite(COMM_R4,0x0000);  //r1
+	UsbWrite(COMM_R5,0x0000);  //r1
+	UsbWrite(COMM_R6,0x0000);  //r1
+	UsbWrite(COMM_R7,0x0000);  //r1
+	UsbWrite(COMM_R8,0x0000);  //r1
+	UsbWrite(COMM_R9,0x0000);  //r1
+	UsbWrite(COMM_R10,0x0000);  //r1
+	UsbWrite(COMM_R11,0x0000);  //r1
+	UsbWrite(COMM_R12,0x0000);  //r1
+	UsbWrite(COMM_R13,0x0000);  //r1
+	UsbWrite(COMM_INT_NUM,HUSB_SIE1_INIT_INT); //HUSB_SIE1_INIT_INT
+	IO_write(HPI_MAILBOX,COMM_EXEC_INT);
+
+	while (!(IO_read(HPI_STATUS) & 0xFFFF) )  //read sie1 msg register
+	{
+	}
+	while (IO_read(HPI_MAILBOX) != COMM_ACK)
+	{
+		printf("[ERROR]:routine mailbox data is %x\n",IO_read(HPI_MAILBOX));
+		goto USB_HOT_PLUG;
+	}
+	// STEP 1b end
+
+	printf("STEP 1 Complete");
+	// STEP 2 begin
+	UsbWrite(COMM_INT_NUM,HUSB_RESET_INT); //husb reset
+	UsbWrite(COMM_R0,0x003c);//reset time
+	UsbWrite(COMM_R1,0x0000);  //port number
+	UsbWrite(COMM_R2,0x0000);  //r1
+	UsbWrite(COMM_R3,0x0000);  //r1
+	UsbWrite(COMM_R4,0x0000);  //r1
+	UsbWrite(COMM_R5,0x0000);  //r1
+	UsbWrite(COMM_R6,0x0000);  //r1
+	UsbWrite(COMM_R7,0x0000);  //r1
+	UsbWrite(COMM_R8,0x0000);  //r1
+	UsbWrite(COMM_R9,0x0000);  //r1
+	UsbWrite(COMM_R10,0x0000);  //r1
+	UsbWrite(COMM_R11,0x0000);  //r1
+	UsbWrite(COMM_R12,0x0000);  //r1
+	UsbWrite(COMM_R13,0x0000);  //r1
+
+	IO_write(HPI_MAILBOX,COMM_EXEC_INT);
+
+	while (IO_read(HPI_MAILBOX) != COMM_ACK)
+	{
+		printf("[ERROR]:routine mailbox data is %x\n",IO_read(HPI_MAILBOX));
+		goto USB_HOT_PLUG;
+	}
+	// STEP 2 end
+
+	ctl_reg = USB1_CTL_REG;
+	no_device = (A_DP_STAT | A_DM_STAT);
+	fs_device = A_DP_STAT;
+	usb_ctl_val = UsbRead(ctl_reg);
+
+	if (!(usb_ctl_val & no_device))
+	{
+		for(hot_plug_count = 0 ; hot_plug_count < 5 ; hot_plug_count++)
+		{
+			usleep(5*1000);
+			usb_ctl_val = UsbRead(ctl_reg);
+			if(usb_ctl_val & no_device) break;
+		}
+		if(!(usb_ctl_val & no_device))
+		{
+			printf("\n[INFO]: no device is present in SIE1!\n");
+			printf("[INFO]: please insert a USB keyboard in SIE1!\n");
+			while (!(usb_ctl_val & no_device))
+			{
+				usb_ctl_val = UsbRead(ctl_reg);
+				if(usb_ctl_val & no_device)
+					goto USB_HOT_PLUG;
+
+				usleep(2000);
+			}
+		}
+	}
+	else
+	{
+		/* check for low speed or full speed by reading D+ and D- lines */
+		if (usb_ctl_val & fs_device)
+		{
+			printf("[INFO]: full speed device\n");
+		}
+		else
+		{
+			printf("[INFO]: low speed device\n");
+		}
+	}
+
+
+
+	// STEP 3 begin
+	//------------------------------------------------------set address -----------------------------------------------------------------
+	UsbSetAddress();
+
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		UsbSetAddress();
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506); // i
+	printf("[ENUM PROCESS]:step 3 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508); // n
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]:step 3 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03) // retries occurred
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+
+		goto USB_HOT_PLUG;
+	}
+
+	printf("------------[ENUM PROCESS]:set address done!---------------\n");
+
+	// STEP 4 begin
+	//-------------------------------get device descriptor-1 -----------------------------------//
+	// TASK: Call the appropriate function for this step.
+	UsbGetDeviceDesc1(); 	// Get Device Descriptor -1
+
+	//usleep(10*1000);
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		// TASK: Call the appropriate function again if it wasn't processed successfully.
+		UsbGetDeviceDesc1();
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506);
+	printf("[ENUM PROCESS]:step 4 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]:step 4 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03)
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+	}
+
+	printf("---------------[ENUM PROCESS]:get device descriptor-1 done!-----------------\n");
+
+
+	//--------------------------------get device descriptor-2---------------------------------------------//
+	//get device descriptor
+	// TASK: Call the appropriate function for this step.
+	UsbGetDeviceDesc2(); 	// Get Device Descriptor -2
+
+	//if no message
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		//resend the get device descriptor
+		//get device descriptor
+		// TASK: Call the appropriate function again if it wasn't processed successfully.
+		UsbGetDeviceDesc2();
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506);
+	printf("[ENUM PROCESS]:step 4 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]:step 4 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03)
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+	}
+
+	printf("------------[ENUM PROCESS]:get device descriptor-2 done!--------------\n");
+
+
+	// STEP 5 begin
+	//-----------------------------------get configuration descriptor -1 ----------------------------------//
+	// TASK: Call the appropriate function for this step.
+	UsbGetConfigDesc1(); 	// Get Configuration Descriptor -1
+
+	//if no message
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		//resend the get device descriptor
+		//get device descriptor
+
+		// TASK: Call the appropriate function again if it wasn't processed successfully.
+		UsbGetConfigDesc1();
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506);
+	printf("[ENUM PROCESS]:step 5 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]:step 5 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03)
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+	}
+	printf("------------[ENUM PROCESS]:get configuration descriptor-1 pass------------\n");
+
+	// STEP 6 begin
+	//-----------------------------------get configuration descriptor-2------------------------------------//
+	//get device descriptor
+	// TASK: Call the appropriate function for this step.
+	UsbGetConfigDesc2(); 	// Get Configuration Descriptor -2
+
+	usleep(100*1000);
+	//if no message
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		// TASK: Call the appropriate function again if it wasn't processed successfully.
+		UsbGetConfigDesc2();
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506);
+	printf("[ENUM PROCESS]:step 6 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]:step 6 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03)
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+	}
+
+
+	printf("-----------[ENUM PROCESS]:get configuration descriptor-2 done!------------\n");
+
+
+	// ---------------------------------get device info---------------------------------------------//
+
+	// TASK: Write the address to read from the memory for byte 7 of the interface descriptor to HPI_ADDR.
+	IO_write(HPI_ADDR,0x056c);
+	code = IO_read(HPI_DATA);
+	code = code & 0x003;
+	printf("\ncode = %x\n", code);
+
+	if (code == 0x02)
+	{
+		printf("\n[INFO]:check TD rec data7 \n[INFO]:Mouse Detected!!!\n\n");
+	}
+	else
+	{
+		printf("\n[INFO]:Mouse Not Detected!!! \n\n");
+	}
+
+	// TASK: Write the address to read from the memory for the endpoint descriptor to HPI_ADDR.
+
+	IO_write(HPI_ADDR,0x0576);
+	IO_write(HPI_DATA,0x073F);
+	IO_write(HPI_DATA,0x8105);
+	IO_write(HPI_DATA,0x0003);
+	IO_write(HPI_DATA,0x0008);
+	IO_write(HPI_DATA,0xAC0A);
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0576); //HUSB_SIE1_pCurrentTDPtr
+
+	//data_size = (IO_read(HPI_DATA)>>8)&0x0ff;
+	//data_size = 0x08;//(IO_read(HPI_DATA))&0x0ff;
+	//UsbPrintMem();
+	IO_write(HPI_ADDR,0x057c);
+	data_size = (IO_read(HPI_DATA))&0x0ff;
+	printf("[ENUM PROCESS]:data packet size is %d\n",data_size);
+	// STEP 7 begin
+	//------------------------------------set configuration -----------------------------------------//
+	// TASK: Call the appropriate function for this step.
+	UsbSetConfig();		// Set Configuration
+
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		// TASK: Call the appropriate function again if it wasn't processed successfully.
+		UsbSetConfig();		// Set Configuration
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506);
+	printf("[ENUM PROCESS]:step 7 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]:step 7 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03)
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+	}
+
+	printf("------------[ENUM PROCESS]:set configuration done!-------------------\n");
+
+	//----------------------------------------------class request out ------------------------------------------//
+	// TASK: Call the appropriate function for this step.
+	UsbClassRequest();
+
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		// TASK: Call the appropriate function again if it wasn't processed successfully.
+		UsbClassRequest();
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506);
+	printf("[ENUM PROCESS]:step 8 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]:step 8 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03)
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+	}
+
+
+	printf("------------[ENUM PROCESS]:class request out done!-------------------\n");
+
+	// STEP 8 begin
+	//----------------------------------get descriptor(class 0x21 = HID) request out --------------------------------//
+	// TASK: Call the appropriate function for this step.
+	UsbGetHidDesc();
+
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		// TASK: Call the appropriate function again if it wasn't processed successfully.
+		UsbGetHidDesc();
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506);
+	printf("[ENUM PROCESS]:step 8 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]:step 8 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03)
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+	}
+
+	printf("------------[ENUM PROCESS]:get descriptor (class 0x21) done!-------------------\n");
+
+	// STEP 9 begin
+	//-------------------------------get descriptor (class 0x22 = report)-------------------------------------------//
+	// TASK: Call the appropriate function for this step.
+	UsbGetReportDesc();
+	//if no message
+	while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+	{
+		// TASK: Call the appropriate function again if it wasn't processed successfully.
+		UsbGetReportDesc();
+		usleep(10*1000);
+	}
+
+	UsbWaitTDListDone();
+
+	IO_write(HPI_ADDR,0x0506);
+	printf("[ENUM PROCESS]: step 9 TD Status Byte is %x\n",IO_read(HPI_DATA));
+
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+	printf("[ENUM PROCESS]: step 9 TD Control Byte is %x\n",usb_ctl_val);
+	while (usb_ctl_val != 0x03)
+	{
+		usb_ctl_val = UsbGetRetryCnt();
+	}
+
+	printf("---------------[ENUM PROCESS]:get descriptor (class 0x22) done!----------------\n");
+
+
+
+	//-----------------------------------get keycode value------------------------------------------------//
+	usleep(10000);
+	while(1)
+	{
+		toggle++;
+		IO_write(HPI_ADDR,0x0500); //the start address
+		//data phase IN-1
+		IO_write(HPI_DATA,0x051c); //500
+
+		IO_write(HPI_DATA,0x000f & data_size);//2 data length
+
+		IO_write(HPI_DATA,0x0291);//4 //endpoint 1
+		if(toggle%2)
+		{
+			IO_write(HPI_DATA,0x0001);//6 //data 1
+		}
+		else
+		{
+			IO_write(HPI_DATA,0x0041);//6 //data 1
+		}
+		IO_write(HPI_DATA,0x0013);//8
+		IO_write(HPI_DATA,0x0000);//a
+		UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+		
+		while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+		{
+			IO_write(HPI_ADDR,0x0500); //the start address
+			//data phase IN-1
+			IO_write(HPI_DATA,0x051c); //500
+
+			IO_write(HPI_DATA,0x000f & data_size);//2 data length
+
+			IO_write(HPI_DATA,0x0291);//4 //endpoint 1
+			if(toggle%2)
+			{
+				IO_write(HPI_DATA,0x0001);//6 //data 1
+			}
+			else
+			{
+				IO_write(HPI_DATA,0x0041);//6 //data 1
+			}
+			IO_write(HPI_DATA,0x0013);//8
+			IO_write(HPI_DATA,0x0000);//
+			UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+			usleep(10*1000);
+		}//end while
+
+
+
+		usb_ctl_val = UsbWaitTDListDone();
+
+		// packet starts from 0x051c, reading third byte
+		// TASK: Write the address to read from the memory for byte 3 of the report descriptor to HPI_ADDR.
+		IO_write(HPI_ADDR,0x051e); //the start address
+		keycode = IO_read(HPI_DATA);
+		printf("\nfirst two keycode values are %04x\n",keycode);
+//		IOWR(KEYCODE_BASE, 0, keycode & 0xff);
+
+
+		usleep(200);//usleep(5000);
+		usb_ctl_val = UsbRead(ctl_reg);
+
+		if(!(usb_ctl_val & no_device))
+		{
+			//USB hot plug routine
+			for(hot_plug_count = 0 ; hot_plug_count < 7 ; hot_plug_count++)
+			{
+				usleep(5*1000);
+				usb_ctl_val = UsbRead(ctl_reg);
+				if(usb_ctl_val & no_device) break;
+			}
+			if(!(usb_ctl_val & no_device))
+			{
+				printf("\n[INFO]: the keyboard has been removed!!! \n");
+				printf("[INFO]: please insert again!!! \n");
+			}
+		}
+
+		while (!(usb_ctl_val & no_device))
+		{
+
+			usb_ctl_val = UsbRead(ctl_reg);
+			usleep(5*1000);
+			usb_ctl_val = UsbRead(ctl_reg);
+			usleep(5*1000);
+			usb_ctl_val = UsbRead(ctl_reg);
+			usleep(5*1000);
+
+			if(usb_ctl_val & no_device)
+				goto USB_HOT_PLUG;
+
+			usleep(200);
+		}
+
+	}//end while
+
+	return 0;
+}
+
diff --git a/software/usb/src/usb.c b/software/usb/src/usb.c
new file mode 100644
index 0000000000000000000000000000000000000000..f8e2f37d5fd00b8f972fea43b05c95d82260e25a
--- /dev/null
+++ b/software/usb/src/usb.c
@@ -0,0 +1,581 @@
+/*---------------------------------------------------------------------------
+  --      usb.c                                                    	   --
+  --      Christine Chen                                                   --
+  --      Ref. DE2-115 Demonstrations by Terasic Technologies Inc.         --
+  --      Fall 2014                                                        --
+  --                                                                       --
+  --      For use with ECE 298 Experiment 7                                --
+  --      UIUC ECE Department                                              --
+  ---------------------------------------------------------------------------*/
+
+#include "usb.h"
+
+#include "system.h"
+#include "alt_types.h"
+#include <unistd.h>  // usleep
+#include <stdio.h>
+//#include <io.h>
+
+#include "io_handler.h"
+#include "cy7c67200.h"
+#include "lcp_cmd.h"
+#include "lcp_data.h"
+
+//#define CY7C67200_0_BASE CY7C67200_IF_0_BASE
+
+//-------------USB operation sub function-----------
+/*****************************************************************************/
+/**
+ *
+ * This function writes data to the internal registers of the Cypress
+ * CY7C67200 USB controller.
+ *
+ * @param    Address is the address of the register.
+ * @param    Data is the data to be written to the register.
+ *
+ * @return   None
+ *
+ * @note     None
+ *
+ ******************************************************************************/
+void UsbWrite(alt_u16 Address, alt_u16 Data)
+{
+	IO_write(HPI_ADDR, Address);
+	IO_write(HPI_DATA, Data);
+}
+
+/*****************************************************************************/
+/**
+ *
+ * This function reads data from the internal registers of the Cypress
+ * CY7C67200 USB controller.
+ *
+ * @param    Address is the address of the register.
+ *
+ * @return   The data read from the specified address
+ *
+ * @note     None
+ *
+ ******************************************************************************/
+alt_u16 UsbRead(alt_u16 Address)
+{
+	IO_write(HPI_ADDR, Address);
+	return IO_read(HPI_DATA);
+}
+
+
+/*****************************************************************************/
+/**
+ *
+ * This function does a software reset of the Cypress CY7C67200 USB controller.
+ *
+ * @param    UsbBaseAddress is the starting location of the USB internal memory
+ *           to which this bin file data is written.
+ *
+ * @return   None
+ *
+ * @note     None
+ *
+ ******************************************************************************/
+void UsbSoftReset()
+{
+	//XIo_Out16(USB_MAILBOX, COMM_RESET);
+	IO_write(HPI_MAILBOX,COMM_RESET); //COMM_JUMP2CODE
+	usleep(100000);
+	printf("[USB INIT]:reset finished!\n");
+
+	usleep(500000);
+	printf("[USB INIT]:Clear up the interrupt\r\n");
+	IO_read(HPI_MAILBOX);
+	IO_read(HPI_STATUS);
+
+	// Had to add the write due to a bug in BIOS where they overwrite
+	// the mailbox after initialization with garbage.  The read clears
+	// any pending interrupts.
+	UsbRead (HPI_SIE1_MSG_ADR);
+	UsbWrite (HPI_SIE1_MSG_ADR, 0);
+	UsbRead (HPI_SIE2_MSG_ADR);
+	UsbWrite (HPI_SIE2_MSG_ADR, 0);
+
+
+	UsbWrite (HOST1_STAT_REG, 0xFFFF);
+	UsbWrite (HOST2_STAT_REG, 0xFFFF);
+}
+
+
+void UsbSetAddress()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	// TD #1: 6 writes
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	// TASK: Complete with 4 more IOWR functions
+	IO_write(HPI_DATA,0x00D0);
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+	// TD #2: 4 writes
+	// TASK: Complete with 4 IOWR functions
+	IO_write(HPI_DATA,0x0500);
+	IO_write(HPI_DATA,0x0002);
+	IO_write(HPI_DATA,0x0000);
+	IO_write(HPI_DATA,0x0000);
+	// TD #3: 6 writes
+	// TASK: Complete with 6 IOWR functions
+	IO_write(HPI_DATA,0x0000); //
+	IO_write(HPI_DATA,0x0000);//
+	IO_write(HPI_DATA,0x0090);//
+	IO_write(HPI_DATA,0x0041);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0000);
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+}
+
+
+void UsbGetDeviceDesc1()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	IO_write(HPI_DATA,0x02D0); //device address
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+
+	//td content 4 bytes
+	IO_write(HPI_DATA,0x0680);//c
+	IO_write(HPI_DATA,0x0100); //device 0x01
+	IO_write(HPI_DATA,0x0000);
+	IO_write(HPI_DATA,0x0008);
+
+	//data phase IN
+	IO_write(HPI_DATA,0x052C); //
+	IO_write(HPI_DATA,0x0008);//
+	IO_write(HPI_DATA,0x0290);//
+	IO_write(HPI_DATA,0x0041);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0520);
+
+	//    //status phase
+	IO_write(HPI_DATA,0x0000); //don't care
+	IO_write(HPI_DATA,0x0000);//port number
+	IO_write(HPI_DATA,0x0210);//device address
+	IO_write(HPI_DATA,0x0041);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0000);
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+}
+
+void UsbGetDeviceDesc2()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	IO_write(HPI_DATA,0x02D0); //device address
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+
+	//td content 4 bytes
+	IO_write(HPI_DATA,0x0680);//c
+	IO_write(HPI_DATA,0x0100);//e //device 0x01
+	IO_write(HPI_DATA,0x0000);//0
+	IO_write(HPI_DATA,0x0012);//2
+
+	//data phase IN-1
+	IO_write(HPI_DATA,0x0544); //514
+	IO_write(HPI_DATA,0x0008);//6
+	IO_write(HPI_DATA,0x0290);//8
+	IO_write(HPI_DATA,0x0041);//a
+	IO_write(HPI_DATA,0x0013);//c
+	IO_write(HPI_DATA,0x0520);//e
+
+	//data phase IN-2
+	IO_write(HPI_DATA,0x054c); //520
+	IO_write(HPI_DATA,0x0008);//2
+	IO_write(HPI_DATA,0x0290);//4
+	IO_write(HPI_DATA,0x0001);//6
+	IO_write(HPI_DATA,0x0013);//8
+	IO_write(HPI_DATA,0x052c);//a
+
+	//data phase IN-3
+	IO_write(HPI_DATA,0x0554); //c
+	IO_write(HPI_DATA,0x0002);//e
+	IO_write(HPI_DATA,0x0290);//530
+	IO_write(HPI_DATA,0x0041);//2
+	IO_write(HPI_DATA,0x0013);//4
+	IO_write(HPI_DATA,0x0538);//6
+
+	//status phase
+	IO_write(HPI_DATA,0x0000); //538
+	IO_write(HPI_DATA,0x0000);//a
+	IO_write(HPI_DATA,0x0210);//c
+	IO_write(HPI_DATA,0x0041);//e
+	IO_write(HPI_DATA,0x0013);//540
+	IO_write(HPI_DATA,0x0000);//2
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+}
+
+
+void UsbGetConfigDesc1()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	IO_write(HPI_DATA,0x02D0); //device address
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+
+	//td content 4 bytes
+	IO_write(HPI_DATA,0x0680);//c
+	IO_write(HPI_DATA,0x0200);//e //config 0x02
+	IO_write(HPI_DATA,0x0000);//0
+	IO_write(HPI_DATA,0x0009);//2
+
+	//data phase IN-1
+	IO_write(HPI_DATA,0x0544); //514
+	IO_write(HPI_DATA,0x0008);//6
+	IO_write(HPI_DATA,0x0290);//8
+	IO_write(HPI_DATA,0x0041);//a
+	IO_write(HPI_DATA,0x0013);//c
+	IO_write(HPI_DATA,0x0520);//e
+
+	//data phase IN-2
+	IO_write(HPI_DATA,0x054c); //520
+	IO_write(HPI_DATA,0x0001);//2
+	IO_write(HPI_DATA,0x0290);//4
+	IO_write(HPI_DATA,0x0001);//6 //data0
+	IO_write(HPI_DATA,0x0013);//8
+	IO_write(HPI_DATA,0x052c);//a
+
+	//status phase
+	IO_write(HPI_DATA,0x0000); //52c
+	IO_write(HPI_DATA,0x0000);//e
+	IO_write(HPI_DATA,0x0210);//530
+	IO_write(HPI_DATA,0x0041);//2
+	IO_write(HPI_DATA,0x0013);//4
+	IO_write(HPI_DATA,0x0000);//6
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+}
+
+
+void UsbGetConfigDesc2()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	IO_write(HPI_DATA,0x02D0); //device address
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+
+	//td content 4 bytes
+	IO_write(HPI_DATA,0x0680);//c
+	IO_write(HPI_DATA,0x0200);//e //config 0x02
+	IO_write(HPI_DATA,0x0000);//0
+	IO_write(HPI_DATA,0x00FF);//2
+
+	//data phase IN-1
+	IO_write(HPI_DATA,0x055c); //514
+	IO_write(HPI_DATA,0x0008);//6
+	IO_write(HPI_DATA,0x0290);//8
+	IO_write(HPI_DATA,0x0041);//a
+	IO_write(HPI_DATA,0x0013);//c
+	IO_write(HPI_DATA,0x0520);//e
+
+	//data phase IN-2
+	IO_write(HPI_DATA,0x0564); //520
+	IO_write(HPI_DATA,0x0008);//2
+	IO_write(HPI_DATA,0x0290);//4
+	IO_write(HPI_DATA,0x0001);//6 //data0
+	IO_write(HPI_DATA,0x0013);//8
+	IO_write(HPI_DATA,0x052c);//a
+
+	//data phase IN-3
+	IO_write(HPI_DATA,0x056c); //52c
+	IO_write(HPI_DATA,0x0008);//e
+	IO_write(HPI_DATA,0x0290);//530
+	IO_write(HPI_DATA,0x0041);//2
+	IO_write(HPI_DATA,0x0013);//4
+	IO_write(HPI_DATA,0x0538);//6
+
+	//data phase IN-4
+	IO_write(HPI_DATA,0x0574); //538
+	IO_write(HPI_DATA,0x0008);//a
+	IO_write(HPI_DATA,0x0290);//c
+	IO_write(HPI_DATA,0x0001);//e //data0
+	IO_write(HPI_DATA,0x0013);//540
+	IO_write(HPI_DATA,0x0544);//2
+
+	//data phase IN-5
+	IO_write(HPI_DATA,0x057c); //544
+	IO_write(HPI_DATA,0x0002);//6
+	IO_write(HPI_DATA,0x0290);//8
+	IO_write(HPI_DATA,0x0041);//a //data1
+	IO_write(HPI_DATA,0x0013);//c
+	IO_write(HPI_DATA,0x0550);//e
+
+	//status phase
+	IO_write(HPI_DATA,0x0000); //550
+	IO_write(HPI_DATA,0x0000);//2
+	IO_write(HPI_DATA,0x0210);//4
+	IO_write(HPI_DATA,0x0041);//6
+	IO_write(HPI_DATA,0x0013);//8
+	IO_write(HPI_DATA,0x0000);//a
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+}
+
+void UsbSetConfig()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	IO_write(HPI_DATA,0x02D0); //port address
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+
+	//td content 4 bytes
+	IO_write(HPI_DATA,0x0900);
+	IO_write(HPI_DATA,0x0001);//device address
+	IO_write(HPI_DATA,0x0000);
+	IO_write(HPI_DATA,0x0000);
+	//in packet
+	IO_write(HPI_DATA,0x0000); //don't care
+	IO_write(HPI_DATA,0x0000);//port number
+	IO_write(HPI_DATA,0x0290);//device address
+	IO_write(HPI_DATA,0x0041); //data 1
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0000);
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+
+}
+
+void UsbClassRequest()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	IO_write(HPI_DATA,0x02D0); //port address
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+
+	//td content 4 bytes
+	IO_write(HPI_DATA,0x0A21);
+	IO_write(HPI_DATA,0x0000);//device address
+	IO_write(HPI_DATA,0x0000);
+	IO_write(HPI_DATA,0x0000);
+	//in packet
+	IO_write(HPI_DATA,0x0000); //don't care
+	IO_write(HPI_DATA,0x0000);//port number /data length
+	IO_write(HPI_DATA,0x0290);//device address
+	IO_write(HPI_DATA,0x0041); //data 1
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0000);
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+}
+
+
+void UsbGetHidDesc()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	IO_write(HPI_DATA,0x02D0); //port address
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+
+	//td content 4 bytes
+	IO_write(HPI_DATA,0x0681);//c
+	IO_write(HPI_DATA,0x2100);//e //HID 0x21
+	IO_write(HPI_DATA,0x0000);//0
+	IO_write(HPI_DATA,0x007B);//2
+
+	//data phase IN-1
+	IO_write(HPI_DATA,0x0544); //514
+	IO_write(HPI_DATA,0x0008);//6
+	IO_write(HPI_DATA,0x0290);//8
+	IO_write(HPI_DATA,0x0041);//a
+	IO_write(HPI_DATA,0x0013);//c
+	IO_write(HPI_DATA,0x0520);//e
+
+	//status phase
+	IO_write(HPI_DATA,0x0000); //52c
+	IO_write(HPI_DATA,0x0000);//e
+	IO_write(HPI_DATA,0x0210);//530
+	IO_write(HPI_DATA,0x0041);//2
+	IO_write(HPI_DATA,0x0013);//4
+	IO_write(HPI_DATA,0x0000);//6
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+
+}
+
+
+void UsbGetReportDesc()
+{
+	//the starting address
+	IO_write(HPI_ADDR,0x0500); //the start address
+	IO_write(HPI_DATA,0x050C);
+	IO_write(HPI_DATA,0x0008); //4 port number
+	IO_write(HPI_DATA,0x02D0); //device address
+	IO_write(HPI_DATA,0x0001);
+	IO_write(HPI_DATA,0x0013);
+	IO_write(HPI_DATA,0x0514);
+
+	//td content 4 bytes
+	IO_write(HPI_DATA,0x0681);//c
+	IO_write(HPI_DATA,0x2200);//e //report 0x22
+	IO_write(HPI_DATA,0x0000);//0
+	IO_write(HPI_DATA,0x007B);//2
+
+	//data phase IN-1
+	IO_write(HPI_DATA,0x0580); //514
+	IO_write(HPI_DATA,0x0008);//6
+	IO_write(HPI_DATA,0x0290);//8
+	IO_write(HPI_DATA,0x0041);//a
+	IO_write(HPI_DATA,0x0013);//c
+	IO_write(HPI_DATA,0x0520);//e
+
+	//data phase IN-2
+	IO_write(HPI_DATA,0x0588); //520
+	IO_write(HPI_DATA,0x0008);//2
+	IO_write(HPI_DATA,0x0290);//4
+	IO_write(HPI_DATA,0x0001);//6 //data0
+	IO_write(HPI_DATA,0x0013);//8
+	IO_write(HPI_DATA,0x052c);//a
+
+	//data phase IN-3
+	IO_write(HPI_DATA,0x0590); //52c
+	IO_write(HPI_DATA,0x0008);//e
+	IO_write(HPI_DATA,0x0290);//530
+	IO_write(HPI_DATA,0x0041);//2
+	IO_write(HPI_DATA,0x0013);//4
+	IO_write(HPI_DATA,0x0538);//6
+
+	//data phase IN-4
+	IO_write(HPI_DATA,0x0598); //538
+	IO_write(HPI_DATA,0x0008);//a
+	IO_write(HPI_DATA,0x0290);//c
+	IO_write(HPI_DATA,0x0001);//e //data0
+	IO_write(HPI_DATA,0x0013);//540
+	IO_write(HPI_DATA,0x0544);//2
+
+	//data phase IN-5
+	IO_write(HPI_DATA,0x05a0); //544
+	IO_write(HPI_DATA,0x0008);//6
+	IO_write(HPI_DATA,0x0290);//8
+	IO_write(HPI_DATA,0x0041);//a //data1
+	IO_write(HPI_DATA,0x0013);//c
+	IO_write(HPI_DATA,0x0550);//e
+
+	//data phase IN-6
+	IO_write(HPI_DATA,0x05a8); //550
+	IO_write(HPI_DATA,0x0008);//2
+	IO_write(HPI_DATA,0x0290);//4
+	IO_write(HPI_DATA,0x0001);//6 //data0
+	IO_write(HPI_DATA,0x0013);//8
+	IO_write(HPI_DATA,0x055c);//a
+
+	//data phase IN-7
+	IO_write(HPI_DATA,0x05b0); //c
+	IO_write(HPI_DATA,0x0008);//e
+	IO_write(HPI_DATA,0x0290);//560
+	IO_write(HPI_DATA,0x0041);//2 //data1
+	IO_write(HPI_DATA,0x0013);//4
+	IO_write(HPI_DATA,0x0568);//6
+
+	//data phase IN-8
+	IO_write(HPI_DATA,0x05b8); //8
+	IO_write(HPI_DATA,0x0003);//a
+	IO_write(HPI_DATA,0x0290);//c
+	IO_write(HPI_DATA,0x0001);//e //data0
+	IO_write(HPI_DATA,0x0013);//570
+	IO_write(HPI_DATA,0x0574);//2
+
+	//status phase
+	IO_write(HPI_DATA,0x0000); //574
+	IO_write(HPI_DATA,0x0000);//6
+	IO_write(HPI_DATA,0x0210);//8
+	IO_write(HPI_DATA,0x0041);//a
+	IO_write(HPI_DATA,0x0013);//c
+	IO_write(HPI_DATA,0x0000);//e
+
+	UsbWrite(HUSB_SIE1_pCurrentTDPtr,0x0500); //HUSB_SIE1_pCurrentTDPtr
+
+}
+
+
+alt_u16 UsbWaitTDListDone()
+{
+	alt_u16 usb_ctl_val;
+
+	usb_ctl_val = UsbRead(HPI_SIE1_MSG_ADR); // STEP 3 j
+	UsbWrite(HPI_SIE1_MSG_ADR, 0);
+	while (usb_ctl_val != HUSB_TDListDone)  // k, read sie1 msg register
+	{
+		if(usb_ctl_val == 0x0000)
+		{
+		}
+		else
+		{
+			printf("[SIE1 MSG]:SIE1 msg reg is %x\n",usb_ctl_val);
+		}
+		usb_ctl_val = UsbRead(HPI_SIE1_MSG_ADR);
+		UsbWrite(HPI_SIE1_MSG_ADR, 0);
+	}
+
+	return usb_ctl_val;
+}
+
+
+alt_u16 UsbGetRetryCnt()
+{
+	alt_u16 usb_ctl_val;
+
+	IO_read(HPI_STATUS);
+	if(UsbRead(HPI_SIE1_MSG_ADR) == HUSB_TDListDone)
+	{
+		UsbWrite(HPI_SIE1_MSG_ADR, 0);
+
+		while (!(IO_read(HPI_STATUS) & HPI_STATUS_SIE1msg_FLAG) )  //read sie1 msg register
+		{
+		}
+	}
+	//usleep(1000);
+	IO_write(HPI_ADDR,0x0508);
+	usb_ctl_val = IO_read(HPI_DATA);
+
+	return usb_ctl_val;
+}
+
+
+void UsbPrintMem()
+{
+	int i, code;
+	IO_write(HPI_ADDR,0x0500); //the start address
+	for (i = 0; i <= 200; i += 2)
+	{
+		code = IO_read(HPI_DATA);
+		printf("\naddr %x = %04x\n", 0x0500+i, code);
+	}
+}
+
diff --git a/software/usb/src/usb.h b/software/usb/src/usb.h
new file mode 100644
index 0000000000000000000000000000000000000000..5d1b0fb64aa14f88724fad72ce82c20d7d4380b8
--- /dev/null
+++ b/software/usb/src/usb.h
@@ -0,0 +1,100 @@
+/*---------------------------------------------------------------------------
+  --      usb.h                                                    	   --
+  --      Christine Chen                                                   --
+  --      Ref. DE2-115 Demonstrations by Terasic Technologies Inc.         --
+  --      Fall 2014                                                        --
+  --                                                                       --
+  --      For use with ECE 298 Experiment 7                                --
+  --      UIUC ECE Department                                              --
+  ---------------------------------------------------------------------------*/
+
+#ifndef USB_H_
+#define USB_H_
+
+#include "alt_types.h"
+
+/* -----------------------------------------------------------------------
+ * HPI implementation
+ *
+ * The c67x00 chip also support control via SPI or HSS serial
+ * interfaces.  However, this driver assumes that register access can
+ * be performed from IRQ context.  While this is a safe assuption with
+ * the HPI interface, it is not true for the serial interfaces.
+ */
+
+/* HPI registers */
+#define HPI_DATA    0
+#define HPI_MAILBOX 1
+#define HPI_ADDR    2
+#define HPI_STATUS  3
+
+#define CY7C67200_0_BASE CY7C67200_IF_0_BASE
+
+void IO_write(alt_u8 Address, alt_u16 Data);
+alt_u16 IO_read(alt_u8 Address);
+void IO_init(void);
+
+//------------------------------ function declaration ----------------------------//
+//-------------USB operation -----------
+/*****************************************************************************/
+/**
+*
+* This function writes data to the internal registers of the Cypress
+* CY7C67200 USB controller.
+*
+* @param    Address is the address of the register.
+* @param    Data is the data to be written to the register.
+*
+* @return   None
+*
+* @note     None
+*
+******************************************************************************/
+void UsbWrite(alt_u16 Address, alt_u16 Data);
+
+/*****************************************************************************/
+/**
+*
+* This function reads data from the internal registers of the Cypress
+* CY7C67200 USB controller.
+*
+* @param    Address is the address of the register.
+*
+* @return   The data read from the specified address
+*
+* @note     None
+*
+******************************************************************************/
+alt_u16 UsbRead(alt_u16 Address);
+
+/*****************************************************************************/
+/**
+*
+* This function does a software reset of the Cypress CY7C67200 USB controller.
+*
+* @param    UsbBaseAddress is the starting location of the USB internal memory
+*           to which this bin file data is written.
+*
+* @return   None
+*
+* @note     None
+*
+******************************************************************************/
+void UsbSoftReset();
+
+void UsbSetAddress();		// Set Address
+void UsbGetDeviceDesc1(); 	// Get Device Descriptor -1
+void UsbGetDeviceDesc2(); 	// Get Device Descriptor -2
+void UsbGetConfigDesc1(); 	// Get Configuration Descriptor -1
+void UsbGetConfigDesc2(); 	// Get Configuration Descriptor -2
+void UsbSetConfig();		// Set Configuration
+void UsbClassRequest();		// Class Request
+void UsbGetHidDesc();		// Get HID Descriptor
+void UsbGetReportDesc();	// Get Report Descriptor
+
+alt_u16 UsbWaitTDListDone();	// Check and wait until HUSB_TDListDone is read from HPI Data
+alt_u16 UsbGetRetryCnt();		// Get RetryCnt for sending the TD
+
+void UsbPrintMem();			// Print the memory contents of EZ-OTG
+
+#endif /* USB_H_ */
diff --git a/timing.sdc b/timing.sdc
index fc32e3a482c5cc466c614af8e678d7c6235007dc..52da2025cb602ac2f9f1cfe3f0a7c81f936f1c30 100644
--- a/timing.sdc
+++ b/timing.sdc
@@ -1,6 +1,8 @@
 # Create Clocks
 create_clock -name {Clk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {CLOCK_50}]
-# create_generated_clock -name {lab9_qsystem|altpll_0|sd1|pll|clk[0]} -source [get_pins {lab9_qsystem|altpll_0|sd1|pll|inclk[0]}] -duty_cycle 50.000 -multiply_by 1 -phase -54.000 -master_clock {CLOCK_50} [get_pins {lab9_qsystem|altpll_0|sd1|pll|clk[0]}]
+create_generated_clock -name {PLL_SDRAM} -source [get_pins {main_soc|pll|sd1|pll7|clk[0]}] -duty_cycle 50.000 -multiply_by 1 -phase -54.000 -master_clock {CLOCK_50} [get_pins {PLL_SDRAM}]
+create_generated_clock -name {PLL_USB} -source [get_pins {main_soc|pll|sd1|pll7|clk[1]}] -duty_cycle 50.000 -divide_by 5 -master_clock {CLOCK_50} [get_pins {PLL_SDRAM}]
+create_generated_clock -name {PLL_SRAM} -source [get_pins {main_soc|pll|sd1|pll7|clk[2]}] -duty_cycle 50.000 -multiply_by 2 -master_clock {CLOCK_50} [get_pins {PLL_SDRAM}]
 
 # Constrain the input I/O path
 set_input_delay -clock {Clk} -max 3 [all_inputs]
@@ -17,6 +19,109 @@ set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {PS2
 set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {PS2_KBCLK}]
 set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {PS2_KBDAT}]
 set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {PS2_KBDAT}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[0]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[0]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[1]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[1]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[2]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[2]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[3]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[3]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[4]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[4]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[5]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[5]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[6]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[6]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[7]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[7]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[8]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[8]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[9]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[9]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[10]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[10]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[11]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[11]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[12]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[12]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[13]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[13]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[14]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[14]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[15]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[15]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[16]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[16]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[17]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[17]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[18]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[18]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[19]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[19]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[20]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[20]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[21]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[21]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[22]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[22]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[23]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[23]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[24]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[24]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[25]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[25]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[26]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[26]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[27]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[27]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[28]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[28]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[29]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[29]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[30]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[30]}]
+set_input_delay -add_delay -max -clock [get_clocks {PLL_SDRAM}]  3.000 [get_ports {DRAM_DQ[31]}]
+set_input_delay -add_delay -min -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[31]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[0]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[0]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[1]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[1]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[2]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[2]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[3]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[3]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[4]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[4]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[5]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[5]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[6]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[6]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[7]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[7]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[8]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[8]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[9]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[9]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[10]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[10]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[11]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[11]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[12]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[12]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[13]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[13]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[14]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[14]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {OTG_DATA[15]}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[15]}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {altera_reserved_tck}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {altera_reserved_tck}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {altera_reserved_tdi}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {altera_reserved_tdi}]
+set_input_delay -add_delay -max -clock [get_clocks {Clk}]  3.000 [get_ports {altera_reserved_tms}]
+set_input_delay -add_delay -min -clock [get_clocks {Clk}]  2.000 [get_ports {altera_reserved_tms}]
+
 
 # Constrain the output I/O path
 set_output_delay -clock {Clk} 2 [all_outputs]
@@ -28,6 +133,24 @@ set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDG[4
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDG[5]}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDG[6]}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDG[7]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[0]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[2]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[1]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[3]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[4]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[5]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[6]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[7]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[8]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[9]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[10]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[11]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[12]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[13]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[14]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[15]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[16]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {LEDR[17]}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX0[0]}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX0[1]}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX0[2]}]
@@ -56,5 +179,118 @@ set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX3[3
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX3[4]}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX3[5]}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX3[6]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX4[0]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX4[1]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX4[2]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX4[3]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX4[4]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX4[5]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX4[6]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX5[0]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX5[1]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX5[2]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX5[3]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX5[4]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX5[5]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX5[6]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX6[0]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX6[1]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX6[2]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX6[3]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX6[4]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX6[5]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX6[6]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX7[0]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX7[1]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX7[2]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX7[3]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX7[4]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX7[5]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {HEX7[6]}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {PS2_KBCLK}]
 set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {PS2_KBDAT}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[0]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[1]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[2]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[3]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[4]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[5]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[6]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[7]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[8]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[9]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[10]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[11]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_ADDR[12]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_BA[0]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_BA[1]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_CAS_N}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_CKE}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_CS_N}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQM[0]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQM[1]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQM[2]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQM[3]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[0]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[1]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[2]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[3]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[4]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[5]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[6]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[7]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[8]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[9]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[10]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[11]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[12]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[13]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[14]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[15]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[16]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[17]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[18]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[19]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[20]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[21]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[22]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[23]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[24]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[25]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[26]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[27]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[28]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[29]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[30]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_DQ[31]}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_RAS_N}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_WE_N}]
+set_output_delay -add_delay  -clock [get_clocks {PLL_SDRAM}]  2.000 [get_ports {DRAM_CLK}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_ADDR[0]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_ADDR[1]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_CS_N}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_RST_N}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_RD_N}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_WR_N}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[0]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[1]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[2]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[3]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[4]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[5]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[6]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[7]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[8]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[9]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[10]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[11]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[12]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[13]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[14]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {OTG_DATA[15]}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {VGA_CLK}]
+set_output_delay -add_delay  -clock [get_clocks {Clk}]  2.000 [get_ports {altera_reserved_tdo}]
+
+# Clock groups
+set_clock_groups -asynchronous -group [get_clocks {altera_reserved_tck}]
+set_clock_groups -asynchronous -group [get_clocks {altera_reserved_tck}]