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

转——【小梅哥FPGA进阶教程】第十一章 四通道幅频相可调DDS信号发生器 上

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Zedd 于 2019-3-30 15:59 编辑 9 `1 _, C& M3 @% H

& }- k/ f+ W* Q( Q" f( @7 G3 f
十一、四通道幅频相可调DDS信号发生器
+ Y( n7 W/ P9 v* J* |8 z* x
本文由山东大学研友袁卓贡献,特此感谢
实验目标
. q' g& m1 ]' b- q5 V实现多通道可调信号发生器
. V$ M4 X  Q! o5 w1 s+ `实验平台
4 e4 E4 k' a* F芯航线FPGA核心板、ADDA模块3 X3 ^7 ]; b2 L+ `
# U  M9 Y0 V% f+ w- L
9 d& C  Y" k; h2 A. v) w2 x
6 V; J* _2 ]0 q% E
实验现象. {( h5 `3 A) q  @0 t* H
实现基于FPGA的多通道可调信号发生器,其中频率、相位以及幅值均可通过PC端串口发送数据对应调节,并可实现4路信号的同步。2 g0 w/ m- `- P' S. h. A: s% t
实验原理及设计过程
5 v+ X+ V6 C% y( Y) F- F3 e/ X经过前面小梅哥基础课程的学习,相信已经对FPGA的设计有了一定程度的了解,现在提出一个相对综合的工程应用来深入了解FPGA的设计思路以及工程思想等。3 M& J( j) I4 g; Z# w
针对以上预期实验现象可以分析出最少需要DDS模块、TLC5620控制模块、串口接收模块以及控制模块。$ X' u2 e$ j  n' [4 A' c, y$ C
DDS原理与实现- c$ P' p4 c' K% v( R6 E) a+ Z
DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。" M7 H1 A1 E" L. q
DDS 的基本结构图如图1所示。
7 Z- q5 U" K2 ?" R" g

# o+ i0 O4 m% a8 G1 \- A: A
3 ^8 N6 X( E% W+ X& J8 B* a  p4 s
图1 DDS基本结构图
由图1可以看出,DDS主要由相位累加器、相位调制器、波形数据表以及 D/A 转换器构成。

# }1 v) f5 D& H. z
其中相位累加器由 N位加法器与N位寄存器构成。每来一个时钟,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。

7 S& ?5 ]2 A. n% C9 a
相位累加器输出的数据就是合成信号的相位。相位累加器的溢出频率,就是 DDS输出的信号频率。用相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形存储器的输出送到 D/A 转换器,由 D/A 转换器将数字信号转换成模拟信号输出。
' Q, P2 l6 k9 c2 Z+ r, [' N2 p
DDS信号流程示意图如图2所示。
, ^! N  T# a( `: f4 i$ g3 O% E$ S
0 Y' l: Y  [0 e" C8 y6 M
5 N! J* M( Q" k
图2 DDS原理流程图
这里相位累加器位数为N位(N的取值范围实际应用中一般为24~32),相当于把正弦信号在相位上的精度定义为N位,所以其分辨率为

7 u) p7 d8 Z: l  F: I+ n

7 Z5 x0 Q! n9 `
若DDS的时钟频率为

! d, n: T+ Z' ]7 h1 R2 @& u
,频率控制字
fword
为 1,则输出频率为

; o% F# S  J8 B! z2 X4 Z
  `3 {  b1 u2 ?2 H9 L
,这个频率相当于“基频”。若
fword
为 B,则输出频率为
  \2 `9 ~3 S$ n$ [

% k) y& ]1 q* z0 I+ ]

; N) K; Q0 ^  ]( v! f3 v
因此理论上由以上三个参数就可以得出任意的
4 y' U' i6 P1 _
输出频率。且可得出频率分辨率由时钟频率和累加器的位数决定。当参考时钟频率越高,累加器位数越高,输出频率分辨率就越高。

# U8 C' ]" ^" W8 ?- W/ \  A
从上式分析可得,当系统输入时钟频率

1 ]/ ?' j  Q) w, n- w
不变时,输出信号频率由频率控制字
M
所决定,由上式可得:

  k" \2 O8 k( a

6 t9 e; i. n- H8 T0 M! R* F
。其中B为频率字且只能取整数。为了合理控制ROM的容量此处选取ROM查询的地址时,可以采用截断式,即只取32位累加器的高M位。这里相位寄存器输出的位数一般取10~16位。
% @2 S5 C1 w- d  C4 T* r9 J3 w$ G
在本设计中参考时钟
  e% w5 ]4 {' {4 Q* O
频率为50 MHz,相位累加器位数N取32位,频率控制字位数M 取12位。
: R+ V7 w5 M( B2 h/ {; L
经过以上的分析,可以得出DDS模块的端口模块图如图3所示。
7 t- ]5 n$ q/ x; S" E! c5 _

; _7 ^8 _' Z* N/ E  t2 |# W: ^8 i/ u
图3 DDS模块接口示意图
其中,每个端口的功能描述如表1所示。

) E, e2 ^- ]+ \4 _! o

/ Z* m/ J9 m( d7 p% u9 }5 {7 z. z/ J
* b0 h, Y: C. I  r" \+ C! t
表1 DDS模块功能描述
新建DDS_Module.v保存至rtl文件夹下。从图3以及表1就得到了端口列表:
  j6 f- b6 Z" B* G

. ^3 Z8 R7 T' u9 [. Z( q以下只需按照图1进行编写。相位累加器此处即为一个32bit的加法器。; O4 ]  G$ `6 V- D7 P' p

5 n% m3 }9 ?. t4 ^, m查找表地址生成,此处即为12bit的加法器。这里直接截取32位累加器结果中的高12位作为ROM的查询地址,这样产生的误差会对频谱纯度有影响,但是对波形的精度的影响是可以忽略的。
7 B' H7 G' a+ @& u( v

' j2 r9 [0 s) {4 N( nDA数据输出时钟模块使能,通过选择器来进行控制。1 Q: ^/ \+ }* ^1 I
2 O0 M( s. |: ~* c
现在只需要例化存有波形文件的ROM即可。其中单端口的ROM主要配置数据如图4所示,其初始化文件选为已经生成的正弦mif文件。此处mif位宽为10,深度为4096。! |, M0 F' ~. _5 p
1 ~4 |$ O% e1 t, k! Q; j6 {
! k; M/ u6 B9 H) J2 }5 h
图4 ROM主要配置参数
这样例化到DDS_Module中即为如下内容。
/ b0 ?0 Q8 p3 l2 B5 b& H

6 M, ^% R; N6 d0 ?& W本模块编译无误后,点击RTL Viewer后可以看到如图5所示的模块逻辑电路图,可与DDS原理图对比。这里有两个选择器的原因是加了使能端的缘故,如果将使能端去掉即可看到如图6所示的电路
4 {5 S5 m& L) `: [

8 y! _9 ~' `# I+ B6 ]
- D# p* N9 z+ u" h, M# h
图5 DDS模块设计逻辑电路图

/ y2 w, x% I8 C7 _+ L$ ?3 W4 d+ w2 @9 E1 b6 E  i' z
图6 DDS模块简化逻辑电路图
设置此文件为顶层进行功能
仿真
。激励文件中除了产生正常的时钟以及模块例化调用,还需使能模块以及设置自加字。此处简化将Fword设置为固定值’d5000,。

/ U5 I$ r! k# b# K* A) S' I2 X

! r" S6 R0 s; {. [编译无误后设置好仿真脚本并进行仿真,可以看到如图7所示的功能仿真波形文件,可以看出波形数据正常。放大仿真开始位置,可以看出输出DA时钟使能设计也正常。初始值为’d511也就是’h1ff,与初始化mif文件一致。" F: C, ]  b' L% ]
* L$ p9 B/ s- T3 p- w4 i

. P5 @) f; T6 h: d* @  X
图7 DDS模块功能仿真波形

! K4 i. a/ }" x. |, W) |. ~0 h, Q3 k- W+ Y0 U
图8 DDS模块部分放大波形文件
这样一个DDS模块即设计完成,这里可以自行修改Pword的值进行观察波形相位是否发生相应变化。
0 Q. I& J/ n; B7 K9 R( P
数模转换器(DAC)控制模块设计

# a! Z4 k0 X( Z+ `
这里采用DAC
芯片
为芯航线AD/DA模块上的TLC5620。其中TLC5620模块的设计与实现在基础课第17讲已经详细阐述,此处不再对本部分进行解释。其模块接口示意图9所示,其接口对应的功能描述如表2所示。
; ^& l$ V" }( N" @/ Y3 C
) C3 {! _# k2 n4 U* a- o, c. u: G

  Z. l; g# J' C: p: i
图9 DA模块端口接口示意图
+ v2 K, l: S! b
" q* p( ^6 O- E1 w: I% g2 s
表2 DA模块接口功能描述
多通道数据输出实现
0 Q# t# B2 y5 M* q
本节需实现的是多通道的信号发生器。而此处的ADDA模块最多支持四通道,这里就要轮询控制各个通道并输入相应的控制字。将此模块命名为DAC_4CH,其模块接口示意图如图10所示。

/ U5 P2 O7 ]' V0 J, v) D1 X

' w+ f" C4 [& W
: H- P1 n% M6 h* g7 b
图10 DAC通道选择模块接口示意图
其每个接口功能描述如表3所示。
, r3 B+ E% J; n2 g9 k7 ^- O; M2 d! \; L

% `1 S+ u- l* s9 N. f8 X3 M% X' j+ m# K
表3 DAC通道选择模块接口功能描述
由以上表分析可知其端口列表如下:
4 R+ [1 A. q' x' W, B0 ~2 e

4 ?5 Y" Q$ O' n4 h' q' D. l这里在调用TLC5620时,直接将其转换使能信号UpdateDone信号置1来简化控制。
3 j' a* [7 ~# T1 D; X

+ U( [7 ?" N' F实现轮询,就是在时钟上升沿到来时,每当一次TLC5620转换完成后,就开始选通下一个通道。
! i  I  J6 e  ]4 X
; ^% i# W4 k0 ^1 b
在选通对应通道后,DDS产生的数据只需给控制字即可。8 i# i% }2 W" _8 x9 d

+ w1 I2 W" P- \7 r, x+ E( y由基础课程可知TLC5620控制字的构成是两位的通道选择字、电压增益选择字以及八位数据位。因此直接采取位拼接方式即可。$ G- _- W* N' _9 Z8 B
, b4 U+ [( W$ R5 c! I  Z" D
串口命令接收与解析
5 W, ?5 ?& \9 O5 I" A( N1 v这里使用的串口接收模块波特率为9600,具体实现方式在基础课程的第12讲已经阐述,此处不再详细解释。其模块接口示意图如图11所示,接口对应功能描述如表4所示。5 }$ S/ b( k) a0 j3 r

  M6 I- B8 c; ^. w5 _5 Z

: b0 q" u* i+ \! h! Q! z
, r: K- H6 Z5 y" D
图11 串口接收模块接口示意图
: A. z6 T3 ]; a  [: L5 c/ p. n' _' s

' f4 R' G  v3 }& e" v  E$ \% C7 x
表4 串口接收模块接口功能描述
如有更多问题,欢迎加入芯航线 FPGA 技术支持群交流学习:472607506
小梅哥
芯航线
电子
工作室

. Y, I5 T* J& d% r7 z

- V0 Y% |0 U9 Q. h1 }& c( _- B
( e) Z1 b/ |2 c! O3 `; I8 i# w
游客,如果您要查看本帖隐藏内容请回复

. |, Z2 |! u# [( |6 e+ j5 o

5 D4 X6 m  q* q+ k3 Y: ?) |& E% u

