乘法器的Verilog HDL實現

2021-09-08 18:13:28 字數 2794 閱讀 4126

1. 序列乘法器 

兩個n位二進位制數x、y的乘積用簡單的方法計算就是利用移位操作來實現。

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 <= }, x};

state <=s1;

ends1:

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;

endend

s2:

begin

result

<=p;

state

<=s0;

enddefault

: ;

endcase

endendmodule

乘法功能是正確的,但計算一次乘法須要8個週期。因此能夠看出序列乘法器速度比較慢、時延大。但這樣的乘法器的長處是所占用的資源是全部型別乘法器中最少的,在低速的訊號處理中有著廣泛的應用。

2.流水線乘法器 

一般的高速乘法器通常採用逐位並行的迭代陣列結構,將每乙個運算元的n位都並行地提交給乘法器。可是一般對於fpga來講。進製的速度快於加法的速度,這樣的陣列結構並非最優的。所以能夠採用多級流水線的形式。將相鄰的兩個部分乘積結果再加到終於的輸出乘積上,即排成乙個二叉樹形式的結構,這樣對於n位乘法器須要lb(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

;

endelse

begin

stored0

<= mul_b[0]? : 8

'b0;

stored1

<= mul_b[1]? : 8

'b0;

stored2 <= mul_b[2]? : 8

'b0;

stored3 <= mul_b[3]? : 8

'b0;

add01

<= stored1 +stored0;

add23

<= stored3 +stored2;

mul_out

<= add01 +add23;

endend

endmodule

從圖中能夠看出,流水線乘法器比序列乘法器的速度快非常多非常多,在非快速的訊號處理中有廣泛的應用。至於快速訊號的乘法一般須要利用fpga晶元中內嵌的硬核dsp單元來實現。

乘法器的Verilog HDL實現

1.序列乘法器 兩個n位二進位制數x y的乘積用簡單的方法計算就是利用移位操作來實現。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...

乘法器的Verilog HDL實現

color darkred size medium 1.序列乘法器 兩個n位二進位制數x y的乘積用簡單的方法計算就是利用移位操作來實現。size color 對應的hdl 為 module multi cx clk,x,y,result input clk input 7 0 x,y output...

乘法器的Verilog HDL實現

1.序列乘法器 兩個n位二進位制數x y的乘積用簡單的方法計算就是利用移位操作來實現。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...