4x4乘法器的Verilog代码
此项目是4x4乘法器的Verilog代码。该项目将使用Verilog HDL实现4x4乘法器。所使用的技术是移位/相加算法,但不同的功能是使用两相自计时系统,以将乘法时间减少一半。此附件文件包括:乘法器的Verilog代码、4x4乘法器的仿真结果。注意:一旦确定了启动信号,乘法器便开始执行乘法。 通过创建2个相位时钟,它将乘法时间减少了一半。结束信号,通知乘法器乘法已经完成并且结果准备就绪。
应用介绍
此项目是4x4乘法器的Verilog代码。该项目将使用Verilog HDL实现4x4乘法器。所使用的技术是移位/相加算法,但不同的功能是使用两相自计时系统,以将乘法时间减少一半。此附件文件包括:乘法器的Verilog代码、4x4乘法器的仿真结果。
注意:一旦确定了启动信号,乘法器便开始执行乘法。 通过创建2个相位时钟,它将乘法时间减少了一半。结束信号,通知乘法器乘法已经完成并且结果准备就绪。
下方展示了乘法器的Verilog代码:
`timescale 1ns / 1ps
// fpga4student.com FPGA projects, Verilog projects, VHDL projects
// multiplier 4x4 using Shift/Add Algorithm and 2-phase clocking system
// Verilog project: Verilog code for multiplier
module mult_4x4(
input reset,start,
input[3:0] A,B,
output [7:0] O, output Finish
);
reg [7:0] O;
wire Finish;
wire Phi0,Phi1;// 2 phase clocking
wire m1,m2,m3,m4;
// state machine
reg[3:0] State;
// Accumulator
reg [8:0] ACC; // Accumulator
// logic to create 2 phase clocking when starting
nand u0(m1,start,m2);
buf #20 u1(m2,m1);
buf #10 u2(Phi0,m1);// First phase clocking
not #2 u5(m4,Phi0);
assign m3=~m1;
and #2 u4(Phi1,m3,m4);// Second phase clocking
assign Finish = (State==9)? 1'b1:1'b0; // Finish Flag
// FSM
always @(posedge Phi0 or posedge Phi1 or posedge reset)
begin
if(reset) begin
State <= 0;
ACC <= 0;
O <= 0;
end
else if((Phi0==1'b1) || (Phi1==1'b1)) begin // 2 phase clocking
if(State==0)
begin
ACC[8:4] <= 5'b00000; // begin cycle
ACC[3:0] <= A; // Load A
State <= 1;
end
else if(State==1 || State == 3 || State ==5 || State ==7)
// add/shift State
begin
if(ACC[0] == 1'b1) begin // add multiplicand
ACC[8:4] <= {1'b0,ACC[7:4]} + B;
State <= State + 1;
end
else
begin
ACC <= {1'b0,ACC[8:1]};// shift right
State <= State + 2;
end
end
else if(State==2 || State == 4 || State ==6 || State ==8)
// shift State
begin
ACC <= {1'b0,ACC[8:1]}; // shift right
State <= State + 1;
end
else if(State == 9) begin
State <= 0;
O <= ACC[7:0];
end
end
end
endmodule
// TestBench
// fpga4student.com FPGA projects, Verilog projects, VHDL projects
// Verilog project: Verilog code for multiplier
module test();
// signals
reg start,reset;
reg[3:0] A,B;
// Outputs
wire [7:0] O;
wire Finish;
// device under test
mult_4x4 dut(reset,start, A,B,O,Finish);
initial begin
reset=1; // reset
#40 start = 0;A =14; B= 11;
#400 reset = 0;
#40 start = 1; // start
//@(posedge Finish);
//start = 0;
//$finish;
end
endmodule
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » 4x4乘法器的Verilog代码
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
4x4乘法器的Verilog代码.txt | 0.89 KB | 2020-03-29 |
m2.png | 35.73 KB | 2020-03-29 |
image | 0.00 KB | 2020-03-29 |
发表评论 取消回复