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

基于fpga的信号发生器和DA转换

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于FPGA的信号发生器和DA转换

$ [0 p" ~& v) U- E* _# R8 ~% |) q6 a3 u
3设计实现
3.1顶层接口
新建目录:D:\mdy_book\dds_da。在该目录中,新建一个名为dds_da.v的文件,并用GVIM打开,开始编写代码。
我们要实现的功能,概括起来就是FPGA产生控制AD9709,让其中的通道A产生正弦波所对应的电压。为了控制AD9709的通道A,就需要控制AD9709的MODE、SLEEP、CLK1、WRT1、DB7~0P1管脚。根据设计目标的要求,整个工程需要以下信号
1.使用clk连接到晶振,表示50M时钟的输入。
2.使用rst_n连接到按键,表示复位信号。
3.使用DAC_mode信号连接到AD9709的MODE管脚,用来控制其工作模式。
4.使用dac_sleep信号连接到AD9709的SLEEP管脚,用来控制其睡眠模式。
5.使用dac_clka信号连接到AD9709的CLK1管脚,用来控制通道A的时钟。
6.使用dac_wra信号连接到AD9709的WRT1管脚,用来控制通道A的写使能。
7.使用8位信号dac_da连接到AD9709的DB7~0P1管脚,用来控制通道A的写数据。
综上所述,我们这个工程需要7个信号,时钟clk,复位rst_n,dac_mode、dac_sleep、dac_clka、dac_wra和dac_da,其中dac_da是8位信号,其他都是1位信号。下面表格表示了硬件电路图的连接关系。
器件0 Z- n) a5 T  K! g/ T7 t8 s
AD9709管脚
) @' ]! {9 p( A' u# h4 l$ Q
原理图信号3 Q  N) \$ |/ X' z
FPGA管脚
9 }1 s/ @; w, R
FPGA工程信号: i) f- M% S% V' [* r
U8
6 D+ a# W+ X- n' N+ }9 ?5 t
MODE2 h, p5 v. ?3 X' @7 |1 E
DAC_MODE( j% [* L9 L* D# d+ j* e
Y4
) X0 O4 V) Z$ j+ @8 \8 \8 R
dac_mode
/ y: E6 b; J* T
SLEEP% U4 [" ?, X6 L6 I2 P- T3 m; |
DAC_SLEEP: @* K; A/ b9 O
H28 m  X% V( R$ ^! {/ j
dac_sleep
7 y8 Q$ w+ c2 Q$ B  w) P* Z
CLK1( W6 T' c( b& S) T/ E; ]
DA_CLKA
2 K+ M4 W, c  Q0 L8 _) z
R2& R# H. ]; M9 T; L# w5 Y& Y
dac_clka
; F& I' f5 s0 N7 z* U
WRT1
/ u3 C4 \& q  l$ g6 B
DA_WRA
" j) T& [) f( o
U1
9 c( o! o! x& Y6 Q/ [! b1 F0 f
dac_wra
( D5 ~$ g3 N& u- r6 O
DB7P1
' U6 A: |7 I7 C
DAC_DA7
; p5 T8 M* }" \! k4 ]! H
AA18 Q0 W$ d1 N/ z0 Y
dac_da[7]2 C* J, p* N: O, V" [: `! z. t
DB6P13 N3 s2 W1 f4 B# a
DAC_DA6* I5 U: z% R( w+ m4 C
Y2
9 F  X6 V6 e: O" N/ T
dac_da[6]( n# h) t9 A/ o5 |1 U: u8 S
DB5P1
8 D9 d7 C5 ~# i5 l$ ~
DAC_DA5
! B5 B, W5 p, D$ g! G; H# Q' K
Y1
$ m8 A; W8 g8 V" o) q, y
dac_da[5]
$ O0 W6 n" Q4 i3 Z  i* r
DB4P1
! I4 U4 j' c; V; B5 }
DAC_DA4" w9 e1 b2 f" E( Z2 A0 O( j) T1 t
W24 C7 c, w9 P7 _. P" ~. k
dac_da[4]+ j* N0 V( l% r- {. ]
DB3P1' t9 B1 U, z6 @) z( ?2 k# P- d
DAC_DA3
$ W1 R" i  Y9 L# Y$ t: c) L
W1
8 A: a9 j& {/ Y: o' B& ~; D
dac_da[3]! y$ G; N5 t7 e
DB2P1
% `; M: ]/ |! V. P8 Y$ T9 f8 I
DAC_DA2; d& A+ S) Q7 t- h1 m- z$ @9 a
V2, y! Z; K2 V0 Q' \! h& V/ T6 Q
dac_da[2]  [' b2 O: o) ~! X+ [& X
DB1P1
- u) t$ [9 u2 ]& X
DAC_DA1
  L! {) e! X& ?) \
V1
4 V$ ~1 p" `$ C* @: P* f; c# F  U( r
dac_da[1]
4 l9 P8 n4 D& _
DB0P1* u. l: l/ ^$ H! }
DAC_DA0
8 Z! U4 w# d; ?' ~8 ?2 T
U2
6 n8 ]6 I, m" B" {
dac_da[0]1 c) j1 G+ V5 ?! w  d3 M+ N8 n1 O# F
CLK22 T% F; b! Q( x: W
DA_CLKB
) u' Y4 @: R3 M' k, F1 W$ v) ?7 d
R1
( |6 M5 j* _' z3 N
7 B; W# ~6 }' x" w% G) A
WRT29 ]# e; K; c4 d" s' {; x
DA_WRB
" V3 M, d* k6 N2 M
P2
4 ?& x/ h4 y- C/ }
8 |5 l& n8 \& O
DB7P2
" |2 @; ?( A( s( x( v- }
DAC_DB7* E% E" K; K$ L% g# ?
P1
4 w5 g6 y3 \, V! ?

, |1 t- V/ N+ u" ]4 B6 a
DB6P2
. o& [" V+ j; @; u+ n
DAC_DB6
7 Y# ~& |7 s! {( w( y
N24 A9 `$ F' k) w5 J

; g3 ^3 K) m9 ?2 }3 }' S
DB5P2
  z# }, X/ j+ H) {( N7 u' A
DAC_DB56 q/ d" H  f0 j+ e
N1
9 m+ r2 I3 S: M) O4 e2 U: R: s. E$ V
8 Z, d/ k2 d0 f+ T0 C) }8 R9 x% b
DB4P2
! D/ c$ U3 C4 \. V  ]
DAC_DB4) ~, v- p  B+ s4 S9 |
M2
, L. H" D' Z) r7 Q1 D

9 S* b6 s) U& @6 W( j( n
DB3P26 k% x/ ]" G- h1 i
DAC_DB3
4 I( w+ n' e  B: R  E+ _
M1! [. K1 ]7 C3 W" X. Y8 Z) v

+ d7 T# K5 J$ S' N) b7 J* ~
DB2P2' ?4 t; K  n' F( @8 A$ l. O9 a0 ]
DAC_DB2
; p( I5 F6 j1 N0 O. l2 _& F
J1" H8 T, Q) {  Z( P7 [% p
$ r% {$ _8 s0 ^4 n. L
DB1P2
1 o4 Z3 m7 I% J* M
DAC_DB1% l0 a7 ], L3 f6 ~% A
J2
" N4 z0 q3 C" M  w# I& ~
7 g5 k! F0 ^" r" }/ N3 Z
DB0P2
2 k2 X3 V$ c1 e* d- F3 r
DAC_DB05 T6 G6 @& |/ k- Y6 z
H1
* L; J" i# d$ }/ D5 m8 a
4 A6 F5 o( V/ W' K/ B/ ~+ u
X1. S% g. P# z) X0 h
, m& K# F; E" {' m2 S' p
SYS_CLK
0 j5 Q7 H- c1 F4 z# D/ {
G1/ y; i0 |3 x! D7 w- W, R
clk
7 P( f/ ]2 C  k' z- Y" M4 L
K16 b% `9 L6 H1 K4 W7 ]' u2 S
  N1 _. U+ k- |. D/ C4 ~: s
SYS_RST0 Z( |3 K6 B) \" Y
AB12  m, p: C, D1 ^& M' ]6 S
rst_n
! X5 l5 C* a# j; W5 o* _
将module的名称定义为dds_da,代码如下:
12 a! B5 b$ a( X, }# ~. c$ ~
2' k; U+ ]- n; A- o9 k
3
9 c- l0 ^7 {8 K5 I0 `, ]6 \4* c7 F, D$ y8 ?/ `& k
5
3 O2 {: P# p# D" T0 q6+ Z5 W% Q9 ~" Y" g# r: A  L1 h% j
7- Y) k& j) \/ Z7 [% U
8& `; l& V. k( h7 \( t& X
9+ j5 F$ h& q/ b/ z
moduledds_da(
) ~- N7 }9 E" @6 ?clk       ,# C& Y' q) K7 x) j
rst_n     ,
; f* K) h8 ?6 Udac_mode ,7 R* o& E5 P5 N9 R! `
dac_clka  ,
& o- Q  U5 H5 L: }; b: l+ ddac_da   ,* {8 U) C5 c2 ~8 @8 V9 i7 h9 [
dac_wra  ,
7 m9 x! d* a! C% s+ wdac_sleep9 r4 o1 ^) R$ b- `# \2 N2 V
);
; @, J9 [6 _  i/ _8 {( k2 ]
: d8 G; u9 Z9 y
其中clk、rst_n是1位的输入信号,dac_da是8位的输出信号,dac_mode,dac_clka,dac_wra,dac_sleep是一位输出信号。
1
6 }# o5 H9 I$ F+ z4 Y  n% l2
& A' S) _+ |0 u5 p, P$ t3
3 f) b+ k( Q% H! ^) t4. n2 K) o3 ^4 h, z1 P9 C
5
8 G1 i, @% {! d6
( \6 U& f" M( u+ B7
* _+ P. q4 z0 {+ U  ^! U
input             clk        ;
9 P& g0 @& y; E6 r  }( uinput             rst_n      ;
; Z; L' k, H0 [3 W$ Ioutput            dac_mode ;# v" U# o+ L5 w
output            dac_clka  ;0 K) {+ z( m7 P. y4 s' }8 |# H2 U3 Z
output [ 8-1:0]    dac_da    ;7 O( d* r1 g  f7 c; t, b5 o
output            dac_wra   ;) R; f% n7 V, K" L5 x6 @
output            dac_sleep ;
. B' z. r: P/ m, h8 X+ C
! A* r: X" C$ R* C  T: r
\dds_da。在该目录中,新建一个名为dds_da.v的文件,并用GVIM打开,开始编写代码。
我们要实现的功能,概括起来就是FPGA产生控制AD9709,让其中的通道A产生正弦波所对应的电压。为了控制AD9709的通道A,就需要控制AD9709的MODE、SLEEP、CLK1、WRT1、DB7~0P1管脚。根据设计目标的要求,整个工程需要以下信号:
1.使用clk连接到晶振,表示50M时钟的输入。
2.使用rst_n连接到按键,表示复位信号。
3.使用dac_mode信号连接到AD9709的MODE管脚,用来控制其工作模式。
4.使用dac_sleep信号连接到AD9709的SLEEP管脚,用来控制其睡眠模式。
5.使用dac_clka信号连接到AD9709的CLK1管脚,用来控制通道A的时钟。
6.使用dac_wra信号连接到AD9709的WRT1管脚,用来控制通道A的写使能。
7.使用8位信号dac_da连接到AD9709的DB7~0P1管脚,用来控制通道A的写数据。
综上所述,我们这个工程需要7个信号,时钟clk,复位rst_n,dac_mode、dac_sleep、dac_clka、dac_wra和dac_da,其中dac_da是8位信号,其他都是1位信号。下面表格表示了硬件电路图的连接关系。
器件; b: n6 d# T8 c$ R
AD9709管脚  A0 v1 a9 {0 ]; e
原理图信号3 Q! v8 _% }' T
FPGA管脚' X6 ?8 w. u2 B% P
FPGA工程信号, r% C6 N7 E( K  t
U8
  C+ R, L  Y; K# D$ s
MODE" f$ I) U. P. V8 H- m2 V# h
DAC_MODE
, q  e2 X& b0 q) M- }! G0 N  X0 U
Y4
) ^( v. S) @6 Q* s6 O4 ^; A+ A/ p
dac_mode# `# `/ r% u9 y* _
SLEEP& }& A. G. ~9 t
DAC_SLEEP$ Y+ Z3 U" v4 r! v7 r  u
H2
; T: `" [" x0 c# ]& O5 ^6 G
dac_sleep* X* X* o7 d0 @) j
CLK1$ Q- Y5 |1 e: e: K
DA_CLKA0 M( c# A( M; [9 y3 C
R26 U. E8 H4 `7 O5 `$ z4 I
dac_clka
9 s2 S% c! F" y
WRT13 X( n# O) V( o1 i3 f, b
DA_WRA( b- e  ^; f* o4 ^: S
U1: ]7 w3 w  D. [* ~* ~  |
dac_wra
- m0 @, y- T' l/ }
DB7P1# Y$ u3 [0 g6 G) z% @
DAC_DA7% S1 @( k: X7 @, Y& r* L
AA1; M: k( ^( ^8 j7 z& W& v
dac_da[7]! e- {2 D3 p+ z  ?& }! j
DB6P1
* H* `0 J: t3 g- S" z; }# ?
DAC_DA6
- ^2 g+ w1 r# Q5 k
Y24 Y" p2 S! A+ p5 c
dac_da[6]4 _% d. b; m1 x- M2 k$ J* G0 W
DB5P1; m' K! k& x( o. Y$ u; L
DAC_DA5( j3 [) P: I' R: [- t3 [2 ]- B3 ^
Y1/ E4 b+ h: ]' N# R
dac_da[5]9 i' n; f: |1 ]% M4 \
DB4P1, Z! c9 Q" B4 g: }/ r/ }
DAC_DA45 d, n) r9 U# H8 ]
W2, p+ b3 {, X& c  K  s
dac_da[4]
& V3 ^- b! O' h
DB3P1
1 p9 \8 o' ]9 Y0 [# R
DAC_DA3
5 d! ~* F% f, L3 ^# r* J
W18 p" A* n! D( V: @
dac_da[3]
- t" k/ {5 C' V  E. n, G1 l/ h* R. E
DB2P1/ e( v+ @: f0 h  a
DAC_DA2" P) X" P! \3 S4 M8 `
V2$ a* ^+ U7 H6 r' ~- C
dac_da[2]6 c# C0 l: b+ _* Q0 U. ]* d7 g- O
DB1P1
1 }2 C6 [  x7 x/ T/ l6 b5 C7 v# ]
DAC_DA1; U5 v, c- X& \/ I% a' n. x
V1
% D+ |/ R' J# W, m; ~2 L6 d
dac_da[1]* O2 `8 Q$ z3 W7 v9 Y4 R
DB0P1
1 V: P& H! E7 V4 P" e) i
DAC_DA0
8 q8 r- f3 m" w( {) Y8 D% _
U22 @7 f* s( l+ ^8 w5 |
dac_da[0]" {6 O1 ?4 \& c  v( X% L
CLK2
. f1 l' z$ b% p9 {: t
DA_CLKB
/ \. [7 D8 Z1 g$ N. h
R17 x) S. @% x6 p: Z; A
, N& l( v; z! f$ I7 }
WRT25 v7 h7 K0 H# @
DA_WRB) o. B6 z  R- j! M7 \# J
P2
, K0 E* M  R9 X3 `) c: v

4 `  c$ }8 J8 o6 [  [% s
DB7P2
9 {: p8 R: D& b& r. X4 q" b
DAC_DB7
% P0 g3 j- u* \% B# \* Q
P1
2 c; m  \  ^: O

# O7 O: D  Z" G7 J6 n, v! P
DB6P2. Q, M  W5 }. Z  K" V8 i
DAC_DB6
! W! g) c, m/ N( V7 v9 S
N2
3 D. r) M! x! b, N- c3 u

1 l9 ]) i4 C/ t1 L
DB5P2
, A5 i% m1 ?' f$ k9 U- _, b1 _
DAC_DB5
+ ?( w: h9 b9 _" C/ k
N1
' e  G6 v, [8 t/ c
, X% T: N2 j" k0 q3 [
DB4P2
% R( Q# F+ {7 _& j& V
DAC_DB49 r5 a. J4 o# P4 G, s
M2  Q! y$ n) z  {% ]. R6 Z' @
6 ^) ^9 T$ a8 R6 j7 m. U9 \
DB3P2/ S- M1 f# l) w7 c1 c* w. V
DAC_DB32 r. _& K7 n7 E; H
M1
- c1 `/ v, t. A" s2 }9 i, {( v% X
+ l! }$ b8 l% a6 p0 ~% z- O1 w7 I
DB2P27 d; u' E  C3 T5 ^. M7 d) P
DAC_DB2
3 h. i# i# J% S! X$ Y6 H
J1: I. n( y1 j( L+ t* j3 W
: ?" ]( @2 I1 ?  Z0 ~
DB1P21 u1 t5 n, F5 M9 u$ y+ X
DAC_DB1
; q9 G0 V1 J5 v  a( N
J2
* t. E  g. a  j
: j3 X) c7 ~& d$ J$ z
DB0P2. X6 R" e# O6 O+ ^7 ?  r: B
DAC_DB0" s9 y' i9 w+ P% z% o
H1
7 n. F% V5 F8 \; N
& j# h! D- \6 M7 W+ R2 f
X1- |4 [( k' r3 L5 A1 Q
) `3 l% t( @1 m! P2 t7 P
SYS_CLK
8 U% h. f/ M5 X- t( j  B
G1
6 [9 [  [' n% _6 D1 ~1 c* `
clk3 a9 n' h3 g  E
K1" V* O7 y/ O! x; S

- U- U& X7 l, J' e* t/ c) q
SYS_RST5 a/ a; U" |8 [, E4 ^/ Y
AB12
8 K( D  m/ i' e
rst_n
8 d7 P- G* V% W2 h, C
将module的名称定义为dds_da,代码如下:
1
/ g$ d% B: }( k- e2, E9 C& \, V; H2 g% Q
3
. _: I" \0 x. w; ^" S; A# ^( c4
" w3 g0 H4 ?5 t0 z7 h5
2 B1 N% v( L8 d' R  {65 ~. P' ~# L# c4 J/ i
7& [+ L+ W8 ^: w  b8 _/ M) c
83 f" W/ t5 R  M+ G4 d8 _: F; P: X
9
& N$ o; O5 [/ Y
moduledds_da(" F1 O; U; r0 p
clk       ,9 e' h7 ?2 E( r& Z
rst_n     ,/ P$ z7 O% N! h
dac_mode ,/ s5 m! u$ _9 }/ l) c. u/ `
dac_clka  ,3 H' }2 Z- d- o4 z1 S
dac_da   ,- A  }7 _3 I# i4 l" K" m
dac_wra  ,; M% {& e+ R7 E
dac_sleep
! n  v* R" u6 P+ F! j$ M( I);6 w" Q+ f/ {1 u+ V+ }3 _! q
, g) J6 D6 U9 K( f6 n; |" B; v
其中clk、rst_n是1位的输入信号,dac_da是8位的输出信号,dac_mode,dac_clka,dac_wra,dac_sleep是一位输出信号。
17 F. a6 I! X0 H6 h( h6 D
2
$ h) r1 K7 U6 s3
  q8 y! W. m& n- y$ k# g4
. I# S) {1 w" ^- P! i58 [3 ?9 s5 Z7 ~$ [; B+ U6 j
66 m2 N, W6 y, p, G( y
7
2 w: y; g" E% [) w
input             clk        ;
. Y1 g8 j: V) l* A2 {- G" ^5 hinput             rst_n      ;
7 Y0 p' `4 t- e6 B8 F3 y! ~output            dac_mode ;
. c4 D+ j: [: p( {output            dac_clka  ;
: a: O" `  c  k" j$ j, r/ P9 Doutput [ 8-1:0]    dac_da    ;$ J. g* j0 k: E. {4 a" s
output            dac_wra   ;
: C/ v5 r$ v+ m5 E9 J6 s* X' B% _output            dac_sleep ;# X% _, m( }. v0 n
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

2#
发表于 2019-3-25 16:22 | 只看该作者
妈妈再也不用担心我不会转换了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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