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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Zedd 于 2019-3-30 15:59 编辑 * y  i' K1 F: L. ?' P

9 H% |: Y" z5 V6 u/ @) u  d9 J
十一、四通道幅频相可调DDS信号发生器

" f$ y% i& s  P, W  k" I! d
本文由山东大学研友袁卓贡献,特此感谢
实验目标
3 q/ ^. ?1 b+ q9 O* O实现多通道可调信号发生器
5 g0 e$ G; A6 o( Z2 m% ]% Q, a实验平台
; l; l2 b6 f- B' ?芯航线FPGA核心板、ADDA模块3 I, O6 r/ g& V) S
8 R/ M) u+ f$ ]4 \- L

6 ~7 X" [( t) Q& d" o* g+ n4 T
2 o/ i0 H: A8 ]
实验现象9 z5 f: g1 J3 j5 w7 @$ C: ~
实现基于FPGA的多通道可调信号发生器,其中频率、相位以及幅值均可通过PC端串口发送数据对应调节,并可实现4路信号的同步。
+ \9 Y' F# a! L. j9 }实验原理及设计过程% n' Y. q4 A0 P& l; t& \& N; s
经过前面小梅哥基础课程的学习,相信已经对FPGA的设计有了一定程度的了解,现在提出一个相对综合的工程应用来深入了解FPGA的设计思路以及工程思想等。
7 Y) T( V. S. |# m) [" }针对以上预期实验现象可以分析出最少需要DDS模块、TLC5620控制模块、串口接收模块以及控制模块。* b/ f( K, w  s( r
DDS原理与实现- N  m: C. K# H+ U" M8 R; [
DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。% }8 u7 Z' s" @- o; L( `( a
DDS 的基本结构图如图1所示。. j  R0 v% T/ ^% b7 H8 Z( \

3 Q" ?8 l+ Y7 q% s1 B" m
& N) u" V6 W2 K) L' d
图1 DDS基本结构图
由图1可以看出,DDS主要由相位累加器、相位调制器、波形数据表以及 D/A 转换器构成。

