村长 发表于 2020-12-5 22:42:12

【梅开二度】FPGA初始——UART通信


今天我们开始FPGA最初的小工程:如何使用板卡实现简单的UART通信。(结尾送源码)

这次我们用最白话来讲,首先来看UART是什么。他并不是一个实际的物体,而是一种协议。就好比两个人说话,必须要以一种两个人都能懂的方式来交流,这种方式也就是协议。UART是一种串行发送协议。一位一位的发送数据就需要一个控制发送节拍的,例如我们在踢正步的时候需要喊“121”,而在我们的FPGA设计中这个喊121的不再是教官,而是时钟。http://cdn.u1.huluxia.com/g4/M03/00/E3/rBAAdl809sCAeVv3AAALleyu3pg11.jpeg
时钟信号就是像这样的脉冲信号,我们在时钟的每个上升沿时发送数据,接收时也使用同样用相同的频率的时钟接收,收发就可以解决。在发送时我们常说波特率,波特率就是一秒钟发送多少个数据,也就是波特率就是波特率的频率。常用的波特率就是9600/115200等。

但是我们如何确定发送部分开始发送了呢?我们规定在未发送时数据位置于高位,当数据开始发送(数据有效)我们先将数据位拉低,再来接收数据位。这样接收端就可以检测下降沿来判断是否开始发送。

检测下降沿可以把数据位打一拍,http://cdn.u1.huluxia.com/g4/M03/00/E3/rBAAdl809sCAUqc4AABT--46M_k86.jpeg
然后取(~in1)&in2就可以检测到了。

基本概念就是这么多,就下来我们来做设计。首先我们使用的FPGA板卡都会有自带的晶振,也就是系统时钟,但是我们在做设计的时候需要用的时钟是和波特率有关,为了得到和波特率有关的时钟(达到对应时钟频率)我们需要分频,这里推荐使用PLL,但是由于设计很小,对频率要求不高,门控时钟分频也可以。

发送时如何控制发送阶段呢?这里我们使用状态机,状态转移:

状态0:开始阶段,检测下降沿,如果没检测到保持0状态,如果检测到转移到1;

状态1~8:发送当前位,一次跳转下一状态

状态9:发送结束信号,信号拉高

状态10:结束,跳转0状态

顶层就不写了,都是实例化http://cdn.u1.huluxia.com/g4/M03/00/E3/rBAAdl809sGAMHr5AAKVnlJ29OU041.jpg
http://cdn.u1.huluxia.com/g4/M03/00/E3/rBAAdl809sKAb0CIAAOklGTUuAI532.jpg

千面萌萌 发表于 2020-12-6 12:37:34

看起来好像不错的样子

无量科技 发表于 2020-12-6 12:40:57

回个帖子,下班咯~

伴我多久 发表于 2020-12-7 14:11:23

沙发???

半度微凉 发表于 2020-12-8 15:04:55

呵呵,低调,低调!

68079330 发表于 2020-12-9 11:35:35

打酱油的人拉,回复下赚取积分

千百渡 发表于 2020-12-9 13:13:34

确实不错,顶先

天镜盗梦 发表于 2020-12-12 16:17:05

纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下
页: [1]
查看完整版本: 【梅开二度】FPGA初始——UART通信

村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科
技平台参与或发布项目定制各种软件就来村长黑科技平台

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件的破解分析文章、破解分析视频、补丁、注册机和注册信息,

仅限用于学习和研究软件安全的目的。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习破解分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,

请购买注册正版软件,获得正版优质服务!不允许将上述内容私自传播、销售或者其他任何非法用途!否则,产生任何法律责任,一切后果请用户自负,与本网站无关!如有侵权或非法用途请举报!请发送到邮箱:cxphj8@foxmail.com

《意见反馈》或《截图指定页面备注》发送到邮件,收到后24小时内删除,禁止用户学习使用关掉用户【学习使用权】!