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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——基于ZX-2型FPGA开发板的串口示波器(一)
7 g% S5 s" i' E5 C( k
9 e  ~6 l4 {+ |* k
据采集卡ZX-2开发板负责进行数据的采集并将数据通过串口发送到PC机上,PC端,利用强大的串口调试工具——串口猎人,来实现数据的接收分析,并将数据分以波形、码表、柱状图的形式动态显示出来,以让使用者能够直观的看到ADC采集到的信号细节。同时,用户也可以使用串口猎人通过串口给下位机(FPGA发送指令,下位机接收到的指令进行解码,然后依据解码结果来配置FPGA中各个子模块的控制寄存器,以实现通过串口控制FPGA中子模块工作状态的功能。
6 s0 t0 |/ Z. u0 n% ?) `* z0 |% t2 R1 W

3 [, r3 _; [. V3 D% W# u8 ~' i5 H
! m5 o4 O1 r' O  L: }, e实验,涉及到的应用模块和知识点如下所示:) k+ V+ W) g" X+ O$ C% z: x' {* x  Y" B
串口收发模块的设计和使用
; ~6 a% o2 q0 C5 o5 D' J! f串口收发模块仿真模型的设计;
7 Q. Y; n5 n& Z8 K' L7 \- }+ `* r串口简单数据帧的解码
/ A3 ~" V/ ]: s串口帧转Memory Mapped总线的设计;6 i* |- H7 ^& Z
Memory Mapped Slave模块的设计;# ?: H9 B, h: Z& W4 d. |3 k+ P1 j, y
线性序列机设计思想的应用(ADC驱动)( I. |, n0 X- W! i6 z: y2 }) u. u
独立按键消抖的分析与实现;9 I4 D' w* W' o$ B: J
直接数字频率合成DDS)的设计与实现;6 S# W/ q9 ~0 F5 m  C' R4 f' _
使能时钟系统间模块协调工作的重要性;
& H; r) u+ s, Q; {) j8 ~* ^2 B串口猎人详细使用
+ i/ a6 ?& W8 J! C完整系统的仿真验证设计;
: n! [) y" M$ n0 d8 z, h  g头文件在设计中的运用;
3 S2 j& J$ J) fQuartus II软件中可定制化存储器ROM使用;8 X0 n3 Z0 Q; _3 f

& B& B, N8 q: E实验不仅注重可综合的代码编写,同时更注重代码的仿真验证。通过仿真,我们能够寻找设计中可能存在的问题并修正最终,在整个系统仿真无误的基础上,下载到开发板上一次性成功。
: Z% x. [& k6 ?0 _下图为本设计框架结构图:
0 }4 i" ?  t  I5 W0 w - F' {& V& J2 y1 ~
系统采用模块化设计,模块划分的过程中,重点考虑了系统的可扩展性,下表为对系统中各模块功能的简单介绍。' d3 q/ j' v* ^  G7 g/ u/ L

