diff --git a/firmware/alu/.gitignore b/firmware/alu/.gitignore
index d294f06..75d8985 100644
--- a/firmware/alu/.gitignore
+++ b/firmware/alu/.gitignore
@@ -87,6 +87,7 @@ xilinxsim.ini
# cpld
/main_html/
+*_html/
*.gyd
*.jed
*.mfd
@@ -96,4 +97,6 @@ xilinxsim.ini
*.vm6
*.xml
*.err
+*.tim
+*.tspec
diff --git a/firmware/alu/CPLD1.ucf b/firmware/alu/CPLD1.ucf
new file mode 100644
index 0000000..59c6769
--- /dev/null
+++ b/firmware/alu/CPLD1.ucf
@@ -0,0 +1,33 @@
+NET "func(0)" LOC = "43";
+NET "func(1)" LOC = "44";
+NET "func(2)" LOC = "1";
+NET "func(3)" LOC = "2";
+
+NET "accu(0)" LOC = "27";
+NET "accu(1)" LOC = "28";
+NET "accu(2)" LOC = "29";
+NET "accu(3)" LOC = "30";
+NET "accu(4)" LOC = "31";
+NET "accu(5)" LOC = "32";
+NET "accu(6)" LOC = "37";
+NET "accu(7)" LOC = "38";
+
+NET "ram(0)" LOC = "39";
+NET "ram(1)" LOC = "40";
+NET "ram(2)" LOC = "41";
+NET "ram(3)" LOC = "42";
+NET "ram(4)" LOC = "5";
+NET "ram(5)" LOC = "6";
+NET "ram(6)" LOC = "7";
+NET "ram(7)" LOC = "8";
+
+NET "result(0)" LOC = "22";
+NET "result(1)" LOC = "21";
+NET "result(2)" LOC = "20";
+NET "result(3)" LOC = "19";
+NET "result(4)" LOC = "18";
+NET "result(5)" LOC = "16";
+NET "result(6)" LOC = "14";
+NET "result(7)" LOC = "13";
+
+NET "carry_out" LOC = "3";
diff --git a/firmware/alu/CPLD1.vhd b/firmware/alu/CPLD1.vhd
new file mode 100644
index 0000000..4b4c68d
--- /dev/null
+++ b/firmware/alu/CPLD1.vhd
@@ -0,0 +1,30 @@
+library ieee;
+
+use ieee.std_logic_1164.all;
+
+entity CPLD1 is
+ port (
+ func: in std_logic_vector(3 downto 0);
+ accu: in std_logic_vector(7 downto 0);
+ ram: in std_logic_vector(7 downto 0);
+ result: out std_logic_vector(7 downto 0);
+ carry_out: out std_logic
+ );
+end CPLD1;
+
+architecture rtl of CPLD1 is
+begin
+
+ alu: entity work.alu generic map (
+ WIDTH => 8,
+ FIRST => true
+ ) port map (
+ func => func,
+ accu => accu,
+ ram => ram,
+ carry_in => '0',
+ result => result,
+ carry_out => carry_out
+ );
+
+end rtl;
diff --git a/firmware/alu/CPLD2.ucf b/firmware/alu/CPLD2.ucf
new file mode 100644
index 0000000..4496eb5
--- /dev/null
+++ b/firmware/alu/CPLD2.ucf
@@ -0,0 +1,33 @@
+NET "func(0)" LOC = "44";
+NET "func(1)" LOC = "43";
+NET "func(2)" LOC = "42";
+NET "func(3)" LOC = "41";
+
+NET "accu(8)" LOC = "27";
+NET "accu(9)" LOC = "28";
+NET "accu(10)" LOC = "29";
+NET "accu(11)" LOC = "30";
+NET "accu(12)" LOC = "31";
+NET "accu(13)" LOC = "32";
+NET "accu(14)" LOC = "37";
+NET "accu(15)" LOC = "38";
+
+NET "ram(8)" LOC = "39";
+NET "ram(9)" LOC = "40";
+NET "ram(10)" LOC = "2";
+NET "ram(11)" LOC = "3";
+NET "ram(12)" LOC = "5";
+NET "ram(13)" LOC = "6";
+NET "ram(14)" LOC = "7";
+NET "ram(15)" LOC = "8";
+
+NET "result(8)" LOC = "21";
+NET "result(9)" LOC = "20";
+NET "result(10)" LOC = "19";
+NET "result(11)" LOC = "18";
+NET "result(12)" LOC = "16";
+NET "result(13)" LOC = "14";
+NET "result(14)" LOC = "13";
+NET "result(15)" LOC = "12";
+
+NET "carry_in" LOC = "33";
diff --git a/firmware/alu/CPLD2.vhd b/firmware/alu/CPLD2.vhd
new file mode 100644
index 0000000..6b30acb
--- /dev/null
+++ b/firmware/alu/CPLD2.vhd
@@ -0,0 +1,30 @@
+library ieee;
+
+use ieee.std_logic_1164.all;
+
+entity CPLD2 is
+ port (
+ func: in std_logic_vector(3 downto 0);
+ accu: in std_logic_vector(15 downto 8);
+ ram: in std_logic_vector(15 downto 8);
+ carry_in: in std_logic;
+ result: out std_logic_vector(15 downto 8)
+ );
+end CPLD2;
+
+architecture rtl of CPLD2 is
+begin
+
+ alu: entity work.alu generic map (
+ WIDTH => 8,
+ FIRST => false
+ ) port map (
+ func => func,
+ accu => accu,
+ ram => ram,
+ carry_in => carry_in,
+ result => result,
+ carry_out => open
+ );
+
+end rtl;
diff --git a/firmware/alu/main.vhd b/firmware/alu/alu.vhd
similarity index 98%
rename from firmware/alu/main.vhd
rename to firmware/alu/alu.vhd
index 318000a..6c5f1f8 100644
--- a/firmware/alu/main.vhd
+++ b/firmware/alu/alu.vhd
@@ -3,7 +3,7 @@ library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.ALL;
-entity main is
+entity alu is
generic (
WIDTH: integer := 8;
FIRST: boolean := true
@@ -16,9 +16,9 @@ entity main is
result: out std_logic_vector(WIDTH-1 downto 0);
carry_out: out std_logic
);
-end main;
+end alu;
-architecture rtl of main is
+architecture rtl of alu is
signal x: std_logic_vector(WIDTH-1 downto 0);
signal y: std_logic_vector(WIDTH-1 downto 0);
signal cin: std_logic;
diff --git a/firmware/alu/alu.xise b/firmware/alu/alu.xise
index f3210a5..53884d1 100644
--- a/firmware/alu/alu.xise
+++ b/firmware/alu/alu.xise
@@ -15,10 +15,6 @@
-
-
-
-
@@ -29,7 +25,22 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -39,7 +50,7 @@
-
+
@@ -47,7 +58,9 @@
+
+
@@ -58,9 +71,9 @@
-
-
-
+
+
+
@@ -84,11 +97,12 @@
+
-
-
-
+
+
+
@@ -134,16 +148,16 @@
-
+
-
+
-
-
-
-
+
+
+
+
@@ -179,9 +193,10 @@
-
+
+
@@ -219,7 +234,7 @@
-
+
@@ -233,7 +248,9 @@
-
+
+
+