diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/gui_handlers.wdf b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/gui_handlers.wdf
new file mode 100644
index 0000000..d068f61
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/gui_handlers.wdf
@@ -0,0 +1,41 @@
+version:1
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:6162737472616374636f6d62696e656470616e656c5f72656d6f76655f73656c65637465645f656c656d656e7473:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:61646473726377697a6172645f737065636966795f68646c5f6e65746c6973745f626c6f636b5f64657369676e:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:61646473726377697a6172645f737065636966795f6f725f6372656174655f636f6e73747261696e745f66696c6573:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:626173656469616c6f675f63616e63656c:35:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:626173656469616c6f675f6f6b:3132:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:636d646d73676469616c6f675f6f6b:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:636f6e73747261696e747363686f6f73657270616e656c5f6372656174655f66696c65:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:637265617465636f6e73747261696e747366696c6570616e656c5f66696c655f6e616d65:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:63726561746573726366696c656469616c6f675f66696c655f6e616d65:33:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:63726561746573726366696c656469616c6f675f66696c655f74797065:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:6670676163686f6f7365725f66616d696c79:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:6670676163686f6f7365725f667067615f7461626c65:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:6670676163686f6f7365725f7061636b616765:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:6670676163686f6f7365725f7370656564:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:66696c6573657470616e656c5f66696c655f7365745f70616e656c5f74726565:313132:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:666c6f776e6176696761746f727472656570616e656c5f666c6f775f6e6176696761746f725f74726565:3134:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:67657474696e6773746172746564766965775f6372656174655f6e65775f70726f6a656374:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:68617264776172657472656570616e656c5f68617264776172655f747265655f7461626c65:34:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:6d73677472656570616e656c5f6d6573736167655f766965775f74726565:3131:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:7061636f6d6d616e646e616d65735f6164645f736f7572636573:37:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:7061636f6d6d616e646e616d65735f6175746f5f636f6e6e6563745f746172676574:32:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:7061636f6d6d616e646e616d65735f6175746f5f7570646174655f68696572:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:7061636f6d6d616e646e616d65735f6f70656e5f68617264776172655f6d616e61676572:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:7061636f6d6d616e646e616d65735f70726f6772616d5f66706761:32:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:706176696577735f636f6465:38:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:706176696577735f70726f6a6563745f73756d6d617279:33:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:70726f6772616d64656275677461625f6f70656e5f746172676574:33:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:70726f6772616d667067616469616c6f675f70726f6772616d:32:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:70726f6a6563746e616d6563686f6f7365725f63686f6f73655f70726f6a6563745f6c6f636174696f6e:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:70726f6a6563746e616d6563686f6f7365725f70726f6a6563745f6e616d65:32:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:726469636f6d6d616e64735f64656c657465:35:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:72656d6f7665736f75726365736469616c6f675f616c736f5f64656c657465:31:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:73726363686f6f73657270616e656c5f6164645f68646c5f616e645f6e65746c6973745f66696c65735f746f5f796f75725f70726f6a656374:36:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:73726363686f6f73657270616e656c5f6164645f736f75726365735f66726f6d5f7375626469726563746f72696573:34:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:73726363686f6f73657270616e656c5f6372656174655f66696c65:34:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:73726363686f6f73657270616e656c5f6d616b655f6c6f63616c5f636f70795f6f665f74686573655f66696c65735f696e746f:37:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:73726363686f6f73657270616e656c5f7363616e5f616e645f6164645f72746c5f696e636c7564655f66696c65735f696e746f:33:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:73726363686f6f7365727461626c655f7372635f63686f6f7365725f7461626c65:3138:00:00
+70726f6a656374:76697661646f5f75736167655c6775695f68616e646c657273:7461736b62616e6e65725f636c6f7365:31:00:00
+eof:2033467665
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/java_command_handlers.wdf b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/java_command_handlers.wdf
new file mode 100644
index 0000000..5109266
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/java_command_handlers.wdf
@@ -0,0 +1,10 @@
+version:1
+70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:616464736f7572636573:37:00:00
+70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6175746f636f6e6e656374746172676574:32:00:00
+70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6564697464656c657465:35:00:00
+70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6c61756e636870726f6772616d66706761:32:00:00
+70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6e657770726f6a656374:31:00:00
+70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:6f70656e68617264776172656d616e61676572:32:00:00
+70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:72756e62697467656e:33:00:00
+70726f6a656374:76697661646f5f75736167655c6a6176615f636f6d6d616e645f68616e646c657273:73686f7776696577:31:00:00
+eof:1722033132
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/project.wpc b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/project.wpc
new file mode 100644
index 0000000..c37c38d
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/project.wpc
@@ -0,0 +1,4 @@
+version:1
+57656254616c6b5472616e736d697373696f6e417474656d70746564:2
+6d6f64655f636f756e7465727c4755494d6f6465:5
+eof:
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/synthesis.wdf b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/synthesis.wdf
new file mode 100644
index 0000000..2060996
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/synthesis.wdf
@@ -0,0 +1,39 @@
+version:1
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d70617274:786337613335746373673332342d31:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e616d65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d746f70:41727469785f536f435f746f70:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d696e636c7564655f64697273:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d67656e65726963:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d766572696c6f675f646566696e65:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636f6e737472736574:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d7365755f70726f74656374:64656661756c743a3a6e6f6e65:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d666c617474656e5f686965726172636879:64656661756c743a3a72656275696c74:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d67617465645f636c6f636b5f636f6e76657273696f6e:64656661756c743a3a6f6666:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d646972656374697665:64656661756c743a3a64656661756c74:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c5f736b69705f6970:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d72746c5f736b69705f636f6e73747261696e7473:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f6c63:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d62756667:64656661756c743a3a3132:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d66616e6f75745f6c696d6974:64656661756c743a3a3130303030:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73687265675f6d696e5f73697a65:64656661756c743a3a33:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d6f6465:64656661756c743a3a64656661756c74:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d66736d5f65787472616374696f6e:64656661756c743a3a6175746f:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6b6565705f6571756976616c656e745f726567697374657273:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d7265736f757263655f73686172696e67:64656661756c743a3a6175746f:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636173636164655f647370:64656661756c743a3a6175746f:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d636f6e74726f6c5f7365745f6f70745f7468726573686f6c64:64656661756c743a3a6175746f:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f6272616d:64656661756c743a3a2d31:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f7572616d:64656661756c743a3a2d31:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f647370:64656661756c743a3a2d31:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f6272616d5f636173636164655f686569676874:64656661756c743a3a2d31:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6d61785f7572616d5f636173636164655f686569676874:64656661756c743a3a2d31:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d726574696d696e67:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f73726c65787472616374:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d617373657274:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d6e6f5f74696d696e675f64726976656e:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73666375:64656661756c743a3a5b6e6f745f7370656369666965645d:00:00
+73796e746865736973:73796e7468657369735c7573616765:656c6170736564:30303a30313a303973:00:00
+73796e746865736973:73796e7468657369735c7573616765:6d656d6f72795f7065616b:3937382e3136304d42:00:00
+73796e746865736973:73796e7468657369735c7573616765:6d656d6f72795f6761696e:3635372e3231354d42:00:00
+eof:2284045389
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/synthesis_details.wdf b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/synthesis_details.wdf
new file mode 100644
index 0000000..227096f
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/synthesis_details.wdf
@@ -0,0 +1,3 @@
+version:1
+73796e746865736973:73796e7468657369735c7573616765:686c735f6970:30:00:00
+eof:2511430288
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/webtalk_pa.xml b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/webtalk_pa.xml
new file mode 100644
index 0000000..7f7d0b2
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.cache/wt/webtalk_pa.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+-
+
+
+
+
+
+
+-
+
+
+
+
+
+
+
+
+
+-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-
+
+
+
+
+
+
+
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.hw/RISC-V.lpr b/hardware/Vivado/E-ELEMENTS/RISC-V.hw/RISC-V.lpr
new file mode 100644
index 0000000..c52c42d
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.hw/RISC-V.lpr
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.hw/hw_1/hw.xml b/hardware/Vivado/E-ELEMENTS/RISC-V.hw/hw_1/hw.xml
new file mode 100644
index 0000000..d3dac31
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.hw/hw_1/hw.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/constrs_1/new/ARTIX7.xdc b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/constrs_1/new/ARTIX7.xdc
new file mode 100644
index 0000000..ac273f6
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/constrs_1/new/ARTIX7.xdc
@@ -0,0 +1,99 @@
+
+## Clock signal
+
+##RGB LEDs
+#set_property -dict { PACKAGE_PIN F6 IOSTANDARD LVCMOS33 } [get_ports { LEDG[0] }]; #IO_L19N_T3_VREF_35 Sch=led0_g
+#set_property -dict { PACKAGE_PIN G6 IOSTANDARD LVCMOS33 } [get_ports { LEDR[0] }]; #IO_L19P_T3_35 Sch=led0_r
+#set_property -dict { PACKAGE_PIN J4 IOSTANDARD LVCMOS33 } [get_ports { LEDG[1] }]; #IO_L21P_T3_DQS_35 Sch=led1_g
+#set_property -dict { PACKAGE_PIN G3 IOSTANDARD LVCMOS33 } [get_ports { LEDR[1] }]; #IO_L20N_T3_35 Sch=led1_r
+#set_property -dict { PACKAGE_PIN H4 IOSTANDARD LVCMOS33 } [get_ports { LEDB[2] }]; #IO_L21N_T3_DQS_35 Sch=led2_b
+#set_property -dict { PACKAGE_PIN J2 IOSTANDARD LVCMOS33 } [get_ports { LEDG[2] }]; #IO_L22N_T3_35 Sch=led2_g
+#set_property -dict { PACKAGE_PIN J3 IOSTANDARD LVCMOS33 } [get_ports { LEDR[2] }]; #IO_L22P_T3_35 Sch=led2_r
+#set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { LEDB[3] }]; #IO_L23P_T3_35 Sch=led3_b
+#set_property -dict { PACKAGE_PIN H6 IOSTANDARD LVCMOS33 } [get_ports { LEDG[3] }]; #IO_L24P_T3_35 Sch=led3_g
+#set_property -dict { PACKAGE_PIN K1 IOSTANDARD LVCMOS33 } [get_ports { LEDR[3] }]; #IO_L23N_T3_35 Sch=led3_r
+
+##LEDs
+
+##USB-UART Interface
+
+##Quad SPI Flash
+#set_property -dict { PACKAGE_PIN L13 IOSTANDARD LVCMOS33 } [get_ports { FLASH_CS }]; #IO_L6P_T0_FCS_B_14 Sch=qspi_cs
+#set_property -dict { PACKAGE_PIN K17 IOSTANDARD LVCMOS33 } [get_ports { FLASH_DQ[0] }]; #IO_L1P_T0_D00_MOSI_14 Sch=qspi_dq[0]
+#set_property -dict { PACKAGE_PIN K18 IOSTANDARD LVCMOS33 } [get_ports { FLASH_DQ[1] }]; #IO_L1N_T0_D01_DIN_14 Sch=qspi_dq[1]
+#set_property -dict { PACKAGE_PIN L14 IOSTANDARD LVCMOS33 } [get_ports { FLASH_DQ[2] }]; #IO_L2P_T0_D02_14 Sch=qspi_dq[2]
+#set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { FLASH_DQ[3] }]; #IO_L2N_T0_D03_14 Sch=qspi_dq[3]
+
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_B[3]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_B[2]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_B[1]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_B[0]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_G[3]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_G[2]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_G[1]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_G[0]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_R[3]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_R[2]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_R[1]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {VGA_R[0]}]
+set_property IOSTANDARD LVCMOS33 [get_ports CLK_50]
+set_property IOSTANDARD LVCMOS33 [get_ports UART_RXD]
+set_property IOSTANDARD LVCMOS33 [get_ports UART_TXD]
+set_property IOSTANDARD LVCMOS33 [get_ports VGA_HS]
+set_property IOSTANDARD LVCMOS33 [get_ports VGA_VS]
+set_property PACKAGE_PIN D8 [get_ports {VGA_G[3]}]
+set_property PACKAGE_PIN A3 [get_ports {VGA_G[2]}]
+set_property PACKAGE_PIN A4 [get_ports {VGA_G[1]}]
+set_property PACKAGE_PIN B6 [get_ports {VGA_G[0]}]
+set_property PACKAGE_PIN E7 [get_ports {VGA_B[3]}]
+set_property PACKAGE_PIN A1 [get_ports {VGA_B[2]}]
+set_property PACKAGE_PIN B1 [get_ports {VGA_B[1]}]
+set_property PACKAGE_PIN C7 [get_ports {VGA_B[0]}]
+set_property PACKAGE_PIN C5 [get_ports {VGA_R[2]}]
+set_property PACKAGE_PIN C6 [get_ports {VGA_R[1]}]
+set_property PACKAGE_PIN F5 [get_ports {VGA_R[0]}]
+set_property PACKAGE_PIN P17 [get_ports CLK_50]
+set_property PACKAGE_PIN B7 [get_ports {VGA_R[3]}]
+
+
+
+set_property PACKAGE_PIN N5 [get_ports UART_RXD]
+set_property PACKAGE_PIN T4 [get_ports UART_TXD]
+set_property PACKAGE_PIN D7 [get_ports VGA_HS]
+set_property PACKAGE_PIN D5 [get_ports VGA_VS]
+
+set_property IOSTANDARD LVCMOS33 [get_ports {DIG[7]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {DIG[6]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {DIG[5]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {DIG[4]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {DIG[3]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {DIG[2]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {DIG[1]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {DIG[0]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SEL[7]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SEL[6]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SEL[5]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SEL[4]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SEL[3]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SEL[2]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SEL[1]}]
+set_property IOSTANDARD LVCMOS33 [get_ports {SEL[0]}]
+set_property PACKAGE_PIN D4 [get_ports {DIG[0]}]
+set_property PACKAGE_PIN H2 [get_ports {DIG[7]}]
+set_property PACKAGE_PIN D2 [get_ports {DIG[6]}]
+set_property PACKAGE_PIN E2 [get_ports {DIG[5]}]
+set_property PACKAGE_PIN F3 [get_ports {DIG[4]}]
+set_property PACKAGE_PIN F4 [get_ports {DIG[3]}]
+set_property PACKAGE_PIN D3 [get_ports {DIG[2]}]
+set_property PACKAGE_PIN E3 [get_ports {DIG[1]}]
+set_property PACKAGE_PIN J2 [get_ports {SEL[5]}]
+set_property PACKAGE_PIN K2 [get_ports {SEL[4]}]
+set_property PACKAGE_PIN F6 [get_ports {SEL[3]}]
+set_property PACKAGE_PIN G4 [get_ports {SEL[2]}]
+
+
+
+set_property PACKAGE_PIN G3 [get_ports {SEL[1]}]
+set_property PACKAGE_PIN J4 [get_ports {SEL[0]}]
+set_property PACKAGE_PIN J3 [get_ports {SEL[6]}]
+set_property PACKAGE_PIN H4 [get_ports {SEL[7]}]
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/char8x16_rom.sv b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/char8x16_rom.sv
new file mode 100644
index 0000000..040e9f9
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/char8x16_rom.sv
@@ -0,0 +1,2074 @@
+//
+// 存放所有 ASCII 字符的字码
+// 该ROM自动综合成Block RAM
+// 每个字符为8*16个像素,8列16行
+// 机制:每次读取时需要输入一个 7bit ASCII 值和一个 4bit 行号,共同组成12bit地址
+// ASCII值表示想要读取的字符的ASCII码
+// 4bit行号的取值范围是0~15,指定了想要读取该字符的哪一行像素。
+// 输出8bit,即该字符这一行的8个像素。0代表黑色,1代表白色(黑底白字)
+// 因此该模块只是一个普通的8bit数据总线,12bit地址总线的ROM而已
+
+module char8x16_rom(
+ input logic clk,
+ input logic [11:0] addr,
+ output logic [ 7:0] data
+);
+
+wire [0:2047] [7:0] rom_cell = {
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h10,
+ 8'h00,
+ 8'h10,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h2c,
+ 8'h24,
+ 8'h24,
+ 8'h24,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h68,
+ 8'h24,
+ 8'hfe,
+ 8'h24,
+ 8'h24,
+ 8'h24,
+ 8'h7e,
+ 8'h24,
+ 8'h24,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h10,
+ 8'h7c,
+ 8'h16,
+ 8'h12,
+ 8'h16,
+ 8'h38,
+ 8'h68,
+ 8'h48,
+ 8'h48,
+ 8'h3e,
+ 8'h08,
+ 8'h08,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h86,
+ 8'h4b,
+ 8'h69,
+ 8'h2e,
+ 8'h10,
+ 8'h08,
+ 8'h68,
+ 8'h94,
+ 8'h92,
+ 8'h63,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h26,
+ 8'h26,
+ 8'h1c,
+ 8'h4e,
+ 8'h52,
+ 8'h73,
+ 8'h62,
+ 8'hfe,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h20,
+ 8'h10,
+ 8'h18,
+ 8'h08,
+ 8'h0c,
+ 8'h0c,
+ 8'h0c,
+ 8'h0c,
+ 8'h08,
+ 8'h08,
+ 8'h18,
+ 8'h30,
+ 8'h20,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h04,
+ 8'h08,
+ 8'h10,
+ 8'h10,
+ 8'h30,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h30,
+ 8'h10,
+ 8'h18,
+ 8'h08,
+ 8'h04,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h10,
+ 8'h50,
+ 8'h2c,
+ 8'h38,
+ 8'h56,
+ 8'h10,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'hfe,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h10,
+ 8'h0c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h40,
+ 8'h60,
+ 8'h20,
+ 8'h30,
+ 8'h10,
+ 8'h10,
+ 8'h08,
+ 8'h08,
+ 8'h04,
+ 8'h04,
+ 8'h02,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h66,
+ 8'h42,
+ 8'he2,
+ 8'hda,
+ 8'hce,
+ 8'h42,
+ 8'h66,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h1e,
+ 8'h12,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h62,
+ 8'h60,
+ 8'h60,
+ 8'h20,
+ 8'h10,
+ 8'h08,
+ 8'h04,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3e,
+ 8'h60,
+ 8'h60,
+ 8'h20,
+ 8'h3c,
+ 8'h40,
+ 8'h40,
+ 8'h60,
+ 8'h3e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h30,
+ 8'h38,
+ 8'h28,
+ 8'h24,
+ 8'h26,
+ 8'h22,
+ 8'hff,
+ 8'h20,
+ 8'h20,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7e,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h7e,
+ 8'h40,
+ 8'h40,
+ 8'h60,
+ 8'h3e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h78,
+ 8'h0c,
+ 8'h06,
+ 8'h12,
+ 8'h6e,
+ 8'h42,
+ 8'h42,
+ 8'h46,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7e,
+ 8'h40,
+ 8'h60,
+ 8'h20,
+ 8'h30,
+ 8'h10,
+ 8'h18,
+ 8'h08,
+ 8'h0c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h46,
+ 8'h42,
+ 8'h6c,
+ 8'h38,
+ 8'h66,
+ 8'h42,
+ 8'h42,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h66,
+ 8'h42,
+ 8'h42,
+ 8'h66,
+ 8'h58,
+ 8'h40,
+ 8'h20,
+ 8'h1e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h10,
+ 8'h0c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h20,
+ 8'h18,
+ 8'h0c,
+ 8'h06,
+ 8'h08,
+ 8'h30,
+ 8'h60,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7e,
+ 8'h00,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h0c,
+ 8'h18,
+ 8'h20,
+ 8'h60,
+ 8'h30,
+ 8'h08,
+ 8'h04,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h0c,
+ 8'h38,
+ 8'h60,
+ 8'h60,
+ 8'h60,
+ 8'h18,
+ 8'h08,
+ 8'h00,
+ 8'h08,
+ 8'h08,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h38,
+ 8'h44,
+ 8'h82,
+ 8'h82,
+ 8'hbb,
+ 8'had,
+ 8'ha5,
+ 8'ha5,
+ 8'hf5,
+ 8'h29,
+ 8'h03,
+ 8'h02,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h38,
+ 8'h2c,
+ 8'h24,
+ 8'h64,
+ 8'h46,
+ 8'h7e,
+ 8'hc2,
+ 8'h83,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3e,
+ 8'h62,
+ 8'h42,
+ 8'h62,
+ 8'h3e,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h3e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h78,
+ 8'h04,
+ 8'h02,
+ 8'h02,
+ 8'h02,
+ 8'h02,
+ 8'h02,
+ 8'h06,
+ 8'h7c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3e,
+ 8'h62,
+ 8'h42,
+ 8'hc2,
+ 8'hc2,
+ 8'hc2,
+ 8'h42,
+ 8'h62,
+ 8'h1e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7e,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h7e,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7e,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h7e,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h78,
+ 8'h06,
+ 8'h02,
+ 8'h02,
+ 8'h73,
+ 8'h42,
+ 8'h42,
+ 8'h46,
+ 8'h7c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h7e,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7e,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3e,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h22,
+ 8'h1e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h42,
+ 8'h22,
+ 8'h12,
+ 8'h0a,
+ 8'h0e,
+ 8'h1a,
+ 8'h32,
+ 8'h22,
+ 8'h42,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h04,
+ 8'h04,
+ 8'h04,
+ 8'h04,
+ 8'h04,
+ 8'h04,
+ 8'h04,
+ 8'h04,
+ 8'h7c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h46,
+ 8'h66,
+ 8'he6,
+ 8'hfa,
+ 8'hda,
+ 8'hda,
+ 8'h83,
+ 8'h83,
+ 8'h83,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h46,
+ 8'h46,
+ 8'h4e,
+ 8'h4a,
+ 8'h5a,
+ 8'h52,
+ 8'h72,
+ 8'h62,
+ 8'h62,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h46,
+ 8'hc2,
+ 8'hc3,
+ 8'hc3,
+ 8'hc3,
+ 8'hc2,
+ 8'h46,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3e,
+ 8'h62,
+ 8'h42,
+ 8'h42,
+ 8'h62,
+ 8'h1e,
+ 8'h02,
+ 8'h02,
+ 8'h02,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h46,
+ 8'hc2,
+ 8'hc3,
+ 8'hc3,
+ 8'hc3,
+ 8'hc2,
+ 8'h46,
+ 8'h3c,
+ 8'h18,
+ 8'hf0,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3e,
+ 8'h66,
+ 8'h46,
+ 8'h66,
+ 8'h3e,
+ 8'h36,
+ 8'h26,
+ 8'h66,
+ 8'h46,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7c,
+ 8'h06,
+ 8'h02,
+ 8'h06,
+ 8'h38,
+ 8'h60,
+ 8'h40,
+ 8'h40,
+ 8'h3e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'hfe,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h46,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h83,
+ 8'hc2,
+ 8'h42,
+ 8'h46,
+ 8'h64,
+ 8'h24,
+ 8'h2c,
+ 8'h38,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h83,
+ 8'h83,
+ 8'h82,
+ 8'h92,
+ 8'hda,
+ 8'hda,
+ 8'h6e,
+ 8'h66,
+ 8'h66,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'hc2,
+ 8'h66,
+ 8'h2c,
+ 8'h18,
+ 8'h18,
+ 8'h38,
+ 8'h24,
+ 8'h66,
+ 8'hc3,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h83,
+ 8'h42,
+ 8'h66,
+ 8'h2c,
+ 8'h38,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7e,
+ 8'h40,
+ 8'h20,
+ 8'h30,
+ 8'h18,
+ 8'h08,
+ 8'h04,
+ 8'h06,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h38,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h38,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h02,
+ 8'h04,
+ 8'h04,
+ 8'h08,
+ 8'h08,
+ 8'h10,
+ 8'h10,
+ 8'h30,
+ 8'h20,
+ 8'h60,
+ 8'h40,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h30,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h38,
+ 8'h24,
+ 8'h46,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'hff,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h04,
+ 8'h08,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h60,
+ 8'h40,
+ 8'h7c,
+ 8'h42,
+ 8'h62,
+ 8'h5e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h02,
+ 8'h02,
+ 8'h02,
+ 8'h3a,
+ 8'h46,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h3e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h78,
+ 8'h04,
+ 8'h06,
+ 8'h02,
+ 8'h06,
+ 8'h04,
+ 8'h7c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h40,
+ 8'h40,
+ 8'h40,
+ 8'h7c,
+ 8'h46,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h66,
+ 8'h5c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h46,
+ 8'h42,
+ 8'h7e,
+ 8'h02,
+ 8'h06,
+ 8'h7c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'hf0,
+ 8'h18,
+ 8'h08,
+ 8'h08,
+ 8'h7e,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'hfc,
+ 8'h66,
+ 8'h42,
+ 8'h66,
+ 8'h1a,
+ 8'h02,
+ 8'h7c,
+ 8'hc2,
+ 8'h42,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h02,
+ 8'h02,
+ 8'h02,
+ 8'h3a,
+ 8'h46,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h1e,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h20,
+ 8'h30,
+ 8'h00,
+ 8'h3e,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h20,
+ 8'h30,
+ 8'h1e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h46,
+ 8'h36,
+ 8'h1e,
+ 8'h0e,
+ 8'h16,
+ 8'h26,
+ 8'h46,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h1e,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h6e,
+ 8'hd2,
+ 8'hd2,
+ 8'hd2,
+ 8'hd2,
+ 8'hd2,
+ 8'hd2,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3a,
+ 8'h46,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3c,
+ 8'h46,
+ 8'h42,
+ 8'hc2,
+ 8'h42,
+ 8'h46,
+ 8'h3c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h3a,
+ 8'h46,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h3e,
+ 8'h02,
+ 8'h02,
+ 8'h02,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7c,
+ 8'h46,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h66,
+ 8'h5c,
+ 8'h40,
+ 8'h40,
+ 8'h40,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h76,
+ 8'h4e,
+ 8'hc6,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h06,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7c,
+ 8'h04,
+ 8'h04,
+ 8'h3c,
+ 8'h60,
+ 8'h40,
+ 8'h3e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h08,
+ 8'h08,
+ 8'h7f,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h78,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h42,
+ 8'h66,
+ 8'h5c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'hc2,
+ 8'h42,
+ 8'h66,
+ 8'h24,
+ 8'h2c,
+ 8'h18,
+ 8'h18,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h83,
+ 8'h83,
+ 8'hda,
+ 8'h5a,
+ 8'h7a,
+ 8'h66,
+ 8'h66,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h46,
+ 8'h64,
+ 8'h38,
+ 8'h18,
+ 8'h38,
+ 8'h64,
+ 8'h46,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'hc2,
+ 8'h42,
+ 8'h66,
+ 8'h24,
+ 8'h2c,
+ 8'h38,
+ 8'h18,
+ 8'h18,
+ 8'h0c,
+ 8'h07,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h7e,
+ 8'h60,
+ 8'h30,
+ 8'h18,
+ 8'h08,
+ 8'h04,
+ 8'h7e,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h70,
+ 8'h18,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h0c,
+ 8'h0e,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h08,
+ 8'h18,
+ 8'h70,
+ 8'h00,
+ 8'h00,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h0c,
+ 8'h18,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h30,
+ 8'h70,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h10,
+ 8'h18,
+ 8'h0c,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h8e,
+ 8'hd2,
+ 8'h60,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00,
+ 8'h00
+};
+
+always @ (posedge clk)
+ if(addr[11])
+ data <= 8'h0;
+ else
+ data <= rom_cell[addr[10:0]];
+
+endmodule
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/core_alu.sv b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/core_alu.sv
new file mode 100644
index 0000000..bae236d
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/core_alu.sv
@@ -0,0 +1,85 @@
+module core_alu(
+ input logic [ 6:0] i_opcode, i_funct7,
+ input logic [ 2:0] i_funct3,
+ input logic [31:0] i_num1u, i_num2u, i_pc, i_immu,
+ output logic o_branch_jalr,
+ output logic [31:0] o_res, o_branch_jalr_target
+);
+logic [ 4:0] shamt_rs, shamt_imm;
+logic [31:0] num1_plus_imm, pc_plus_imm;
+logic signed [31:0] i_num1s, i_num2s, i_imms;
+
+assign shamt_imm = i_immu[4:0];
+assign shamt_rs = i_num2u[4:0];
+assign num1_plus_imm = i_num1u + i_immu;
+assign pc_plus_imm = i_pc + i_immu;
+assign i_num1s = i_num1u;
+assign i_num2s = i_num2u;
+assign i_imms = i_immu;
+
+always_comb
+ case(i_opcode)
+ 7'b1100111 : begin // JALR
+ o_branch_jalr <= 1'b1;
+ o_branch_jalr_target <= num1_plus_imm;
+ end
+ 7'b1100011 : begin // BRANCH�?
+ case(i_funct3)
+ 3'b000 : o_branch_jalr <= (i_num1u == i_num2u); // BEQ
+ 3'b001 : o_branch_jalr <= (i_num1u != i_num2u); // BNE
+ 3'b100 : o_branch_jalr <= (i_num1s < i_num2s); // BLT
+ 3'b101 : o_branch_jalr <= (i_num1s >= i_num2s); // BGE
+ 3'b110 : o_branch_jalr <= (i_num1u < i_num2u); // BLTU
+ 3'b111 : o_branch_jalr <= (i_num1u >= i_num2u); // BGEU
+ default: o_branch_jalr <= 1'b0;
+ endcase
+ o_branch_jalr_target <= pc_plus_imm;
+ end
+ default : begin // 不跳�?
+ o_branch_jalr <= 1'b0;
+ o_branch_jalr_target <= 0;
+ end
+ endcase
+
+always_comb
+ casex({i_funct7,i_funct3,i_opcode})
+ // JAL类与JALR�?
+ 17'bxxxxxxx_xxx_110x111 : o_res <= i_pc + 4; // JAL, JALR
+ // LUI�?
+ 17'bxxxxxxx_xxx_0110111 : o_res <= i_immu; // LUI
+ // AUIPC�?
+ 17'bxxxxxxx_xxx_0010111 : o_res <= pc_plus_imm ; // AUIPC
+ // 算术�?
+ 17'b0000000_000_0110011 : o_res <= i_num1u + i_num2u; // ADD
+ 17'bxxxxxxx_000_0010011 : o_res <= num1_plus_imm ; // ADDI
+ 17'b0100000_000_0110011 : o_res <= i_num1u - i_num2u; // SUB
+ // 逻辑�?
+ 17'b0000000_100_0110011 : o_res <= i_num1u ^ i_num2u; // XOR
+ 17'bxxxxxxx_100_0010011 : o_res <= i_num1u ^ i_immu ; // XORI
+ 17'b0000000_110_0110011 : o_res <= i_num1u | i_num2u; // OR
+ 17'bxxxxxxx_110_0010011 : o_res <= i_num1u | i_immu ; // ORI
+ 17'b0000000_111_0110011 : o_res <= i_num1u & i_num2u; // AND
+ 17'bxxxxxxx_111_0010011 : o_res <= i_num1u & i_immu ; // ANDI
+ // 位移�?
+ 17'b0000000_001_0110011 : o_res <= i_num1u << shamt_rs ; // SLL
+ 17'b0000000_001_0010011 : o_res <= i_num1u << shamt_imm; // SLLI
+ 17'b0000000_101_0110011 : o_res <= i_num1u >> shamt_rs ; // SRL
+ 17'b0000000_101_0010011 : o_res <= i_num1u >> shamt_imm; // SRL
+ 17'b0100000_101_0110011 : begin // SRA
+ o_res <= i_num1u >> shamt_rs;
+ for(int i=0;i< shamt_rs;i++) o_res[31-i] <= i_num1u[31];
+ end
+ 17'b0100000_101_0010011 : begin // SRAI
+ o_res <= i_num1u >> shamt_imm;
+ for(int i=0;i=INSTR_CNT) ? 0 : instr_rom_cell[cell_rd_addr];
+ else
+ bus.rd_data <= 0;
+ end
+
+endmodule
+
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/naive_bus.sv b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/naive_bus.sv
new file mode 100644
index 0000000..7e6ded4
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/naive_bus.sv
@@ -0,0 +1,26 @@
+
+interface naive_bus();
+ // read interface
+ logic rd_req, rd_gnt;
+ logic [3:0] rd_be;
+ logic [31:0] rd_addr, rd_data;
+ // write interface
+ logic wr_req, wr_gnt;
+ logic [3:0] wr_be;
+ logic [31:0] wr_addr, wr_data;
+
+ modport master(
+ output rd_req, rd_be, rd_addr,
+ input rd_data, rd_gnt,
+ output wr_req, wr_be, wr_addr, wr_data,
+ input wr_gnt
+ );
+
+ modport slave(
+ input rd_req, rd_be, rd_addr,
+ output rd_data, rd_gnt,
+ input wr_req, wr_be, wr_addr, wr_data,
+ output wr_gnt
+ );
+
+endinterface
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/ram.sv b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/ram.sv
new file mode 100644
index 0000000..11dd81b
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/ram.sv
@@ -0,0 +1,19 @@
+module ram( // 1024B
+ input logic clk,
+ input logic i_we,
+ input logic [ 9:0] i_waddr, i_raddr,
+ input logic [ 7:0] i_wdata,
+ output logic [ 7:0] o_rdata
+);
+initial o_rdata = 8'h0;
+
+logic [7:0] data_ram_cell [0:1023];
+
+always @ (posedge clk)
+ o_rdata <= data_ram_cell[i_raddr];
+
+always @ (posedge clk)
+ if(i_we)
+ data_ram_cell[i_waddr] <= i_wdata;
+
+endmodule
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/ram128B.sv b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/ram128B.sv
new file mode 100644
index 0000000..83cc133
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/ram128B.sv
@@ -0,0 +1,19 @@
+module ram128B( // 128B
+ input logic clk,
+ input logic i_we,
+ input logic [ 6:0] i_addr,
+ input logic [ 7:0] i_wdata,
+ output logic [ 7:0] o_rdata
+);
+initial o_rdata = 8'h0;
+
+logic [7:0] data_ram_cell [0:127];
+
+always @ (posedge clk)
+ o_rdata <= data_ram_cell[i_addr];
+
+always @ (posedge clk)
+ if(i_we)
+ data_ram_cell[i_addr] <= i_wdata;
+
+endmodule
\ No newline at end of file
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/soc_top.sv b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/soc_top.sv
new file mode 100644
index 0000000..1cb2220
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/soc_top.sv
@@ -0,0 +1,138 @@
+module soc_top #(
+ parameter UART_RX_CLK_DIV = 108, // 50MHz/4/115200Hz=108
+ parameter UART_TX_CLK_DIV = 434, // 50MHz/1/115200Hz=434
+ parameter VGA_CLK_DIV = 1
+)(
+ // clock, typically 50MHz, UART_RX_CLK_DIV and UART_TX_CLK_DIV and VGA_CLK_DIV must be modify when clk is not 50MHz
+ input logic clk,
+ // debug uart and user uart shared signal
+ input logic isp_uart_rx,
+ output logic isp_uart_tx,
+ // SEG
+ output [7:0] SEL,
+ output [7:0] DIG,
+ // VGA signal
+ output logic vga_hsync, vga_vsync,
+ output logic vga_red, vga_green, vga_blue
+);
+
+logic rst_n;
+logic [31:0] boot_addr;
+logic [31:0] rd_data ;
+logic rd_gnt ;
+logic wr_req ;
+logic [31:0] wr_addr ;
+logic [31:0] wr_data ;
+logic wr_gnt ;
+
+naive_bus bus_masters[3]();
+naive_bus bus_slaves[6]();
+
+assign rd_data = bus_slaves[5].rd_data ;
+assign rd_gnt = bus_slaves[5].rd_gnt ;
+assign wr_req = bus_slaves[5].wr_req ;
+assign wr_addr = bus_slaves[5].wr_addr ;
+assign wr_data = bus_slaves[5].wr_data ;
+assign wr_gnt = bus_slaves[5].wr_gnt ;
+
+// shared debug uart and user uart module
+isp_uart #(
+ .UART_RX_CLK_DIV ( UART_RX_CLK_DIV),
+ .UART_TX_CLK_DIV ( UART_TX_CLK_DIV)
+) isp_uart_inst(
+ .clk ( clk ),
+ .i_uart_rx ( isp_uart_rx ),
+ .o_uart_tx ( isp_uart_tx ),
+ .o_rst_n ( rst_n ),
+ .o_boot_addr ( boot_addr ),
+ .bus ( bus_masters[0] ),
+ .user_uart_bus ( bus_slaves[4] )
+);
+
+// RV32I Core
+core_top core_top_inst(
+ .clk ( clk ),
+ .rst_n ( rst_n ),
+ .i_boot_addr ( boot_addr ),
+ .instr_master ( bus_masters[2] ),
+ .data_master ( bus_masters[1] )
+);
+
+// 指令ROM
+instr_rom instr_rom_inst(
+ .clk ( clk ),
+ .rst_n ( rst_n ),
+ .bus ( bus_slaves[0] )
+);
+
+// 指令RAM
+ram_bus_wrapper instr_ram_inst(
+ .clk ( clk ),
+ .rst_n ( rst_n ),
+ .bus ( bus_slaves[1] )
+);
+
+// 数据RAM
+ram_bus_wrapper data_ram_inst(
+ .clk ( clk ),
+ .rst_n ( rst_n ),
+ .bus ( bus_slaves[2] )
+);
+
+
+// 显存
+video_ram #(
+ .VGA_CLK_DIV ( VGA_CLK_DIV )
+)video_ram_inst(
+ .clk ( clk ),
+ .rst_n ( rst_n ),
+ .bus ( bus_slaves[3] ),
+ .o_vsync ( vga_vsync ),
+ .o_hsync ( vga_hsync ),
+ .o_red ( vga_red ),
+ .o_green ( vga_green ),
+ .o_blue ( vga_blue )
+);
+
+
+//SEG
+pout_seg p0(
+ .clk (clk ),
+ .rst_n (rst_n ),
+ .SEL (SEL ),
+ .DIG (DIG ),
+ .rd_data (rd_data ),
+ .rd_gnt (rd_gnt ),
+ .wr_req (wr_req ),
+ .wr_addr (wr_addr ),
+ .wr_data (wr_data ),
+ .wr_gnt (wr_gnt )
+);
+
+// 3��?5从�?�线仲裁��?
+//
+// 主(越靠前优先级越高):
+// 0. UART Debugger?
+// 1. Core Data Master
+// 2. Core Instruction Master
+//
+// 从:
+// 1. 指令ROM��? 地址空间 00000000~00000fff
+// 2. 指令RAM��? 地址空间 00008000~00008fff
+// 3. 数据RAM��? 地址空间 00010000~00010fff
+// 4. 显存RAM��? 地址空间 00020000~00020fff
+// 5. 用户UART�? 地址空间 00030000~00030003
+naive_bus_router #(
+ .N_MASTER ( 3 ),
+ .N_SLAVE ( 6 ),
+ .SLAVES_MASK ( {32'h0000_000f , 32'h0000_0003 , 32'h0000_0fff , 32'h0000_0fff , 32'h0000_0fff , 32'h0000_0fff } ),
+ .SLAVES_BASE ( {32'h0003_1000 , 32'h0003_0000 , 32'h0002_0000 , 32'h0001_0000 , 32'h0000_8000 , 32'h0000_0000 } )
+) soc_bus_router_inst (
+ .clk ( clk ),
+ .rst_n ( rst_n ),
+ .masters ( bus_masters ),
+ .slaves ( bus_slaves )
+);
+
+endmodule
+
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/uart_rx.sv b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/uart_rx.sv
new file mode 100644
index 0000000..003e9e1
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/uart_rx.sv
@@ -0,0 +1,53 @@
+module uart_rx #(
+ parameter UART_RX_CLK_DIV = 108 // 50MHz/4/115200Hz=108
+)(
+ input logic clk,
+ input logic i_rx,
+ output logic o_ready,
+ output logic [7:0] o_data
+);
+
+logic rx_bit, busy, last_busy=1'b0;
+logic [ 5:0] shift = 6'h0, status = 6'h0;
+logic [ 7:0] databuf = 8'h0;
+logic [31:0] cnt = 0;
+
+initial o_ready = 1'b0;
+initial o_data = 8'h0;
+
+assign busy = (status!=6'h0);
+assign rx_bit = (shift[0]&shift[1]) | (shift[0]&i_rx) | (shift[1]&i_rx);
+
+always @ (posedge clk)
+ last_busy <= busy;
+
+always @ (posedge clk)
+ o_ready <= (~busy & last_busy);
+
+always @ (posedge clk)
+ cnt <= (cnt7'd0;
+always @ (posedge clk)
+ busy_latch <= busy;
+
+assign tx_buffer = {2'b11, 8'h0A , // 0x0A = \n , a end of line
+ 2'b01, i_data[0],
+ 2'b01, i_data[1],
+ 2'b01, i_data[2],
+ 2'b01, i_data[3],
+ 2'b01, i_data[4],
+ 2'b01, i_data[5],
+ 2'b01, i_data[6],
+ 2'b01, i_data[7],
+ 2'b01, 8'b11111111 };
+
+always @ (posedge clk)
+ cnt <= (cnt5'd0) begin
+ if(cnt==0) begin
+ if(tx_cnt==TX_CNT) begin
+ {tx_shift, o_uart_tx} <= ~{fifo_rd_data, 1'b1};
+ fifo_rd_pointer <= fifo_rd_pointer + 10'h1;
+ end else begin
+ {tx_shift, o_uart_tx} <= {1'b0, tx_shift[7:1], ~tx_shift[0]};
+ end
+ tx_cnt <= tx_cnt - 5'd1;
+ end
+ end else begin
+ o_uart_tx <= 1'b1;
+ tx_cnt <= fifo_empty ? 5'd0 : TX_CNT;
+ end
+ end
+
+ram ram_for_uart_tx_fifo_inst(
+ .clk ( clk ),
+ .i_we ( bus.wr_req & wr_addr_valid & bus.wr_be[0] & ~fifo_full ),
+ .i_waddr ( fifo_wr_pointer ),
+ .i_wdata ( bus.wr_data[7:0] ),
+ .i_raddr ( fifo_rd_pointer ),
+ .o_rdata ( fifo_rd_data )
+);
+
+endmodule
diff --git a/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/vga_char_86x32.sv b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/vga_char_86x32.sv
new file mode 100644
index 0000000..3233b56
--- /dev/null
+++ b/hardware/Vivado/E-ELEMENTS/RISC-V.srcs/sources_1/imports/RTL/vga_char_86x32.sv
@@ -0,0 +1,188 @@
+module vga_char_86x32 #(
+ parameter VGA_CLK_DIV = 1
+)(
+ // clock
+ input logic clk, rst_n,
+ // vga interfaces
+ output logic hsync, vsync,
+ output logic red, green, blue,
+ // user interface
+ output logic req,
+ output logic [11:0] addr,
+ input logic [ 7:0] ascii
+);
+localparam H_END = 10'd688,
+ H_BRSTART = H_END + 10'd4 ,
+ H_BREND = H_BRSTART + 10'd30 ,
+ H_SYNCSTART = H_BREND + 10'd25 ,
+ H_SYNCEND = H_SYNCSTART + 10'd128,
+ H_BLSTART = H_SYNCEND + 10'd89 ,
+ H_BLEND = H_BLSTART + 10'd30 ,
+ H_PERIOD = H_BLEND + 10'd4 ,
+ V_END = 10'd512,
+ V_BRSTART = V_END + 10'd4 ,
+ V_BREND = V_BRSTART + 10'd30 ,
+ V_SYNCSTART = V_BREND + 10'd38 ,
+ V_SYNCEND = V_SYNCSTART + 10'd4 ,
+ V_BLSTART = V_SYNCEND + 10'd66 ,
+ V_BLEND = V_BLSTART + 10'd30 ,
+ V_PERIOD = V_BLEND + 10'd4 ;
+
+logic [3:0] rlp=4'h0, clp=4'h0, hsp=4'h0, vsp=4'h0;
+logic vlbr=1'b0, vgbl=1'b0, vlbl=1'b0, vgbr=1'b0, hlbr=1'b0, hgbl=1'b0, hlbl=1'b0, hgbr=1'b0;
+logic vir=1'b0, hir=1'b0, vbr=1'b0, hbr=1'b0, vbl=1'b0, hbl=1'b0, hb=1'b0, vb=1'b0, border=1'b0;
+logic [9:0] cnt = 0, hcnt = 0, vcnt = 0;
+logic req1 = 1'b0, req2 = 1'b0;
+logic [7:0] ascii_bufferout, ascii_latch=8'h0, ascii_to_rom;
+logic [7:0] rom_data;
+logic [6:0] x_h, x_h1=7'h0, x_h2=7'h0;
+logic [5:0] y_h;
+
+logic [2:0] x_l, x_l1 = 3'h0, x_l2 = 3'h0, x_l3 = 3'h0, x_l4 = 3'h0;
+logic [3:0] y_l, y_l1 = 4'h0, y_l2 = 4'h0, y_l3 = 4'h0;
+
+assign {x_h, x_l} = hcnt;
+assign {y_h, y_l} = vcnt;
+
+initial begin hsync=1'b0; vsync=1'b0; {red,green,blue}=3'h0; req=1'b0; addr = 12'h0; end
+
+always @ (posedge clk)
+ if(~rst_n) begin
+ vlbr<= 1'b0;
+ vgbl<= 1'b0;
+ vlbl<= 1'b0;
+ vgbr<= 1'b0;
+ hlbr<= 1'b0;
+ hgbl<= 1'b0;
+ hlbl<= 1'b0;
+ hgbr<= 1'b0;
+ vir <= 1'b0;
+ hir <= 1'b0;
+ vbr <= 1'b0;
+ hbr <= 1'b0;
+ vbl <= 1'b0;
+ hbl <= 1'b0;
+ hb <= 1'b0;
+ vb <= 1'b0;
+ border <= 1'b0;
+ end else begin
+ vlbr<= vcnt < V_BREND ;
+ vgbl<= vcnt >= V_BLSTART;
+ vlbl<= vcnt < V_BLEND ;
+ vgbr<= vcnt >= V_BRSTART;
+ hlbr<= hcnt < H_BREND ;
+ hgbl<= hcnt >= H_BLSTART;
+ hlbl<= hcnt < H_BLEND;
+ hgbr<= hcnt >= H_BRSTART;
+ vir <= vlbr | vgbl;
+ hir <= hlbr | hgbl;
+ vbr <= vgbr & vlbr;
+ hbr <= hgbr & hlbr;
+ vbl <= vgbl & vlbl;
+ hbl <= hgbl & hlbl;
+ hb <= (hbr | hbl) & vir;
+ vb <= (vbr | vbl) & hir;
+ border <= hb | vb;
+ end
+
+always @ (posedge clk or negedge rst_n)
+ if(~rst_n) begin
+ cnt <= 10'h0;
+ hcnt <= 10'h0;
+ vcnt <= 10'h0;
+ end else begin
+ cnt <= (cnt<(VGA_CLK_DIV-1)) ? cnt + 10'h1 : 10'h0;
+ if(cnt==10'h0) begin
+ if(hcnt < H_PERIOD) begin
+ hcnt <= hcnt + 10'h1;
+ end else begin
+ hcnt <= 10'h0;
+ vcnt <= (vcnt=H_SYNCSTART && hcnt=V_SYNCSTART && vcnt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ default_dashboard
+
+
+
+
+
+