library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.STD_LOGIC_ARITH.ALL;
--use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;
entity two_number_split is
Port (number : in integer range 0 to 99;
position0 : out STD_LOGIC_VECTOR (3 downto 0);
position1 : out STD_LOGIC_VECTOR (3 downto 0));
end two_number_split;
architecture Behavioral of two_number_split is
signal pos0, pos1 : STD_LOGIC_VECTOR(3 downto 0);
begin
convert: process(number, pos0, pos1)
begin
pos1 <= number/10;
pos0 <= number mod 10;
position0 <= std_logic_vector(pos0);
position1 <= std_logic_vector(pos1);
end process convert;
end Behavioral;
ошибки:Какие VHDL библиотеки использовать для десятичного модуля
ERROR:HDLCompiler:1638 - "C:\Users\XXX\Documents\SS\ISE_Ex\seven_segment\two_numbers.vhd" Line 19: found '0' definitions of operator "/", cannot determine exact overloaded matching definition for "/"
ERROR:HDLCompiler:1638 - "C:\Users\XXX\Documents\SS\ISE_Ex\seven_segment\two_numbers.vhd" Line 20: found '0' definitions of operator "mod", cannot determine exact overloaded matching definition for "mod"
Я думаю, я просто используя неправильные библиотеки. Любые предложения? Я пробовал все комбинации библиотек, перечисленных выше, и не уверен, что происходит.
Я знаю, что логический вектор представляет собой массив бит. Но я принимаю десятичное число и разбиваю его на два битовых массива, представляющих каждое число. То есть. вход 99 сделает pos0 1001 и pos1 1001. – marshmallow
Это произойдет, если вы используете тип с определенными операторами разделения и мод. У вас есть два варианта, чтобы выполнить это со стандартными библиотеками, как описано в моем ответе. Похоже, вы потенциально пытаетесь вывести это на семисегментный дисплей, и в этом случае вы, возможно, захотите перейти на преобразование в BCD, используя алгоритм с двойной ошибкой, который не требует какого-либо деления. –