Why can't I program a ZC706 (Zynq) board a second time over JTAG?
It seems that the PS can lock the external PROG_B pin and the JPROGRAM JTAG instruction. The relevant bit is PCFG_PROG_B in devcfg.CTRL (address 0xF8007000, bit 30).

With a locic analyzer, I can see that Vivado sets this bit before programming the FPGA. I don't know how to get IMPACT to do the same, but you could probably have the ARM part execute a small program to set the bit.