SPI_Master 使用心得

本文档详细介绍了在FPGA中设计SPI_Master模块的过程,包括满足可变长度数据发送、读写功能的需求。通过状态机实现,包括空闲、地址发送、数据发送和完成状态,以及相应的控制信号和时序处理。代码中展示了具体的VHDL实现,包括状态转换和数据传输逻辑。
摘要由CSDN通过智能技术生成

项目背景:FPGA 串行模式控制9914出点频

需求: SPI 发送包含写模式 和 读模式,帧格式为地址加数据,数据长度是随寄存器的长度变化的。 另外空闲时钟和片选信号的不同也会导致读时序的不同。因此这个mater 必须包含 读/写功能

,发送数据长度可变功能,等。

初步设想:

发射使能信号采用触发模式,一旦收到发送触发的上升沿就进入发送/读取状态机,同时输出busy信号耦合到触发上进行触发保护避免发送时被中断。

发射完毕后关闭busy信号。

状态机状态可分为:

空闲状态-> 等待发送

地址发送状态-> cnt(0-7) cnt == 7 时进入下一状态,并清零cnt

数据发送状态-> cnt(0-7) cnt == 7 时进入下一状态,并清零cnt,数据状态下有两个相关量,一个是数据发送长度 data_lenth,一个是当前发送数据 data_loc,当两者相等时,进入发送完成状态,否则返回数据发送状态。同时应输出data_loc,以便外部更新发送数据

完成状态-> 相关信号清零,返回空闲

完成代码如下

`timescale 1ns / 1ps
/
///*shx 20220308*///

module Spi_master(
    input   wire           sclk               ,    // System Clock.
    input   wire           srstn              ,    // System Reset. Low Active 
    //====== Control / Status ======================
    input   wire           start              ,    // Write or Read  Start  

    output  reg           busy               ,    // Write or Read  Finish 
 

    input   wire  [ 7 : 0] addr         ,    // Write / Read Start Address
    input   wire  [ 3 : 0] data_len           ,    // data length 
    output  reg   [ 3 : 0] data_loc           ,    // data_location now
    //====== Rx Interface =========================
    input   wire  [ 7 : 0] tx_data         ,    // Rx Read Data
    //====== Tx Interface =====================
    output  wire  [ 7 : 0] rx_data         ,    // Tx Write Data
    //====== ReRAM SPI Interface ===================
    output  wire           SPI_SCLK           ,    // SPI Clock 
    output  wire           SPI_CSN            ,    // SPI Chip Select 
    output  wire           SPI_MOSI           ,    // SPI Master Output 
    input   wir

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值