Проблема с использованием оператора деления в Quartus с использованием VHDL

Нам нужно разделить два целых числа с помощью VHDL и запустить на FPGA. Ниже приведен код, который мы написали для сложения целых чисел, и он скомпилирован в Quartus, но когда мы попытались скомпилировать код деления, он выдал ошибку:

Ошибка (10327): ошибка VHDL вdivir.vhd(25): не удается определить определение оператора / -- найдено 0 возможных определений.

когда мы ищем в Интернете, мы показываем, что есть много сообщений, в которых говорится, что целочисленное деление в VHDL не выполняется. Может ли кто-нибудь дать нам несколько советов, чтобы решить эту проблему. заранее спасибо

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

entity divider is

port 
    (
    --clock, resetn :IN STD_LOGIC;
       
        a       : in  std_logic_vector (11 downto -4);
        b      : in  std_logic_vector (11 downto -4);
        Enable_FA: in std_logic;
        result  : out  std_logic_vector (23 downto -8)
    );

end entity;

architecture behaviour of divider is
begin
process(a,b,Enable_FA)
    begin
    if (Enable_FA='1') then
        result <= a / b;
    end if; 
end process;    
end behaviour;

person Dilum Bandara Wijesundara    schedule 07.04.2021    source источник
comment
Разделение не определено в пакете Synopsys std_logic_unsigned (ни в пакете Synopsys std_logic_arith). std_logic_vector имеет естественный тип индекса n, он не может иметь отрицательных значений индекса. Вы не пытаетесь целочисленное деление, целое число является скалярным типом.   -  person    schedule 07.04.2021
comment
Отвечает ли это на ваш вопрос? не может определить определение оператора / -- найдено 0 возможных определений   -  person    schedule 07.04.2021
comment
@MatthewTaylor std_logic_unsigned и numeric_std совместимы, если нет перекрытия типов или функций. Обычно конфликт возникает из-за std_logic_arith и numeric_std, где оба пакета определяют типы signed и unsigned.   -  person Tricky    schedule 07.04.2021
comment
Спасибо @Tricky. Кажется, я перепутал свои std_logic_unsigned и свои std_logic_arith.   -  person Matthew Taylor    schedule 07.04.2021
comment
Стандарт IEEE 1076-2008 12.4, Условия использования, параграф 8. Например. с предложениями использования для numeric_std и std_logic_arith объявление типа для unsigned from любого из них не будет видно напрямую. Использование объявления беззнакового типа из numeric_std для порта или параметра и связывание его с фактическим использованием объявления без знака типа из немодифицированного пакета std_logic_arith приведет к ошибке.   -  person    schedule 07.04.2021
comment
В FPGA обычно нет специального аппаратного обеспечения для вычислительного разделения, поэтому вам нужно построить делитель из других частей (таких как множители и ОЗУ). Это означает, что обычно это не однострочный код в VHDL, а вам нужно создать экземпляр блока, реализующего алгоритм деления. Я думаю, что все основные поставщики FPGA предоставляют вычислительным подразделениям бесплатные IP-ядра (но вы можете написать свое собственное).   -  person Harry    schedule 08.04.2021
comment
Попробуйте придерживаться numeric_std и поищите ядра делителя в каталоге IP любой используемой вами программы, скорее всего это Quartus Prime   -  person quantum231    schedule 08.04.2021