经过了三周的手册与C语言代码的阅读,今天完成了AD9958程序驱动。主要是利用了线性序列机和状态机实现的。今天最后一步的时候遇到给CTW0寄存器(地址为0x01)填写计算后的值,发现公式没有错误,但是输出频率总是162.427MHZ,这个问题浪费了我20分钟,百思不得其解,最后**一现解决了。。。大家看到可能都会笑话我了。其实一个很简单的一个问题,类似C语言宏定义。
记得李老师说过,Verilog有天生的人机交互障碍,所以呢,用头文间来宏定义一些常量
`define PLL_DIV 13 //宏定义倍频数
`define SYS_FRE 25*`PLL_DIV //本板子为25MHz
`define TWOPOWER 32'hffffffff
手册中给出的频率转换字的计算公式为
FTW=f0/fs*2^32
`define CTW0_DATA0 100*(`TWOPOWER+1.0)/`SYS_FRE //100MHZ
其实和C语言一样,define只是简单的替换,也就是说上面公式变成了100*(32‘hffffffff+1.0)/25*`PLL_DIV 这显然是有问题的。
所以在得宏定义中加上括号
`define SYS_FRE (25*`PLL_DIV) //本板子为25MHz
虽然问题很low,但是避免自己忘记,还是发个帖子做个笔记吧。
|