|
发表于 2008-4-2 16:29:00
|
显示全部楼层
大侠帮忙改改!
module dds(freq_con,clk,reset,sin,en,i,q);
input [15:0] freq_con;
input en;
input clk;
input reset;
input i,q;
output [7:0] sin;
reg [19:0] add_a;
reg [19:0] add_b;
reg [7:0] sin_dr;
wire [15:0] freq_con;
wire [9:0] ROM_A;
wire [7:0] sin_d;
assign sin=sin_dr;
assign ROM_A=add_b[19:10];
always@(posedge clk or posedge reset)
begin
if(reset)
add_a<=20'b00000000000000000000;
else if(en)
add_a<=freq_con;
end
always@(posedge clk or posedge reset)
begin
if(reset)
add_b<=0;
else if(en)
add_b<=add_a+add_b;
end
always@(posedge clk or posedge reset)
begin
if(reset)
sin_dr<=0;
else if(en)
begin
sin_dr<=sin_d;
end
end
always@(i or q)
case({i,q})
2'b00:begin add_b<=20'b00000000000000000000;end 这个出错了!why?怎么改?
2'b01:begin add_b<=20'b00111111110000000000;end 通过改变读取的起始地址
2'b10:begin add_b<=20'b01111111110000000000;end 想输出0、90、180、270的正弦波形
2'b11:begin add_b<=20'b10111111110000000000;end 但出错了?
endcase
rom_sin rom_sin(
.addr(ROM_A),
.clk(clk), 这个通过读取存在ROM表的1024个点产生正弦波,
.en(en),
.dout(sin_d)
);
endmodule
邮箱:xiaomao_8384@163.com |
|