串口通信的FPGA设计

串口通信的FPGA设计

注:主要为记录自己的学习过程。
一、主要功能

  1. 每隔1s PC向板子发送数据。

  2. 板子向PC回传数据。

二、分析

  • 主要由四个模块构成,分别为:分频模块,发送模块,接收模块,顶层模块。
  • 接收频率要是发送频率的两倍,这样可以确保可以数据全部接收到。

三、RTL
在这里插入图片描述

四、仿真、调试

  1. s_clk 与 r_clk 之间设置的是2倍关系,但仿真结果为1.5倍左右。
    解决:通过观察 clk1 和 clk2 发现, clk1计数到2063,clk2 计数到1301,并不是两倍关系,将clk1改为计数到2603。
  2. start 一直为0。
    解决:将波形缩小,观察cnt1s的值发现,在计数满9600时start 变为0(观察不仔细导致的问题)
  3. cnt20一直为0。
    解决:通过观察cnt20的波形发现为直线,不为数值,查看程序发现cnt20没有加位宽导致的。
  4. cnt1s计数没有问题,cnt10设置的计数0-9,仿真结果里计数到了15。
    在这里插入图片描述
    解决:通过观察程序发现,写的if else 语句关系有问题导致的。重新修改了一下。
  5. 通过观察仿真结果发现,txd有高阻态和x状态存在,结合程序和cnt1s,cnt10得出:只有在cnt10为1到9时,txd为x状态,此时为数据传输过程,当cnt为0时此时不能进行数据传输,txd为初始电平(高电平)。
  6. 通过串口调试助手测试后发现,有些数据传输正确,有些数据传输错误。
    通过查看波形发现cnt10和cnt1s计数同步了,cnt10应该往后延时一个单位。
    在这里插入图片描述

解决:通过将cnt10的值通过一个D触发器延时一个单位。
在这里插入图片描述

  1. 延时一个单位后,还是出现有数据传输错误的问题。
    解决:通过查看了很久的程序和修改,最后将send模块中的case 语句里的default改为0解决(这里可能产生锁存器)

五、注意问题

  • 在用串口调试助手时端口类型根据电脑的不同要选择不同的类型(我的为COM4)
  • 数据的位宽要必须写,不能遗忘,这几次项目都有数据位宽没写导致的问题。

串口通信的FPGA设计代码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&点灯工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值