18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

布斯算法(Booth Algorithm)乘法器的Verilog實(shí)現(xiàn)

冬至子 ? 來源:Lin芯說 ? 作者:Lin芯說 ? 2023-12-04 15:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

布斯算法介紹

Booth 的算法檢查有符號二的補(bǔ)碼表示中 'N'位乘數(shù) Y 的相鄰位對,包括低于最低有效位 y?1 = 0 的隱式位。對于每個位 yi,對于從 0 到 N ? 1 的 i,考慮位 yi 和 yi?1。當(dāng)這兩個位相等時,乘積累加器P保持不變。其中 yi = 0 且 yi?1 = 1,乘以 2i 添加到 P;其中 yi = 1 且 yi?1 = 0,則從 P 中減去乘以 2i。P 的最終值為有符號結(jié)果。

未指定乘數(shù)和乘積的表示形式;通常,這些也都在二的補(bǔ)碼表示中,就像乘數(shù)一樣,但是任何支持加法和減法的數(shù)字系統(tǒng)也可以工作。如此處所述,步驟的順序尚未確定。通常,它從LSB到MSB,從i = 0開始;然后乘以2i通常被P累加器在步長之間向右的增量移位所取代;低位可以移出,然后可以在P的最高N位上進(jìn)行后續(xù)的加法和減法。

該算法通常被描述為將乘數(shù)中 1 的字符串轉(zhuǎn)換為字符串末端的高階 +1 和低階 ?1。當(dāng)字符串通過 MSB 運(yùn)行時,沒有高階 +1,并且凈效應(yīng)被解釋為相應(yīng)值的負(fù)數(shù)。

計(jì)算步驟

使用的寄存器:A,M,Q,Qres(Qres是Q右移后的殘余位),n(計(jì)數(shù)器)

第1步: 加載寄存器的初始值。

A = 0(累加器),Qres = 0,M = 乘法,Q = 乘法器,n是等于乘法器位數(shù)的計(jì)數(shù)值。

第2步: 檢查 {Q0,Qres} 的值。如果為 00 或 11,請轉(zhuǎn)到步驟 5。如果為01,轉(zhuǎn)到步驟3。如果為 10,轉(zhuǎn)到步驟 4。

第3步: 執(zhí)行 A = A + M,轉(zhuǎn)到步驟 5。

第4步: 執(zhí)行 A = A - M。

第5步: 執(zhí)行 {A,Q,Qres} 的算術(shù)位移和遞減計(jì)數(shù)。

第6步: 檢查計(jì)數(shù)器值 n 是否為零。如果是,請轉(zhuǎn)到下一步。否則轉(zhuǎn)到步驟 2。

第7步: 停止計(jì)算,輸出計(jì)算結(jié)果。

計(jì)算流程圖

以下是布斯計(jì)算的流程圖,從圖中可以清楚的看出計(jì)算的過程,簡單的來說就是判定乘數(shù)的最低位和次低位,如果兩位相同則直接執(zhí)行移位操作,如果兩者不同,如為“10”則將原始值減去被乘數(shù),如為“01”則將原始值加上被乘數(shù)。

圖片

舉個栗子

下面就以被乘數(shù)為6,乘數(shù)為-4為例,做一個計(jì)算過程的舉例。

圖片

  1. 將所有寄存器初始化,累加器A初始化為0,乘數(shù)加載寄存,最低位移出位設(shè)定為0。
  2. 判定最低位和移出位為“00”,不進(jìn)行加減操作,將結(jié)果結(jié)果值右移一位。
  3. 判定最低位和移出位為“00”,不進(jìn)行加減操作,將結(jié)果結(jié)果值右移一位。
  4. 判定最低位和移出位為“10”,對累加器減去被乘數(shù),并將結(jié)果結(jié)果值右移一位,注意此時累加器A為負(fù)數(shù)。
  5. 判定最低位和移出位為“10”,不進(jìn)行加減操作,將結(jié)果結(jié)果值右移一位,此時累加器為負(fù)數(shù),因此右移最高位補(bǔ)1。
  6. 判定最低位和移出位為“10”,不進(jìn)行加減操作,將結(jié)果結(jié)果值右移一位,此時累加器為負(fù)數(shù),因此右移最高位補(bǔ)1。
  7. 計(jì)數(shù)器為0表示計(jì)算完成,停止計(jì)算并輸出計(jì)算結(jié)果值。

