VHDL 3-значный двоично-кодированный двенадцатеричный (база 12) в 4-значный двоично-кодированный старческий (база 6) преобразователь - PullRequest
0 голосов
/ 14 ноября 2018

В настоящее время я делаю конвертер из базы 12 в базу 6. Число в базе 12 имеет двоичное кодирование и максимум 3 цифры (например, 7A9 -> 0111 1010 1001), и мне нужно преобразовать его в базу 6 ((7A9) _12 -> (5133) _6 -> 0101 0001 0011) 0011) для отображения на 7-сегментном дисплее.

Мой подход к этому состоит в том, чтобы преобразовать каждую из цифр входного сигнала в целое число и в основание 10, а затем преобразовать в основание 6, используя mod и деление, а затем преобразовать каждую цифру в 4-разрядный двоичный код.

Это мой текущий код:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity R12_3digToR6_4digConv is
    port(
        d : in STD_LOGIC_VECTOR (11 downto 0);
        n : out STD_LOGIC_VECTOR (15 downto 0)
    );
end R12_3digToR6_4digConv;

architecture arch_R12M7A9_3digToR6_4digConv of R12_3digToR6_4digConv is
    signal d_sum10,d_temp,d_sum6 : integer := 0;

    begin
        process(d)
        begin
            --Getting digits and converting to base 10
            d_sum10 <= to_integer(unsigned(d(11 downto 8))*"10010000" + unsigned(d(7 downto 4))*"1010" + unsigned(d(3 downto 0)));

            --Convert base 10 to base 6
            for i in 0 to 3 loop
                d_temp <= d_sum10 mod 6;
                d_sum10 <= d_sum10 / 6;
                n((15 - 4*i) downto (12 - 4*i)) <= std_logic_vector(to_unsigned(d_temp,4));
            end loop;
        end process;
end arch_R12M7A9_3digToR6_4digConv;

Я использую Quartus Prime для компиляции, и результат Выходной векторный сигнал

Независимо от того, какой у меня входной сигнал, результатом будут нули, и я не знаю, как мне это изменить, любая помощь будет отличной.

Спасибо:)

...