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位信号。下面表格表示了硬件电路图的连接关系。
器件( V+ B0 B6 ~' e' O
| AD9709管脚
X$ b1 @9 ` q0 { | 原理图信号( b z; e: H6 E. i2 \+ c e: o
| FPGA管脚2 v8 i8 I/ B6 r# c
| FPGA工程信号
: E T# v% A+ F, r' o2 V |
U8" j8 `. `. r2 J
| MODE1 C1 v4 u# q. I& |/ X
| DAC_MODE
' Z0 L/ n4 w" I0 w | Y4
6 ~. [- M3 V2 f$ j | dac_mode
$ [! W8 j2 c2 S* Q$ _" D |
SLEEP5 L- X5 h7 z a! q
| DAC_SLEEP
9 P. x! u' J7 }7 `( O/ q. |" y3 Q | H2$ V) z. P; t1 z% K
| dac_sleep n( M% M S. e( X T2 @# }
|
CLK12 V& S" l7 \ J; L; i. d
| DA_CLKA
% P1 a+ J# w/ ]$ A! v; v6 W | R2
, g" K/ [: x) a; e" ]& @5 {8 j | dac_clka, h! D' l" R- D, [- I* k+ W
|
WRT1
. }& M5 b2 P: {3 C | DA_WRA% X5 X4 c) N/ K* K6 S: k m
| U1
9 }5 {/ ?; H: z1 a | dac_wra& `& E6 \6 T; X6 w: a
|
DB7P1
2 m6 M6 V" r% E# z | DAC_DA7
L1 }5 S* b* s5 `! ]/ B | AA1/ Y0 K( V' l0 a5 B
| dac_da[7]
9 m2 j3 W/ a7 R- J ~5 r) a' [ |
DB6P1% B, g8 @: ?7 C
| DAC_DA6
0 F: G6 B& c" f7 ]+ R | Y2. \ G9 N G/ e; w" k- J2 b1 U5 Y% F
| dac_da[6]- y, T& v/ m* Y& F" v
|
DB5P14 T0 C( L6 Z! |* Y
| DAC_DA5
& d" a7 p0 B, ~1 a: i | Y11 E5 R7 h3 o' S9 V
| dac_da[5]$ V$ K) Q+ d) A5 _
|
DB4P17 X3 y: y; D4 Z
| DAC_DA4
0 `3 V. t. M3 P | W2
' \, O3 q# t; K | dac_da[4]: n" g) @0 f& _* Z" D" m& g
|
DB3P1
% o* B& r1 l2 u/ K" o) S | DAC_DA3# {$ c: e) S' B/ b% U& U" y' d
| W1
2 q( I% s% V3 k | dac_da[3]
- s; ]6 r6 {. ?6 j$ T& ?: r% h |
DB2P1
4 l# L0 x6 X- W0 b N | DAC_DA2
, r1 M& n* f1 ~/ `; m# T | V2
1 f. O" \, ?% q | dac_da[2]4 r6 F9 N% t$ `5 ~
|
DB1P1
" ]! S( o* _: {+ b' a& c- g | DAC_DA1" t+ V5 \0 G( @' Q2 S! |
| V1
' Z8 s& C, h. G5 O$ H | dac_da[1] \5 Q. a( G% m5 W
|
DB0P19 N9 ~' J$ x. S0 d1 `
| DAC_DA0
" [$ @1 {) \' m K$ {( y# @; a9 Y) s | U2
, ~: y# @" k# g! \- t: z! v- p | dac_da[0]7 N( `& A4 t ]8 @. x% q
|
CLK2! n5 x' V& ^ I' R
| DA_CLKB3 e2 u8 T1 r* c: E5 W2 ~* t
| R1
$ s: C* k4 _" A& w8 b( ?: D |
. A/ b4 x2 ?: ?9 s |
WRT2
: `0 }) J% y# _' n$ ] | DA_WRB
5 X4 N4 K K' Z, u, i/ L B- K7 s | P29 h6 q; V9 \7 D# ^) i- _) H, N' e$ b
| 2 g0 z1 u4 ]6 i) K" t
|
DB7P26 ]7 w2 V4 n$ ~* N
| DAC_DB7/ g7 P! n4 g+ x6 z7 X
| P15 L$ o+ S' p: B \# d
| " d. _! [3 i) L1 I/ ?% o i
|
DB6P29 d; h! q( y: Y* q
| DAC_DB6
! K' K% b' ^+ n$ u) f- | | N2
4 I( o% Z& Y' K/ v |
" S) V5 y; v( ^ |
DB5P2# V. c, J$ D! H- ^9 d7 ?, C
| DAC_DB5! M' d2 [4 @& E! V! [
| N19 a* r+ X$ K/ S/ B
| 8 z" l- k; F- m
|
DB4P2
, i& R- T1 X$ f$ \7 W! L, I- z ~ | DAC_DB4% H( l' Z! H/ \6 x. l2 A
| M2
. J" b3 R$ |$ k0 x1 N3 c. {+ R0 j |
* `5 I) o4 g" l% V1 G |
DB3P2
# I: S7 v2 X8 d& ?* ^ | DAC_DB3; W% g2 x. _; {5 A6 u
| M1+ A8 W G0 F! s( F: k Q" ?. D# |4 a
|
: \( e7 a9 m0 a4 W% i4 X/ ? |
DB2P2' a6 X& `* B: y, y; D
| DAC_DB2: X: N4 V: r+ y3 M8 x6 W
| J1
8 e5 n& _5 ^* p2 { |
6 B. D7 u5 z( V9 e# a0 `' t |
DB1P2
, S5 h4 H( X: q$ `' P" h, ` | DAC_DB1) A& e1 i2 h. ?8 a. m% t7 a6 T$ }
| J2) |8 v O' X; u4 z( V9 \4 j5 A; i7 t6 c
|
* C5 ]. G' N7 d6 k. v# _( Q |
DB0P2
. K4 O$ C: G5 r: @6 j3 v | DAC_DB0
. H7 a2 |- L1 F% L. D | H1. W" c( Z9 M' |% w
| ) ?. ?' P# ~/ P% r: A7 {
|
X1
8 t8 c9 Y/ {* W | 6 [7 e! T' j) W% L2 H
| SYS_CLK
5 E- X8 Q6 w# S) F" k | G1
1 l; j" l0 a p7 A5 c/ G; u: J | clk+ M! t! K+ g7 [# P
|
K1. u8 [# r8 |2 M" x
| - L# W- u; W8 ]
| SYS_RST9 u8 g# j* g. o3 _& H! g
| AB12( J! y7 j0 u+ i" ~
| rst_n9 j) g0 e; o; [( v& ?) S9 G& D& y
|
将module的名称定义为dds_da,代码如下:
1( s+ U/ ^ g9 [
2% F2 ~# \8 t3 w
3
" A$ [ F6 i# X9 ]% @, n9 K" K. D" E4
5 z1 }4 N5 |3 Y; k* Z0 J( L54 \( L$ l! g1 q# i: o$ I3 \
6
9 u. H& E0 Z( z8 |4 u0 Q" L4 T% r7
- d' [ |. V: h" p! [8; J' b( `) u" Q" Y1 x. |
9
& Z) Y" q Y; O) a5 w- _9 f | moduledds_da(
( @* ] T. r7 H) Iclk ,3 Q! d3 O4 i2 j' p& `5 p
rst_n ,
$ P' \+ o: R7 W1 y" o; kdac_mode ,$ p1 P7 z* r' a9 s% b0 Z! I
dac_clka ,5 e0 Q: s3 |+ D! @% q3 O* v
dac_da ,
5 w$ K' K, d6 _2 G2 Cdac_wra ,
; S. V5 W1 @0 Z/ R; Z, N g6 q/ g! Ldac_sleep( d6 q* Z0 ? t1 S! y) b
);+ l# S# B, |5 @" ?* F$ k/ x+ \
|
8 m9 |6 O7 P3 {& B& t其中clk、rst_n是1位的输入信号,dac_da是8位的输出信号,dac_mode,dac_clka,dac_wra,dac_sleep是一位输出信号。
1( e5 q: r# g7 X' g E
2
. \1 \ U3 H& @3
: M3 S9 z* _' m' {4
3 Z0 }: I* |, X7 D/ r% T) z: [5) z& N- P6 W& @6 \2 w8 p0 D8 |+ Q
6
9 U# Y; {1 F" V. e+ f; N1 i7
& t6 C1 J8 ?. Q( S | input clk ;
& b$ x8 n. k2 |3 G: ?. J; tinput rst_n ;
4 s/ Z' T: r+ @% j7 ioutput dac_mode ;0 r, R" n* |, f$ E
output dac_clka ;
2 `8 c2 I9 Z9 U: Youtput [ 8-1:0] dac_da ;
9 l( X0 h, A; u$ k" Soutput dac_wra ;
. F* J- D2 G# {2 |1 f5 g7 foutput dac_sleep ;2 ^8 c1 F0 q. X& V/ L" {$ M
|
, b' V5 y8 H4 c' r7 g" }/ y
\dds_da。在该目录中,新建一个名为dds_da.v的文件,并用GVIM打开,开始编写代码。 器件
/ z' r3 P& P- z% s: d7 e3 K | AD9709管脚
9 k# [! t5 D' g) A/ ] | 原理图信号1 A. c0 j: u5 |! n' A$ j0 L+ W, n
| FPGA管脚2 c2 |* H; A% L& Z9 @ U8 ?# e
| FPGA工程信号4 d) [3 \( G2 W: x3 e+ e
|
U8
8 U. v9 j2 N+ m. j$ @( t; ? | MODE
' ?4 o; @6 v/ S( b0 x% `! L7 I, I# }/ V | DAC_MODE6 u6 P! @" D/ C0 C
| Y4
& A1 f( W) @( V; d9 A# w Q" Q | dac_mode
4 s+ r6 a# D- y% p, X |
SLEEP
' p* v& S5 u* H: L* b S0 O | DAC_SLEEP
% h% c8 v: { M/ V1 m* p | H2( `# L7 j1 r6 v: B. @
| dac_sleep
9 _: N4 M2 C* Z/ W5 M9 y |
CLK1
( J2 D* |' @$ z' M$ {% g+ x | DA_CLKA
) U% [+ G* h" R$ ~+ R: c6 w( ? | R2
/ Z$ X5 r+ d, A- {# n" F | dac_clka
2 p+ N* i2 S; p+ R: u( s" ` M |
WRT1
. C' x* k! ^1 f: Z | DA_WRA: \0 s& k) W. {. X
| U1
7 ?: ~4 Q! L/ W' j | dac_wra0 f6 f0 S/ u+ h+ z
|
DB7P1
8 Z5 L0 l" L% k1 A | DAC_DA7. y& t, |% X2 h @* o
| AA1
. G0 ^6 V0 Z, K9 i2 u0 p5 \ | dac_da[7] E7 F& N# t! l4 h% P9 \
|
DB6P1
+ [; ~, f! Z2 c: x) K% T* M4 g | DAC_DA62 Q% J2 C* h" d
| Y26 e& O( X+ R, C9 W
| dac_da[6]* t7 P" T" J. |4 y( ]
|
DB5P12 Q9 ~. M# F8 O& }& _
| DAC_DA5
0 D/ N& r# h! L | Y11 d+ _4 q. G# S& T2 O: Y
| dac_da[5]4 b: e6 g; m* k3 ]% j
|
DB4P18 [0 E3 @. \% n' k6 o3 q$ {
| DAC_DA4
5 x2 N! k; u" a$ x! l | W2
; e! j, G- M+ Q' H' x+ l- c: g0 F, ?0 n | dac_da[4] Z; y0 x0 Q: ~& q" ~1 x
|
DB3P19 W* e$ T1 B) k% j/ d5 ?
| DAC_DA3
. ~8 m/ H* R% k: a | W1
4 k( K; g% @- ^ | dac_da[3]
6 a3 d7 v, k* F6 F9 n |
DB2P1
/ i+ I4 I: p( x3 O3 G! ^3 N | DAC_DA2
7 Q# p3 v1 c7 W2 l# P& a0 r6 _& Y | V2
; G* E2 k" A1 T- R2 u" G | dac_da[2], z; H/ J5 V( ]8 k
|
DB1P19 a& \7 `+ q1 Y6 n2 s# t4 i
| DAC_DA1
& V7 p3 d1 a+ ^ m& L" a7 d | V15 U/ N! ?) r6 {( z- S/ ?+ K
| dac_da[1]
. v1 z f! ~; y9 o, P |
DB0P14 x4 f: {* g. A4 r
| DAC_DA0
; v' i; |& ?% D5 _( Q9 [. h. ] | U2
2 [" k5 b! U7 n+ Q5 M8 r; U | dac_da[0]$ N7 l X& A6 B- |
|
CLK22 V9 e4 N8 i2 r1 A" f: T
| DA_CLKB
6 p- N4 f- I9 K, m1 e. V5 ~' k | R1
a' c; b2 ]0 k* [4 k/ s( W | 2 U& M' n1 o8 q* j2 [
|
WRT26 a4 S7 v( J8 W+ v! [ C J( L
| DA_WRB% q6 W" A- l* [6 v! R
| P2
4 O9 S/ |4 E3 C% A1 L | % p( p" `# y- y1 k! y
|
DB7P20 w5 I: ]6 B4 z! y
| DAC_DB7
# U* w, _2 z$ o* d8 M' [9 Y. h, I | P1- L; N" G/ V; ?6 z1 _# b
| $ C \: D6 E. Z* L3 t+ N
|
DB6P2
( J# Q v9 T( j+ u' b | DAC_DB6, C$ c5 w* H* L( {2 { _# X3 {
| N20 i }7 t- Z( D) m, F8 Z0 e: Z1 x
|
+ i4 `( m1 S8 j f7 ^ |
DB5P2 b5 y" [7 N3 G; o: O5 @1 i
| DAC_DB5
! ~' O! Y- r3 _/ C7 m: G | N1& w; U( y( Y0 s1 i$ n. m) v
|
8 @, B, Q2 [% q& C" l |
DB4P24 q: s4 T4 r; {' ] }
| DAC_DB4
, q0 j( ]( s5 `% o | M2. H# `( q2 B& J# B0 u) r
| * ]. `6 C) g6 }: r( ]0 H
|
DB3P2: X4 E1 j3 @! x) c4 U" r
| DAC_DB3
. z/ p. E/ f5 {9 q2 ]7 F | M1
- |7 c% Y4 E2 ~6 b* G F1 ? | ' Y9 k' x" x" K* [+ h
|
DB2P2
& W% e$ H$ [5 f. S1 R. M | DAC_DB20 i# T' [; m& }$ b
| J1
1 _1 ~, j; V% U6 E | : I* I( p' ], P4 S0 `3 _
|
DB1P2: p+ b9 K, m! ~- ~# o3 N5 W/ h
| DAC_DB1
8 L7 B N% G2 z; v* n o | J2
" |# j/ \6 C. d; e |
6 }: s8 {/ Z( M3 ?; b |
DB0P2
" q* }4 G t$ e/ r) j( F | DAC_DB0
) P* H- O4 ?0 I. U+ d% _. [# P | H1
/ Z% q7 O+ Z- ~1 [. L" } | 7 s. s% g* n8 Q+ V& `/ I
|
X1, c# \# V- D) ^* F; l* x! b, `
| ' z+ t3 `/ R8 l* s
| SYS_CLK
/ y3 P z! w8 J- P' k' ^. z5 b+ \ ` | G1
[; n* A; `9 r" L | clk
( e) X* Z- T% t" } |
K1
x, ~+ P1 h9 L. z9 S$ h | ' T0 W* f& x5 `+ O7 j. k5 p# A/ O
| SYS_RST
/ k$ a6 D4 s \. n* `" L | AB12! ^7 w' V& B# d7 j, G* |& S/ R8 B
| rst_n( |0 ?1 ^ m0 J7 i* m. @
|