⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 booth16.v

📁 Booth Algorithm 是一種較簡潔的有號數字相乘的方法
💻 V
字号:
module Booth16(CLK, RESET, A, B, P);
parameter WIDTH = 16;
input  CLK, RESET;
input  [WIDTH-1:0]A, B;
output [WIDTH+WIDTH-1:0]P;
reg    [WIDTH+WIDTH-1:0]P;
reg    [WIDTH-1:0]Count;
reg    [WIDTH+WIDTH:0]PB;

always@(posedge CLK or negedge RESET)
begin
 if(!RESET)
   begin
     P = 0;
     Count = 0;
     PB = 0;
   end
 else
   begin
     PB[WIDTH+WIDTH:0] = {16'd0, B, 1'b0};
     for(Count = 0; Count < WIDTH; Count = Count + 1)
       begin
         casez(PB[1:0])
                2'b01:
                      begin
                        PB[WIDTH+WIDTH:WIDTH+1] = PB[WIDTH+WIDTH:WIDTH+1] + A[WIDTH-1:0];
                       begin
                        if(PB[WIDTH+WIDTH] == 0)
                            PB[WIDTH+WIDTH:0] = {1'b0, PB[WIDTH+WIDTH:1]};
                        else
                            PB[WIDTH+WIDTH:0] = {1'b1, PB[WIDTH+WIDTH:1]};
                       end
                      end
                2'b10:
                      begin
                        PB[WIDTH+WIDTH:WIDTH+1] = PB[WIDTH+WIDTH:WIDTH+1] - A[WIDTH-1:0];
                       begin
                        if(PB[WIDTH+WIDTH] == 0)
                           PB[WIDTH+WIDTH:0] = {1'b0, PB[WIDTH+WIDTH:1]};
                        else
                           PB[WIDTH+WIDTH:0] = {1'b1, PB[WIDTH+WIDTH:1]};
                       end
                      end 
              default:
                      begin
                        if(PB[WIDTH+WIDTH] == 0)
                           PB[WIDTH+WIDTH:0] = {1'b0, PB[WIDTH+WIDTH:1]};
                        else
                           PB[WIDTH+WIDTH:0] = {1'b1, PB[WIDTH+WIDTH:1]};
                       end
          endcase
        end
      end
 P[WIDTH+WIDTH-1:0] = PB[WIDTH+WIDTH:1];
end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -