FPGA——实现三线SPI和UART

这篇具有很好参考价值的文章主要介绍了FPGA——实现三线SPI和UART。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

逻辑框图(原理图)

端口约束和ILA

 ILA waveform

 实测波形

串口调试工具

源代码

顶层


逻辑框图(原理图)

spi三线模式如何配置,fpga开发

  1.  FPGA和芯片之间通过三线SPI接口通信(DATA复用一个IO端口),FPGA和PC之间通过UART串口通信。
  2. 原理图包含4个模块,分别为:内建模块IBUFDS(用于将外部差分时钟转换为内部单端时钟)、UART接收模块uart_rx(用于从串口接收上位机发送的数据)、SPI收发模块spi_trx(用于将串口接收到的数据转换为SPI信号,根据芯片规定的SPI时序,FPGA发送(write)数据给芯片或从芯片回读(read)数据),UART发送模块uart_tx(用于将SPI回读到的数据从串口发给上位机)
  3. 原理图包含4个输入端口,分别为:差分时钟sys_clk_p和sys_clk_n,频率为200MHz(用于产生系统工作时钟);复位信号rst_n;UART输入端口uart_top_input(用于接收来自串口的数据)。

  4. 原理图包含5个输出端口,分别为:3个SPI端口spi_clk/spi_csn/spi_io(用于FPGA和芯片通信);UART输出端口uart_top_output(用于串口发送数据给上位机);led[3:0](用于串口调试)

端口约束和ILA

spi三线模式如何配置,fpga开发

spi三线模式如何配置,fpga开发

 ILA waveform

spi三线模式如何配置,fpga开发

  1. 根据不同的SPI时钟频率,需要设置不同的ILA波形采样深度,此处SPI时钟频率为1MHz,ILA采样深度设置为8192。
  2. 波形触发条件设置为信号spi_csn下降沿触发F(1 to 0 transition)。

 实测波形

spi三线模式如何配置,fpga开发

串口调试工具

spi三线模式如何配置,fpga开发

 自动识别串口COM7,波特率为9600,无校验位,8位数据位,1位停止位。

源代码

顶层

