|
接触fpga有些日子了,但是还没有真正的用过,打算做个信号发生器,用的是最简单的方法:波形的采样值128点存在rom,然后读取,全部代码如下:
module sine(resN,clk,outA,outB);
input resN,clk;
output[7:0] outA,outB;
reg[6:0] addA,addB;
reg[31:0] cnt1,cnt2;
wire clk2;
always@(posedge clk)
begin
if(resN==0)
cnt1<=0;
else
begin
if(cnt1==178)
begin
cnt1<=0;
addA<=addA+1;
end
else
begin
cnt1<=cnt1+1;
end
end
end
always@(posedge clk)
begin
if(resN==0)
cnt2<=0;
else
begin
if(cnt2==325)
begin
cnt2<=0;
addB<=addB+1;
end
else
begin
cnt2<=cnt2+1;
end
end
end
pll mypll(clk,clk2);
rom myrom(
.address_a(addA),
.address_b(addB),
.clock(clk2),
.q_a(outA),
.q_b(outB)
);
endmodule
可是波形却出现了很多毛刺,难道是竞争冒险所致?我观察到毛刺主要出现在正弦波波形数值变换大的地方,难道是这个原因?去开外接模拟低通滤波器外,请问大家有什么好办法去除?
![](http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_599473EGD07Q.jpg)
(原文件名:QQ截图未命名.jpg) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|