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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——基于ZX-2型FPGA开发板的串口示波器(一)
2 \& M4 O0 {- V* r: \
2 R5 K1 n9 z+ B$ S0 A  ^5 Z' v
据采集卡ZX-2开发板负责进行数据的采集并将数据通过串口发送到PC机上,PC端,利用强大的串口调试工具——串口猎人,来实现数据的接收分析,并将数据分以波形、码表、柱状图的形式动态显示出来,以让使用者能够直观的看到ADC采集到的信号细节。同时,用户也可以使用串口猎人通过串口给下位机(FPGA发送指令,下位机接收到的指令进行解码,然后依据解码结果来配置FPGA中各个子模块的控制寄存器,以实现通过串口控制FPGA中子模块工作状态的功能。) A8 V0 j1 u2 Z% G. c2 r4 I

, ?0 q6 Q# K, ^# \" z- b- E/ ^/ b/ g5 C$ R' r
. H5 i! Y7 p! s8 L: G4 ~9 N9 Q! T
实验,涉及到的应用模块和知识点如下所示:/ d# i4 [+ z& H- ^
串口收发模块的设计和使用; R+ f, x* s" {5 i  e$ ^) k
串口收发模块仿真模型的设计;
0 B6 L& ?1 R  O- }& B% n  }串口简单数据帧的解码# u# s+ c5 P5 e) b8 n
串口帧转Memory Mapped总线的设计;
7 P0 l; i& I1 e6 v& R7 pMemory Mapped Slave模块的设计;, I2 ^0 M* A) ]8 b( A6 C7 R
线性序列机设计思想的应用(ADC驱动)
0 r* c: M) ~0 }8 y独立按键消抖的分析与实现;
! V9 b! I2 R4 _3 d/ I9 K- ?( f4 b/ a+ Z直接数字频率合成DDS)的设计与实现;' M( z- w0 z* K/ o  k- v6 i
使能时钟系统间模块协调工作的重要性;
. b! c+ w8 F. l: {) s串口猎人详细使用
$ ~& h# x* g, \( r完整系统的仿真验证设计;6 c+ a" W! d  w
头文件在设计中的运用;; p9 d4 m- z8 K: b: m) p: y
Quartus II软件中可定制化存储器ROM使用;4 I) U* u" L5 \' y! \: f/ P* Q1 F
$ ~8 O1 x1 N. x
实验不仅注重可综合的代码编写,同时更注重代码的仿真验证。通过仿真,我们能够寻找设计中可能存在的问题并修正最终,在整个系统仿真无误的基础上,下载到开发板上一次性成功。
- j, P3 \! Z+ e1 v7 W" k& g6 g下图为本设计框架结构图:
/ g7 P( y, O' p & j" B4 c0 ?: {
系统采用模块化设计,模块划分的过程中,重点考虑了系统的可扩展性,下表为对系统中各模块功能的简单介绍。$ e2 J) D3 x+ O/ o* \; p
+ \1 p) N9 D# R6 n0 D' O

