vivado综合时遇到的问题:state状态信号被优化

        最近在写spi通信状态机时遇到了信号被优化掉的情况,state是我定义的状态信号,综合后在网表中没有发现这个信号,并且在状态机中赋值的其他信号addra,cnt也被优化掉了,导致这三个信号始终不会发生改变。

        下面是状态机的代码,我看了很多遍都没发现state状态信号赋值、状态转移逻辑存在问题,有大佬发现问题的话麻烦告诉我

		parameter BGIN = 2'b00,  // 启动状态
        parameter START = 2'b01, // 开始状态
        parameter WAIT = 2'b10,  // 等待状态
// 控制SPI通信的状态机
always @(posedge S_AXI_ACLK) begin
  if (!S_AXI_ARESETN) begin
    state <= BGIN;
    start <=0;
    addra<=10'b0;
	cnt <=16'b0;
  end else begin
    case (state)
      BGIN: begin
        if (Enable) begin
		  if(update_ready) begin
			start <= 1;
			cnt <=0;
			state<=START;
		  end
		  else
		  start <= 1;
          state <= BGIN;
        end else begin
          start <= 0;
		  addra<=10'b0;
		  cnt<=0;
          state <= BGIN;
        end
      end
      
      START: begin
		if(STOP_SINGLE) begin
			cnt <= 0;
			state <= BGIN;
        end
		else begin
			cnt <= cnt+1'b1;
            addra<=addra+1'b1;
		    state <= WAIT;
		end
	  end

      WAIT: begin
		if(done) begin
			state <= START;
		end
        else if (cnt==DAC_CNTNUM) begin
			cnt <= 16'b0;
            state <= BGIN;
        end 
		else begin
          state <= WAIT;
      end
      end
      
      default: begin
        start <= 0;
        state <= BGIN;
      end
    endcase
  end
end

解决方法

        在定义state信号前加上(* DONT_TOUCH = "1" *) ,防止其被优化,

(* DONT_TOUCH = "1" *) reg [1:0] state = BGIN;  // 状态机的状态

        加上后再综合那三个信号都出现在网表中了

        

        关于防止综合优化参考 Vivado防止信号被综合掉的三种方法

        但是为什么会被优化还是不理解,有懂的麻烦告诉我一下。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值