这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 串口通信系列1——接收模块

共7条 1/1 1 跳转至

串口通信系列1——接收模块

菜鸟
2014-09-25 19:48:06     打赏

串口通信系列1——接收模块

        好久没有写博客了,这次我们谈一谈串口通信,我打算分三遍文章来分析,分别为接收模块、发射模块、接收发送模块。那今天我们就谈一谈uart的接收模块。

        众所周知uart传输数据都是以字符帧格式传输的,如果我们要使用Veriloguart建模,那我们就必须从很底层去了解它,不像单片机实现串口通信,只需对寄存器配置和查询就行。那么一个字符帧格式到底是怎么构成的?

        串口传输数据都是一帧数据(11),串口总线上高电平是默认状态,当一帧数据开始传输先拉低一位电平,这就是第0位,接下来的8位就是数据位,这是一帧数据中最有意义的八位。接下来的两位是校验证位和停止位,对于接受模块这两位毫无意义。

 

        我们已经了解了urat数据以怎样的方式传输,那么接收模块又包含哪些模块?

{C}1.边沿检测模块——检测一帧数据开始的下降沿,检测到下降沿产生一个脉冲信号H2L_Sig给接受控制模块,以表示数据到来,准备接受。

{C}2.波特率发生模块——配置波特率模块,我们以常用的波特率9600bps为例,分析如下:串口一秒钟传输9600bit,一个bit1/9600s

{C}3.接受控制模块——当rx_en_sig信号使能,模块对uart发出来的数据进行采集,当采集完一帧数据后就会产生一个rx_done_sig脉冲。

 

那如何进行采集?

        bps_module产生定时在每个位的中间。我的fpga的开发板的晶振是50MHz,也就是说我每记一个数花的时间是1/50000000,一位数据需要记多少个数(波特率使用9600bps)1/9600÷1/50000000=5208,所以当波特率定时模块计数记到2603的时候产生一个脉冲信号bps_clk,让控制模块对rs232_rx信号采集或者忽略。

        下面就看看每个模块的代码:

        detect_module.v

        bps_module.v

        control_module.v

        rx_module.v

        testbench代码:

        rx_module_tb.v

    modelsim仿真出来的波形:

    暂时就写到这儿,欢迎大家交流^_^

 



(本文转载自博客,作者wiliamzhou)


院士
2014-09-25 23:39:28     打赏
2楼

真心不建议截图的方式。

这样并不方便查阅 ,

再者,截图的代码相当不清晰,你叫我们如何学习啊~~


菜鸟
2014-09-26 09:36:14     打赏
3楼
博主发表原文就是截图,看起来是很不方便,我会尝试和博主联系取得相关程序源码

菜鸟
2014-10-30 14:52:27     打赏
4楼

源程序方便发一下不?787132117@qq.com


专家
2015-01-10 21:04:28     打赏
5楼
fpga,大神哦

高工
2020-05-12 14:28:14     打赏
6楼

学习一下


工程师
2020-05-12 21:37:41     打赏
7楼

D0 在前,D7是最后发送


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]