|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 ]2 ?3 F$ H5 ^: w( H# f
: H1 L, c ^7 S2 \- Y经过了三周的手册与C语言代码的阅读,今天完成了AD9958程序驱动。主要是利用了线性序列机和状态机实现的。今天最后一步的时候遇到给CTW0寄存器(地址为0x01)填写计算后的值,发现公式没有错误,但是输出频率总是162.427MHZ,这个问题浪费了我20分钟,百思不得其解,最后灵光一现解决了。。。大家看到可能都会笑话我了。其实一个很简单的一个问题,类似C语言宏定义。' u3 m$ m1 f; L0 B$ [. d, c
记得李老师说过,Verilog有天生的人机交互障碍,所以呢,用头文间来宏定义一些常量
' Z- o' w+ y! q7 t! b( ~7 U4 B8 h" ~) y' y+ i. v5 g% q `/ M
`define PLL_DIV 13 //宏定义倍频数
9 A, [, t* |# b. W`define SYS_FRE 25*`PLL_DIV //本板子为25MHz) t7 e: ^3 b1 c7 o
`define TWOPOWER 32'hffffffff) y5 E* G Y4 B: _7 r$ I. I
$ d+ h4 z' Q5 y' y: _& d4 D
# K5 ^' e3 I' u) J6 Z% h) c7 G- K* ~
手册中给出的频率转换字的计算公式为( ]$ q3 q2 L4 @+ d3 O
FTW=f0/fs*2^329 Q& C2 H* k4 [2 E% l5 W
8 E: W2 p5 |% W5 a7 z
`define CTW0_DATA0 100*(`TWOPOWER+1.0)/`SYS_FRE //100MHZ
3 q; R. X7 B" \! L6 b: J% Z4 }* D0 b其实和C语言一样,define只是简单的替换,也就是说上面公式变成了100*(32‘hffffffff+1.0)/25*`PLL_DIV 这显然是有问题的。
: K2 e, N. s! a7 v. ?0 o5 b所以在得宏定义中加上括号, k+ U: T$ c" ^9 |: F0 G
`define SYS_FRE (25*`PLL_DIV) //本板子为25MHz
1 u" [# x8 t- Z) S. d
- K! g1 n/ s5 @# N+ \2 g _; c! E' {9 x3 P, @' D; q
虽然问题很low,但是避免自己忘记,还是发个帖子做个笔记吧。 |
|