reg [1023:0] wave_reg
always@(posedge clk)
wave_reg <={ wave_reg[1022:0],pwm_wave}//把整个波形都存下来,但是可能比较耗寄存器。
assignwave_out[0] = wave_reg[0]
assignwave_out[1] = wave_reg[43]//有时候加43,有时候加42,保证到后面刚好。
……
assign wave_out[23] = wave_reg[981]
但是这种做法大概会消耗1024个寄存器,随着pwm精度的提高,这个消耗会提高。
如果你只存半个周期,而由于正弦波是基对称的,
assign wave_out[12] = ~wave_out[0]
……
assign wave_out[23] = ~wave_out[11]
这样会少一半的寄存器。
你的DDS芯片要支持相位控制和幅度控制才行。先仔细阅读一下DDS芯片的手册。按照手册里面的寄存器 *** 作和使能的规则做就可以了。这还要看你调整范围,DDS芯片本身不一定够。不是所有的DDS都支持调幅和调相。一定要看手册芯片支不支持。切记切记。
频率稳定度要看DDS的参考源,这是另外的问题了。
在FPGA中实现PWM时,移相延时表示将不同参数生成PWM的信号,通过在时间上进行微小的移相,来实现多路PWM输出。这种方案可以降低电平切换时的电子干扰,并且可以更好地控制输出波形的占空比和频率。在具体实现时,可以通过调整计数器的初始值或变化步长等方式来实现延时相移,也可以使用线性反馈移位寄存器(LFSR)等算法来实现。移项延时对于一些需要高质量PWM输出的场合,如电机控制、音频信号处理等都非常重要。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)