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

转——基于ZX-2型FPGA开发板的串口示波器(一)

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——基于ZX-2型FPGA开发板的串口示波器(一)

& L/ N$ z& p) \, G+ ]! o. u
" k" X/ i2 h& V# e2 L3 p/ m/ N/ V据采集卡ZX-2开发板负责进行数据的采集并将数据通过串口发送到PC机上,PC端,利用强大的串口调试工具——串口猎人,来实现数据的接收分析,并将数据分以波形、码表、柱状图的形式动态显示出来,以让使用者能够直观的看到ADC采集到的信号细节。同时,用户也可以使用串口猎人通过串口给下位机(FPGA发送指令,下位机接收到的指令进行解码,然后依据解码结果来配置FPGA中各个子模块的控制寄存器,以实现通过串口控制FPGA中子模块工作状态的功能。& ~9 y. I# y+ f

9 \+ x0 T3 C" g5 `; `. ?/ \, ?: W
  M! q: n/ L! a4 T2 m8 r3 L3 n! p
实验,涉及到的应用模块和知识点如下所示:
5 |, h5 \% Y7 p* I; M串口收发模块的设计和使用
+ V1 B0 L- v9 w; x4 i串口收发模块仿真模型的设计;. W; b/ v% }* p2 ?0 _# j+ N- u2 N% s
串口简单数据帧的解码
2 k& X( c) o' k, ]7 Z  L! N串口帧转Memory Mapped总线的设计;
/ o: F: P* V: ~, S1 H6 zMemory Mapped Slave模块的设计;$ v, }, _- r# {* {' _, o
线性序列机设计思想的应用(ADC驱动)' Z# n& H5 `: k  ~  d4 m) p0 L
独立按键消抖的分析与实现;( r* Q) W# `1 i) S2 o0 a8 j
直接数字频率合成DDS)的设计与实现;6 x& w% E$ Q. D* g# X7 n/ C' e6 H
使能时钟系统间模块协调工作的重要性;
/ M( q$ U  R4 L0 y; Q2 M2 p串口猎人详细使用% G5 i  f" P% g$ ?4 L! `
完整系统的仿真验证设计;
. \1 u# W8 j5 x3 \* m, L& C头文件在设计中的运用;
! e1 z( u2 Q6 \& q: z) iQuartus II软件中可定制化存储器ROM使用;
6 K- C  p. ^) Z% Y& B4 S: N
2 [  q% H3 V4 k% }( `0 S9 Q实验不仅注重可综合的代码编写,同时更注重代码的仿真验证。通过仿真,我们能够寻找设计中可能存在的问题并修正最终,在整个系统仿真无误的基础上,下载到开发板上一次性成功。1 A# L7 S) e. Z% f
下图为本设计框架结构图:* C& p* l) w. g- s
0 {9 R+ ^) D% ]. L7 w
系统采用模块化设计,模块划分的过程中,重点考虑了系统的可扩展性,下表为对系统中各模块功能的简单介绍。
' O+ n$ Z5 b; c/ Y" o5 z0 N: g  o! x6 k) U( f: v8 O

$ [8 Q# K* C5 J; a% t0 E0 t

, L" f5 o- F* [! I& @* U4 L        基于串口的虚拟示波器模块功能介绍        : }9 o( D/ j* h9 p, {

- Y6 }7 N5 b# U% ^, T模块5 {% o4 k1 y4 ?
+ G2 r& s3 G4 W2 G
模块功能3 b( F6 g2 I" O/ r+ R
# Y: r2 Y/ Z, `
Uart_Byte_Rx
' E9 a. Y. w# m" s

5 g; R/ n, p: x( O# _串口字节接收模块,负责进行PC机发送指令数据的接收工作
1 ^0 h+ P1 m4 N0 C: H6 k8 ?
( ?. o7 a6 ~7 [' T; g# [5 D
CMD# S2 F" ?. ^" ~1 U" x: e
& Z; y4 F3 U7 k3 y2 H
串口指令解析与控制模块,该模块通过解码PC机发送的指令数据序列,获取控制命令,转换为Memory Mapped Master总线以实现上位机通过串口控制下位机(FPGA各模块寄存器的功能
5 p' {5 a) Z9 S$ \/ K

* E) p# q$ d# h" }- E" WSample_Ctrl
. t/ c* Y: e) n8 u1 K  j
5 p  i: ]3 H6 j4 D" R  g! N: W- r
ADC采样速率控制模块,该模块通过控制使能ADC采数速率来调整ADC的采样率3 v% Z$ e1 Z* p7 k- f: W
5 {6 y0 n# X0 z# J5 F
UART_Byte_Tx6 p! d1 Y8 r3 T

/ R, G& U" K5 u( V. C; ^, B' ~串口字节发送模块,该模块负责将需要发送的字节数据通过UART协议发送出去发送到上位机)1 e; l  T& R9 w& a! K9 Z, t3 N* Z

7 p# _  K3 ]7 y$ z; HUART_Tx_Ctrl
& |: x% y+ a# g, h( [5 V2 h
8 }  ?! |$ L/ e0 B
串口发送控制模块,根据数据有效标志信号来控制串口发送模块将数据出去! s7 R# y# b, A; C) {

1 y2 |% g/ ^$ H* L/ Mtlc549_Driver
# k2 C6 V# i0 ^& a7 F
( R# i+ ]0 _* N+ V$ c$ o% l5 ^9 ^7 W
TLC549模数转换ADC)芯片驱动模块,负责驱动TLC549进行模数转换,并将转换结果以字节格式输出。2 m% X  c. t$ `+ L

: I9 B+ M# ?( i! J% dDDS9 a3 @! s+ R8 g: n

( j8 L# \8 b1 ?. ]DDS信号发生器模块,该模块生成一个固定频率的正弦波,在没有外部信号发生器的情况下,可通过该模块生成正弦波,并输出数据接入到采样部分,以模拟采集正弦波信号并在上位机显示: r2 x7 q+ ?/ \+ X
1 h' ~, p  G2 f. r) e( \
Mux15 y8 h! c$ `& s! G

& C7 g& o% H) SAD采集结果和DDS数据结果多路选择模块,在测试时,用户可以选择需要采样的数据内部信号发生器生成的正弦波数据(供演示用)或者ADC采集到的电压结果(实际测试)+ _% ~) {. W2 Z2 S" }
* }& ^( Z  r" i% ?8 Y
Mux2* S) h- f# J. u- @
& h  s9 l7 P/ I3 c0 H2 Z
AD采集结果和DDS数据结果有效标志信号选择多路器,在ADCDDS都处于工作的状态下,通过该多路器来实现数据有效标志信号的选择8 v  S( p8 n5 {  t( C' }" Y

7 _: d. R; T% F- gnormal_keys_detect
: e$ N0 j, f9 ~
$ |7 f1 R3 J( f0 n% t! j
独立按键消抖模块,通过该模块来实现AD数据和DDS数据的切换,在演示和实际测试中进行切换
6 S. n  z( F  O

2 u' l$ r9 R+ Q" E  {4 M+ K. r3 e. i; E; {
系统中各端口和信号的功能介绍如下:
, _8 m6 i& @3 ?9 ]
" F5 }) {: y3 X- t6 R3 }
基于串口的虚拟示波器端口和信号介绍: N* l6 ]8 o  `- q% Q( p7 G2 u
8 p% D" l2 P" a% w( y+ _5 I
端口. i  i8 E) `& m. s" t1 [" V" }
& B7 l1 T- I" ]
位宽+ [# a/ z/ N+ D3 s+ C8 M, }
9 i/ A: F: T7 Z1 C* V
端口功能描述
* b! m7 Y) C8 B& b- |+ e; s
; P/ J) b2 f: ]5 ^5 Z2 O9 P: ?
Clk
# y* T; ?0 o6 O4 F2 K3 G

! r& ]$ r& ~: c1
7 F9 ~: V1 E1 _8 d' l) k
! T" [( I8 W2 X5 ?- Q( n  T
系统时钟,50M- R7 G/ o8 i7 q8 p; f7 M/ \0 I, V