Verilog 實(shí)現(xiàn)

設(shè)計(jì)思想

總的來說和上面提到的計(jì)算步驟是一致的,利用三段狀態(tài)機(jī)實(shí)現(xiàn),分別為空閑狀態(tài)、計(jì)算狀態(tài)和完成狀態(tài),其中空閑狀態(tài)等待開始計(jì)算信號的到來,計(jì)算狀態(tài)完成布斯計(jì)算步驟,完成狀態(tài)輸出結(jié)果數(shù)據(jù)以及同步的有效標(biāo)志信號。

Verilog 代碼

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*Engineer    : Linest-5                                                         
/*File        : booth_multiple.v                                                         
/*Create      : 2022-08-27 16:40:34
/*Revise      : 2022-08-27 16:40:34                                                  
/*Module Name : booth_multiple                                                  
/*Description : 基于布斯算法的乘法器設(shè)計(jì)                                                                         
/*Editor : sublime text3, tab size (4)                                                                                
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

modulebooth_multiple(
inputclk,
inputrst,
inputstart,
inputsigned [3:0]   X,
inputsigned [3:0]   Y,
outputreg signed [7:0]   Z,
outputvalid
);

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*參數(shù)和信號申明                                                              */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
parameterIDLE      =  3'b001;
parameterCACULATE  =  3'b010;
parameterFINISH    =  3'b100;
reg[2:0]   state;
reg[2:0]   next_state;
reg[1:0]   q_reg;           //右移最后兩位寄存 
reg[2:0]   cnt;             //右移次數(shù)計(jì)數(shù)信號  
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*三段狀態(tài)機(jī)                                                                  */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//狀態(tài)機(jī)第一段,狀態(tài)初始化,時序邏輯非阻塞賦值
always @(posedge clk or posedge rst) begin
  if (rst) begin
    state <= IDLE;
  end
  else begin
    state <= next_state;
  end
