乘法器設計


最近,有好幾個師弟說不知道怎么寫乘法器,在這里就個人的一點理解做一下講解,主要分為乘法器的設計原理和代碼設計,在這里以4bit和4bit的乘積為例進行編寫。

首先,乘法器中最少需要兩個因數,一個乘數一個被乘數,而且需要明白的是乘積的位數是兩個因數的位數和;其次,需要了解乘法就是多個加法的集合。比如,乘數的最后一位乘以被乘數之后,得出一個4bit的結果;之后乘數的次低位與被乘數的乘積也是一個4bit的結果;如果只考慮4bit與2bit數據的乘積的話,那么將次低位向左移一位與最低位乘積相加即可得出結果,這里會有不少網友說這么算下來是5bit的結果呀,為什么說是兩個因數的位數和呢?這是因為要考慮到進位的原因。下面會給出一張圖進行說明。

具體的講解就到此結束,接下來進行代碼編寫:

module MUL4_4

(

input wire clk,

input wire rst_n,

input wire [3:0] a,

input wire [3:0] b,

 

output reg [7:0] dout 

);

reg [7:0] mul0;

reg [7:0] mul1;

reg [7:0] mul2;

reg [7:0] mul3;

always @ (posedge clk or negedge rst_n)begin

   if(!rst_n)begin

     mul0 <= 8'b0;

     mul1 <= 8'b0;

     mul2 <= 8'b0;

     mul3 <= 8'b0;

     doout <= 8'b0;

   end

  else begin

     mul0 <= a[0]?{4'b0,b}:8'b0;

     mul1 <= a[1]?{3'b0,b,1'b0}:8'b0;

     mul2 <= a[2]?{2'b0,b,2'b0}:8'b0;

     mul3 <= a[3]?{1'b0,b,3'b0}:8'b0;

     dout <= mul0 + mul1 + mul2 + mul3;

  end

end

endmodule


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM