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数据发送为什么发送数据要经过一次上升沿还要经过一次下降沿?
展开
 我来答
gcbb
2012-02-02 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:163
采纳率:100%
帮助的人:94.8万
展开全部
(首先我没仔细阅读你的程序)这个多出来的1和要求有关
然后 一个数据 他在上升/下降沿发送 为方便起见 我们假设设备在 CLK上升沿发送
那么你在什么时候设置数据呢?
本次 CLK上升沿过后 在设置那明显是不行的(因为你上升沿到了但数据还没设置)
上一次上升沿一过就设置数据,或者说本次上升沿一过(或者说同时)就设置下一个数据?这样 你仿真或者实际操作的时候可能得到正确的结果 但这是有问题的。。因为你没法保证 上升沿过后 数据的保持时间
于是我们只能 在 上一个边沿(CLK下降沿设置数据,,接下来的上升沿发送数据。。下一个下降沿再设置数据) 这样保证了数据的建立时间,保持时间
百度网友2d7d43c
2012-01-31 · TA获得超过864个赞
知道小有建树答主
回答量:582
采纳率:100%
帮助的人:231万
展开全部
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)
是不是上面这样的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友462af17
2012-01-30 · TA获得超过1278个赞
知道大有可为答主
回答量:1379
采纳率:100%
帮助的人:1204万
展开全部
这个跟SPI总线协议有关,同时,有些器件的时序要求如此。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
newheavenygc
2012-02-12
知道答主
回答量:5
采纳率:0%
帮助的人:3.4万
展开全部
前面那个1无所谓的,因为SPI的CLK不通信时是置1的,所以不用管它。
spiclk信号实际是你系统时钟频率的1/2,又因为一个spiclk周期只能发送一位数据,所以要持续两个系统时钟,实际只要第一个赋值就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式