end
//狀態(tài)機(jī)第二段,狀態(tài)跳轉(zhuǎn),組合邏輯阻塞賦值
always @(*) begin
  next_state = state;
  case(state)
    IDLE: begin
      if (start) begin
        next_state = CACULATE;
      end
      else begin
        next_state = IDLE;
      end
    end
    CACULATE: begin
      if (cnt == 'd3) begin
        next_state = FINISH;
      end
      else begin
        next_state = CACULATE;
      end
    end
    FINISH: begin
      next_state = IDLE;
    end
  endcase
end

//狀態(tài)機(jī)第三段,結(jié)果輸出,時序邏輯非阻塞賦值
always @(posedge clk or posedge rst) begin
  if (rst) begin
    cnt   <= 'd0;
    q_reg <= 'd0;
    Z     <= 'd0;
  end
  else begin
    case(state)
      IDLE: begin
        cnt   <= 'd0;
        q_reg <= {Y[cnt],1'b0};
        Z     <= {4'b0000,Y};
      end
      CACULATE: begin
        cnt   <= cnt + 'd1;
        q_reg <= {Y[cnt+1],Y[cnt]};
        case(q_reg)
          2'b00,2'b11: begin
            Z <= $signed(Z) >> >1;
          end
          2'b10: begin
            Z <= $signed({Z[7:4]-X,Z[3:0]}) >> >1;
          end
          2'b01: begin
            Z <= $signed({Z[7:4]+X,Z[3:0]}) >> >1;            
          end
        endcase
      end
      FINISH: begin
        cnt   <= 'd0;
        q_reg <= 'd0;
        Z     <= Z;        
      end          
    endcase
  end
end
assign valid = (state==FINISH);
endmodule

TestBench 代碼

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/* Engineer    : Linest-5                                                         
/* File        : tb_booth_multiple.v                                                         
/* Create      : 2022-08-27 19:22:46
/* Revise      : 2022-08-27 20:21:49                                                  
/* Module Name : tb_booth_multiple                                                  
/* Description : 基于布斯算法的乘法器仿真模塊                                                                         
/* Editor : sublime text3, tab size (4)                                                                                
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

`timescale 1ns/1ns
module tb_booth_multiple();
  reg                 clk;
  reg                 rst;
  reg                 start;
  reg  signed [3:0]   X;
  reg  signed [3:0]   Y;
  wire signed [7:0]   Z;
  wire                valid;

  initial begin
    clk = 'd0;
    rst = 'd1;
    #20
    rst = 'd0;
  end
  always #10 clk = ~clk;
  initial begin
    #20
    X = 6;
    Y = -4;
    start = 'd0;
    #50
    start = 'd1;
    #20
    start = 'd0;
    #200
    X = 7;
    Y = -5;
    start = 'd1;
    #20
    start = 'd0;
    #200
    X = 7;
    Y = 5;
    start = 'd1;
    #20
    start = 'd0;
  end


booth_multiple inst_booth_multiple (
  .clk   (clk),
  .rst   (rst),
  .start (start),
  .X     (X),
  .Y     (Y),
  .Z     (Z),
  .valid (valid)
);

endmodule

仿真波形

分別進(jìn)行有符號的乘法,6和-4、7和-5、7和5,可以看到仿真波形中,正確的得到了計(jì)算結(jié)果,并且有效標(biāo)志信號也同步輸出。

驗(yàn)證成功!

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5503

    瀏覽量

    128332
  • Verilog
    +關(guān)注

    關(guān)注

    30

    文章

    1369

    瀏覽量

    113819
  • 乘法器
    +關(guān)注

    關(guān)注

    9

    文章

    220

    瀏覽量

    38369
  • 累加器
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    9727
  • MSB
    MSB
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    8487
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    蜂鳥E203內(nèi)核乘法器的優(yōu)化

    乘法器的優(yōu)化實(shí)現(xiàn)一般從兩個方面入手。第一是減少生成的部分積數(shù)量,另外就是減少部分積累加的延時。 在開源的E203源碼中,32*32乘法器是利用radix-4 booth編碼產(chǎn)生部分積,
    發(fā)表于 10-22 06:11

    基4-Booth單周期乘法器的具體設(shè)計(jì)

    本文主要講解基4 Booth和wallace數(shù)高性能乘法器的設(shè)計(jì),同時針對實(shí)際情況進(jìn)行了些許優(yōu)化。 基4-Booth單周期乘法器設(shè)計(jì) 針對e203的應(yīng)用場景,本隊(duì)考慮了其架構(gòu)修改所要
    發(fā)表于 10-22 08:07

    關(guān)于E203內(nèi)核高性能乘法器優(yōu)化(一)

    的一個部分積作為下個CSA的三個輸入相加得到第二級兩個部分積,按照這種操作一直進(jìn)行,直到得到最終的兩個部分積。 2.3Booth乘法器 Booth乘法器采用
    發(fā)表于 10-23 06:09

    Verilog實(shí)現(xiàn)使用Booth編碼和Wallace樹的定點(diǎn)補(bǔ)碼乘法器原理

    結(jié)果只需要一個周期,大大提升了乘法器性能。 1.Booth編碼 將乘數(shù)看作從最低位開始的一串二進(jìn)制數(shù)字。Booth算法的基本思路是:對于具有連續(xù)0和1的組,需要產(chǎn)生的部分積較少。對
    發(fā)表于 10-23 08:01

    改進(jìn)wallance樹乘法器優(yōu)化方法

    首先,根據(jù)之前分享的乘法器的優(yōu)缺點(diǎn),我們針對17周期的乘法器進(jìn)行優(yōu)化,為乘法設(shè)計(jì)的專用數(shù)據(jù)通路,為了保持e203的低功耗、低面積的優(yōu)點(diǎn)、我們?nèi)圆捎没?booth
    發(fā)表于 10-23 06:37

    fpga中定點(diǎn)乘法器設(shè)計(jì)(中文)

    …………………………………………………………………………………………… 51、 無符號數(shù)一位乘法 …………………………………………………………………………… 72、 符號數(shù)一位乘法 ……………………………………………………………………………… 83、
    發(fā)表于 08-12 11:59

    Verilog中用*實(shí)現(xiàn)乘法和用乘法器ip核實(shí)現(xiàn)乘法的區(qū)別?

    Verilog中用*實(shí)現(xiàn)乘法和用乘法器ip核實(shí)現(xiàn)乘法綜合結(jié)果有哪些不同?
    發(fā)表于 03-18 09:35

    怎么實(shí)現(xiàn)32位浮點(diǎn)陣列乘法器的設(shè)計(jì)?

    本文介紹了32 位浮點(diǎn)陣列乘法器的設(shè)計(jì), 采用了改進(jìn)的Booth 編碼, 和Wallace樹結(jié)構(gòu), 在減少部分積的同時, 使系統(tǒng)具有高速度, 低功耗的特點(diǎn), 并且結(jié)構(gòu)規(guī)則, 易于VLSI的實(shí)現(xiàn)。
    發(fā)表于 05-08 07:44

    基于Verilog HDL設(shè)計(jì)實(shí)現(xiàn)乘法器性能研究

    本文在設(shè)計(jì)實(shí)現(xiàn)乘法器時,采用了4-2 和5-2 混合壓縮器對部分積進(jìn)行壓縮,減少了乘法器的延時和資源占用率;經(jīng)Xilinx ISE 和Quartus II 兩種集成開發(fā)環(huán)境下的綜合仿真測試,與用
    發(fā)表于 09-17 11:13 ?27次下載

    一種用于SOC中快速乘法器的設(shè)計(jì)

    本文設(shè)計(jì)了適用于 SOC(System On Chip)的快速乘法器內(nèi)核。通過增加一位符號位,可以支持24×24 無符號和有符號乘法。在乘法器的設(shè)計(jì)中,采用了改進(jìn)的Booth
    發(fā)表于 09-21 10:40 ?20次下載

    數(shù)字陣列乘法器算法及結(jié)構(gòu)分析

    對數(shù)字陣列乘法器的移位加算法、Pezaris 算法、Baugh-Wooley 算法的性能進(jìn)行了分析,討論其各自的特點(diǎn);指出進(jìn)一步提高并行快速乘法器
    發(fā)表于 12-14 09:28 ?41次下載

    8乘8乘法器verilog源代碼

    8乘8乘法器verilog源代碼,有需要的下來看看
    發(fā)表于 05-23 18:21 ?24次下載

    一種高速流水線乘法器結(jié)構(gòu)

    設(shè)計(jì)了一種新穎的3232位高速流水線乘法器結(jié)構(gòu).該結(jié)構(gòu)所采用的新型Radix-16 Booth算法吸取了冗余Booth編碼與改進(jìn)Booth
    發(fā)表于 03-15 13:34 ?6次下載
    一種高速流水線<b class='flag-5'>乘法器</b>結(jié)構(gòu)

    使用verilogHDL實(shí)現(xiàn)乘法器

    VerilogHDL語言實(shí)現(xiàn)的兩位陣列乘法器和傳統(tǒng)的 Booth編碼乘法器進(jìn)行了性能比較,得出用這種混合壓縮的器乘法器要比傳統(tǒng)的4-2壓縮器
    發(fā)表于 12-19 13:30 ?1.1w次閱讀
    使用verilogHDL<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>乘法器</b>

    乘法器原理_乘法器的作用

    乘法器(multiplier)是一種完成兩個互不相關(guān)的模擬信號相乘作用的電子器件。它可以將兩個二進(jìn)制數(shù)相乘,它是由更基本的加法器組成的。乘法器可以通過使用一系列計(jì)算機(jī)算數(shù)技術(shù)來實(shí)現(xiàn)。
    發(fā)表于 02-18 15:08 ?2.8w次閱讀
    <b class='flag-5'>乘法器</b>原理_<b class='flag-5'>乘法器</b>的作用