Sollen Zahlen z.B. an ein Display oder über eine serielle Schnittstelle ausgegeben werden, dann ist es naheliegend, sie zuerst in ein BCD-Format und anschliessend in ASCII umzuwandeln. Das geht ganz einfach: zu jeder der 4-Bit Gruppen der BCD-Zahl wird der ASCII-Wert '0' dazuaddiert. Fertig.
Durch die dafür nötige Hin- und Zurückkonvertiererei wird das aber recht sperrig. Man kann die Sache vereinfachen, wenn man sich die ASCII-Tabelle ansieht und feststellt, dass die relevanten ASCII-Werte einfach für den Wert bei x"30" beginnen und mit dem Wert 9 bei x"39" aufhören. Man muss also nur die x"3" vor die 4-Bit Binärzahl bringen und fertig ist der ASCII Wert.
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity BCD2ASCII is Port ( di : in STD_LOGIC_VECTOR (3 downto 0); do : out STD_LOGIC_VECTOR (7 downto 0)); end BCD2ASCII; -- Entweder die ASCII-'0' dazuaddieren ... architecture Behavioral of BCD2ASCII is begin do <= std_logic_vector(to_unsigned(character'pos('0')+to_integer(unsigned(di)),8)); end Behavioral; -- ... oder einfach den Wert "0011" anhängen. architecture Behavioral of BCD2ASCII is begin do <= x"3" & di; end Behavioral;