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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 Zedd 于 2019-3-30 15:59 编辑 8 ?& R: Y  a; ?0 K  C

, l6 R" i6 o, q- v7 `' w! e1 [7 L
十一、四通道幅频相可调DDS信号发生器

1 _/ z8 ^' f4 s1 I7 j1 G+ V  C
本文由山东大学研友袁卓贡献,特此感谢
实验目标- j5 X5 M7 `) s+ m( T
实现多通道可调信号发生器
( Z( h( _# T- n! H  [+ Q; O实验平台
: [* z0 E: G9 g7 I5 r芯航线FPGA核心板、ADDA模块# z, H3 f2 s1 y4 l: z
2 _/ k  \- p7 K  W& r

4 K% @0 S/ s' I
- x3 N% c; _9 q/ g1 b9 J( z
实验现象& t; y/ J% x! T3 f) C( P3 `! Z
实现基于FPGA的多通道可调信号发生器,其中频率、相位以及幅值均可通过PC端串口发送数据对应调节,并可实现4路信号的同步。4 [8 C8 t- B4 H3 K8 f8 H
实验原理及设计过程
3 Z2 w% j# `  F- ~' ]$ W5 g经过前面小梅哥基础课程的学习,相信已经对FPGA的设计有了一定程度的了解,现在提出一个相对综合的工程应用来深入了解FPGA的设计思路以及工程思想等。" E5 }( f0 ^2 ^1 t/ e$ \
针对以上预期实验现象可以分析出最少需要DDS模块、TLC5620控制模块、串口接收模块以及控制模块。5 ?- }8 U+ b( I. G
DDS原理与实现
$ n# R, T2 n% C( H' t$ v  q( EDDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。% L5 C6 C! m: R% c* f
DDS 的基本结构图如图1所示。$ X3 |1 e2 q( z5 @

* D& E; N/ p4 X% z, q0 ]! s, [
图1 DDS基本结构图
由图1可以看出,DDS主要由相位累加器、相位调制器、波形数据表以及 D/A 转换器构成。
) Q* o4 ]2 a; A- \2 y
其中相位累加器由 N位加法器与N位寄存器构成。每来一个时钟,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。
% M% K! y9 D( _6 S/ D
相位累加器输出的数据就是合成信号的相位。相位累加器的溢出频率,就是 DDS输出的信号频率。用相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形存储器的输出送到 D/A 转换器,由 D/A 转换器将数字信号转换成模拟信号输出。

# _+ V6 z) w$ _7 T/ j
DDS信号流程示意图如图2所示。
1 r2 U4 V* w) k  k* d
# X" m, |! E- K% B7 P

: v  R1 j" m$ O" z; T  r
图2 DDS原理流程图
这里相位累加器位数为N位(N的取值范围实际应用中一般为24~32),相当于把正弦信号在相位上的精度定义为N位,所以其分辨率为
/ Y; F7 u0 \3 x1 o, R

6 t: M7 p. Y1 ^0 |* l5 {/ E
若DDS的时钟频率为
# D1 _* k0 R: c' }# r( t
,频率控制字
fword
为 1,则输出频率为

& ~, }* K" M+ i) p4 _" B
4 L3 r& o3 m7 j: }7 O' `
,这个频率相当于“基频”。若
fword
为 B,则输出频率为
  D8 X5 t; k  f: D: j1 [9 g0 L
, @# z# H% Z# E% ~4 \
2 n6 Z  }- @+ X0 R
因此理论上由以上三个参数就可以得出任意的

