版主: 51FPGA

分享到:
共24条 1/3 1 2 3 »   

ip core 中dds 怎么用?

    [您是本帖的第10589位阅读者]
只为吸引你
我是GG
高级会员

最后登陆时间:2011-10-09 20:36:15

直达楼层
1# 发表于 2011-05-06 21:38:48
如题,刚在看ip core,中的dds,看的一头雾水。
想问问这里的大牛们,core中的a,和data,是怎么用的?
传的数是怎么算出来的?特别是data的数,怎么算的啊。我总觉得书上说的,少了很多东西。·····
不像加法core那样简单啊,


关键词:怎么    

改变自己。

RE: ip core 中dds 怎么用?

dreamjsc
我是GG
高级会员

最后登陆时间:2012-06-04 16:42:28

2# 发表于 2011-05-07 10:38:00

你用的是Xilinx的DDS么?
DDS首先是一个相位累加器,输出的相位去寻址Sine/Cosine查找表!
Xilinx的DDS与相位相关的输入有两个:PINC与POFF,而输入的模式有三种:fixed,programmabe,streaming,并且还可以多通道输出。
你上面说的a,应该是指ADDR吧,ADDR在多通道输出且输入模式为programmabe时才使用!用于指示PINC与POFF是写的哪个通道的!
而DATA也是在输入模式为programmabe时才使用,DATA的值是PINC或POFF的值,具体是PINC还是POFF由REG_SELECT决定!

另外,Xilinx每个IP都有详细的datasheet,在使用IP之前最好阅读一下,你要的东西都可以在datasheet中找到!


大山里的娃儿。

RE: ip core 中dds 怎么用?

只为吸引你
我是GG
高级会员

最后登陆时间:2011-10-09 20:36:15

3# 发表于 2011-05-08 10:48:17
dreamjsc的原帖

你用的是Xilinx的DDS么?
DDS首先是一个相位累加器,输出的相位去寻址Sine/Cosine查找表!
Xilinx的DDS与相位相关的输入有两个:PINC与POFF,而输入的模式有三种:fixed,programmabe,streaming,并且还可以多通道输出。
你上面说的a,应该是指ADDR吧,ADDR在多通道输出且输入模式为programmabe时才使用!用于指示PINC与POFF是写的哪个通道的!
而DATA也是在输入模式为programmabe时才使用,DATA的值是PINC或POFF的值,具体是PINC还是POFF由REG_SELECT决定!

另外,Xilinx每个IP都有详细的datasheet,在使用IP之前最好阅读一下,你要的东西都可以在datasheet中找到!


我知道是怎么算data,知道A大多都设成0.但是我不知道是什么时候给data传数,和给a传数啊?我看的一些程序上面都是直接调用了。没有给data和a传数啊?
另外我用的是xilinx的ise。

改变自己。

此贴由只为吸引你于2011-05-08 10:52:18最后编辑

RE: ip core 中dds 怎么用?

dreamjsc
我是GG
高级会员

最后登陆时间:2012-06-04 16:42:28

4# 发表于 2011-05-08 18:04:27

当不需要多通道输出时,不需要给ADDR传数!
当输入模式不为programmable时,不需要给DATA传数!


大山里的娃儿。

RE: ip core 中dds 怎么用?

只为吸引你
我是GG
高级会员

最后登陆时间:2011-10-09 20:36:15

5# 发表于 2011-05-08 19:24:13
dreamjsc的原帖

当不需要多通道输出时,不需要给ADDR传数!
当输入模式不为programmable时,不需要给DATA传数!


那我就不明白了,那它输出的载波频率怎么确定啊?

改变自己。

RE: ip core 中dds 怎么用?

dreamjsc
我是GG
高级会员

最后登陆时间:2012-06-04 16:42:28

6# 发表于 2011-05-08 20:13:51
dreamjsc的原帖

当不需要多通道输出时,不需要给ADDR传数!
当输入模式不为programmable时,不需要给DATA传数!

只为吸引你的原帖
那我就不明白了,那它输出的载波频率怎么确定啊?

载波频率由CLK与PINC决定的!PINC为每个时钟的相位增加值!看一下datasheet的时序图你就明白了!


大山里的娃儿。

此贴由dreamjsc于2011-05-08 20:14:32最后编辑