6 ], i5 h0 Z! [' a8 b5 qRst_n
' f: C% K% j. N, [9 T
) `7 v5 [' T" I- R6 k2 ]$ a4 C$ d
1% d* d/ O2 ]4 @
6 `1 I+ m$ V) \9 Y' v
全局复位,低电平复位
  @0 |+ H( ?3 F8 w' H+ f
* ^, P' d$ L( B$ C, n
Rs232_Rx
( b# b3 u; \: J. F
1 k* e/ Y: p% L" ~
1
5 D/ N9 w7 M. N, r2 q" i: T! U

$ s$ i+ P! b. Q; q串口接收引脚
' @+ J, b4 i- f$ ^  g5 t/ g
! @# P3 X# u. M+ b
Rs232_Tx
2 u  g# ?3 P' {

8 a& G4 o' v& m- U2 X1 x) E1
5 r( I5 J6 K! K9 h1 E0 V' u

8 c+ Z! y  u- Q' C- K串口发送引脚1 S* K9 [' T# H

6 }  [, {! E$ ]# B& NKey_in) O; B8 A4 B: r& ^% Z* j  g1 \5 S
4 r( ?; K  O+ {$ T' d. E
31 J' u$ L$ Q) h  b

5 s( U  j6 a) w& I按键输入7 u( M/ S8 C, V! Z+ l
4 W1 K( M, ^' L2 z& C9 O% _) \2 R0 X  P
ADC_Din
  x" C- ?8 O$ W

* x6 ~, C1 ?  s: f3 \/ \1, s6 G; U) q' s6 T
; f+ N8 R1 |3 l$ x- J5 n- x, f
ADC芯片数据引脚
$ k% p+ @7 v6 y9 b2 g* O: _
( h0 ^  c# @4 o& w- _# r2 v; E
ADC_Clk) K6 n) |$ e! g! B( u

- n0 q7 `: d, q4 @6 I. A1; o+ K2 d3 c2 x! k& x
7 x) e/ R4 H) X
ADC接口时钟# K" s5 ?  [) l2 y* f& @
/ V2 `* z) R3 S
ADC_Cs_n
. \  |& P1 x9 f7 L
$ V- n$ J. M/ ~# ]! E
1
1 ~/ n8 r+ |& Q5 Q( ^

1 S  _4 H' {" w7 f; n% J  kADC芯片片选信号  ?  q1 m; T& I; r

* g9 c2 s: T& }内部信号" z5 ^& {7 i. O( E
! D; H- A& `7 d5 o
位宽
3 H! L/ a( L( |" Y

" b# k$ K# K; P( b, k, c信号功能描述
+ W' e: U+ }9 c2 }) _4 n

" e, S) m8 l5 C8 XBaud_Set
7 Y5 q( w6 f3 T( Q& V3 W/ s! M$ o

& u1 ~: U  ?% Z. `+ M9 o% d9 Q3* z% }  b1 s" N& V. F" o3 _

# F' S) E8 k' p" l, W8 C波特率选择信号,对应波特率如下:/ p( V+ T# X9 [" h1 _1 N  ?
000: 9600bps: Q# B! h4 e+ I. b, |9 k
001: 19200bps
) R+ w" Q+ n7 C# |010: 38400bps+ q, {  u8 ~0 M, J  y
011: 57600bps6 t) p1 U5 a2 s* q+ ^
100: 115200bps
! E" V2 }0 @; V  o101: 230400bps
9 h' Y/ f5 }. O  Z8 ]110: 460800bps( [. ~7 I3 e, q, ]$ v8 U  P
111: 921600bps/ F7 A" \- g6 Z

6 w0 ]+ N9 e! eRx_Byte8 M! ], h# I; z

