SPI接口的Verilog语言实现 - 图文(3)

2019-08-30 18:56

SCK=1'b0; mosi=senddata[0]; 主机发送数据的最低位 bitcounter=bitcounter+5'b1; 6'b01111: SCK=1'b1;

StatusReg0[0]=miso; 主机接收数据的最低位

bitcounter=bitcounter+5'b1; senddata=ramsendtemp; 6'b10000: SCK=1'b0; bitcounter=5'b0;

发送接收中间数据态(18个状态,采用顺序编码):

5'b00000: SCK=1'b0;

ramdReceivetemp=StatusReg0; 主机存储接收到的第一个数据,并准备

写入RAM

sendFinishByte=sendFinishByte+6'b1; 发送数据个数加一 receiveByte=receiveByte+6'b1; 接收数据个数加一

mosi=senddata[7]; 主机发送中间数据最高位 SendramCLK=1'b0; SendRDen=1'b1; bitcounter=bitcounter+5'b1;

5'b00001: SCK=1'b0; SendramCLK=1'b1;

bitcounter=bitcounter+5'b1;

5'b00010: SCK=1'b1; StatusReg0[7]=miso; 主机接收从机发出的数据的最高位 bitcounter=bitcounter+5'b1;

5'b00011: SCK=1'b0; mosi=senddata[6]; 主机发送中间数据次高位

ramsendtemp=ramindata; bitcounter=bitcounter+5'b1;

读取RAM,作为下一个发送数

5'b00100: SCK=1'b1;

StatusReg0[6]=miso; 主机接收从机发出数据的次高位 SendAddr=SendAddr+6'b1; 读RAM地址加一

SendramCLK=1'b0;

SendRDen=1'b0;

bitcounter=bitcounter+5'b1;

5'b00101: SCK=1'b0;

mosi=senddata[5]; ReceiveCLK=1'b0; ReceiveWen=1'b1; bitcounter=bitcounter+5'b1;

5'b00110: SCK=1'b1;

StatusReg0[5]=miso; bitcounter=bitcounter+5'b1;

5'b00111: SCK=1'b0;

mosi=senddata[4]; ReceiveData=ramdReceivetemp; bitcounter=bitcounter+5'b1;

5'b01000: SCK=1'b1;

StatusReg0[4]=miso; bitcounter=bitcounter+5'b1; ReceiveCLK=1'b1; (为

5'b01001: SCK=1'b0; mosi=senddata[3]; bitcounter=bitcounter+5'b1; ReceiveCLK=1'b0;

主机发送中间数据第五位

拉低写数据到RAM时钟 RAM写数据使能 主机接收从机发出的数据第五位 主机发送中间数据的第四位

准备好写入的数据(在时钟上升沿到来前, 将数据放到总线上) 主机接收从机发出数据的第四位 将拉收到的上一个数据第一次写入RAM 了安全,每个数据写两次) 5'b01010: SCK=1'b1; StatusReg0[3]=miso; bitcounter=bitcounter+5'b1;

ReceiveCLK=1'b1; 第二次写入(为了安全,每个数据写两次)

5'b01011: SCK=1'b0; mosi=senddata[2]; bitcounter=bitcounter+5'b1; ReceiveAddr=ReceiveAddr+6'b1; ReceiveCLK=1'b0; ReceiveWen=1'b0; //取消写ram信号

5'b01100:

SCK=1'b1;

StatusReg0[2]=miso; bitcounter=bitcounter+5'b1;

5'b01101: SCK=1'b0; mosi=senddata[1]; bitcounter=bitcounter+5'b1;

5'b01110: SCK=1'b1; StatusReg0[1]=miso; bitcounter=bitcounter+5'b1;

5'b01111: SCK=1'b0; mosi=senddata[0]; bitcounter=bitcounter+5'b1;

6'b10000: SCK=1'b1; StatusReg0[0]=miso; bitcounter=bitcounter+5'b1;

6'b10001: SCK=1'b0;

bitcounter=5'b0; sendFinishByte=sendFinishByte+6'b1; 接收数据个数加一 ramdReceivetemp=StatusReg0; 主机缓存接收到的数据

senddata=ramsendtemp; 主机把读到的下一个数据拉到发生寄 存器,准备发送 receiveByte=receiveByte+6'b1;

发送最后一个数据(21个状态,采用顺序编码):

前面17个状态与接收发送第一个数据,中间数据基本相同。故不作具体陈述。

6'b10010: CSN=1'b1; bitcounter=bitcounter+5'b1;

ReceiveCLK=1'b0;

6'b10011:

ReceiveCLK=1'b1; bitcounter=bitcounter+5'b1;

6'b10100:

ready=1'b0; feedback=1'b1; senden=1'b0; sendfilish=1; receiveByte=receiveByte+6'b1; ReceiveAddr=6'b0; ReceiveCLK=1'b0; ReceiveWen=1'b0; ReceiveReady=1'b1;

bitcounter=bitcounter+5'b1;

6'b10101: bitcounter=5'b0;

feedback=1'b0;

顶成框图:

取消选择从机使能 接收到数据第二次写入RAM(为了安 全,每个数据写两次) 发送接收完准备取消

反馈给RAM控制器,可以重新写数据 取消发送使能 发送完成标志 接收数据加一 接收地址清0 取消写ram信号

反馈信号清0


SPI接口的Verilog语言实现 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高等数学A1教学要求

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: