1. 串行乘法器
兩個N位二進制數(shù)x、y的乘積用簡單的方法計算就是利用移位操作來實現(xiàn)。
module multi_CX(clk, x, y, result); input clk; input [7:0] x, y; output [15:0] result; reg [15:0] result; parameter s0 = 0, s1 = 1, s2 = 2; reg [2:0] count = 0; reg [1:0] state = 0; reg [15:0] P, T; reg [7:0] y_reg; always @(posedge clk) begin case (state) s0: begin count <= 0; P <= 0; y_reg <= y; T <= {{8{1'b0}}, x}; state <= s1; end s1: begin if(count == 3'b111) state <= s2; else begin if(y_reg[0] == 1'b1) P <= P + T; else P <= P; y_reg <= y_reg >> 1; T <= T << 1; count <= count + 1; state <= s1; end end s2: begin result <= P; state <= s0; end default: ; endcase end endmodule
乘法功能是正確的,但計算一次乘法需要8個周期。因此可以看出串行乘法器速度比較慢、時延大,但這種乘法器的優(yōu)點是所占用的資源是所有類型乘法器中最少的,在低速的信號處理中有著廣泛的應(yīng)用。
2.流水線乘法器
一般的快速乘法器通常采用逐位并行的迭代陣列結(jié)構(gòu),將每個操作數(shù)的N位都并行地提交給乘法器。但是一般對于FPGA來講,進位的速度快于加法的速度,這種陣列結(jié)構(gòu)并不是最優(yōu)的。所以可以采用多級流水線的形式,將相鄰的兩個部分乘積結(jié)果再加到最終的輸出乘積上,即排成一個二叉樹形式的結(jié)構(gòu),這樣對于N位乘法器需要lb(N)級來實現(xiàn)。
module multi_4bits_pipelining(mul_a, mul_b, clk, rst_n, mul_out); input [3:0] mul_a, mul_b; input clk; input rst_n; output [7:0] mul_out; reg [7:0] mul_out; reg [7:0] stored0; reg [7:0] stored1; reg [7:0] stored2; reg [7:0] stored3; reg [7:0] add01; reg [7:0] add23; always @(posedge clk or negedge rst_n) begin if(!rst_n) begin mul_out <= 0; stored0 <= 0; stored1 <= 0; stored2 <= 0; stored3 <= 0; add01 <= 0; add23 <= 0; end else begin stored0 <= mul_b[0]? {4'b0, mul_a} : 8'b0; stored1 <= mul_b[1]? {3'b0, mul_a, 1'b0} : 8'b0; stored2 <= mul_b[2]? {2'b0, mul_a, 2'b0} : 8'b0; stored3 <= mul_b[3]? {1'b0, mul_a, 3'b0} : 8'b0; add01 <= stored1 + stored0; add23 <= stored3 + stored2; mul_out <= add01 + add23; end end endmodule
從圖中可以看出,流水線乘法器比串行乘法器的速度快很多很多,在非高速的信號處理中有廣泛的應(yīng)用。至于高速信號的乘法一般需要利用FPGA芯片中內(nèi)嵌的硬核DSP單元來實現(xiàn)。
審核編輯:劉清
-
FPGA設(shè)計
+關(guān)注
關(guān)注
9文章
428瀏覽量
26632 -
HDL
+關(guān)注
關(guān)注
8文章
328瀏覽量
47471 -
乘法器
+關(guān)注
關(guān)注
8文章
206瀏覽量
37195 -
Verilog語言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8309
原文標題:乘法器的Verilog HDL實現(xiàn)
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
verilog中乘法器延時問題
乘法器的移位累加
Verilog中用*實現(xiàn)乘法和用乘法器ip核實現(xiàn)乘法的區(qū)別?
FPGA乘法器設(shè)計
基于Verilog HDL設(shè)計實現(xiàn)的乘法器性能研究
乘法器的基本概念
![<b class='flag-5'>乘法器</b>的基本概念](https://file1.elecfans.com//web2/M00/A5/99/wKgZomUMOSuAEqJ1AABaZi60EwE546.jpg)
1/4平方乘法器
![1/4平方<b class='flag-5'>乘法器</b>](https://file1.elecfans.com//web2/M00/A5/99/wKgZomUMOSuANcbdAACK50hrGMM526.jpg)
脈沖-寬度-高度調(diào)制乘法器
![脈沖-寬度-高度調(diào)制<b class='flag-5'>乘法器</b>](https://file1.elecfans.com//web2/M00/A5/99/wKgZomUMOSuAHdZ0AAFcixOVuso875.jpg)
變跨導(dǎo)乘法器
基于IP核的乘法器設(shè)計
![基于IP核的<b class='flag-5'>乘法器</b>設(shè)計](https://file.elecfans.com/web2/M00/48/F1/pYYBAGKhtC-APBg1AAANiFWYA7g513.jpg)
使用verilogHDL實現(xiàn)乘法器
![使用verilogHDL<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>乘法器</b>](https://file.elecfans.com/web1/M00/7E/F3/pIYBAFwZ2vyAKTRUAABDtWfWiu8797.png)
乘法器原理_乘法器的作用
![<b class='flag-5'>乘法器</b>原理_<b class='flag-5'>乘法器</b>的作用](https://file.elecfans.com/web1/M00/DF/26/pIYBAGAuEzeAXnChAACRLRMGheM868.png)
采用Gillbert單元如何實現(xiàn)CMOS模擬乘法器的應(yīng)用設(shè)計
![采用Gillbert單元如何<b class='flag-5'>實現(xiàn)</b>CMOS模擬<b class='flag-5'>乘法器</b>的應(yīng)用設(shè)計](https://file.elecfans.com/web1/M00/E6/40/o4YBAGBZSC6AehRQAABKhM_mKR8425.png)
評論