cowhead 2022-12-15 14:07 采纳率: 50%
浏览 756
已结题

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
);
  • 写回答

3条回答 默认 最新

  • cowhead 2022-12-15 15:22
    关注

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月20日
  • 创建了问题 12月15日