[an error occurred while processing this directive]
|
Ошибка в заданиях constant - все компиляторы рассматривают их как 12-ти битовые (3 четверки), а заданы они как 10-ти битовые. Если вместо определения X"360" использовать "110110000" и т.д. - все компилируется. Поверил на Quartus-е и Synplify. При этом Quartus НЕ компилирует и НЕ говорит чего неправильно, а Synplify - говорит.
Еще одно замечание - код может быть написан по другому:
------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity adress_compare is
generic( ADRESS_LENGTH: INTEGER :=10);
port (input_adress: in STD_LOGIC_VECTOR (ADRESS_LENGTH-1 downto 0);
subreg0_select: out STD_LOGIC;
subreg1_select: out STD_LOGIC);
end adress_compare;
architecture Behavioral of adress_compare is
constant SUBREG0_ADRESS: STD_LOGIC_VECTOR (ADRESS_LENGTH-1 downto 0):="1101100000";
constant SUBREG1_ADRESS: STD_LOGIC_VECTOR (ADRESS_LENGTH-1 downto 0):="1101100001";
begin
subreg0_select <='1' when input_adress = SUBREG0_ADRESS else '0';
subreg1_select <='1' when input_adress = SUBREG1_ADRESS else '0';
end Behavioral;
------------------------------------------------------
При этом имплементация другая - меньшее число LUT, но меньше и быстродействие. Тут уж надо выбирать чего именно нужно.
Успехов
E-mail: info@telesys.ru