找回密码
 注册
关于网站域名变更的通知
查看: 532|回复: 1
打印 上一主题 下一主题

转——【FPGA开源教程连载】第十二章 串口接收模块设计与验证

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-1 09:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Zedd 于 2019-4-1 09:28 编辑
" g) [) K0 r0 V# |  Q7 A) T- a% t0 i* Z3 J& g
第十二章 串口接收模块设计与验证

0 N7 a/ E" C* D; D0 _7 z' x( K& T9 W  l; Q) I) {2 ?. ]
实验目的:1.串口接收模块设计与验证
2.使用ISSP进行调试与验证设计的数据接收模块
实验平台:芯航线FPGA核心板
' m* G, Z' @7 V4 c" M- g5 m" B  M( y
实验原理:
       在上一讲介绍了串口发送模块的设计思想,其UART发送端发送一个字节数据时序图如图12-1所示。
1 D) {1 `" T9 u% R8 }/ T
12-1 发送一字节数据时序图
这一讲介绍串口接收模块的设计与实现。当对于数据线的每一位进行采样,一般情况下每一位数据的中间点是最稳定的,因此一般应用中,采集中间时刻时的电平即认为是此位数据的电平,如图12-2所示。
8 ]" J& f8 C5 D; ?
12-2 串口接收时序图
但是在工业应用中,现场往往有非常强的电磁干扰,只采样一次就作为该数据的电平判定,是不保险的,有可能恰好采集到被干扰的信号而导致结果出错,因此需要使用多次采样求概率的方式进行。因此这里提出以下为改进型的单bit数据接收方式示意图,如图12-3。

4 g# K& I3 N4 N
12-3 改进型串口接收方式示意图
在图12-3中,将每一位数据又平均分成了16小段,对于Bit_x这一位数据,考虑到数据在刚刚发生变化和即将发生变化的这一时期,数据极有可能不稳定的(用红色标出的两段),在这两个时间段采集数据,很有可能得到错误的结果,因此判定这两段时间的电平无效,采集时直接忽略。而中间这一时间段(用绿色标出),数据本身是比较稳定的,一般都代表了正确的结果。也就是前面提到的中间测量方式,但是也不排除该段数据受强电磁干扰而出现错误的电平脉冲,因此对这一段电平,进行多次采样,并求高低电平发生的概率,6次采集结果中,取出现次数多的电平作为采样结果。例如,采样6次的结果分别为1/1/1/1/0/1/,则取电平结果为1,若为0/0/1/0/0/0,,则取电平结果为0,当6次采样结果中1和0各占一半(各3次),则可判断当前通信线路环境非常恶劣,数据不具有可靠性,不进行处理。
这样串口接收模块主要就需要包含起始位检测模块、波特率产生模块以及数据接收模块。
实验步骤:
基于以上原理,串口接收模块整体框图如图12-5所示,其接口列表如表12-1所示。
4 P& N7 ~  Q- C- f% l1 G
12-5 串口接收模块整体框图
( w5 `7 @  Z2 h: t* R0 V% E
12-1 模块接口列表
经过以上的分析,建立工程子文件夹后,新建一个以名为uart_byte_rx的工程保存在prj下,并在本工程目录的rtl文件夹下新建verilog file文件并以uart_byte_rx.v保存。由上面的分析可以得出如下的信号列表。
! x- ~/ ~: L/ j7 N7 @

/ Z1 o( S" Q# Y9 N) F1 l* K3 ?3 S4 r' d
这里输入数据相对于系统时钟是个异步信号,因此也需要对其进行同步,这就与按键的输入部分一样,不再详述。
; i- [# s4 [) u, W
4 Y, D* R0 q+ @! M( t$ O* \8 V& h1 c0 C
; h& M3 @2 i# V/ ~
) h! F  l& Z5 ^# J2 ]% I. v2 l6 @8 f
. l; k. N- V/ r7 {6 N
串口接收模块主要构成之一即为波特率时钟生成模块。这里根据上面提到的过采样方式,实际的采样频率是波特率的16倍,因此存在计数值与波特率之间的关系如表12-3所示,其中系统时钟周期为System_clk_period,这里为20ns。
+ j* m  k8 B) c/ f, T2 ~
, V3 T" G! _+ D+ J* H  _3 Y
12-2 采样时钟计算
       不同波特率对应采样时钟分频计数值的选择如下。这里依旧使用了一个选择器,来实现本部分功能。
) ~7 N- z8 D) q  X
& |7 V+ ]4 Z1 T6 @7 Z
; M3 l. A$ f" e2 S! D0 O0 J# m, o
现在产生采样时钟,即波特率时钟的16倍。

# e, M3 B! t) @" I, M) c; Z& F% ~- d- S0 a
4 B* I% T' r8 B  v9 E/ r
采样时钟计数器,计数器清零条件之一bps_cnt == 8'd159 即一个字节接收完毕,  (bps_cnt == 8'd12 &&(START_BIT > 2))是实现起始位检测是否出错,详细在后面会解释。

