Since you have not shown sufficient code for anyone to reproduce your problem, nor have you revealed any details regarding your problem, all we can do is guess.
My guess is that nc1_cp_checkpoint is declared as a reg inside your cca3_cpu instance. You can not assign a value to a reg using a continuous assignment. Try to use a procedural assignment (inside an initial or always block), for example:
initial begin
cca.cpu0.cca3_cpu.nc1_cp_checkpoint = checkpoint;
end
If this doesn't solve your problem:
- Show more relevant code
- Elaborate on "doesn't work". Show your error message, if any.
Update: Another potential issue arises if nc1_cp_checkpoint is a continuously-driven wire inside your cca3_cpu instance. In that case, your second assign might cause contention, which would make the value go unknown (x). You might be able to avoid that issue using force and release.