 # VHDL Code troubleshooting

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;

ENTITY Fuzzy IS
PORT (Clock,Reset : IN std_logic;
IN1 : IN std_logic_vector(7 DOWNTO 0);
IN2 : IN std_logic_vector(7 DOWNTO 0);
IN3 : IN std_logic_vector(7 DOWNTO 0);
IN4 : IN std_logic_vector(7 DOWNTO 0);
IN5 : IN std_logic_vector(7 DOWNTO 0);
IN6 : IN std_logic_vector(7 DOWNTO 0);
IN7 : IN std_logic_vector(7 DOWNTO 0);
RESULT : OUT std_logic_vector (7 DOWNTO 0));
END Fuzzy;

ARCHITECTURE ARCH_Fuzzy OF Fuzzy IS

– FOR INPUT 1
TYPE INPUT1 IS (VL1,L1,ML1,M1,MH1,H1,VH1,NONE1);
TYPE membership1 IS RECORD term: INPUT1;
point1: std_logic_vector(7 DOWNTO 0);
slope1: std_logic_vector(7 DOWNTO 0);
point2: std_logic_vector(7 DOWNTO 0);
slope2: std_logic_vector(7 DOWNTO 0);
END RECORD;
TYPE membership1_function IS ARRAY(NATURAL RANGE<>) OF membership1;
CONSTANT mfs1: membership1_function:=
((term => VL1, point1 => x"00", slope1 => x"FF", point2 => x"24", slope2 => x"07"),
(term => L1, point1 => x"24", slope1 => x"07", point2 => x"48", slope2 => x"07"),
(term => ML1, point1 => x"48", slope1 => x"07", point2 => x"6C", slope2 => x"07"),
(term => M1, point1 => x"6C", slope1 => x"07", point2 => x"90", slope2 => x"07"),
(term => MH1, point1 => x"90", slope1 => x"07", point2 => x"B4", slope2 => x"07"),
(term => H1, point1 => x"B4", slope1 => x"07", point2 => x"D8", slope2 => x"07"),
(term => VH1, point1 => x"D8", slope1 => x"07", point2 => x"F0", slope2 => x"FF"),
(term => NONE1, point1 => x"FF", slope1 => x"FF", point2 => x"FF", slope2 => x"FF"));

– FOR INPUT 2
TYPE INPUT2 IS (VL2,L2,ML2,M2,MH2,H2,VH2,NONE2);
TYPE membership2 IS RECORD term: INPUT2;
point1: std_logic_vector(7 DOWNTO 0);
slope1: std_logic_vector(7 DOWNTO 0);
point2: std_logic_vector(7 DOWNTO 0);
slope2: std_logic_vector(7 DOWNTO 0);
END RECORD;
TYPE membership2_function IS ARRAY(NATURAL RANGE<>) OF membership2;
CONSTANT mfs2: membership2_function:=
((term => VL2, point1 => x"00", slope1 => x"FF", point2 => x"24", slope2 => x"07"),
(term => L2, point1 => x"24", slope1 => x"07", point2 => x"48", slope2 => x"07"),
(term => ML2, point1 => x"48", slope1 => x"07", point2 => x"6C", slope2 => x"07"),
(term => M2, point1 => x"6C", slope1 => x"07", point2 => x"90", slope2 => x"07"),
(term => MH2, point1 => x"90", slope1 => x"07", point2 => x"B4", slope2 => x"07"),
(term => H2, point1 => x"B4", slope1 => x"07", point2 => x"D8", slope2 => x"07"),
(term => VH2, point1 => x"D8", slope1 => x"07", point2 => x"F0", slope2 => x"FF"),
(term => NONE2, point1 => x"FF", slope1 => x"FF", point2 => x"FF", slope2 => x"FF"));

– FOR INPUT 3
TYPE INPUT3 IS (VL3,L3,ML3,M3,MH3,H3,VH3,NONE3);
TYPE membership3 IS RECORD term: INPUT3;
point1: std_logic_vector(7 DOWNTO 0);
slope1: std_logic_vector(7 DOWNTO 0);
point2: std_logic_vector(7 DOWNTO 0);
slope2: std_logic_vector(7 DOWNTO 0);
END RECORD;
TYPE membership3_function IS ARRAY(NATURAL RANGE<>) OF membership3;
CONSTANT mfs3: membership3_function:=
((term => VL3, point1 => x"00", slope1 => x"FF", point2 => x"24", slope2 => x"07"),
(term => L3, point1 => x"24", slope1 => x"07", point2 => x"48", slope2 => x"07"),
(term => ML3, point1 => x"48", slope1 => x"07", point2 => x"6C", slope2 => x"07"),
(term => M3, point1 => x"6C", slope1 => x"07", point2 => x"90", slope2 => x"07"),
(term => MH3, point1 => x"90", slope1 => x"07", point2 => x"B4", slope2 => x"07"),
(term => H3, point1 => x"B4", slope1 => x"07", point2 => x"D8", slope2 => x"07"),
(term => VH3, point1 => x"D8", slope1 => x"07", point2 => x"F0", slope2 => x"FF"),
(term => NONE3, point1 => x"FF", slope1 => x"FF", point2 => x"FF", slope2 => x"FF"));