$ y# S) l4 L/ u" i4 n! z8
% C* O, }8 ~$ Q3 L0 H. E- h1 v* Y
0 I+ y+ B8 S7 O3 X5 o( p) F3 y
串口接收到的字节数据
% S1 H  f* u( q6 s4 a; o6 H9 j# P; ]
' D7 K& }5 m  i0 F: S
Rx_Int0 ]' A7 T* N0 _! E% `( b! O, v

3 O0 k+ J4 D0 D3 u6 b1 U1
0 t: E" U) @# g3 l+ [/ V- E3 o
! _$ }6 d8 {/ h1 p: J0 P
串口接收字节成功标志信号,每次接收成功,信号产生一个时钟周期的高脉冲. a6 l7 \0 q; h9 P

: s9 [9 i1 T  m5 U4 a0 p! {Byte_En& t2 {* J; Y3 g8 q
: M* G* b+ U6 ~
1
6 B: r4 U, n. w* }2 D! q

1 H* P4 A) H2 O8 A串口字节数据发送使能信号,每一次一个时钟周期的高脉冲使能一次串口字节发送。" J( R& }6 h+ Y" @, Z# j

) f/ f4 x; b' d/ xTx_Done
8 D1 B* H4 K: C" g# r/ N
; n# c+ B  S1 u+ L
1
! P5 b: M" f' d7 i

) a7 D8 M% B* [5 i- V串口发送字节数据完成标志,字节的数据发送完成,信号产生一个时钟周期的高脉冲
& ?; V  c% z8 V+ t
+ g8 z* @1 V4 ], ~% \8 x) v# H
ADC_En
; g% b  z- t) G! J# \- v& o: i+ }7 n! i

