画出spi输出bdh数据总线时序图_SPI总线协议及SPI时序图详解

/*********************************************************************************

* Company :

* Engineer : 空气微凉

*

* Create Date : 00:00:00 22/03/2013

* Design Name :

* Module Name :

* Project Name :

* Target Devices :

* Tool versions :

* Description :

*http://www.cnblogs.com/kongqiweiliang/* Dependencies :

*

* Revision :

* Revision : 0.01 - File Created

* Additional Comments :

********************************************************************************/`timescale 1ns/100ps

`define UD #1

/*******************************************************************************/

moduleSPI

(//system interface

input iCLK ,/*50MHz*/

input iRST ,/*system interface*/

//Interface package

input iSPI_TX_EN ,/*SPI数据发送使能信号,高有效*/

input iSPI_RX_EN ,/*SPI数据接收使能信号,高有效*/

output oSPI_TX_RDY ,/*SPI数据发送完成标志位,高有效*/

output oSPI_RX_RDY ,/*SPI数据接收完成标志位,高有效*/

input [7:0] iSPI_TX_DAT ,/*SPI数据发送寄存器*/

output reg [7:0] oSPI_RX_DAT ,/*SPI数据接收寄存器*/

//hardware interface

input iSPI_MISO ,/*SPI主机输入从机输出数据信号*/

output reg oSPI_MOSI ,/*SPI主机输出从机输入数据信号*/

output reg oSPI_CLK /*SPI时钟信号,由主机产生*/);//-------------------------------------------------------------------------------//SPI主机接收发送模块,模拟SPI的时序模式为CPOL=1, CPHA=1,模拟速率为25Mbit//时钟极性(CPOL)//如果CPOL=0,串行同步时钟的空闲状态为低电平;//如果CPOL=1,串行同步时钟的空闲状态为高电平。//时钟相位(CPHA)//如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;//如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。//-------------------------------------------------------------------------------/*SPI时序控制计数器,所有SPI时序由该计数器值控制*/

reg [4:0] timer0_count;/*SPI时序控制计数器*/

always@(posedge iCLK or negedge iRST)begin

if(!iRST)

timer0_count<= 0;else if(timer0_count == 5'd18)

timer0_count <= 0;else if((iSPI_TX_EN == 1'b1) || (iSPI_RX_EN == 1'b1))

timer0_count<= timer0_count + 1'b1;

end

/*SPI时钟信号,由主机产生*/

always@(posedge iCLK or negedge iRST)begin

if(!iRST)

oSPI_CLK<= 1'b1;

else begin

case(timer0_count)5'd2 : oSPI_CLK <= 1'b0;/*第1个周期*/

5'd3 : oSPI_CLK <= 1'b1;5'd4 : oSPI_CLK <= 1'b0;/*第2个周期*/

5'd5 : oSPI_CLK <= 1'b1;5'd6 : oSPI_CLK <= 1'b0;/*第3个周期*/

5'd7 : oSPI_CLK <= 1'b1;5'd8 : oSPI_CLK <= 1'b0;/*第4个周期*/

5'd9 : oSPI_CLK <= 1'b1;5'd10 : oSPI_CLK <= 1'b0;/*第5个周期*/

5'd11 : oSPI_CLK <= 1'b1;5'd12 : oSPI_CLK <= 1'b0;/*第6个周期*/

5'd13 : oSPI_CLK <= 1'b1;5'd14 : oSPI_CLK <= 1'b1;/*第7个周期*/

5'd15 : oSPI_CLK <= 1'b1;5'd16 : oSPI_CLK <= 1'b0;/*第8个周期*/

5'd17 : oSPI_CLK <= 1'b1;default : oSPI_CLK <= 1'b1;

endcase

end

end

/*SPI主机输出数据控制*/

always@(posedge iCLK or negedge iRST)begin

if(!iRST)

oSPI_MOSI<= 1'b1;

else if(iSPI_TX_EN == 1'b1)

case(timer0_count[4:1])5'd1 : oSPI_MOSI <= iSPI_TX_DAT[7]; /* bit7 */

5'd2 : oSPI_MOSI <= iSPI_TX_DAT[6]; /* bit6 */

5'd3 : oSPI_MOSI <= iSPI_TX_DAT[5]; /* bit5 */

5'd4 : oSPI_MOSI <= iSPI_TX_DAT[4]; /* bit4 */

5'd5 : oSPI_MOSI <= iSPI_TX_DAT[3]; /* bit3 */

5'd6 : oSPI_MOSI <= iSPI_TX_DAT[2]; /* bit2 */

5'd7 : oSPI_MOSI <= iSPI_TX_DAT[1]; /* bit1 */

5'd8 : oSPI_MOSI <= iSPI_TX_DAT[0]; /* bit0 */

default : oSPI_MOSI <= 1'b1;

endcase

elseoSPI_MOSI<= 1'b1;

end

/*SPI数据发送完成标志位,高有效*/

assign oSPI_TX_RDY = (timer0_count == 5'd18) ? 1'b1 : 1'b0;

/*SPI主机输入数据控制*/

always@(posedge iCLK or negedge iRST)begin

if(!iRST)

oSPI_RX_DAT<= 0;else if(iSPI_RX_EN == 1'b1)

case(timer0_count)5'd3 : oSPI_RX_DAT[0] <= iSPI_MISO; /* bit0 */

5'd5 : oSPI_RX_DAT[1] <= iSPI_MISO; /* bit1 */

5'd7 : oSPI_RX_DAT[2] <= iSPI_MISO; /* bit2 */

5'd9 : oSPI_RX_DAT[3] <= iSPI_MISO; /* bit3 */

5'd11 : oSPI_RX_DAT[4] <= iSPI_MISO; /* bit4 */

5'd13 : oSPI_RX_DAT[5] <= iSPI_MISO; /* bit5 */

5'd15 : oSPI_RX_DAT[6] <= iSPI_MISO; /* bit6 */

5'd17 : oSPI_RX_DAT[7] <= iSPI_MISO; /* bit7 */

default : oSPI_RX_DAT <= 8'hff;

endcase

end

/*SPI数据接收完成标志位,高有效*/

assign oSPI_RX_RDY = (timer0_count == 5'd18) ? 1'b1 : 1'b0;

//-------------------------------------------------------------------------------

endmodule

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值