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

fpga实现AD9958驱动所遇到的问题之宏定义除法

[复制链接]

该用户从未签到

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

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,但是避免自己忘记,还是发个帖子做个笔记吧。

该用户从未签到

3#
发表于 2020-4-14 15:43 | 只看该作者
你好,能把您的9958的代码发我一份参考一下吗,我最近也在调试这个芯片,只是读0x04寄存器时一直为零,没有输出,谢谢,我的邮箱是1354025441@qq.com

该用户从未签到

4#
发表于 2020-4-20 14:31 | 只看该作者
你好,最近我也在调试9958,遇到的问题是0x04寄存器写不进去数,就是读出来的数值一直为零,能把您的代码发我一份吗?我想看看是哪儿的问题,这是我的邮箱 1354025441@qq.com,非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-20 23:10 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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