Hallo, reading XST user guide it seems that it's not possbile to implement a rom into a cpld, so I have made some experiment with the following code and ISE has compiled everything without reporting errors.
I don't have a real cpld to program, so I would ask if it can function before buying it.
type rom_type is array (359 downto 0) of std_logic_vector (15 downto
0); signal ROM : rom_type:= ( X"200A", X"0300", X"8101", X"4000", X"8601", X"233A", X"0300", X"8602", X"2310", X"203B", X"8300", X"4002", X"8201", X"0500", X"4001", X"2500", X"0340", X"0241", X"4002", X"8300", X"8201", X"0500", X"8101", X"0602", X"4003", X"241E", X"0301", X"0102", X"2122", X"2021", X"0301", X"0102", X"2222", X"4001", X"0342", X"232B", X"0900", X"0302", X"0102", X"4002", X"0900", X"8201", X"2023", X"0303", X"2433", X"0301", X"4004", X"0301", X"1002", X"2137", X"2036", X"0301", X"0102", X"2237", X"4004", X"0304", X"4040", X"2500", X"2500", X"2500",X"200A", X"0300", X"8101", X"4000", X"8601", X"233A", X"0300", X"8602", X"2310", X"203B", X"8300", X"4002", X"8201", X"0500", X"4001", X"2500", X"0340", X"0241", X"4002", X"8300", X"8201", X"0500", X"8101", X"0602", X"4003", X"241E", X"0301", X"0102", X"2122", X"2021", X"0301", X"0102", X"2222", X"4001", X"0342", X"232B", X"0900", X"0302", X"0102", X"4002", X"0900", X"8201", X"2023", X"0303", X"2433", X"0301", X"4004", X"0301", X"1002", X"2137", X"2036", X"0301", X"0102", X"2237", X"4004", X"0304", X"4040", X"2500", X"2500", X"2500",
X"200A", X"0300", X"8101", X"4000", X"8601", X"233A", X"0300", X"8602", X"2310", X"203B", X"8300", X"4002", X"8201", X"0500", X"4001", X"2500", X"0340", X"0241", X"4002", X"8300", X"8201", X"0500", X"8101", X"0602", X"4003", X"241E", X"0301", X"0102", X"2122", X"2021", X"0301", X"0102", X"2222", X"4001", X"0342", X"232B", X"0900", X"0302", X"0102", X"4002", X"0900", X"8201", X"2023", X"0303", X"2433", X"0301", X"4004", X"0301", X"1002", X"2137", X"2036", X"0301", X"0102", X"2237", X"4004", X"0304", X"4040", X"2500", X"2500", X"2500",
X"200A", X"0300", X"8101", X"4000", X"8601", X"233A", X"0300", X"8602", X"2310", X"203B", X"8300", X"4002", X"8201", X"0500", X"4001", X"2500", X"0340", X"0241", X"4002", X"8300", X"8201", X"0500", X"8101", X"0602", X"4003", X"241E", X"0301", X"0102", X"2122", X"2021", X"0301", X"0102", X"2222", X"4001", X"0342", X"232B", X"0900", X"0302", X"0102", X"4002", X"0900", X"8201", X"2023", X"0303", X"2433", X"0301", X"4004", X"0301", X"1002", X"2137", X"2036", X"0301", X"0102", X"2237", X"4004", X"0304", X"4040", X"2500", X"2500", X"2500",
X"200A", X"0300", X"8101", X"4000", X"8601", X"233A", X"0300", X"8602", X"2310", X"203B", X"8300", X"4002", X"8201", X"0500", X"4001", X"2500", X"0340", X"0241", X"4002", X"8300", X"8201", X"0500", X"8101", X"0602", X"4003", X"241E", X"0301", X"0102", X"2122", X"2021", X"0301", X"0102", X"2222", X"4001", X"0342", X"232B", X"0900", X"0302", X"0102", X"4002", X"0900", X"8201", X"2023", X"0303", X"2433", X"0301", X"4004", X"0301", X"1002", X"2137", X"2036", X"0301", X"0102", X"2237", X"4004", X"0304", X"4040", X"2500", X"2500", X"2500",
X"200A", X"0300", X"8101", X"4000", X"8601", X"233A", X"0300", X"8602", X"2310", X"203B", X"8300", X"4002", X"8201", X"0500", X"4001", X"2500", X"0340", X"0241", X"4002", X"8300", X"8201", X"0500", X"8101", X"0602", X"4003", X"241E", X"0301", X"0102", X"2122", X"2021", X"0301", X"0102", X"2222", X"4001", X"0342", X"232B", X"0900", X"0302", X"0102", X"4002", X"0900", X"8201", X"2023", X"0303", X"2433", X"0301", X"4004", X"0301", X"1002", X"2137", X"2036", X"0301", X"0102", X"2237", X"4004", X"0304", X"4040", X"2500", X"2500", X"2500"
);
signal addr : std_logic_vector(8 downto 0);
begin
Rom_Proc : process ( Clk ) is begin
if ( rising_edge(Clk) ) then if ( Reset = '1' ) then addr '0'); do '0'); else addr