fpga spi 发送 15
case(dstate)8'd0:beginspics<=1'b0;spiclk<=1'b1;spido<=1'b1;dstate<=8'd1;end8'd1:begin...
case (dstate)
8'd0:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd1;
end
8'd1:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd2;
end
8'd2:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= 1'b1;
dstate <= 8'd3;
end
8'd3:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[7];
dstate <= 8'd4;
end
8'd4:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[7];
dstate <= 8'd5;
end
8'd5:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[6];
dstate <= 8'd6;
end
8'd6:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[6];
dstate <= 8'd7;
end
8'd7:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[5];
dstate <= 8'd8;
end
8'd8:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[5];
dstate <= 8'd9;
end
8'd9:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[4];
dstate <= 8'd10;
end
8'd10:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[4];
dstate <= 8'd11;
end
8'd11:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[3];
dstate <= 8'd12;
end
8'd12:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[3];
dstate <= 8'd13;
end
8'd13:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[2];
dstate <= 8'd14;
end
8'd14:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[2];
dstate <= 8'd15;
end
8'd15:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[1];
dstate <= 8'd16;
end
8'd16:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[1];
dstate <= 8'd17;
end
8'd17:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[0];
dstate <= 8'd18;
end
8'd18:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[0];
dstate <= 8'd19;
end
8'd19:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd20;
end
8'd20:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd0;
spistate <= idle;
end
endcase
照这样的写法,SPI总线的CLK为什么11010...这样子的,最前边多出来一个时钟的1是干嘛用的?还有为什么发送一个数据要同时在上升沿和下降沿发送?
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[7];
dstate <= 8'd4;
end
8'd4:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[7];
dstate <= 8'd5;
end
比如上边这两个状态,为什么发送数据要经过一次上升沿还要经过一次下降沿?
SPI数据发送为什么发送数据要经过一次上升沿还要经过一次下降沿? 展开
8'd0:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd1;
end
8'd1:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd2;
end
8'd2:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= 1'b1;
dstate <= 8'd3;
end
8'd3:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[7];
dstate <= 8'd4;
end
8'd4:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[7];
dstate <= 8'd5;
end
8'd5:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[6];
dstate <= 8'd6;
end
8'd6:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[6];
dstate <= 8'd7;
end
8'd7:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[5];
dstate <= 8'd8;
end
8'd8:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[5];
dstate <= 8'd9;
end
8'd9:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[4];
dstate <= 8'd10;
end
8'd10:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[4];
dstate <= 8'd11;
end
8'd11:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[3];
dstate <= 8'd12;
end
8'd12:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[3];
dstate <= 8'd13;
end
8'd13:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[2];
dstate <= 8'd14;
end
8'd14:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[2];
dstate <= 8'd15;
end
8'd15:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[1];
dstate <= 8'd16;
end
8'd16:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[1];
dstate <= 8'd17;
end
8'd17:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[0];
dstate <= 8'd18;
end
8'd18:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[0];
dstate <= 8'd19;
end
8'd19:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd20;
end
8'd20:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd0;
spistate <= idle;
end
endcase
照这样的写法,SPI总线的CLK为什么11010...这样子的,最前边多出来一个时钟的1是干嘛用的?还有为什么发送一个数据要同时在上升沿和下降沿发送?
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[7];
dstate <= 8'd4;
end
8'd4:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[7];
dstate <= 8'd5;
end
比如上边这两个状态,为什么发送数据要经过一次上升沿还要经过一次下降沿?
SPI数据发送为什么发送数据要经过一次上升沿还要经过一次下降沿? 展开
4个回答
展开全部
(首先我没仔细阅读你的程序)这个多出来的1和要求有关
然后 一个数据 他在上升/下降沿发送 为方便起见 我们假设设备在 CLK上升沿发送
那么你在什么时候设置数据呢?
本次 CLK上升沿过后 在设置那明显是不行的(因为你上升沿到了但数据还没设置)
上一次上升沿一过就设置数据,或者说本次上升沿一过(或者说同时)就设置下一个数据?这样 你仿真或者实际操作的时候可能得到正确的结果 但这是有问题的。。因为你没法保证 上升沿过后 数据的保持时间
于是我们只能 在 上一个边沿(CLK下降沿设置数据,,接下来的上升沿发送数据。。下一个下降沿再设置数据) 这样保证了数据的建立时间,保持时间
然后 一个数据 他在上升/下降沿发送 为方便起见 我们假设设备在 CLK上升沿发送
那么你在什么时候设置数据呢?
本次 CLK上升沿过后 在设置那明显是不行的(因为你上升沿到了但数据还没设置)
上一次上升沿一过就设置数据,或者说本次上升沿一过(或者说同时)就设置下一个数据?这样 你仿真或者实际操作的时候可能得到正确的结果 但这是有问题的。。因为你没法保证 上升沿过后 数据的保持时间
于是我们只能 在 上一个边沿(CLK下降沿设置数据,,接下来的上升沿发送数据。。下一个下降沿再设置数据) 这样保证了数据的建立时间,保持时间
展开全部
8'd0:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd1;
end
8'd1:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd2;
end
这一段里的spiclk都是1,所以多出一个1来。至于为什么,不太懂。
SPI数据发送为什么发送数据要经过一次上升沿还要经过一次下降沿?
你问的上面这个问题是不是说这段代码前面是这样的
always@(posedge clk or negedge clk or rst)
是不是上面这样的?
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd1;
end
8'd1:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd2;
end
这一段里的spiclk都是1,所以多出一个1来。至于为什么,不太懂。
SPI数据发送为什么发送数据要经过一次上升沿还要经过一次下降沿?
你问的上面这个问题是不是说这段代码前面是这样的
always@(posedge clk or negedge clk or rst)
是不是上面这样的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个跟SPI总线协议有关,同时,有些器件的时序要求如此。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前面那个1无所谓的,因为SPI的CLK不通信时是置1的,所以不用管它。
spiclk信号实际是你系统时钟频率的1/2,又因为一个spiclk周期只能发送一位数据,所以要持续两个系统时钟,实际只要第一个赋值就行了。
spiclk信号实际是你系统时钟频率的1/2,又因为一个spiclk周期只能发送一位数据,所以要持续两个系统时钟,实际只要第一个赋值就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询