3 U% f+ V/ e" I$ T" g9 y
输出频率。且可得出频率分辨率由时钟频率和累加器的位数决定。当参考时钟频率越高,累加器位数越高,输出频率分辨率就越高。
! M7 v+ T& ^0 M* I( c9 J: V+ u
从上式分析可得,当系统输入时钟频率
4 ^6 k8 n. L5 @( P
不变时,输出信号频率由频率控制字
M
所决定,由上式可得:
; [% [1 k5 e  }' S! ?: k

. O" [( l8 c# u, F. K6 x# I
。其中B为频率字且只能取整数。为了合理控制ROM的容量此处选取ROM查询的地址时,可以采用截断式,即只取32位累加器的高M位。这里相位寄存器输出的位数一般取10~16位。

7 f3 }$ Z! K; h- D8 G
在本设计中参考时钟
4 V# ?3 }7 P& P6 |/ ]. c' C
频率为50 MHz,相位累加器位数N取32位,频率控制字位数M 取12位。
) Q1 y- m7 e& u" }6 I' y% t8 J7 p
经过以上的分析,可以得出DDS模块的端口模块图如图3所示。
' X& V# b6 c# w3 O
4 a( g! H: y' [: ]

# O. d6 n" H7 i9 Q% J9 {
图3 DDS模块接口示意图
其中,每个端口的功能描述如表1所示。
$ K! A) i+ c3 L& C. M
( j4 J& M5 @/ A1 u( ~

$ Y9 F% x) z9 p' }. U
表1 DDS模块功能描述
新建DDS_Module.v保存至rtl文件夹下。从图3以及表1就得到了端口列表:0 k7 _; f6 f' j' Y6 F; [

6 _0 j, D0 r' y以下只需按照图1进行编写。相位累加器此处即为一个32bit的加法器。% C: ^8 ]5 _% D  v& A
, q, e) C6 Q) G. t/ Y
查找表地址生成,此处即为12bit的加法器。这里直接截取32位累加器结果中的高12位作为ROM的查询地址,这样产生的误差会对频谱纯度有影响,但是对波形的精度的影响是可以忽略的。, I- c; s0 v* F+ R

+ t5 L1 h4 g2 }* cDA数据输出时钟模块使能,通过选择器来进行控制。- k, _5 c4 D/ ?3 i1 z& {
  o# b2 Q, T% H
现在只需要例化存有波形文件的ROM即可。其中单端口的ROM主要配置数据如图4所示,其初始化文件选为已经生成的正弦mif文件。此处mif位宽为10,深度为4096。
4 L0 n% r' T# o  k& T

2 g" V9 e+ u" M' S% w( C. _% d. o, M; z$ o0 o
图4 ROM主要配置参数
这样例化到DDS_Module中即为如下内容。
. U' @* X' r# b* S

) l, ]4 n: B! M8 P6 k: t本模块编译无误后,点击RTL Viewer后可以看到如图5所示的模块逻辑电路图,可与DDS原理图对比。这里有两个选择器的原因是加了使能端的缘故,如果将使能端去掉即可看到如图6所示的电路8 ~! ?0 ^, b7 Q, i
6 S8 O+ I- i4 {  b4 G  L
' s3 n7 z6 n7 [1 l# p
图5 DDS模块设计逻辑电路图
' |$ _( }9 [: _  E
& o4 D2 j) A4 }
图6 DDS模块简化逻辑电路图
设置此文件为顶层进行功能
仿真
。激励文件中除了产生正常的时钟以及模块例化调用,还需使能模块以及设置自加字。此处简化将Fword设置为固定值’d5000,。

2 K& |* {* @6 d

  Q7 r. R4 w' q. ~# t) E9 n* R编译无误后设置好仿真脚本并进行仿真,可以看到如图7所示的功能仿真波形文件,可以看出波形数据正常。放大仿真开始位置,可以看出输出DA时钟使能设计也正常。初始值为’d511也就是’h1ff,与初始化mif文件一致。7 w3 l- I+ p5 ?4 F) h- A2 _

3 h0 C4 ]$ W" I! o' d  v  @" U) j
图7 DDS模块功能仿真波形

