- /////////////////sdi数据输出控制//////////////////////////////
- always [url=home.php?mod=space&uid=72445]@[/url] (negedge clk_ad or negedge cnv_reg or negedge rst_n ) //由于ADC是在SCK时钟的上升沿锁存数据,所以需要在SCK的下降沿将数据输出,以满足一定的建立时间
- begin //而且第一个SDI上的数据是由CNV的下降沿触发
- if(!rst_n)
- sdi_reg<=1'b1; //如果复位,则使SDI输出为高
- else
- if(wr_done)
- begin
- if(sdi_en)
- sdi_reg<=1'b0;
- else
- sdi_reg<=1'b1;
- end
-
- else
- begin
- if(sdi_en)
- sdi_reg<=cmd[Data_length-cnt1];
- else
- sdi_reg<=1'b1;
-
- end
- end
- /////////////////////////////////////////////////////////////
复制代码以上仅是一段代码,ADC芯片为AD4000,SPI通信,4线TURBO模式。
clk_ad是向ADC输出的时钟即SCK,cmd是要写的指令,用于设定ADC为TURBO模式,wr_done是写数据是否完成的标志。向ADC写数据的时序如下图所示
编译之后总是显示 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
求大神指点
一周热门 更多>