SPI代码详解FPGA-verilog部分(FPGA+STM32)(一)

声明:本篇文章面向在已对SPI的四种时序有所了解的人

我们采用SPI3模式以及将FPGA作从机,STM32作主机的方式讲解,在STM32控制部分采用的是半双工模式,但其实半双工与全双工区别不大,
稍加修改即可


本文章属于SPI的升级版,将原本的片选线CS_N再多加一根,变成spi_cs_cmd和spi_cs_data,当spi_cs_cmd拉低的时候表示传送的是命令(命令只由单片机发送),当cs_data拉低的时候表示传送的是数据(数据可以是FPGA传给单片机的,也可以是单片机传给FPGA的)




module spi #(
	parameter cmd_width = 8,
	parameter data_width = 32    //这个位宽是可以自己定义的,由于STM32F407的硬件SPI不支持32位,所																		              以在STM32部分我选用了模拟SPI,具体STM32部分代码可以在我的后续文章中查看       
)
(
	input clk,            
	input rstn,
	input spi_scl,					//SCK
	input spi_sdi,					//MOSI
	input spi_cs_cmd,				//CS_CMD
	input spi_cs_data,				//CS_DATA
	input [data_width - 1:0] din,	//送入SPI模块的数据,将来是要通过SPI模块的MISO口传到单片机的
	output reg spi_sdo,				//MISO
	output reg cmd_done,			//通过判断CS_CMD的边沿变化判断CMD命令是不是传输完成
	output reg data_done,			//通过判断CS_DATA的边沿变化判断DATA数据是不是传输完成
	output reg [cmd_width - 1:0] dcmd, //送出SPI模块的数据,即单片机传输给FPGA的bit数据,dcmd为命令
	output reg [data_width - 1:0] dout //送出SPI模块的数据,即单片机传输给FPGA的bit数据,dout为数据
	);
	
	
reg [1:0] r_spi_scl;
reg [1:0] r_cs_cmd;
reg [1:0] r_cs_data;

wire pos_spi_scl;
wire neg_spi_scl;
wire pos_cs_cmd;
wire neg_cs_cmd;
wire en_cs_cmd;
wire pos_cs_data;
wire neg_cs_data;
wire en_cs_data;

reg [data_width - 1:0] r_din;


// 边沿检测
always @(posedge clk , negedge rstn) begin
	
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值