6 J  t2 v0 j- V$ G  X8 V  z9 {. O. k7 r! Q% `# x( `3 G
图8 DDS模块部分放大波形文件
这样一个DDS模块即设计完成,这里可以自行修改Pword的值进行观察波形相位是否发生相应变化。

; X& H" b6 g+ i3 J8 @6 ]
数模转换器(DAC)控制模块设计
. ?) z" @8 E  o0 D
这里采用DAC
芯片
为芯航线AD/DA模块上的TLC5620。其中TLC5620模块的设计与实现在基础课第17讲已经详细阐述,此处不再对本部分进行解释。其模块接口示意图9所示,其接口对应的功能描述如表2所示。
7 J( N6 J" _& g/ V. g7 t% a2 Q9 f; U
, x5 c" F: O* E3 E

4 i- g' L0 K( C; Q% q5 X( h0 i
图9 DA模块端口接口示意图

+ @8 r8 l2 O6 C9 c  @8 o+ f; z. `; n. j
' O3 Q# ]; N) H! s
表2 DA模块接口功能描述
多通道数据输出实现

1 S4 v" {) g6 o
本节需实现的是多通道的信号发生器。而此处的ADDA模块最多支持四通道,这里就要轮询控制各个通道并输入相应的控制字。将此模块命名为DAC_4CH,其模块接口示意图如图10所示。
# \" X/ l7 l) H9 O* ]

! _) V( X* H" B$ S
3 y+ r8 ~$ v, ~# Q
图10 DAC通道选择模块接口示意图
其每个接口功能描述如表3所示。

) M0 Z" ^+ i% J) C* H1 H4 r: n
" D* R- h* r" h- d: P1 Q3 p( C- S

# p3 j  u# _6 g! m5 W
表3 DAC通道选择模块接口功能描述
由以上表分析可知其端口列表如下:
" g3 G: b) o  I) h  K" Z- V# E
3 G; T9 _: b+ ^( |
这里在调用TLC5620时,直接将其转换使能信号UpdateDone信号置1来简化控制。3 p( z7 t  e- Z( l. @! m
  T* F2 \2 ]* \
实现轮询,就是在时钟上升沿到来时,每当一次TLC5620转换完成后,就开始选通下一个通道。7 r; M" Q5 Z9 T9 v6 R
! U- t& Z' N# _. k
在选通对应通道后,DDS产生的数据只需给控制字即可。
( j4 }8 e( b2 F8 X! ?

0 j+ {1 n( F& D5 e: ?! c* b由基础课程可知TLC5620控制字的构成是两位的通道选择字、电压增益选择字以及八位数据位。因此直接采取位拼接方式即可。
4 D; p, ]* Q! K- h, l
; C; M2 T! z7 K& i3 U% m
串口命令接收与解析
) [* G1 S. k+ L% N, |这里使用的串口接收模块波特率为9600,具体实现方式在基础课程的第12讲已经阐述,此处不再详细解释。其模块接口示意图如图11所示,接口对应功能描述如表4所示。
- J0 Y4 K) z( n8 n2 o# L4 b% r9 b  G
/ P; n' R. e  S7 W4 n8 ~) H
, U8 @: E5 A% e, F" Q* a: j( S- ]7 q

5 q4 ^: Q5 W( K+ S- W* X; Y
图11 串口接收模块接口示意图

  F, I9 m- M6 t- ~3 |8 O! K0 s6 D4 f- S4 e, p1 N
表4 串口接收模块接口功能描述
如有更多问题,欢迎加入芯航线 FPGA 技术支持群交流学习:472607506
小梅哥
芯航线
电子
工作室
* R, Y4 u6 _4 V  ^1 d

" R( B: m( i% c
' X1 r# G5 P. _6 X+ H
游客,如果您要查看本帖隐藏内容请回复
. L$ l8 p3 Y& H: z
+ G* O3 A4 a6 i6 y4 A- ^6 W1 W

3 e+ _8 {0 g+ H7 f+ ^5 \. h
, a3 |0 A9 x1 L: S! B$ v0 D. n( N, I# @! y% O% W

2 `" W! q. E; e$ C; i
+ b  a8 ^5 T% h' a6 C: q+ i

; }9 ~1 z( J" S0 F; A  V4 n" n: [

" E8 Q+ y. F0 t" P( _+ l
2 S& @2 i3 d- E$ }7 ]: V

) J' Y7 I1 J) ]- q& i; g

$ a% h$ A+ n6 e3 }$ z3 q: a

: V! g! w* |0 k/ b: p( O

$ L- s' Q9 s" H6 N& j/ J: L

# L+ D+ f: J- u6 \$ ?" H

2 w. \- B6 N8 M# W' l
1 B. u4 V5 d( G
& r2 _" y. |- h
. L" |  \7 Q, P
  i4 x/ g; E) B* j: B# `/ j
7 n- y! C2 u! p
3 S1 H, O) I/ W6 Z( E" [$ c8 Z
+ n# F7 r9 M/ B) q5 N+ ]  E' _1 g  {8 B

, v; o, m9 Q8 E# M' H4 ?
/ \4 ?6 B' j0 S7 b4 ~& [; q
' W* w9 r; A0 K5 m
1 o: q$ q7 l2 `

3 N+ r) [8 V5 i  z: p8 j5 T6 B4 i

, k9 X% n* q" p6 S# g
" ^# b) m* L8 T) R& R

" \6 _2 O3 t- Z! I
- e3 t! M' v1 d6 m# c

6 Z6 Y" B+ g7 N5 u) ?/ O  N) [2 y  w1 u8 A7 {8 k4 M( Z* U
" n1 I1 V  V; W

. A) B) b9 b; Y5 w2 r. I& S! b% {7 ~/ T6 s( K- h/ q
; C7 P3 {/ A) ^) B, `

1 r6 w* }, e7 t9 A  f3 t+ j9 F7 O" V- m* F

" j3 F4 ~, h- _+ {' P3 H7 p7 F- C
6 o! E0 g! a7 k! q4 c( l( i
1 M2 X+ P: r; l2 o3 L

( O! y, `0 T7 k% K+ v$ X+ t

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-30 01:22 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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