乘法器的verilog實現

2021-10-07 21:36:49 字數 1792 閱讀 3966

一、對兩個二進位制數進行相乘運算,運用列式求法我們可以得知,乘法最終就是由加法和移位運算構成的,由此可以用高速度的加法和移位實現乘法操作,具體**如下:

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

module mult(

input clk,

input [3:0]a,b,

input rst_n,

output [7:0] out);

wire [5:0]out1;

wire [7:0]out2;

reg [6:0]te***;

reg [5:0]temp2;

reg [4:0]temp1;

reg [3:0]temp0;

function [3:0]mult4;

input [3:0]operand;

input sel;

mult4=(sel)?operand:4'b0000;

endfunction

always@(posedge clk or negedge rst_n)

if(!rst_n)

begin

temp0<=0;

temp1<=0;

temp2<=0;

te***<=0;

endelse

begin

temp0<=mult4(a,b[0]);

temp1<=mult4(a,b[1])<<1;

temp2<=mult4(a,b[2])<<2;

te***<=mult4(a,b[3])<<3;

endassign out1=temp0+temp1;

assign out2=temp2+te***;

assign out=out1+out2;

endmodule

乘法器的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...