Uart2

FPGA设计思路

那rs232举例来说,它采用的是全双工,有两条数据线,rx和tx,每次只能传输1bit,用FPGA设计一个具有uart功能其实不难,只要了解它的功能是什么。

uart功能就是:接收数据时。将串行数据转换成并行数据;在发送数据时,将并行的数据再转换成串行数据。

我们只要在FPGA内部实现这个功能描述就可以了。

一般只要两个模块就能解决,发送模块和接收模块。这两个模块分别诠释了uart的功能。

 

野火的波形图教学非常好,明白了时序是怎样的,那么代码就游刃有余了,大家可以根据下图的波形,自己编写verilog代码。

下图取之野火FPGA开发指南(接收模块波形图)

上图:绿色表示输入信号,黄色表示内部变量,红色表示输出信号。

可以看出rx接收信号经过了三次打拍操作,这是因为rx是异步信号,所以要处理,打拍是为了减小亚稳态带来的影响,同样作用是检测下降沿,这就意味着起始位出现,因为起始位是低电平,不传输数据时处于高电平。

start_nedge是一帧数据开始标志信号,work_en是8位数据接收有效使能信号。bit_flag信号是采样数据的信号,在一个波特的中间位置数据是稳定的,所以位于5208/2,拉高一个信号,目的就是采样这个数据,提高准确性。

为什么baud_cnt是0~5207,因为这是一个波特的时间,也就是1bit传输所需要的时间,怎么算的呢,因为系统时钟是50MHZ,周期就是20ns,而传输采用的波特率为9600Bps,这是描述数据传输快慢的,9600Bps就是1秒钟传输9600bit,那么每一个bit所需的时间不就是,1/9600s,用系统clk计数就要计数到5208,计算:(1/9600*10^9)ns/20ns   =5208。

rx_data采用的是移位拼接,目的就是把接收到1个bit拼接成8bit,因为一个数据是8bit,而且传输过程中是低位到高位。

rx_flag是数据刚好拼接完成的信号

 

下图取之野火FPGA开发指南(发送模块波形图)

上图是发送过程,这与接收过程差不多,不多介绍了!

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值