У меня есть FIFO, размер которого определяется в соответствии с параметром в пакете:
signal fifo : std_logic_vector(FIFO_SIZE*8 -1 downto 0);
У меня также есть 4-битный вектор (numOfBytes), указывающий, сколько байтов находится в FIFO в любой момент времени (до 8).
Я хочу, чтобы данные (один байт) из FIFO определялись в соответствии с numOfBytes. signal:Do <= fifo(to_integer(unsigned(numOfBytes)*8 -1 downto to_integer(unsigned(numOfBytes)*8 -8) when numOfBytes /= x"0" else (others => '0');
при моделировании это работает хорошо, однако, когда я пытаюсь его синтезировать (используя Synopsys DC), я получаю ошибку уточнения при связывании проекта, говоря: «Требуется постоянное значение (ELAB-922)».
Код ELAB означает: «Это сообщение об ошибке возникает из-за того, что выражение в указанной строке вашего описания RTL не оценивается как постоянное значение, как того требует язык».
Как еще я могу сделать выходной мультиплексор, чтобы он подвергался синтезу? если бы не параметр, я бы поменял линию Do на обычный мультиплексор, но он не может работать с параметрами. (Я не могу вызвать fifo (от 63 до 54), когда fifo 4 байта...)
p.s. Сначала я пытался работать с conv_integer, но изменил его на to_integer(unsigned()) из-за ответов, найденных в Интернете.