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 @@ - + + +