Причина ошибки:
Генерация для -l oop обнаруживает код, который он инкапсулирует в нем во время разработки компиляции. always_comb
убедитесь, что все, что он назначает, не назначено где-либо еще. В вашем скомпилированном коде у вас фактически есть 4 always_comb
s, присваивающие ll_data_map
, что недопустимо.
Решение:
Переместите for-l oop внутрь always_comb
(map_i
не может быть genvar
). Таким образом, все присвоения ll_data_map
выполняются одним always_comb
.
Другое Примечание:
ll_data_map
не является комбинационной логикой c, даже если бы она считалась определенный в always_comb
. Лучшие инструменты отметят это; в худшем случае его не удастся синтезировать, потому что целевые устройства не поддерживают защелки.
Чтобы сделать это правильной комбинационной логикой c, вы можете добавить ll_data_map = '{default:'0};
(или какое-либо другое определяющее назначение c) перед запуском for- l oop.
Если ll_data_map
предназначена для защелки, используйте always_latch
вместо always_comb
. (В общем дизайне RTL защелки не рекомендуется, но они необходимы для определенных функций)