3
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
나를 위해 레지스터에 "값"변수가 없기 때문에 레지스터의 직접적인 제약이 작동하지 않습니다. 나는 들판에 가야만했다. { \t \t info_registers.BLK_PKG_STORAGE_START_ADDR_REG_BYTE.BLK_PKG_STORAGE_START_ADDR_REG_BYTE_F.value의 == 32'h0와 어설 (seq_h.reg_m.randomize (* solvefaildebug * 아래 참조); info_registers.BLK_PKG_STORAGE_SIZE_REG_BYTE.BLK_PKG_STORAGE_SIZE_REG_BYTE_F.value의 == 32'h1000; // 4096 } else $ fatal (0, "seq_h.reg_m의 무작위 화가 실패했습니다"); // end assert – Joniale