数値制御発信器(NCO)

wave61

簡単な数値制御発信器を実装して、600Hzの正弦波を生成しています。赤色のトレースは、D/A変換器へのMSBです。

//--------- 16-bit phase accumulator ---------------------
reg [15:0] phase_acc;
reg [15:0] phase_delta;

always @ (posedge clk_myown or negedge res_n)
begin
  if ( res_n == 1'b0 ) begin
     phase_acc   <= 16'h0000;
     phase_delta <= 16'h0040;
  end
  else if (daword_up == 1'b1) begin // 48kHz
     phase_delta <= (1'b0)? {5'b0_0000, rx_data, 3'b000} : 16'b0000_0011_0011_0011;
     phase_acc <= phase_acc + phase_delta;
     sound_index <= phase_acc[15:7];
  end
end

第12行に示されているように、周波数制御ワード(FCW), phase_delta,を、シリアルインターフェースを介して与えることもできます。