У меня есть большая карта регистров, смоделированная с помощью RAL, и я хотел бы рандомизировать некоторые регистры. Если я хочу, чтобы ограничить регистры отдельно, то это просто:UVM RAL: рандомизирующие регистры в регистровой модели
reg_model.register_a.randomize() with {value > 5;}
reg_model.register_b.randomize() with {value < 2;}
reg_model.update(status);
Однако, если я хочу, отношения между этими двумя значениями написано, я думаю, что я должен добавить ограничение на всю модель регистра:
reg_model.randomize() with {register_a.value > register_b.value;}
reg_model.register_a.update(status);
reg_model.register_b.update(status);
Проблема в том, что остальные 254 регистров в модели также будут рандомизированы. Я мог бы просто обновить два регистра, которые я хочу рандомизировать, но тогда зеркало не будет соответствовать аппаратным средствам. Если бы у меня был доступ к бэкдору, я мог бы обновить зеркало, но я этого не сделаю, и я, конечно, не хочу читать 254 регистра через входную дверь.
Есть ли способ рандомизировать только эти два регистра, но все еще есть решатель ограничений, поддерживающий отношения между ними?
Вот обходные, что я нашел, так как это приводит к ошибке компиляции для меня: Используйте «rand_mode», чтобы отключить рандомизации для всей модели регистра, а затем использовать его снова, чтобы включить рандомизации для только регистры, которые должны быть рандомизированы. – nguthrie
Спустя 2,5 года моя работа вокруг сломана с новой версией моего симулятора. Но теперь настоящий ответ работает! – nguthrie
Для меня прямое ограничение регистров не работает, поскольку регистры не имеют переменной «значение». Я должен был подняться на поле. Смотри ниже утверждают (seq_h.reg_m.randomize (* solvefaildebug *) с { \t \t info_registers.BLK_PKG_STORAGE_START_ADDR_REG_BYTE.BLK_PKG_STORAGE_START_ADDR_REG_BYTE_F.value == 32'h0; info_registers.BLK_PKG_STORAGE_SIZE_REG_BYTE.BLK_PKG_STORAGE_SIZE_REG_BYTE_F.value == 32'h1000; // 4096 }) else $ fatal (0, "Randomization of seq_h.reg_m failed"); // end assert – Joniale