`timescale 1ns / 1ps
module uart_spi_v10(
    input             sys_clk_p,
    input             sys_clk_n,
    input             rst_n,
    
    input             uart_top_input,
    
    output    [3:0]     led,
    
    output             uart_top_output,
    
    output             spi_csn,
    output             spi_clk,
    inout             spi_io
    );
    
    wire    [7:0]    uart_rx_output;
    
    wire    [7:0]    spi_data_rd;
    
    
    
    IBUFDS #(
      .DQS_BIAS("FALSE")  // (FALSE, TRUE)
        )
    IBUFDS_inst (
      .O(clk),   // 1-bit output: Buffer output
      .I(sys_clk_p),   // 1-bit input: Diff_p buffer input (connect directly to top-level port)
      .IB(sys_clk_n)  // 1-bit input: Diff_n buffer input (connect directly to top-level port)
        );
        
    uart_rx_v10 
        #(        
        .BAUD_RATE      (9600)
        )
        uart_rx_v10
        (
        .clk            (clk),
        .rst_n            (rst_n),
        
        .uart_rx_input    (uart_top_input),
        
        .uart_rx_output    (uart_rx_output),
        .uart_rx_valid    (uart_rx_valid),
        .uart_rx_stop    (uart_rx_stop),
        
        .led            (led)        
        );    
    
    
    spi_trx_v10    
        #(        
        .FREQ_SPI_CLK   (1_000_000)
        //.FREQ_SPI_CLK   (10_000_000)
        )
        
        spi_trx_v10
        (
        .clk            (clk),
        .rst_n            (rst_n),
        
        // from uart_rx
        .spi_data_in    (uart_rx_output),
        .data_in_valid    (uart_rx_valid),
        
        // to device
        .spi_csn        (spi_csn),
        .spi_clk        (spi_clk),
        .spi_io            (spi_io),
        
        // to uart_tx
        .spi_data_rd    (spi_data_rd),
        .spi_rd_done    (spi_rd_done)
        );
        
    
    uart_tx_v10
        #(        
        .BAUD_RATE   (9600)
        )
        uart_tx_v10
        (
        .clk            (clk),
        .rst_n            (rst_n),
        
        .uart_tx_input    (spi_data_rd),
        .spi_rd_done    (spi_rd_done),
        
        .uart_tx_output    (uart_top_output)
        
        );
    
endmodule
 文章来源地址https://www.toymoban.com/news/detail-702302.html

到了这里,关于FPGA——实现三线SPI和UART的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA配置高速ADC篇(2)_4线SPI配置时序分析

    ​ 注:扫码关注小青菜哥哥的weixin公众号,免费获得更多优质的核探测器与电子学资讯~ ​ 本篇将以德州仪器(TI)的高速ADC芯片——ads52j90为例,进行ADC的4线SPI配置时序介绍与分析。 从ads52j90的数据手册我们不难发现,其SPI控制模块主要包含4根信号线,即SEN、SCLK、SDIN以及

    2024年01月24日
    浏览(43)
  • FPGA配置高速ADC篇(6)_AD9639四线SPI配置实战

    ​ 注:扫码关注小青菜哥哥的weixin公众号,免费获得更多优质的核探测器与电子学资讯~ ​ 前段时间小青菜哥哥写过几篇关于FPGA通过SPI接口配置高速ADC的文章,收到了很多朋友的意见和建议,如今在verilog的实现方式上又有了很大改进。因此小青菜哥哥打算再更新几篇关于这

    2024年02月22日
    浏览(46)
  • 【最通用版FPGA 实现 SPI 驱动】

    最近研究了一下SPI协议的FPGA实现,发现网上很多大佬分享的方法都是针对某一特定的flash芯片或者某一传感器芯片来设计电路结构的。所以想根据SPI(Serial Peripheral Interface)的基本通讯协议实现一个通用版的SPI Master驱动。SPI在嵌入式领域是一个很成熟且应用非常广泛的通信协

    2024年02月05日
    浏览(46)
  • FPGA常见接口及逻辑实现(三)—— SPI

    一、SPI协议简介         SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种同步串行接口,相对于之前介绍过的UART和I2C,SPI的速率就高出很多,最高能到100M左右,SPI协议比较简单,就不多做介绍,主要介绍下与UART和I2C的不同,SPI是一主多从协议,每个从机通过

    2024年04月26日
    浏览(34)
  • SPI简介及FPGA通用MOSI模块实现

    SPI(Serial Peripheral Interface,串行外围设备接口)通讯协议 ,是Motorola公司提出的一种同步串行接口技术。是 一种高速、全双工、同步通信总线 。在芯片中只占用 四根管脚 用来控制及数据传输。 优缺点: SPI通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据

    2024年01月25日
    浏览(38)
  • 孩子都能学会的FPGA:第三十一课——用FPGA实现SPI主机发送数据

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月04日
    浏览(43)
  • 基于SPI实现stm32与fpga通信(一)

    SPI通信协议有以下4种模式: 模式0:时钟极性为0,时钟相位为0,数据在时钟下降沿捕获,数据在时钟上升沿改变。 模式1:时钟极性为0,时钟相位为1,数据在时钟上升沿捕获,数据在时钟下降沿改变。 模式2:时钟极性为1,时钟相位为0,数据在时钟上升沿捕获,数据在时钟

    2024年04月16日
    浏览(46)
  • 【FPGA零基础学习之旅#12】三线制数码管驱动(74HC595)串行移位寄存器驱动

    🎉欢迎来到FPGA专栏~三线制数码管驱动 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ 🥝 ISSP调试演示: 程序配置完成:

    2024年02月09日
    浏览(50)
  • FPGA实现SPI协议基于ADC128S022进行模拟信号采集

    使用vivado联合modelsim实现SPI协议基于ADC128S022进行模拟信号连续采集。 SPI是串行外设接口,是一种同步/全双工/主从式接口。通常由四根信号线构成: CS_N :片选信号,主从式接口,可以有多个从机,用片选信号进行从机选择; SCLK :串行时钟线,由主机提供给从机; MISO :主机

    2024年02月14日
    浏览(46)
  • 【接口协议】FPGA实现SPI协议基于ADC128S022进行模拟信号采集

    使用vivado联合modelsim实现SPI协议基于ADC128S022进行模拟信号连续采集。 SPI是串行外设接口,是一种同步/全双工/主从式接口。通常由四根信号线构成: CS_N :片选信号,主从式接口,可以有多个从机,用片选信号进行从机选择; SCLK :串行时钟线,由主机提供给从机; MISO :主机

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包