刚仔细看了下楼主的verilog代码,打死我也不信这就是delta sigma DAC。
delta sigma DAC的数字部分是把输出值(取值1或-1)做积分,积分结果与输入数据(一般是并行的)做比较,根据比较结果决定是否反转输出值。
而从楼主这段代码看,没有看出这个意思:
“XXXXXways @ (posedge clk or negedge nrst)
XXXXXgin
12. if(!nrst)
13. begin
14. acc <= 17'b0;
15. end
16. else
17. begin
18. acc <= acc[`wl-2:0] + data;
19. end
20.end
XXXXXsign dout = acc[`wl-1];
22.endmodule
”
这段代码解读如下:
复位时,把累加器置零;
然后在每个时钟沿处做如下操作:
将输入数据累加到累加器里;
用累加器的溢出位作为输出信号。
这种做法,假设输入一个数值,输出只会是方波;且方波的频率随输入数值的增大而减小,因为每次累加的数越大,累加器的溢出就越频繁。
怀疑楼主把delta sigma dac理解错了。