0 [5 e. t2 [' q: ^: P9 O2 V/ A2 ?* K" U& X

# q; `" X' L* j3 V& }
* @. Q  Z4 V1 v" P+ I; K4 a* s' q( [  [% s0 M

$ L0 k5 k7 Z/ b; e9 P

2 n7 n% K: G7 Q) y. ^4 a1 E

' `5 B" Y# D: `( w+ J( U

: G' p# _: [1 F" c9 W4 ?
8 z: O& U. o2 N; [# s5 D8 v
( a3 b, O0 ^* T7 i0 a, p

+ ~. s9 p3 u* ^: {. ^9 w
, W* C; K8 Y! s" S
# \' O+ \; y5 Q7 Q4 F
1 y6 b% H# v) T: s  ]

" O5 E) r; ?! D/ P' ?7 _

" W1 d# f" j/ s

/ b$ `0 H6 j( A+ X6 U' R- i6 c

' ~" o+ r: q/ Q9 U$ [1 _" g

  R6 B" }) {! a' e4 z, o7 z& v
9 ], F5 {. l) V; u5 O

) f5 F. ]5 K! e$ f# Y& V( h" t! G
2 c4 R# F. j/ i  ]4 A; v
5 j" K3 y7 h1 O' o: G7 h6 B

- P6 }; ~6 U, t. _5 U
. e9 M1 `8 P+ f( `
( q* ^+ x3 F& m) Q
& Q0 u3 v" v6 t# E1 e
- }( N1 l# q5 K+ a+ l4 H

4 h- R/ b3 A( h/ w1 p% ?  v0 n: {9 B4 w) S! q

9 V) w# Q+ J; q3 @1 T
* G# s% D: y! K$ H: F3 `4 {; C$ j" x& M# t* ^$ E3 w7 {# G1 |5 a# z

/ M2 w3 j' S: n2 }0 ]1 }
4 Y" O6 T& w' |' V* r1 A6 f& P7 f, v  R
0 B- b/ S7 h! |; E

2 s, ]" W' J. M' D7 @. Q4 x3 ]2 z
9 T0 |  U, h( H9 ~* l+ o

! k% e8 B% R. y2 M

' z% W' M6 K1 W6 s

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 20:43 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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