很简单啊,你按不同的相位采集存到寄存器就可以了。比如你的pwm的精度是1024/周期,那么24个相位的间隔就是1024/24 = 42.666。那么你可以首先把整个周期都存下来,每隔43个左右输出一路。
reg [1023:0] wave_reg;
always@(posedge clk)
wave_reg <={ wave_reg[1022:0],pwm_wave};//把整个波形都存下来,但是可能比较耗寄存器。
assign wave_out[0] = wave_reg[0];
assign wave_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];
这样会少一半的寄存器。
温馨提示:答案为网友推荐,仅供参考