. ~& V6 e( x  K* `4 q

, i! x6 O# f; t, t        基于串口的虚拟示波器模块功能介绍        
9 B7 A* P/ r- y, o$ M( t1 R

# m, {# r) b6 s1 o- ^  o' l模块  C8 C. O1 T6 H& t& r% E* Z
# l+ N8 |" ]& K9 T  P
模块功能
/ R( X+ x2 i8 r
  k' R. u% D6 A5 _( e; D( w: i- |/ ~
Uart_Byte_Rx
! a& f  S0 |8 N2 {- c

9 {% ^' `* ~3 f# _+ \* g串口字节接收模块,负责进行PC机发送指令数据的接收工作
* ]/ K& Q, d, E4 C: J. P+ P3 T
( H) w0 E7 _# F9 S" t# ~/ B
CMD$ [( B! ~( h. f4 `. b3 a

& l; s4 |; ~* k4 A& R串口指令解析与控制模块,该模块通过解码PC机发送的指令数据序列,获取控制命令,转换为Memory Mapped Master总线以实现上位机通过串口控制下位机(FPGA各模块寄存器的功能! C$ v" N" A7 n

# R  q: o. w1 g* Q4 KSample_Ctrl& u5 v- }6 G% T( S  E( O+ b

' `, ~' j$ d! j4 JADC采样速率控制模块,该模块通过控制使能ADC采数速率来调整ADC的采样率
0 m* w& |. M( e
- @( f! M) L# d
UART_Byte_Tx9 U: N) `6 H1 W7 P
) p) a# Y0 z  Y
串口字节发送模块,该模块负责将需要发送的字节数据通过UART协议发送出去发送到上位机)
3 z( q/ c: F! u: |( d6 e
. y$ q# E$ p* _% \# d8 r$ s6 W" M0 y# v
UART_Tx_Ctrl
! A' C9 @+ U: W+ L9 P

4 [$ g* n% r3 X3 w串口发送控制模块,根据数据有效标志信号来控制串口发送模块将数据出去5 |! U* s2 S+ ]' x

$ c4 C5 A$ D5 `4 Htlc549_Driver1 d. M! M( C& R2 Q$ @' i

' v4 \" e2 y- U, [2 Q7 ?TLC549模数转换ADC)芯片驱动模块,负责驱动TLC549进行模数转换,并将转换结果以字节格式输出。
, J* o3 J, f) q0 G: H9 t( }2 J
$ A: U, v" i  g- P
DDS
7 |& a. M' G1 o- T7 s

$ E3 E. M+ G) J# M" J2 _DDS信号发生器模块,该模块生成一个固定频率的正弦波,在没有外部信号发生器的情况下,可通过该模块生成正弦波,并输出数据接入到采样部分,以模拟采集正弦波信号并在上位机显示% {/ z& N5 L' o; R. p

( q7 E2 E- [* P+ |Mux1- K- q' C) Y, r, i5 e
5 Y$ U! \" c" }! e
AD采集结果和DDS数据结果多路选择模块,在测试时,用户可以选择需要采样的数据内部信号发生器生成的正弦波数据(供演示用)或者ADC采集到的电压结果(实际测试)
" K. l) u. C& l- F3 @

9 k0 ^0 |( `4 p% L8 FMux29 m3 o7 t; }) ~1 O
* [, ?1 p" f' S+ g" w9 l
AD采集结果和DDS数据结果有效标志信号选择多路器,在ADCDDS都处于工作的状态下,通过该多路器来实现数据有效标志信号的选择8 l5 F: Z5 |" g. C2 V
8 T% X: @' Z& M! D
normal_keys_detect+ t& D: }* Y" m, N
$ Z% ?% g3 S! K: K, }) E
独立按键消抖模块,通过该模块来实现AD数据和DDS数据的切换,在演示和实际测试中进行切换
. o6 X1 X. i5 _1 J, `1 Y+ f7 g) O
. G; X, t  W/ J

3 Q$ L1 R, L5 i6 {* _3 \, N系统中各端口和信号的功能介绍如下:
$ M, p3 Z8 l, S! p+ K
$ N8 Y/ B2 M: f: H0 D. r4 {
基于串口的虚拟示波器端口和信号介绍; C8 C9 Q6 }7 d. @% J- [
# G: Y/ m" D8 [. Q
端口
  Q3 p$ R. C1 M5 N6 N& z1 Q  R- m+ x- W

* b' r. _% {5 e) _1 k% q( d# p位宽1 E9 n* A* c, v8 g$ t

2 l- c% q8 \# d1 w8 ^: t! x1 u" c端口功能描述' F% i; a, l, M/ R! y. `3 f( Y! q/ @

4 {, I, i$ M$ B" zClk. O, i$ A9 N6 G* |/ U' E7 D
9 b7 j& A3 u" N6 {
1
4 v3 ?% _- l# w- n# Y& L# T
: |8 W& b1 Y0 W5 `1 |8 S9 R
系统时钟,50M8 M8 G* ^) g- B& L  M/ f
2 B7 M- w3 e8 H6 Z# F9 U" Y
Rst_n5 e& F) L- ]+ M! W0 T7 o

. X# U& K4 W! I( n& f1
" }* n5 |5 u$ T5 S' {
/ Z7 |6 _) @0 L4 t
全局复位,低电平复位
& n, _+ j; ^' Y& Y5 }6 I
. p) j0 y5 r, H/ {
Rs232_Rx
  j( R! h% U7 K0 V- S. d

  Z6 Z9 `5 M/ v' q0 A- t  y- I1
$ a( e5 d2 Y  H) a
3 H' g8 y7 B5 ^7 k
串口接收引脚  o, h' P2 s8 z' r4 o

5 s2 ]# G" z" f4 n' A. |+ L- BRs232_Tx% l* J8 ~0 W6 J, O- ~! h

- U9 w/ c* F) w/ f' t, g- m9 l18 f/ ]0 B* i# e8 Z0 S0 L  F
2 I* k! v# v( _* L/ ^' M3 t
串口发送引脚
# z7 D) }1 {8 P$ W" E* C% e

) {6 {! U( q5 q8 E: a( rKey_in
# F% m/ F  N8 c* |) V

( X$ F8 J5 m+ F( F( P* X8 C30 V% U2 j! u& u& B' d8 H

& W! C$ R. i: _按键输入2 h8 Z. L' M. r! @% D

& M7 J. ?9 S8 M$ nADC_Din& U* C/ o# H. Q8 h

+ M6 q* |, ~3 l6 I% r& R" e19 z+ w% X9 b& V/ {/ _
- D3 O* C2 p" a: s) \/ O
ADC芯片数据引脚% Y$ u7 u0 W, c- q- f

/ X0 z* A0 ?. y5 c* O6 E( FADC_Clk3 a* x( t4 O' {+ Z1 n* x1 j
# s2 l- @5 u2 N' `7 c
1$ @0 ^" m3 A$ P6 J6 t6 i$ v/ H
. I3 U* I/ |+ T
ADC接口时钟
7 o- ?) `' A5 t# ]8 w

2 v& L- F3 S3 o) ^4 e& HADC_Cs_n
$ q. T0 \% F+ f; F6 u

; ^4 W! K, A1 P8 |10 j! j% a0 Q+ ?& p0 W# r' K
8 a* e* H; E4 B
ADC芯片片选信号
9 O. I& Q) u* ?+ B8 v

4 X" F6 f4 g% q7 R2 R内部信号
. Q, |/ g0 Y7 E) c# ?9 F2 h8 \- F
' u; c& e* }5 P- k
位宽
- X5 j8 c: }8 ^0 X

* K$ V% e! U& `8 U; C$ v% ]信号功能描述
# f: e" y8 U8 a  S0 L" F; n9 V
9 i/ L3 L1 w& |- i  \$ d4 d
Baud_Set
8 [7 V+ D1 M* \3 j7 f) [' k) ~
' o; R5 w& {8 @/ T; d$ S
3
" T) k* z- q8 h7 `; O6 R

) ?0 h; @) F5 I. j. i' Q波特率选择信号,对应波特率如下:
/ q+ c+ S" k" P4 U" ]4 `; F5 h000: 9600bps9 Z' i; X" g! O: i1 y
001: 19200bps6 L" {$ ^1 M& F/ M5 ]9 E
010: 38400bps
- k# I/ O4 P/ ]" }( ^! e011: 57600bps, p0 e3 p4 l$ |; a. B
100: 115200bps4 d1 K$ g% d0 G% i3 K4 f& _
101: 230400bps* t3 O% r; @( E/ }+ ?( A- C
110: 460800bps
/ w/ J6 l; ?" h5 ^+ q111: 921600bps. p% X. b9 F  i! \5 n) e8 ?
. g: r2 K' ~8 d
Rx_Byte: x1 n- g2 `5 J- }

0 J4 E9 N/ i, ]' P6 u: [7 g8' V! d# w  ^# _, m' S: ], I
+ h4 n0 Z8 E4 ?, g1 o
串口接收到的字节数据( L( T" B0 ?* d! }2 L  s' }# c

7 }' v/ g! Y4 L7 ARx_Int
% f$ N5 m5 n7 r# m8 ]

0 T9 X& {. S. [, E15 l, V8 {, r1 }' M8 a& G

% W: t& M. b% D/ e: o; f5 y串口接收字节成功标志信号,每次接收成功,信号产生一个时钟周期的高脉冲
( x- a8 i9 _5 @# {% N+ T! y' V( z

. e* `+ L3 ?4 L+ P% @Byte_En, `: F! \5 a- H# M5 q

+ R0 Y$ \6 L! @1 l$ F19 ^( L1 q. g2 g& e
) ^7 M, V- u8 {* K7 X
串口字节数据发送使能信号,每一次一个时钟周期的高脉冲使能一次串口字节发送。
7 Z3 u9 r, x8 K; t: x+ n

+ S. |! O) i7 {7 K' Z% aTx_Done
2 H8 n/ L4 m1 |$ X" f9 o: B

# w1 d" ^+ z+ k: S6 K+ s1
7 g( Q- d3 U. J* L( [0 S

) i" e2 `  Y# S* j串口发送字节数据完成标志,字节的数据发送完成,信号产生一个时钟周期的高脉冲9 z. U5 c  [2 s5 q) B
$ d9 Y5 U- f: N5 M) U1 y
ADC_En
" v# _0 {: v: y% E6 [! t3 N

1 P2 u/ c7 C' d1 W/ n! L$ F1
5 }( i1 I" {  X" n

" m0 x  a# P' V0 k% q) ~; nADC单次转换使能信号,每一次一个时钟周期的高脉冲使能一次AD转换
9 [, _/ X3 X  g

) H% m0 J1 f. i* y' `ADC_Data
0 x* S$ S/ p0 \" L0 q2 M9 ]( e2 }
+ s4 r" t0 ~8 r6 |7 Z
8. J6 Z, E3 E3 b" h% U3 P% m* J
) A9 G: w" M6 g& m6 a* T+ e- b
ADC采样结果; A1 d3 s' e4 s' W% u
1 s, [* N! ?: W# f) H
ADC_Flag
6 E2 m' h5 R# t3 @& i* Q
0 j6 Z" d4 _( S4 N+ B' E* ^
1$ O# X2 [( y+ g; X/ S; x$ k! T6 C

  U2 ~! z6 _' Y! v2 `. cADC转换结果有效标志,转换结果有效后,信号产生一个时钟周期的高脉冲
# T" ^% f/ H) q2 f
+ @6 ~' W' u2 }' N
ADC_Busy
0 R. l- k3 U/ g% k
: k7 `% p8 R4 w6 x! l! q
1
% t9 d# e5 c) Q9 q! V2 V( L; z+ z

5 d. e7 i7 e- CADC工作忙标志,高电平表明ADC正处于转换状态,新的转换命令将被忽略,只有当该信号为电平时,外部控制逻辑才可触发新的转换
$ q% w! g- D- I; M

* U5 Y' P, q; Z8 t8 p. Sm_wr
' V9 i9 T* M) e$ t: x
8 i$ {* M5 Y4 o8 D( m* d7 i, Q$ {6 p
16 P9 E. f8 D3 Y: ?$ i  V

3 Z0 u4 n2 c  s" p. k- `主机写数据的请求,1表明有写请求/ T: k4 q1 I9 T$ Y: Z% v9 n8 u$ j

! |+ ]$ I" [$ F2 b7 L  Om_addr
  l; y  l5 h+ M. S. l. B1 Y

9 T' ^1 m! I* k; ]2 I  j# X4 _( V8
8 Z5 y* ^* R& ?: b7 O. }# c2 u
3 `$ w2 P# r8 R( Q2 P
主机写数据的地址
( F* U$ D! v: u8 G  O

/ j+ y) Z8 E! @m_wrdata7 W9 O: j  D( P  L! |9 W9 r# O6 ?
% R/ x9 P6 C; Z' Y- j
16
, [( ^  v# E$ J$ ]
# @. ]2 \; J/ u% Z  ~" L7 J
主机写数据: c$ ^9 X8 K1 y4 l4 b2 k$ h2 m8 Y+ y( [

1 S0 J% O1 L: e/ |  HDDS_Data, w8 q7 i8 o5 Y# @& n

* V9 Y* ~$ o4 [82 k3 C  a3 C& _3 J; {# O1 g# ^; q

) \7 D! Y8 v! K$ @, ^' c" A! HDDS生成的波形数据9 @2 ?9 P, T9 f: `4 u, C

3 a# P4 O2 i" @) ZDDS_Flag& p( ]( t: q, P' O3 Y' n
- M$ h1 ]6 k6 S/ n9 [. L* H
1
7 `+ }. }2 C4 l. ~, ~

  N3 ~5 y/ u; Y" fDDS采样使能标志,该信号由DDS采样速率控制进程产生 ! i- L; I: ~* X9 W! N0 S7 [) `. l. ^

$ g- V7 O2 y- _" ^: v, FData_Flag
& o$ Y. S+ D+ @1 b4 p
( ^# n; [  E. W0 F* w
1
0 B1 X3 y4 U- `0 @7 h0 T/ m1 p
4 V* b% m1 w2 P. W  A6 e  L
数据有效标志(根据用户按键进行选择DDS_Flag ADC_Flag
( u4 P8 u) H- E) C' j7 S: z
5 Z& C: Z% K+ P1 N; \
Data_Byte0 U) N* Y. s. L% \3 J. {- I

5 ^, l! _4 y9 w/ W. Z8  }: b0 y6 D$ C

/ I% y5 s: \5 }串口发送字节数据
; X- h* u/ n* n5 J. R+ `
$ p- j  B- k) [% U9 d
Data_Sel- X7 Y7 S9 q& }/ @  l

+ S3 r/ n  b+ U  }1  c. Q2 k* O6 s' q3 i* H8 R- d

, s; \& i% A' A+ W, m6 ~% _数据选择信号(选择串口发送DDS_Data ADC_Data),1选择DDS_Data0选择ADC_Data
7 E! E9 r4 A6 j# c5 l6 ^2 }$ {

2 |8 h6 q" r; t  \Flag_Sel
4 y6 u3 k8 F- F+ S
4 Z' H5 l% L/ U4 V6 G3 H
1
) n5 m: I2 _+ m' X* n6 w* ~

  |4 A  {1 X0 u! p* {3 n1 ~数据有效标志信号选择信号(选择DDS_Flag ADC_Flag1选择DDS_ Flag0选择ADC_ Flag
; K2 K; ~. l& f( S$ ?6 h
% I* P! v8 l3 B
Key_Flag: J2 W1 Z  J# i4 R

: V. Y3 h  C9 a" h1
/ J) W2 @: Y! c! [

! r9 h! K2 a2 A) ^& B6 D7 V按键检测成功标志信号,每次按键检测成功信号产生一个时钟周期的高脉冲信号
. |7 y# b, I. t7 K

* W+ W" ^0 }( @6 P5 Z: o( [8 ~Key_Value
. s+ T. u+ ^6 e" i' k% ?
: g5 O- c7 Z3 n
39 ^& s6 @6 Y# D3 H9 W6 Y% U

; A& U8 x7 g: @8 ^+ A' @按键检测结果
  h: v+ \  Z( ]( _# Z
, l! s( k  o+ A2 k; H# s
; ~' o7 p. M% X6 |6 q! N6 S; @0 m

$ J( ?2 E* n% k1 V. c2 c8 M; m) a) k8 U( L8 N9 g9 p' V9 ]
本实验为综合性实验,代码量较大,因此这里只针对部分代码进行讲解如果文档中没有讲到的内容,大家可以参看代码注释' o, ^: e2 q, ?1 p8 x
* O# Z* _7 s3 r" b& K' o

3 r; u' z9 S2 O% t& @! L1 t  e) R7 H2 q' s! W
6 T- f/ r/ ~* O$ g+ C

3 z0 f7 w0 _, `3 W1 G8 V
小梅哥
201548日 于至芯科技

2 z$ A. g! o& H/ t

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-30 12:15 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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