谁能告诉我基于FPGA的verilog SPI master程序吗?

谁能告诉我基于FPGA的verilog SPI master程序吗?,第1张

// 8bit SPI master

// author: jiajia.pi

// version: v1.1

// last modify date: 2014/08/19 change ready assert timing

// clk_div range: 4~255 divsion of clk

// only mode 0 and mode 3 support

// MSB send first and LSB send last

module spi_master(

clk,// global clock

reset_n, // global async low reset

clk_div, // spi clock divider

wr,// spi write

wrdata,// spi write data, 8bit

rddata,// spi recieve data, 8bit, valid when ready assert

sck,// spi master clock out

sdi,// spi master data in (MISO)

sdo,// spi master data out (MOSI)

ready// spi master ready (idle)

)

input clk

input reset_n

input [7:0]clk_div

input wr

input [7:0]wrdata

output [7:0]rddata

output sck

output sdo

output ready

input sdi

parameter clock_polarity = 1 // '0': mode 0, sck=0 when idle'1': mode 3, sck=1 when idle

reg [7:0]dat

reg rsck

reg [7:0]cnt

reg busy

reg [3:0]state

reg [7:0]rddata

wire sdo = dat[7]

wire sck = busy? rsck:clock_polarity

wire sdi_tick = (cnt==clk_div>>1)/*synthesis keep*/

wire sdo_tick = (cnt==clk_div)/*synthesis keep*/

wire ready = !(wr||busy)

always @(posedge clk or negedge reset_n)

if(!reset_n)

cnt <= 0

else if(cnt<clk_div &&busy)

cnt <= cnt + 1

else

cnt <= 1

always @(posedge clk or negedge reset_n)

if(!reset_n)

rsck <= 0

else if(sdi_tick)

rsck <= 1

else if(sdo_tick)

rsck <= 0

always @(posedge clk or negedge reset_n)

if(!reset_n)

busy <= 0

else if(wr &&!busy)

busy <= 1

else if(state==8 &&sdo_tick)

busy <= 0

always@(posedge clk or negedge reset_n)

if(!reset_n)

state <= 0

else if(wr &&!busy)

state <= 1

else if(state==8 &&sdo_tick)

state <= 0

else if(sdo_tick)

state <= state + 1

always @(posedge clk or negedge reset_n)

if(!reset_n)

dat <= 0

else if(wr &&!busy)

dat <= wrdata

else if(sdo_tick &&busy &&state!=8)

dat <= dat<<1

always @(posedge clk or negedge reset_n)

if(!reset_n)

rddata <= 0

else if(sdi_tick &&busy)

rddata <= {rddata[6:0],sdi}

endmodule

您好,FPGA以太网口通信程序包括:1.以太网协议栈:它是一种用于在网络上传输数据的协议,用于实现网络设备之间的通信;2.以太网硬件:它是一种用于在网络上传输数据的硬件,用于实现网络设备之间的物理连接;3.以太网控制器:它是一种用于控制网络设备之间的通信的控制器,用于实现网络设备之间的通信;4.以太网路由器:它是一种用于在网络上传输数据的路由器,用于实现网络设备之间的路由;5.以太网交换机:它是一种用于在网络上传输数据的交换机,用于实现网络设备之间的交换;6.以太网网关:它是一种用于在网络上传输数据的网关,用于实现网络设备之间的网关;7.以太网网络接口卡:它是一种用于在网络上传输数据的网络接口卡,用于实现网络设备之间的网络接口。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11216891.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存