|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 血与泪交织 于 2013-6-3 08:43 编辑
利用dds技术产生频率可变的方波时,为什么要经过一个加发器然后再经过一个存储器,把存储器的输出反馈回去那个频率控制字进行相加,看了eda教程还是不懂,累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。取存储器的最高位的输出就是方波的波形,怕老师问,不知道为什么那样就是,这样出来好使,不懂原因,CPLD的频率是50MHz,而频率在10001Hz到11000之间可调,频率控制是36位的,相位控制字是10位的,编程显示频率已调的方波时第三十五位即最高作为输出,相位控制字也是最高位,还有为什么积分了就是相位了(黑体是最主要迷惑)。。。求大神讲解。还有几天就交论文了。我们没有学过FPGA现在把程序放在底下:
module dds
(
clk_i,
fword_a,
pword_a,
fword_b,
aout,
bout
);
input clk_i;
input [35:0] fword_a; //control a's f
input [9:0] pword_a; //control a's phase
input [35:0] fword_b; //control b's f
output aout;
output bout;
wire aout;
wire bout;
wire [35:0] awire;
wire [35:0] addout_fa;
wire [9:0] pawire;
wire [9:0] pawire_out;
wire [9:0] addout_pa;
wire [35:0] bwire;
wire [35:0] addout_fb;
assign aout=pawire_out[9];
assign pawire=awire[35:26];
assign bout=bwire[35];
add36 add36_ainst
(
.a (fword_a),
.b (awire),
.sum (addout_fa),
.c ()
);
reg36 reg36_ainst
(
.clk_i(clk_i),
.DIN (addout_fa),
.DOUT (awire)
);
add10 add10_ainst
(
.a (pword_a),
.b (pawire),
.sum (addout_pa),
.c ()
);
reg10 reg10_ainst
(
.clk_i(clk_i),
.DIN (addout_pa),
.DOUT (pawire_out)
);
add36 add36_binst
(
.a (fword_b),
.b (bwire),
.sum (addout_fb),
.c ()
);
reg36 reg36_binst
(
.clk_i(clk_i),
.DIN (addout_fb),
.DOUT (bwire)
);
endmodule
那个reg是存储器,当来一个上升沿时进行储存,add是两位数加法器(不同位两个数就不一样),求大神讲原因谢谢了。。。 |
|