SPI参数化分配寄存器
SPI的原理请参考:spi 协议驱动设计
//SPI salve支持功能:
//支持三线SPI或者四线SPI,通过define切换
//支持指令长度、帧长自定义
//工作时钟可自定义,大于SPI clk的2倍
//只需要修改:几线SPI 单帧长度 指令长度 寄存器开辟
//注意:指令最高bit表示读写,低写高读,其余bit表示地址
//指令接着为数据端,二者位宽之和即为SPI单帧长
//`define SPI_LINE //是否是三线SPI
`define SPI_FRAME_WIDTH 16 //SPI一帧长度为16
`define SPI_INS_WIDTH 8 //SPI指令长
module spi_slave(
input i_clk,//work clk
input i_rst_n,
input i_spi_clk,//SPI CLK
input i_spi_cs,//SPI CS
`ifdef SPI_LINE //条件编译
inout io_spi_sdio
`else
input i_spi_mosi,//SPI MOSI
output o_spi_miso //SPI MISO
`endif
);
//位宽计算函数
function integer clogb2(input integer depth);
begin
for(clogb2 = 0;depth > 0;c