– FOR INPUT 4
TYPE INPUT4 IS (VL4,L4,ML4,M4,MH4,H4,VH4,NONE4);
TYPE membership4 IS RECORD term: INPUT4;
point1: std_logic_vector(7 DOWNTO 0);
slope1: std_logic_vector(7 DOWNTO 0);
point2: std_logic_vector(7 DOWNTO 0);
slope2: std_logic_vector(7 DOWNTO 0);
END RECORD;
TYPE membership4_function IS ARRAY(NATURAL RANGE<>) OF membership4;
CONSTANT mfs4: membership4_function:=
((term => VL4, point1 => x"00", slope1 => x"FF", point2 => x"24", slope2 => x"07"),
(term => L4, point1 => x"24", slope1 => x"07", point2 => x"48", slope2 => x"07"),
(term => ML4, point1 => x"48", slope1 => x"07", point2 => x"6C", slope2 => x"07"),
(term => M4, point1 => x"6C", slope1 => x"07", point2 => x"90", slope2 => x"07"),
(term => MH4, point1 => x"90", slope1 => x"07", point2 => x"B4", slope2 => x"07"),
(term => H4, point1 => x"B4", slope1 => x"07", point2 => x"D8", slope2 => x"07"),
(term => VH4, point1 => x"D8", slope1 => x"07", point2 => x"F0", slope2 => x"FF"),
(term => NONE4, point1 => x"FF", slope1 => x"FF", point2 => x"FF", slope2 => x"FF"));

– FOR INPUT 5
TYPE INPUT5 IS (VL5,L5,ML5,M5,MH5,H5,VH5,NONE5);
TYPE membership5 IS RECORD term: INPUT5;
point1: std_logic_vector(7 DOWNTO 0);
slope1: std_logic_vector(7 DOWNTO 0);
point2: std_logic_vector(7 DOWNTO 0);
slope2: std_logic_vector(7 DOWNTO 0);
END RECORD;
TYPE membership5_function IS ARRAY(NATURAL RANGE<>) OF membership5;
CONSTANT mfs5: membership5_function:=
((term => VL5, point1 => x"00", slope1 => x"FF", point2 => x"24", slope2 => x"07"),
(term => L5, point1 => x"24", slope1 => x"07", point2 => x"48", slope2 => x"07"),
(term => ML5, point1 => x"48", slope1 => x"07", point2 => x"6C", slope2 => x"07"),
(term => M5, point1 => x"6C", slope1 => x"07", point2 => x"90", slope2 => x"07"),
(term => MH5, point1 => x"90", slope1 => x"07", point2 => x"B4", slope2 => x"07"),
(term => H5, point1 => x"B4", slope1 => x"07", point2 => x"D8", slope2 => x"07"),
(term => VH5, point1 => x"D8", slope1 => x"07", point2 => x"F0", slope2 => x"FF"),
(term => NONE5, point1 => x"FF", slope1 => x"FF", point2 => x"FF", slope2 => x"FF"));

– FOR INPUT 6
TYPE INPUT6 IS (VL6,L6,ML6,M6,MH6,H6,VH6,NONE6);
TYPE membership6 IS RECORD term: INPUT6;
point1: std_logic_vector(7 DOWNTO 0);
slope1: std_logic_vector(7 DOWNTO 0);
point2: std_logic_vector(7 DOWNTO 0);
slope2: std_logic_vector(7 DOWNTO 0);
END RECORD;
TYPE membership6_function IS ARRAY(NATURAL RANGE<>) OF membership6;
CONSTANT mfs6: membership6_function:=
((term => VL6, point1 => x"00", slope1 => x"FF", point2 => x"24", slope2 => x"07"),
(term => L6, point1 => x"24", slope1 => x"07", point2 => x"48", slope2 => x"07"),
(term => ML6, point1 => x"48", slope1 => x"07", point2 => x"6C", slope2 => x"07"),
(term => M6, point1 => x"6C", slope1 => x"07", point2 => x"90", slope2 => x"07"),
(term => MH6, point1 => x"90", slope1 => x"07", point2 => x"B4", slope2 => x"07"),
(term => H6, point1 => x"B4", slope1 => x"07", point2 => x"D8", slope2 => x"07"),
(term => VH6, point1 => x"D8", slope1 => x"07", point2 => x"F0", slope2 => x"FF"),
(term => NONE6, point1 => x"FF", slope1 => x"FF", point2 => x"FF", slope2 => x"FF"));