RE: ip core 中dds 怎么用?

只为吸引你
我是GG
高级会员

最后登陆时间:2011-10-09 20:36:15

7# 发表于 2011-05-09 12:11:22
dreamjsc的原帖

当不需要多通道输出时,不需要给ADDR传数!
当输入模式不为programmable时,不需要给DATA传数!

只为吸引你的原帖
那我就不明白了,那它输出的载波频率怎么确定啊?
dreamjsc的原帖

载波频率由CLK与PINC决定的!PINC为每个时钟的相位增加值!看一下datasheet的时序图你就明白了!


可能是你没明白我意思,要不就是我太笨了,比如这个程序。
在使用时,直接调用
mydds模块即可,如


module dds1(DATA, WE, A, CLK, SINE, COSINE);
input [27 : 0] DATA; //经过计算,
DATA= 10737418.
input WE;
input [4 : 0] A;
input CLK;
output [9 : 0] SINE;
output [9 : 0] COSINE;

mydds mydds1(
.DATA(DATA),
.WE(WE),
.A(A),
.CLK(CLK),
.SINE(SINE),
.COSINE(COSINE)
);

endmodule
为什么就写了,经计算data=10737418,直接调用就可以了,而不给data传数呢?是不是在生成IP核时就定义好data了?还是还要在写个其他的程序给data和we这些传数呢?我瞟了一眼时序图,但还是不理解······

改变自己。

RE: ip core 中dds 怎么用?

dreamjsc
我是GG
高级会员

最后登陆时间:2012-06-04 16:42:28

8# 发表于 2011-05-09 15:20:23

你使用的ISE是哪个版本?
我用的ISE12.1,使用的DDS Compiler4.0,没有A这个端口,只有ADDR这个端口。ADDR是用于DDS多通道的输出。且最多16个通道,所以位宽最大只有4位,而你的A位宽有5位,所以可能我们用的ISE版本不同!你的DDS中的A端口是用来做什么的?

另外,生成DDS IP时有很多选项,要根据自己的设计要求选择合适的模式!

你使用DDS是输出一个固定不变的频率还是频率需要改变?是否有调制?

如果输出频率固定且不需要可编程,在DDS Compiler4.0生成DDS时,不需要DATA这个端口!


大山里的娃儿。

此贴由dreamjsc于2011-05-09 15:21:43最后编辑

RE: ip core 中dds 怎么用?

只为吸引你
我是GG
高级会员

最后登陆时间:2011-10-09 20:36:15

9# 发表于 2011-05-09 16:54:30
dreamjsc的原帖

你使用的ISE是哪个版本?
我用的ISE12.1,使用的DDS Compiler4.0,没有A这个端口,只有ADDR这个端口。ADDR是用于DDS多通道的输出。且最多16个通道,所以位宽最大只有4位,而你的A位宽有5位,所以可能我们用的ISE版本不同!你的DDS中的A端口是用来做什么的?

另外,生成DDS IP时有很多选项,要根据自己的设计要求选择合适的模式!

你使用DDS是输出一个固定不变的频率还是频率需要改变?是否有调制?

如果输出频率固定且不需要可编程,在DDS Compiler4.0生成DDS时,不需要DATA这个端口!


我的这个ise是9.2i的版本,A端口和你的addr是同一个意思的,A的低四位选输出通道的,最高的一位是选择相位偏置寄存器(1)/相位增量寄存器(0)的。我是想让这个DDS作为VCO或者NCO的。所以data肯定要变的哇。求指导···呵呵

改变自己。

RE: ip core 中dds 怎么用?

dreamjsc
我是GG
高级会员

最后登陆时间:2012-06-04 16:42:28

10# 发表于 2011-05-09 19:26:58

这样就清楚多了!首先你应该是单通道输出,所以A的低4位一直为零!你只是想输出一个频率,则相位偏置寄存器也可以不管!所以A的最高位可以一直为零,即一直指向相位增量寄存器!至于DATA在什么时候送数,取决于你什么时候频率需要改变!当频率需要改变时,算出来的DATA值也要改变,就需要更新相位寄存器的值!这时送数就行了!送数的控制信号可以用WE!


大山里的娃儿。

共24条 1/3 1 2 3 »   
快速回复主题
  • 匿名不能发帖!请先 [ 登陆 注册 ]