+ ^& W* r9 S( Y! q% K
2 D1 K. ~" _$ L6 q4 g
  e9 p, f/ P; P0 p

/ k+ |# V2 _0 k" e$ O. o
以图12-3起始位为例,实现数据接收,中间时间段的bps_cnt值分别为6、7、8、9、10、11,然后直接累加本位数据。然后下一位需要进行计算时的值即为bps_cnt加16,也就是22、23、24、25、26、27,也直接累加本位数据。以此类推可以得到其他位的数据。
       现解释为何在上面清零条件之一为(bps_cnt == 8'd12 && (START_BIT > 2)),理想情况下(真正的起始位)也就是当bps_cnt计数值为12时,START_BIT的计算值应该为0。如果此时START_BIT的计算值大于2,也就代表着在6次采样中有一半或以上状态为高电平,这样我们认为真正的起始位尚未到来,不进行数据采集。若不加此操作,进入了一种假采样会使后面的数据接收错误,或者即使接收了也不是真实的数据。

6 o, e- o2 I8 v1 ?- k9 L& h+ d5 _3 B6 y; j1 }: @
一次采样结束后再将数据一次性传输出去。在原理部分介绍一位数据采集结果中,取出现次数多的电平作为采样结果。6次采样认为大于等于4的数据才是真实数据,这样判断我们可以写为 ,也可以写为, 也可以直接令其等于当前位的第二位数据。011/010/100/101这几个数据分别为3/2/4/5,可以发现只需判断第二位即可。

+ q1 U, A+ V$ u" p' w8 m( d0 a
4 F4 `8 t" Q% L$ J/ E
进行分析和综合直至没有错误以及警告。
为了测试仿真编写测试激励文件,新建uart_byte_rx_tb.v文件保存到testbench文件夹下,这里产生数据的激励使用上一讲的发送数据来做,因此激励文件只需在上一节的激励文件中,修改端口信息、例化本模块以及将发送模块输出的Rs232_Tx连接到接收模块上的Rs232_Rx即可。修改后的激励文件如下:

, a* I; z' t! u3 r

/ w0 f) R- V$ ?$ t6 ]* y4 f4 z5 n
# }$ W* I$ Y. O3 I7 R1 U3 y, b$ j5 W; Q7 P
设置好仿真脚本后进行功能仿真,可以看到如图12-6所示的波形文件,每当一个字节发送结束后,数据输出data_byte_r均会更新输出一次。下图中由于Rs232_Rx仅声明了没有调用,因此无数据显示,可以直接删除。
( S7 k: W* X% J6 m" S( u" H
12-6 byte数据接收仿真波形图
为了使用ISSP进行调试与验证设计的数据接收模块,这里使用的是ISSP的探针功能,与上一讲使用的源不同。其主要配置如图12-7所示,并加入到工程中。
  X5 M0 K7 h& ^- E( D3 R) ]# e
12-7 ISSP主要参数配置
在本工程目录的rtl文件夹下新建verilogfile文件在此文件下输入以下内容并以uart_rx_top.v保存,并设置为顶层文件。这里例化了数据接收模块以及ISSP工具。 只有接收成功后才采集数据,也符合实际使用情况。
+ E5 T% F% ]" K2 v. A# h
  C/ ^; ^, W1 }* K; @! f

5 \  G4 g, E9 _, `" r- W6 u! W' n
分配引脚后全编译无误后下载工程到开发板中。在Quartus II中点击Tools—In-System Source and ProbesEditor启动ISSP,手动选择下载器后,并将数据格式改为设计中的hex格式,持续触发模式。打开串口助手波特率设置为9600、没有校验位、8位数据位以及1bit停止位。
% q, ~1 r% X2 s  V& n/ q5 R
12-8 串口助手设置界面

  q9 V  V/ _+ G/ h
12-9ISSP工具设置界面
       在串口助手上先后输入aa38后在ISSP使用界面可以看到Data会随之对应变化。即设计无误。

3 f) F3 S* C2 ~* c
12-10串口助手发送数据
3 U( d$ }0 g7 ]- P, v" q; t1 b" V
12-11-1探针接收到数据
12-11-2探针接收到数据
2 I$ k3 z/ a  d- D* R" U

6 D7 Z% U. m0 B+ d- X% }  z+ J
3 f, \( ^+ x$ q( o- x( X7 _' d/ |4 D& E. E
小梅哥
芯航线电子工作室

) P! ]6 N  p: ^( d, e2 B1 L2 @6 L( k3 n, I
游客,如果您要查看本帖隐藏内容请回复

  `6 ]( b" W- g  i+ ?; ~0 ~: S

该用户从未签到

2#
发表于 2019-4-1 16:39 | 只看该作者
回复看看隐藏内容
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-30 01:21 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表