專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

補碼運算Veirlog代碼——音頻Mix運算(24bit)

作者:PushForward   來源:PushForward的空間   點擊數(shù):  更新時間:2014年06月08日   【字體:

`define N 23

module audio_mix_add_24bit (
         input       clk   ,
         input       rst   ,
         input    [`N:0] audio_a ,
         input    [`N:0] audio_b ,
         
         output reg  [`N:0] mixed_audio_out

         );

parameter NEG_ADD_MAX = 24'hFF_FFFF;
reg  [24:0] mixed_audio;
wire [23:0] neg_add_a;
wire [23:0] neg_add_b;
wire [23:0] neg_add;

////////////////////////////////////////////////////////////
////////////////// 補碼的相加運算 ///////////////////////////
////////////////////////////////////////////////////////////

assign neg_add_a   = NEG_ADD_MAX - audio_a + 1'b1;
assign neg_add_b   = NEG_ADD_MAX - audio_b + 1'b1;

always @( posedge clk , negedge rst )
 if( !rst )
  mixed_audio      <= 25'h0;
 else if( !audio_a[23] & !audio_b[23] )
  begin
   mixed_audio[23:0]  <= audio_a[23:0] + audio_b[23:0];
   mixed_audio[24]   <= 1'b0;
  end
 else if( audio_a[23] & audio_b[23] )
  begin
   mixed_audio[23:0]  <= neg_add_a + neg_add_b;      //TT  NEG_ADD_MAX - neg_add_anbn[23:1] + 1'b1;
   mixed_audio[24]   <= 1'b1;
  end
 else if( !audio_a[23] & audio_b[23] )
  if( audio_a[23:0] >= neg_add_b )
   begin
    mixed_audio[23:0]  <= audio_a[23:0] - neg_add_b;
    mixed_audio[24]   <= 1'b0;
   end
  else
   begin
    mixed_audio[23:0]  <= neg_add_b - audio_a;      //TT  NEG_ADD_MAX - neg_add_apbn[23:1] + 1'b1;
    mixed_audio[24]   <= 1'b1;
   end
 else if( audio_a[23] & !audio_b[23] )
  if( neg_add_a >= audio_b[22:0] )
   begin
    mixed_audio[23:0]  <= neg_add_a - audio_b;      //TT  NEG_ADD_MAX - neg_add_anbp[23:1] + 1'b1;
    mixed_audio[24]   <= 1'b1;
   end
  else
   begin
    mixed_audio[23:0]  <= audio_b[23:0] - neg_add_a;
    mixed_audio[24]   <= 1'b0;
   end


always @( posedge clk , negedge rst )
 if( !rst )
  mixed_audio_out <= 24'h0;
 else if( !mixed_audio[24] )
  mixed_audio_out <= { mixed_audio[24], mixed_audio[23:1] };
 else
  mixed_audio_out <= NEG_ADD_MAX - mixed_audio[23:1] + 1'b1 ;

endmodule

關(guān)閉窗口

相關(guān)文章