|
//设计的SPI仿真时序是,
CLK: ____|---|____|---|____|---|____|---|____|---|____|---|____|---|____|---|____
CS :--|__________________________________________________________________________|--
MOSI:______________________________________________________________________________ 全部是低电平】
MISO :___|--------|________|--------|________|--------|_________|--------|___________
该SPI的使用的是,上升沿发送数据,下降沿接收数据,CS低电平有效
仿真是完全没有问题,可是就是烧写进程序后,用逻辑发生器去模拟信号,MOSI完全没有响应
无论是在仿真还是在实际上,我已经对通过另一个模块对u8Send加了一个8'b10101010数据,可是实际电路就是出来来。急死了
用的芯片是maxII
该SPI接口只用了10个逻辑单元,悲剧啊。请高手指教下。是不是有什么地方不对?
module SPI_Slaver(u8Send,u8Recv,SigRecv,MOSI,MISO,SCK,CS);
input [7:0]u8Send; //fpga程序通过该接口将一个字节发往外部
output [7:0]u8Recv; //fpga程序通过该接口将主机传过来的数据接收
output SigRecv; //该信号的上升沿表示已有一个字节接收到了,在u8Recv里面
output MISO; //MISO
input SCK,CS,MOSI; //SPI 接口
reg MISO;
reg tmpMOSI;
reg [6:0]ShiftReg;
reg StartFlag; //标志,是否一个字节开始传输的标志
initial begin
StartFlag=0;
end
always @(posedge SCK or posedge CS)begin
if(CS==1)begin
StartFlag=0;
end
else begin
if(StartFlag==0)begin //如果是一个字节的开始,则先将u8Send的数据锁存在移位寄存器里面
StartFlag=1;
MISO=u8Send[7];
ShiftReg=u8Send[6:0];
end
else begin //不是一个字节的开始,则移位寄存器工作
MISO=ShiftReg[6];
ShiftReg[6:0]={ShiftReg[5:0],tmpMOSI};
end
end
end
always @(negedge SCK)begin
tmpMOSI=MOSI; //在下降沿所存主机传过来的信号
end──
assign SigRecv=CS;
assign u8Recv[7:0]={ShiftReg[6:0],tmpMOSI};
endmodule |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|