– FOR INPUT 7
TYPE INPUT7 IS (VL7,L7,ML7,M7,MH7,H7,VH7,NONE7);
TYPE membership7 IS RECORD term: INPUT7;
point1: std_logic_vector(7 DOWNTO 0);
slope1: std_logic_vector(7 DOWNTO 0);
point2: std_logic_vector(7 DOWNTO 0);
slope2: std_logic_vector(7 DOWNTO 0);
END RECORD;
TYPE membership7_function IS ARRAY(NATURAL RANGE<>) OF membership7;
CONSTANT mfs7: membership7_function:=
((term => VL7, point1 => x"00", slope1 => x"FF", point2 => x"24", slope2 => x"07"),
(term => L7, point1 => x"24", slope1 => x"07", point2 => x"48", slope2 => x"07"),
(term => ML7, point1 => x"48", slope1 => x"07", point2 => x"6C", slope2 => x"07"),
(term => M7, point1 => x"6C", slope1 => x"07", point2 => x"90", slope2 => x"07"),
(term => MH7, point1 => x"90", slope1 => x"07", point2 => x"B4", slope2 => x"07"),
(term => H7, point1 => x"B4", slope1 => x"07", point2 => x"D8", slope2 => x"07"),
(term => VH7, point1 => x"D8", slope1 => x"07", point2 => x"F0", slope2 => x"FF"),
(term => NONE7, point1 => x"FF", slope1 => x"FF", point2 => x"FF", slope2 => x"FF"));

– FOR OUTPUT
CONSTANT P1: std_logic_vector:= x"00";
CONSTANT P2: std_logic_vector:= x"0F";
CONSTANT P3: std_logic_vector:= x"1E";
CONSTANT P4: std_logic_vector:= x"2D";
CONSTANT P5: std_logic_vector:= x"3C";
CONSTANT P6: std_logic_vector:= x"4B";
CONSTANT P7: std_logic_vector:= x"5A";
CONSTANT P8: std_logic_vector:= x"69";
CONSTANT P9: std_logic_vector:= x"78";
CONSTANT P10: std_logic_vector:= x"87";
CONSTANT P11: std_logic_vector:= x"96";
CONSTANT P12: std_logic_vector:= x"A5";
CONSTANT P13: std_logic_vector:= x"B4";
CONSTANT P14: std_logic_vector:= x"C3";
CONSTANT P15: std_logic_vector:= x"D2";
CONSTANT P16: std_logic_vector:= x"E1";
CONSTANT P17: std_logic_vector:= x"F0";

SIGNAL u: std_logic_vector(7 DOWNTO 0);

BEGIN

PROCESS(Clock,Reset)
BEGIN
IF (Reset = ‘0’) THEN RESULT
Info: Found 0 design units, including 0 entities, in source file test.vhd

I need help to troubleshoot this error. I already stated the error location in the program.

Hi there…

What have you tried to do to debug this yourself? What is it about the error messages that is confusing? You have syntax errors in lines 181-184 but since you didn’t include line numbers in your code posting or at least pull out the offending lines anyone wanting to help you would have to count the line numbers. You could likely find syntax info on the web. A quick google search yields…

http://www.cs.ualberta.ca/~amaral/courses/329/labs/VHDL_Reference.html

You’ll find that people are generally willing to help but you have to put in more effort than simply asking “Why doesn’t this work?”. Also there are probably better forums for posting such questions since most people here are writing HDL specifically for the Opal Kelly XEM modules.

C. Smith

I’ve written in the program the error part but sorry its too small to be seen. I’m an amateur actually and would be really grateful to your help. Just something like Idiot’s guide to use Fuzzy Logic in VHDL

–Error in this part of the program
FOR i IN 0 TO 7 LOOP
IF IN1 < membership1*.point1 THEN u* := ‘0’;
ELSIF IN1 < membership1*.point2 THEN
u* := (IN1-membership1*.point1)membership1.slope1;
ELSE u* := 255 - (IN1-membership1*.point2)membership1.slope2;
END IF;
END LOOP;*********

Try () instead of ]… it think the errors are just because of the square brackets.

Thanks Smith, problem solved. I can cantinue with the rest of the program