/ B. O7 l2 ?8 s- V8 {5 z! Y" e. p: U& p) |1 U; X! h
1 `4 a$ f3 B% W" j
        基于串口的虚拟示波器模块功能介绍        
9 e- {# f0 L) q' N0 A; r0 s8 u
6 Y0 J1 F' y- _$ G
模块
2 b8 r. E1 h& I& l( S
. O: [5 \. `/ \$ i4 g2 S* Z
模块功能2 [6 k  y6 K% d& W" E

8 ~, d+ s8 `% c3 n" H6 N; {Uart_Byte_Rx. D% R/ J' s. [  D

) t+ U9 G( }& ]. K& m串口字节接收模块,负责进行PC机发送指令数据的接收工作/ y- t" h# [" R5 M, N

$ |- E" v6 ]/ G, SCMD. k# ?  h3 F  ^

+ @" z/ U. M' B% Y: y" b  H串口指令解析与控制模块,该模块通过解码PC机发送的指令数据序列,获取控制命令,转换为Memory Mapped Master总线以实现上位机通过串口控制下位机(FPGA各模块寄存器的功能
8 {/ f7 Y: V6 q" p

1 a* W% c; M4 u% i2 SSample_Ctrl
$ k! ?  ~1 A9 N$ @! R: j$ @
, ]! h$ q% Z) Q+ N6 g
ADC采样速率控制模块,该模块通过控制使能ADC采数速率来调整ADC的采样率
4 |  A' {5 e4 u6 W& K* h

( J  m& Q8 b' u0 X, S* _UART_Byte_Tx# ^; a  v. y5 z  H' ?
% l5 q2 W% M1 U; u+ A
串口字节发送模块,该模块负责将需要发送的字节数据通过UART协议发送出去发送到上位机)
' a+ m! S; s+ g0 B9 ?$ R. k5 |

8 O& g. T# U) n7 x; UUART_Tx_Ctrl
4 ]" H' s/ P! e6 b
& w( L" ~% f; x, _. G+ G
串口发送控制模块,根据数据有效标志信号来控制串口发送模块将数据出去
' z) l' g, i( E
# l( S  N9 H8 i5 f& @0 ^
tlc549_Driver# j, R8 H3 d0 R& j$ `

! {. M* r' T% h9 Z* ^/ q; zTLC549模数转换ADC)芯片驱动模块,负责驱动TLC549进行模数转换,并将转换结果以字节格式输出。  Z) z2 ]' i/ o" C, L

  D& H4 j# w$ l. m0 GDDS: n( l  k+ |0 E% a% J
: W1 a, [4 m- L& k6 o
DDS信号发生器模块,该模块生成一个固定频率的正弦波,在没有外部信号发生器的情况下,可通过该模块生成正弦波,并输出数据接入到采样部分,以模拟采集正弦波信号并在上位机显示; x8 N3 E3 R7 T2 p

2 r# K+ N: z% Y' ]# AMux1
/ p+ {! x. m+ {" Y3 M  ~8 _8 |
" c8 p& x) C" I7 z4 [
AD采集结果和DDS数据结果多路选择模块,在测试时,用户可以选择需要采样的数据内部信号发生器生成的正弦波数据(供演示用)或者ADC采集到的电压结果(实际测试)
) Z9 Q" F) y0 x) v- X
$ c7 \4 [4 w" r- G
Mux2
2 G$ {# S7 `* g5 h- s+ E% w: }# k

* P% ^# T& z. c1 G8 ZAD采集结果和DDS数据结果有效标志信号选择多路器,在ADCDDS都处于工作的状态下,通过该多路器来实现数据有效标志信号的选择
' y- ?5 E, X6 k" D; w4 W

5 @5 }+ K, s/ k0 O4 z& }/ Y4 snormal_keys_detect( l8 D' v+ L5 o, ]

. D& p) ^( B4 ]" L; ]独立按键消抖模块,通过该模块来实现AD数据和DDS数据的切换,在演示和实际测试中进行切换
6 q% ?. {" F! |& n+ G

5 Q7 `$ t" |' Y
( O2 o0 m8 O$ D3 z- e4 I4 ~5 c5 s系统中各端口和信号的功能介绍如下:% x2 o% K/ H) y/ s  v7 s. c
5 x* o+ Q1 w2 `- O3 n3 e3 S. E, Y
基于串口的虚拟示波器端口和信号介绍
: |9 B" J& b! H6 c/ M

' N, H+ L5 ~# b* D端口6 M  i) n& L4 F, O) Z; y8 v1 H, M
# [! o/ |" J1 N1 ]
位宽
7 W4 B7 H1 h5 P  C# S

3 B! A+ N' t" g6 D4 C6 G& P. j" R3 N端口功能描述' v, z- y  V# N9 V- Z- y- E

7 Q8 o! `* J- HClk
0 g2 Z$ f$ [, e8 v* L$ d
( V; d, }+ C, X, r
1- A- H9 n1 {8 t3 P
# v/ y2 N  ?8 l$ m+ I* f
系统时钟,50M
* I  Y/ {3 e" y6 s  F" I

  T) u) w1 X* dRst_n9 j/ {* h0 {9 s: e6 A- h
2 G, Q. t6 f0 q
1. N# j+ S# _9 O% E) S/ f! T2 e2 G
/ x' ~- H( o  v
全局复位,低电平复位
/ h  x/ L! @- }# j

" |" {# N( [! y- V6 N1 d$ z6 WRs232_Rx
+ s" }' s# n8 N3 T( l6 y

: I& [1 ?; B" f# ]/ G13 R0 J/ c. E4 i$ [" C

/ g) H: H9 @9 p- G1 i: f' l' M串口接收引脚1 i+ t* `8 w1 I8 ]7 Q

8 t) p- _, Z4 o) z/ Q$ c- xRs232_Tx
( r! W: ]1 H3 k  c0 L& [
0 l" y; l  p7 x
1* S6 V' H* \/ r  h: D

( m! a, N" s$ M6 Q3 ?! v串口发送引脚% g" k) e7 T' u  X# J9 v

4 o( }8 n( J7 C7 X) k: oKey_in
1 G3 _1 Z1 R5 e1 E

# u, G. @- Z7 ]3 z/ ^; f3 T3" M3 Y4 m! d$ ?6 f+ d/ J
6 w( X3 l5 U/ e7 K# l
按键输入
# c5 V: M. i( |1 e
4 ~& p, X5 K8 {3 n* y0 P( K
ADC_Din! R! E" K  Q0 ~- `% D" Y

4 @# K6 Z$ }! ~' W# k5 C19 y- W! n2 N, n+ }& O) {+ I2 P6 L6 a

9 \* u8 Y$ C7 L; o; o2 kADC芯片数据引脚
' o6 @! z% @. V/ f

* A" b+ Q; E/ H+ Y; D+ uADC_Clk
5 ?! c6 O- y6 i
9 y4 C, Z* M9 b% d* B; z
1
+ }' g. d$ B" c; x: V" u

7 t, Y3 I, i7 r) HADC接口时钟
* C& ?6 `6 _, `
$ p1 N% k* v8 I9 z. `% F6 L5 N
ADC_Cs_n9 }6 U  `+ ~, Z, B2 W2 Y# w2 y. B- S

! J3 v) C5 X6 A2 t1% ?9 P8 J4 q- Q
* Q# \9 \' t) T' L7 \, |+ U
ADC芯片片选信号3 t) L- B- o8 T' c2 G8 [3 B
6 F: @5 {, f; q' x( ^
内部信号( k3 r" u4 V" |* C
7 B9 b7 k, ]) u& X* F& P0 ?
位宽
1 \2 `7 ?6 _- d, y( @. R
; U5 g* W/ F) p/ h6 D' H
信号功能描述
1 q# I1 k& M. U- \' y
; y+ g% k* y# C# r1 r
Baud_Set9 t# w8 \1 c4 h1 q9 c0 P" l* F

/ `6 n3 U. Q. j3+ n' B- H  p6 W$ B% A2 d* J( z
* l; }8 P8 G  w8 S2 w  x
波特率选择信号,对应波特率如下:
& H8 ]% s4 W3 X/ w" O; _000: 9600bps
4 ?0 @4 D  ]5 Z8 X* n001: 19200bps
9 {; M5 Z2 z, I; x% h010: 38400bps; w7 c! x( Q9 z. |
011: 57600bps
5 s% L; I  ^2 F. I100: 115200bps1 a3 H& W9 c, v, W% m7 ]
101: 230400bps% s. K4 L- ?- T- f9 {' w
110: 460800bps
8 I# ]4 Y: d0 p2 p- S111: 921600bps
* r& D  X/ {, o. K& T5 N3 C/ f( A# w( c
7 I- n7 C8 r; J: t; s0 M1 W
Rx_Byte# J! ~2 S5 R+ u4 }' y

- _# \! o, L4 A4 v5 `. w/ [8
) N1 q' ^" i6 P- l$ n! v

* Q# I( O: m1 t% {" v5 W& H串口接收到的字节数据5 ^9 }; k4 j4 K% M
0 X: W+ C: O# _/ A
Rx_Int! e5 K1 a9 N2 u# e7 h$ p* Z5 p5 Z" g

( ?7 Z) V3 p2 }+ |6 ?5 ^% K' i1
- G' o* x8 W$ v
% [0 R0 Z* P" N5 U% l/ e; E3 a
串口接收字节成功标志信号,每次接收成功,信号产生一个时钟周期的高脉冲
# D- Z) N8 Z, j; v  I# ]& C
: K+ K  n% B9 B6 E+ K6 ?' j  S
Byte_En. J3 y& o& L7 V# D. u& }( \4 ?% C
' b1 w0 U: V1 p; z) @5 m
1
; C( E' A, l' M0 h
2 u9 D8 T, T" Q# \, I9 @6 T% b
串口字节数据发送使能信号,每一次一个时钟周期的高脉冲使能一次串口字节发送。
' w5 U2 \# U) @

8 p+ ~' ?- l% D% T4 H/ ^* K4 tTx_Done
: F3 q% s& d, ~

. Y; H  F( C( r5 w7 ~% r! X! K1  n9 o5 u+ G) h$ B8 E' L
: p2 X6 U7 b! U1 E) Z7 K
串口发送字节数据完成标志,字节的数据发送完成,信号产生一个时钟周期的高脉冲9 z& W0 \) i% Z% |$ H6 ^/ I
, u& M( F+ M2 E: o
ADC_En
4 g& X5 d; C# F
# U* \. @: H4 e8 |; E4 o
1, t7 u3 U  z1 r6 {/ n! `
5 u/ d; x2 G- P) Z
ADC单次转换使能信号,每一次一个时钟周期的高脉冲使能一次AD转换4 T6 V0 k4 _5 \% P* _
( f# @1 \* \  F5 z" E3 v
ADC_Data
: ]* v, x) R% h
1 G3 x3 t0 k5 U+ P( C$ Z
81 l: n9 C8 c/ i6 s

6 m1 H7 H2 l# R% h7 V/ CADC采样结果: L! A/ s/ u. D2 _6 j9 H8 _8 |

; i7 J; `' w) M" X4 WADC_Flag
/ M6 h! u& o" U8 q; O
3 E& t9 b0 ?6 v
1
4 F( v1 e. w, J1 z$ N: @

6 D6 t6 J: z# g8 X, BADC转换结果有效标志,转换结果有效后,信号产生一个时钟周期的高脉冲9 M" v  {* u; H
0 L) z3 o5 p$ G$ I4 ~+ K$ n5 S
ADC_Busy. r) j# O( J- J8 P, L' y! C* ^

" _, `1 N; y2 X- D$ Z8 x% s3 Z13 q9 {+ Z! G7 h/ P1 m
6 j1 [- R# a) v- z
ADC工作忙标志,高电平表明ADC正处于转换状态,新的转换命令将被忽略,只有当该信号为电平时,外部控制逻辑才可触发新的转换
7 B6 [. D2 L4 C. q6 ?

+ n4 _/ @6 R8 C- {  J: W% c' Pm_wr
; m& H" D1 d2 L. l. V; K' e7 X

; y- G+ s8 E5 d. r5 c: Q2 A# j, O1
/ z2 N% G1 p' g( J+ h# l7 f' p( Y# k

3 P+ t# H" z- N' e) G. {( a主机写数据的请求,1表明有写请求3 O7 U7 t0 h/ ]

' |/ U7 P, B7 @' mm_addr
, u% v6 t; U! E- _
  P- X/ n6 E+ i/ ]
8; [$ d% o+ j2 h

8 P% d6 c* m* p主机写数据的地址
# P. e4 K5 \) O) r- N6 \
" r+ ^) [$ _4 v% W. E5 }5 K
m_wrdata
8 X' V8 \9 B- R! K; X

' z# U/ b6 ?! V1 ^" W4 \16: G4 G2 i! M5 v* L* ]8 I4 t

9 S6 Z$ K# }  I! I1 X0 e主机写数据. `1 R; y0 N8 R5 t) ^$ }; `

4 Q' h, S0 f- p5 C7 p9 c+ RDDS_Data) J; a2 J% L% h. W+ b/ t
2 ^& \/ o3 J. V* q' ~* r1 _
8" G1 P8 C" D1 P3 A
5 d% r; B$ E6 B" |1 k
DDS生成的波形数据; ]7 L4 ]7 ?2 B

! S. J, K3 D+ N* Q* P$ s: v% {DDS_Flag
6 d6 R! y' b; M; B# I4 G/ S( h
( W6 m  E& m0 H$ N7 ~6 i
1
( G9 c/ @' y' C

1 ?* ?& N6 W/ S# Y2 wDDS采样使能标志,该信号由DDS采样速率控制进程产生
: w3 W: r, A- m, o' G2 N' y

! e  s" U  Q0 r* I' A& i- }; Z  mData_Flag
+ |" c3 P, s1 W4 {# ^

& |" h5 B1 V7 u1
6 \+ }/ X1 H3 z+ W4 b* r4 }  E
, \' Z* Q# N) \4 x
数据有效标志(根据用户按键进行选择DDS_Flag ADC_Flag
; ^/ L7 s0 \1 T) U5 g7 c

4 T" a- b. j8 Z9 v# x1 MData_Byte5 f, Q7 e5 a' J2 D! q8 e6 e

/ U1 v# \3 {8 N, C) ~- X8
+ A2 M, r% F# }
0 R% @2 q; m; y( C! m
串口发送字节数据
2 c9 y# v4 k$ x+ N
  ~5 o# l( j* ^& j! |/ Y
Data_Sel
) s( y; {, O4 D6 P8 x# r3 a% y% W

; ]  m$ |' U8 j+ E7 `1
9 T. T2 A7 _' ~5 U' E

0 D; O2 M  A( W* Q3 a, W# S& }5 k数据选择信号(选择串口发送DDS_Data ADC_Data),1选择DDS_Data0选择ADC_Data
& |! A& ~! `) c0 X) y

' B+ h2 n9 c4 i0 g9 {' f, s: yFlag_Sel, F, T+ G4 t0 \+ {! M! z  Q" j

7 }$ U  P, ~5 Q4 }. Q# s& U8 j7 o14 M- E1 ~3 K6 I3 [& y
5 E, I, L+ Y! Y2 ^
数据有效标志信号选择信号(选择DDS_Flag ADC_Flag1选择DDS_ Flag0选择ADC_ Flag$ G9 f' j" |2 F7 Y

6 {% y0 \7 a, f/ d7 WKey_Flag
5 A2 w$ h# O+ }, Q( n+ f

& Q( D( m0 [. C9 K* i4 x3 E19 S: X, m0 S% A& K7 e6 Z
* q: n9 i# r. }! v! k! K
按键检测成功标志信号,每次按键检测成功信号产生一个时钟周期的高脉冲信号6 {" v+ X& ^, F: u9 }2 d1 @# N- B

8 o3 m1 L7 _3 G) F8 @Key_Value( M) s0 W, w7 |4 A7 s# Z
+ U% u) o4 l8 O- i/ {; M
37 [8 W. o4 X) J/ x* n
1 i# G9 ?" R+ s, d; d; |
按键检测结果
. g; J# X  p/ G2 S( W8 U2 S
6 b; C5 v( m$ A
: X7 X' a0 {8 n2 p% |6 t- U4 T( b8 h
6 h6 N  W3 ~0 G! \, p* W
" h& q' v, a/ }7 Z! P+ Q
本实验为综合性实验,代码量较大,因此这里只针对部分代码进行讲解如果文档中没有讲到的内容,大家可以参看代码注释
! Y  m* e) c; H2 D1 H& j4 }- y: l6 E: ?( H3 {7 y) o6 G  R# h

1 J; ]7 m* H4 G  h  c
5 x/ X- U" G* ?

+ X$ m  V1 M+ b6 q+ U5 `  f8 x8 S% q# O/ o$ \0 k6 P
小梅哥
201548日 于至芯科技
" F) q( S1 N0 j5 h, }

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 13:07 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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