8 X7 N  A; d0 @+ I/ o7 X
其中相位累加器由 N位加法器与N位寄存器构成。每来一个时钟,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。
( Q. I5 ^; S, z6 C2 r$ D
相位累加器输出的数据就是合成信号的相位。相位累加器的溢出频率,就是 DDS输出的信号频率。用相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形存储器的输出送到 D/A 转换器,由 D/A 转换器将数字信号转换成模拟信号输出。

, V0 N% D8 U1 B4 L5 [$ F
DDS信号流程示意图如图2所示。
' b6 q! W! m6 _9 P" O1 q+ [
! |8 G; z" N; x2 g( v5 q# t) D
" Y( l! i* {1 l& P6 x0 Q2 }
图2 DDS原理流程图
这里相位累加器位数为N位(N的取值范围实际应用中一般为24~32),相当于把正弦信号在相位上的精度定义为N位,所以其分辨率为

6 m" g* e. r/ a

/ u% t: K* Q% G: a+ w4 I  f
若DDS的时钟频率为

- s  O& ]2 \6 v1 `# U) F* x( i
,频率控制字
fword
为 1,则输出频率为

: _: F* U1 i  y0 W

! t; |% M; z2 r9 G9 m
,这个频率相当于“基频”。若
fword
为 B,则输出频率为

+ N9 O( J) S4 Q* g: @, d& X# K* d

+ `9 u# N7 e1 R" X
2 w/ b. @. n/ y+ U5 v, w$ g4 R* X
因此理论上由以上三个参数就可以得出任意的

/ f+ q5 X  X* j$ Y+ P/ ^6 h
输出频率。且可得出频率分辨率由时钟频率和累加器的位数决定。当参考时钟频率越高,累加器位数越高,输出频率分辨率就越高。

( C( V1 e6 e7 w; u( H/ N
从上式分析可得,当系统输入时钟频率

1 S; K& l  t5 a7 f
不变时,输出信号频率由频率控制字
M
所决定,由上式可得:
$ \/ b& S( k! R- G. ^% W5 r

1 V1 |- C2 K# H
。其中B为频率字且只能取整数。为了合理控制ROM的容量此处选取ROM查询的地址时,可以采用截断式,即只取32位累加器的高M位。这里相位寄存器输出的位数一般取10~16位。
0 p0 G+ A3 a! ?/ N, o: G
在本设计中参考时钟

7 l% u, x" m( `" l+ @# ^8 X" D, N
频率为50 MHz,相位累加器位数N取32位,频率控制字位数M 取12位。

7 c3 @; D7 y) \
经过以上的分析,可以得出DDS模块的端口模块图如图3所示。

% f# \' ?( s" ^5 w- n& H

8 k0 u; x8 F; z: p5 n5 B$ Y! w  j; }" I3 ^6 j# `
图3 DDS模块接口示意图
其中,每个端口的功能描述如表1所示。

, J6 \& `& Q3 A0 o
5 M( N+ t9 g, d4 I7 O

" ~1 E) d8 z  X7 d3 a/ p% u
表1 DDS模块功能描述
新建DDS_Module.v保存至rtl文件夹下。从图3以及表1就得到了端口列表:
( S# Y3 L0 @5 X4 n3 A4 R
2 B/ S5 M. M7 `
以下只需按照图1进行编写。相位累加器此处即为一个32bit的加法器。9 p0 Q/ v# a" X- [" Z
- Q' S4 u! K* q) g0 z
查找表地址生成,此处即为12bit的加法器。这里直接截取32位累加器结果中的高12位作为ROM的查询地址,这样产生的误差会对频谱纯度有影响,但是对波形的精度的影响是可以忽略的。0 E& j: T( Y9 Y) _$ F# c
! A4 l: M$ M/ |  p7 Q
DA数据输出时钟模块使能,通过选择器来进行控制。; `+ a; J7 p# F
" @9 w+ S2 w$ U" }
现在只需要例化存有波形文件的ROM即可。其中单端口的ROM主要配置数据如图4所示,其初始化文件选为已经生成的正弦mif文件。此处mif位宽为10,深度为4096。
3 R4 d: e1 Q2 V1 h8 y* F

  p- D! g& W  e  K( v1 b0 K' d3 Y9 B, a
图4 ROM主要配置参数
这样例化到DDS_Module中即为如下内容。

$ m2 ], z9 v% t

) n. W6 n& e# V$ g( s+ a/ z5 X本模块编译无误后,点击RTL Viewer后可以看到如图5所示的模块逻辑电路图,可与DDS原理图对比。这里有两个选择器的原因是加了使能端的缘故,如果将使能端去掉即可看到如图6所示的电路# Z' f) r. U% p
: i5 y$ g! G6 ?7 e8 N7 j! x5 g
2 k5 f& _; K. l% S# Z: F
图5 DDS模块设计逻辑电路图
, K* t4 N% h8 T( t1 s
/ u2 Z4 |8 A& F' V4 P7 d/ v, y
图6 DDS模块简化逻辑电路图
设置此文件为顶层进行功能
仿真
。激励文件中除了产生正常的时钟以及模块例化调用,还需使能模块以及设置自加字。此处简化将Fword设置为固定值’d5000,。
. L7 s  F; c3 E  t. x) N1 e

6 O6 f6 h' d6 {/ K编译无误后设置好仿真脚本并进行仿真,可以看到如图7所示的功能仿真波形文件,可以看出波形数据正常。放大仿真开始位置,可以看出输出DA时钟使能设计也正常。初始值为’d511也就是’h1ff,与初始化mif文件一致。0 v: V. x: o8 t4 U) Y; E
/ _( s8 q- W. M: u+ ]5 {8 S

  {4 w' r. w6 f* w* z
图7 DDS模块功能仿真波形
! F% f2 ~& ^" \6 ?/ z6 K" Y3 }

5 U+ X! a9 j, S
图8 DDS模块部分放大波形文件
这样一个DDS模块即设计完成,这里可以自行修改Pword的值进行观察波形相位是否发生相应变化。

3 J. p6 Z! W3 i
数模转换器(DAC)控制模块设计
' D( c2 m0 }! I
这里采用DAC
芯片
为芯航线AD/DA模块上的TLC5620。其中TLC5620模块的设计与实现在基础课第17讲已经详细阐述,此处不再对本部分进行解释。其模块接口示意图9所示,其接口对应的功能描述如表2所示。

! p8 P) F. C( n0 P' I  D: j
8 @% y& I5 b/ M2 {
3 z/ s% \( i' c- O; Y8 V# u' J
图9 DA模块端口接口示意图
. c/ m3 L( M& ]( ]- M

( M8 Q  r; e3 ]& g! C8 `8 l" U+ W" e
表2 DA模块接口功能描述
多通道数据输出实现
- R3 `2 n9 K8 Y' V* \* ~
本节需实现的是多通道的信号发生器。而此处的ADDA模块最多支持四通道,这里就要轮询控制各个通道并输入相应的控制字。将此模块命名为DAC_4CH,其模块接口示意图如图10所示。

) [* Z% u, R. V  l

' B7 z+ X. r0 z( E# [0 H
9 z, K' {) M& d3 N0 r  p% w
图10 DAC通道选择模块接口示意图
其每个接口功能描述如表3所示。

5 Q0 ?3 X3 I4 j" @8 W3 I8 U1 v3 d, o

: @; P3 E  Y- W  {  ~
% D+ Q3 t, V4 h
表3 DAC通道选择模块接口功能描述
由以上表分析可知其端口列表如下:
1 ^* W3 j& Z3 b
; J- h  r3 E+ Q+ r: w5 N7 a: {- p) j* L
这里在调用TLC5620时,直接将其转换使能信号UpdateDone信号置1来简化控制。4 U4 N2 Y( Q3 \" O) S

0 G+ D' r4 z9 i- }实现轮询,就是在时钟上升沿到来时,每当一次TLC5620转换完成后,就开始选通下一个通道。
4 G  B1 E8 s6 h8 y& p( c
: S7 k2 u* B4 V) p' d
在选通对应通道后,DDS产生的数据只需给控制字即可。0 ^9 d$ ]$ S8 b! ?1 m8 f
- B- r; S: g8 u! [7 L
由基础课程可知TLC5620控制字的构成是两位的通道选择字、电压增益选择字以及八位数据位。因此直接采取位拼接方式即可。1 c. \  z' Y$ C& S+ S5 D/ G" h
; i! ?( U' l! m/ Y* v& J) I/ K8 |
串口命令接收与解析
5 }" M4 R  [+ k* I+ S这里使用的串口接收模块波特率为9600,具体实现方式在基础课程的第12讲已经阐述,此处不再详细解释。其模块接口示意图如图11所示,接口对应功能描述如表4所示。3 h0 ]: y. m2 L( Z$ n1 M* h

# u( T! t) R! Y$ s2 d. p( j

1 Z6 O, w3 w6 f; u: M+ b
' J* D7 I4 h0 K9 ~
图11 串口接收模块接口示意图
0 u, O8 j& K9 H5 X8 t. |
) Z& P) @# ]4 m+ j) [
表4 串口接收模块接口功能描述
如有更多问题,欢迎加入芯航线 FPGA 技术支持群交流学习:472607506
小梅哥
芯航线
电子
工作室

; k1 Z9 w' I! k; O# {4 d
& z, M* r6 J8 x" c

7 S* I* r' q  W& N! r
游客,如果您要查看本帖隐藏内容请回复

. e$ \0 ^& A, d& ]- d; X
4 L) G; ^- l6 T" i
2 U5 {6 L  g* b$ r$ R8 I
4 N  c  s# ]3 _. k/ P! x% G
6 ]! m! }- T, V# l
- v  a, _2 G- F1 K+ N

3 P9 o3 @6 E' ^! f4 w3 K9 n
) }$ w  L+ g, e1 y  p' B1 z2 u
. A" W! X5 `3 D* I) H, D2 a0 W
, ~! P4 V, g* j' F8 T
. R! z& h0 @$ j2 f& t
, r: W' m  E8 D' w9 S5 Q- C3 l6 `

6 g9 ~7 ?9 a: \' h! [1 R" z
/ o2 [0 r4 o& {" l9 L$ R$ {/ z
8 ~! G8 H! Z' k
) u5 w8 T& X: z8 L

' |- _. ]+ L0 t' Z$ D0 _# k, \

' p6 n7 y- h# q! Z
% l" ?9 m: N! Q

8 X/ G$ {; i6 c) K3 C. N
% E  \! p1 b1 b, o  \
' L- S( r6 H& N. B+ R

/ \2 K9 N& {/ k+ s) P; f, Z

+ _; a2 ]9 l/ V4 Q, H5 g

, k' T+ i$ R- Q. k4 U/ e
3 b5 Z0 l( ^! B: z
# E& D7 R' y% b# G' X6 _& H$ w
2 H' i/ c7 `- {- q; |& C. m- p
# k# t! P8 z- c& F+ c8 z3 G
: {# V7 A7 g0 |, V6 M4 I
( r. V& n, l, b/ C

, T( _( _7 e6 v/ b6 D
( t! [& B, d& Q1 T1 k4 H8 b& b( b9 [- x% W% V% @7 t3 m) S# W
" ]3 R' E7 l6 C6 C- N0 \+ Y3 W2 E
" n8 I! `: N5 C
& }0 C1 c/ n' R1 d7 o
7 b- l, x! G  {) `7 }. _
" v! \! D" x& t9 |3 S

; T# S. s* [# a& J+ ^

$ o+ j7 C6 V2 `% n' S7 y
2 u( w' p) w0 ^

' }" d4 T, H1 o5 T7 B& \4 t: ~

. y4 B9 D$ f9 ^' A0 z

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-29 03:41 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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