As to the BCD conversion, maybe this will work
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity BCD is
Port ( Value : in STD_LOGIC_VECTOR ( 7 downto 0);
BCD : out STD_LOGIC_VECTOR (11 downto 0));
end BCD;
architecture Behavioral of BCD is
type LookupTableType is array(0 to 255) of std_logic_vector(11 downto 0);
signal LookupTable : LookupTableType :=
(x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"010",x"011",x"012",x"013",x"014",x"015",x"016",x"017",x"018",x"019",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009", -- change these lines
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009", -- too lazy to type proper
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009", -- values
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009",
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009", --
x"000",x"001",x"002",x"003",x"004",x"005",x"006",x"007",x"008",x"009", -- down to here
x"250",x"251",x"252",x"253",x"254",x"255");
begin
BCD <= LookupTable(to_integer(unsigned(Value)));
end Behavioral;
Note that most of the table initialization values are wrong. I just copied and pasted my way through it, I wasn't interested enough to type the proper values 256 times.
I know this synthesizes but I didn't tie it to a constraints file and actually run it on a board.