vivado不加ila逻辑不正确

请教一下各位,我用的artix 7 100t芯片,vivado2019,我写了一个串口接收模块,功能调试好了以后,在这个代码里面有ila的时候,模块功能就是正常的,当我把ila注释掉了以后,功能就不对了,具体就是里面有个reg rxFinish,用来指示是否接收完成,在正常接收情况下,有ila的时候rxFinish可以取到1,没有ila的时候rxFinish不会等于1,我试过把这个模块里面的所有reg 和 wire 前面都加上(* dont_touch = "true" *)了的,但是都没用,必须要加上ila才行,这个串口接收模块是在多个地方例化了的,太奇怪了,请各位帮助分析一下这是什么情况,感谢
部分代码如下

        always@(posedge clk50m)begin
        case(stateRx)
        0:begin
            if(RX == 0)begin
                stateRx <= 1;

                beginCnt<=1;
            end
            rxFinish<=0;
        end
        1:begin//startBit
            if(BaudePulse == 1)begin
                stateRx<= 2;
                bitCntRx<=0;
            end
        end
        2:begin//data bit

            if(halfBaudPulse == 1)begin
                   bitCntRx<= bitCntRx + 1;
                   rxBuffer[bitCntRx] <= RX;
                   if(bitCntRx >= 7)begin
                        stateRx <= 3;
                   end
            end
        end
        3:begin // stop bit
            if(halfBaudPulse == 1)begin
                beginCnt <= 0;
                stateRx <= 0;
                rxFinish<=1;
            end

        end
        default:begin
            stateRx<=0;
        end
        endcase
    end
    
    ila_0 your_instance_name (
    .clk(clk50m), // input wire clk


    .probe0(RX), // input wire [0:0]  probe0  
    .probe1(BaudePulse), // input wire [0:0]  probe1 
    .probe2(rxFinish), // input wire [0:0]  probe2 
    .probe3(halfBaudPulse), // input wire [0:0]  probe3 
    .probe4(0), // input wire [15:0]  probe4 
    .probe5(stateRx) // input wire [7:0]  probe5
);

ARTIX-7讲解vivado基本使用流程
https://blog.csdn.net/weixin_43529932/article/details/106983712

后来我发现是case(stateRx)等于0那里,判断rx为0的时候,把beginCnt赋值为1,case状态跳到1状态去等着波特率信号,beginCnt是用来开启波特率计数的,但是有时候case在1状态beginCnt居然不等于1,说明beginCnt在case 0状态检测到RX 为低电平的时候给beginCnt赋值居然失败了,这就无法解释了,verilog reg变量赋值居然会不成功,请各位帮助分析一下

fpga 在综合后会优化代码,这个优化可能会影响你代码的逻辑,会优化掉你的一些逻辑。
在加入ila时,一些原本优化掉的信号或逻辑,由于信号中加入了ila ,这些优化会放弃,加了ila 反而使功能正常了。
这应该还是该模块的逻辑设计有问题。
也可以手动用 keep 去标记这些可能被优化掉的信号,强制编译器不优化这些信号

(*keep*) reg xxx 
(*keep*) wire xxx