Я пишу код для контроллера нечеткой логики c, и в строке 69 появляется ошибка: Ошибка (10479): индексированный тип имени используется, но не объявлен! В этой строке я объявил подтип и тип, который я использую для объявления нескольких матриц векторов:
subtype mf_range is unsigned(7 downto 0) range x"00" to x"3D";
type membership_functions is array (0 to 3) of mf_range;
constant MF_BVR_M : membership_functions := (x"00", x"00", x"05", x"0F");
constant MF_BVR_S : membership_functions := (x"05", x"0A", x"14", x"19");
constant MF_BVR_MN : membership_functions := (x"0F", x"19", x"1E", x"1E");
constant MF_TSJTIZ_K : membership_functions := (x"00", x"00", x"0A", x"1E");
constant MF_TSJTIZ_S : membership_functions := (x"0A", x"14", x"28", x"32");
constant MF_TSJTIZ_D : membership_functions := (x"1E", x"32", x"3C", x"3C");
constant MF_PS_M : membership_functions := (x"00", x"00", x"05", x"0A");
constant MF_PS_S : membership_functions := (x"05", x"0A", x"0A", x"0F");
constant MF_PS_V : membership_functions := (x"0A", x"0F", x"14", x"14");
constant MF_TSJTIZNEXT_K: membership_functions := (x"00", x"00", x"0A", x"1E");
constant MF_TSJTIZNEXT_S: membership_functions := (x"0A", x"14", x"28", x"32");
constant MF_TSJTIZNEXT_D: membership_functions := (x"1E", x"32", x"3C", x"3C");
Ошибка указывает на первую строку кода выше.
Часть кода, который использует эта матрица:
pure function fuzzification_kalkulator( mf : membership_functions;
x : unsigned(7 downto 0)) return unsigned is
variable mikro : unsigned(7 downto 0) := x"00";
variable slope1 : unsigned(7 downto 0) := x"00";
variable slope2 : unsigned(7 downto 0) := x"00";
begin
if (mf(0)=0 and mf(1)=0) or (mf(2)=0 and mf(3)=0) then
slope1 := x"00";
slope1 := x"00";
else
slope1 := x"FF"/(mf(1)-mf(0));
slope2 := x"FF"/(mf(3)-mf(2));
end if;
if (mf(0) /= mf(1) and mf(2) /= mf(3)) then
if (x < mf(0) or x > mf(3)) then
mikro := x"00";
elsif (x >= mf(1) and x < mf(2)) then
mikro := x"FF"; -- vrednost x"FF" je reprezentacija vrednosti 1
elsif (x >= mf(0) and x < mf(1)) then
mikro := x"FF" - ((mf(1) - x)*slope1);
elsif (x >= mf(2) and x <= mf(3)) then
mikro := x"FF" - ((x-mf(2))*slope2);
end if;
elsif (mf(0) = mf(1)) then
if (x > mf(1) and x < mf(2)) then
mikro := x"FF";
elsif (x > mf(3)) then
mikro := x"00";
elsif (x >= mf(2) and x <= mf(3)) then
mikro := x"FF" - ((x-mf(2))*slope2);
end if;
elsif (mf(2) = mf(3)) then
if (x >= mf(1) and x <= mf(2)) then
mikro := x"FF";
elsif (x < mf(0) or x > mf(3)) then
mikro := x"00";
elsif (x >= mf(0) and x < mf(1)) then
mikro := x"FF" - ((mf(1) - x)*slope1);
end if;
end if;
return mikro;
end function;
begin
TSJ_TIZNEXT <= std_logic_vector(TSJTIZ_bafer);
read_in_state: process(clock)
begin
case enable_FLC is
when '1' =>
BV_R_bafer <= unsigned(BV_R);
PS_bafer <= unsigned(PS);
enableFLC_bafer <= enable_FLC;
when '0' =>
enableFLC_bafer <= enable_FLC;
when others =>
enableFLC_bafer <= enable_FLC;
end case;
end process;
fuzzification: process(clock)
begin
if rising_edge(clock) then
if (enableFLC_bafer = '1') then
mikroBVR_M <= fuzzification_kalkulator(MF_BVR_M, BV_R_bafer);
mikroBVR_S <= fuzzification_kalkulator(MF_BVR_S, BV_R_bafer);
mikroBVR_MN <= fuzzification_kalkulator(MF_BVR_MN, BV_R_bafer);
mikroTSJTIZ_K <= fuzzification_kalkulator(MF_TSJTIZ_K, TSJTIZ_bafer);
mikroTSJTIZ_S <= fuzzification_kalkulator(MF_TSJTIZ_S, TSJTIZ_bafer);
mikroTSJTIZ_D <= fuzzification_kalkulator(MF_TSJTIZ_D, TSJTIZ_bafer);
mikroPS_M <= fuzzification_kalkulator(MF_PS_M, PS_bafer);
mikroPS_S <= fuzzification_kalkulator(MF_PS_S, PS_bafer);
mikroPS_V <= fuzzification_kalkulator(MF_PS_V, PS_bafer);
end if;
end if;
end process;
Я начинающий с VHDL. Я проверяю синтаксис кучу времени, не могу найти ошибку. Чего мне не хватает ...?