9 \5 J  D' b2 g: p- K* L/ T( n1
8 z1 p4 S* l6 m+ x+ }; u. s

1 Y6 S0 s" _: P# H& Z6 }9 vADC单次转换使能信号,每一次一个时钟周期的高脉冲使能一次AD转换
! B. O9 h7 n& r6 t; |* q6 E7 n( ~0 J
+ X, w, G+ ?' z! N# z1 K7 n' F
ADC_Data1 q* R. J! n# T0 ?" C$ y
5 c9 x5 g$ I$ Z3 C+ u
8
6 d& P! f  I3 D2 P8 z5 D

* O! \" s# }- L& T- cADC采样结果( ^* R% h3 J7 e8 e: w
0 W2 X) X5 j6 o4 M5 t; D
ADC_Flag8 K, d' _8 f* P# U" f! w8 P5 E

2 H' D, P, v. |, x) t& x- ~1 k1) i+ Q/ ~4 a7 n2 Y  ]

; ~+ g/ I) y0 s$ P& WADC转换结果有效标志,转换结果有效后,信号产生一个时钟周期的高脉冲
7 M# t% S/ Z, Y1 n) U6 Y9 T# c
( ]4 S' p; ^7 P% r3 z+ p
ADC_Busy
6 i2 u; [: v8 Y5 X  ~# [
! t3 w6 W( ^# o) f+ [
1; p: J/ g( K+ U0 k# Z( P5 q4 ~$ e

+ r0 c( ]3 B6 {5 \3 h' r! oADC工作忙标志,高电平表明ADC正处于转换状态,新的转换命令将被忽略,只有当该信号为电平时,外部控制逻辑才可触发新的转换3 }! `" z& q* K
9 ^9 l/ l, p, r! \1 o  N( X
m_wr
3 k1 l$ Q. G  |$ U: I( M+ e
+ g& O0 a: O2 D8 k+ t9 Y- J! q
1  p2 \/ x* M7 u/ v- K7 e) {* W8 A& `" ]

) ]/ p# J6 j) n' ?. @6 f% {6 k  m主机写数据的请求,1表明有写请求" I/ L# Q7 O3 t6 R, ~+ M

/ S6 H* t; H4 N$ G" f8 f! a/ P7 h& o: Y% Qm_addr
- }! l7 }8 O1 C+ D& G5 S

- v0 k6 ^, F9 g6 X3 |2 _% D, I8
0 ~3 D7 B. Y5 j; b

) A- R* b" ^- `2 e主机写数据的地址2 A6 i: n' ^1 o, n

; B5 r/ ^3 n/ I7 u& [m_wrdata0 M0 C* Q+ Z" x$ ]# v

3 y( ^6 ^6 {+ {; v! Q4 }167 N8 j  I3 _2 D; o4 {+ Y& U$ P

( z) E. u1 F4 F* }" I0 F主机写数据
5 H) d* t- n' Z7 R: X

% J- O0 H. m6 w% {; V/ d3 ~DDS_Data
( A" k, H- {' T* p+ d2 F& g7 S

5 Q% N# r; ^: V* @2 a2 G; e8
2 k+ H( b& i  q5 O, d, z

1 |, n- k( j( A3 x9 tDDS生成的波形数据$ y& i. k) r. S$ m$ V

# N. J( g* X1 I3 K; }DDS_Flag
9 X( i$ X$ x3 C( p

4 E/ n1 E0 N; ]. ~3 k8 N. U1$ T1 l& w" j1 o% T* L$ j
7 c& Y$ @: @: S; k- W* w+ \' d
DDS采样使能标志,该信号由DDS采样速率控制进程产生 1 {, W9 Y1 V; ]  b, v, m& l7 [7 S, ~0 x5 z

2 h5 W$ o" s5 P9 N. AData_Flag' z1 o( o0 |& j9 F, E) k

3 G. v1 c0 {" A& K1
% p( g+ S4 x# i- v2 R4 C* V4 }
% E- x- B4 a0 T- Z/ b+ s7 i
数据有效标志(根据用户按键进行选择DDS_Flag ADC_Flag9 y( A: f! `+ H( u0 [$ I
  g8 {0 m5 S. [* F
Data_Byte
8 y% n8 F7 P4 E! P! K8 O
3 X* R# Y9 H% I0 F( ?+ n
84 V$ Q6 b. \( r  R2 z+ z
+ b9 |6 c/ L9 m5 f: d, C
串口发送字节数据
- t( ?# R% x" R; F7 B1 |
' \/ _6 `: f8 l7 [1 Y2 b, w: ~
Data_Sel
& _/ v$ I, m1 ?) k! ]/ y
5 L7 O, s0 m9 A% u  \, G, L
1
  T0 D+ Q! D4 c0 _
- @" q9 Y: _& E- m9 c! P& v  b$ G# t
数据选择信号(选择串口发送DDS_Data ADC_Data),1选择DDS_Data0选择ADC_Data
# A' o6 y6 F" P+ ~( I& j& {
2 z  u2 Y& i8 v
Flag_Sel
& O2 c% e9 G" u5 V8 T
* C% G) b* m) c' f5 T
1
( c, Q) K4 G! o2 b

3 v, p& o- o# ~: |数据有效标志信号选择信号(选择DDS_Flag ADC_Flag1选择DDS_ Flag0选择ADC_ Flag& [+ W9 Y1 |- U' H8 b3 _( Z
1 @. U3 C" I# X% Q" K
Key_Flag5 u( X' k6 A6 }9 D; T- [6 g

2 Z( x" h7 t% [7 E  ]& W19 h- q* U# e3 p0 ?2 j6 s- \& ~

# y3 W/ \) t8 _8 s- v# H按键检测成功标志信号,每次按键检测成功信号产生一个时钟周期的高脉冲信号
3 s' ?0 G" i/ A) U) v1 l

8 m; i' E' Z' U6 `2 e: QKey_Value
+ D5 _- {' c( J# g

. l$ X. Y5 M2 a  f4 Z8 Z" q3% e- Z. N+ {% X$ T7 F1 j
1 a+ }$ X8 t/ f8 T+ }
按键检测结果
- H- k3 Y; V4 [8 g6 N% N& }
. K2 y: V" h/ ?3 q" a0 t

4 H' k2 F9 n0 I- i4 T. q2 M! Z' u1 D- B3 y
- C6 n3 v0 m% }  L# z# e3 G7 \) J
本实验为综合性实验,代码量较大,因此这里只针对部分代码进行讲解如果文档中没有讲到的内容,大家可以参看代码注释
  @- c9 j* L  x# M9 ~1 \
' D' g! C9 @: i

9 V) U+ N" q' Y0 `7 f  y3 y. N" Y0 l. g* Q# W+ P8 P0 [
. A- v6 D1 [2 p! e9 a- K

1 Q1 d0 w5 Q4 {% C9 X! l
小梅哥
201548日 于至芯科技

% N5 f* {4 u2 S/ x' Z# l

该用户从未签到

2#
发表于 2019-4-18 17:21 | 只看该作者
发帖是心得 回帖是美德
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-1 05:42 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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