FPGA与ADC通过SPI通信的代码问题

2020-02-02 12:51发布

  1. /////////////////sdi数据输出控制//////////////////////////////

  2. always [url=home.php?mod=space&uid=72445]@[/url] (negedge clk_ad  or negedge cnv_reg or negedge rst_n )        //由于ADC是在SCK时钟的上升沿锁存数据,所以需要在SCK的下降沿将数据输出,以满足一定的建立时间
  3. begin                      //而且第一个SDI上的数据是由CNV的下降沿触发

  4.         if(!rst_n)
  5.     sdi_reg<=1'b1;    //如果复位,则使SDI输出为高
  6.         else
  7.     if(wr_done)
  8.         begin
  9.            if(sdi_en)
  10.                sdi_reg<=1'b0;
  11.            else
  12.               sdi_reg<=1'b1;
  13.           end
  14.                        
  15.    else
  16.        begin
  17.           if(sdi_en)
  18.               sdi_reg<=cmd[Data_length-cnt1];
  19.           else
  20.               sdi_reg<=1'b1;
  21.                                        
  22.       end
  23. end

  24. /////////////////////////////////////////////////////////////
复制代码以上仅是一段代码,ADC芯片为AD4000,SPI通信,4线TURBO模式。
clk_ad是向ADC输出的时钟即SCK,cmd是要写的指令,用于设定ADC为TURBO模式,wr_done是写数据是否完成的标志。向ADC写数据的时序如下图所示

QQ截图20170410172442.jpg


编译之后总是显示    if(wr_done)  这一行有错误,
错误为:
Error (10200): Verilog HDL Conditional Statement error at AD4000_Interface.v(305): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct


求大神指点





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。