VerilogHDL乘法器.docx
- 文档编号:12213712
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:15
- 大小:136.88KB
VerilogHDL乘法器.docx
《VerilogHDL乘法器.docx》由会员分享,可在线阅读,更多相关《VerilogHDL乘法器.docx(15页珍藏版)》请在冰豆网上搜索。
VerilogHDL乘法器
一、设计的性质、目的和任务2
二、设计课题要求2
1、基本要求2
2、设计容2
三、总体设计3
1、输入模块3
2、乘法模块4
3、选择模块5
4、显示模块7
四、总体调试与仿真结果……………………………13
五、调试中遇到的问题及解决的方法13
六、课程设计过程中的体会和感想14
七、建议……………………………………………15
一、设计的性质、目的和任务
熟悉EDA设计方法、设计语言和开发软件及设计实例,利用掌握的一种硬件描述语言(AHDL/VHDL/VerilogHDL)和EDA开发工具(MaxPlusⅡ)进行数字系统的设计开发及仿真。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。
二、设计课题要求
(1)基本要求
掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。
(2)设计容
设计一个两个5位数相乘的乘法器。
用发光二极管显示输入数值,用7段显示器显示十进制结果。
乘数和被乘数分两次输入。
在输入乘数和被乘数时,要求显示十进制输入数据。
输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能。
注意,如果除法功能为引用功能模块,则难度系数将按照1到2.5计算。
#设计提示(仅供参考):
通常表示带符号二进制数时,最高位为“0”表示“+”号,最高位为“1”表示“-”号,例如,01101表示“+1101”,而11101则表示“-1101”。
乘法运算通常采用移位相加方法实现,见简略示意图。
最终符号则用两个数的最高位采用“异或”逻辑得到。
乘数
被乘数
移位寄存
移位寄存
相乘逻辑
累加器
结果寄存
时钟
三、总体设计
基于VerilogHDL硬件语言的乘法器设计
(1)输入模块
该模块为乘数和被乘数输入,由ch(表示乘号)、rst(表示复位)控制。
当rst=0、ch=0时,输入被乘数AO;当rst=0、ch=1时,输入乘数BO;当rst=1时,无论ch=0或1,输入均为零。
程序如下:
生成模块如下:
moduleshuru(date,ch,AO,BO,rst);
inputch;
inputrst;
input[3:
0]date;
output[3:
0]AO,BO;
reg[3:
0]AO,BO;
always(date)
begin
case({ch,rst})
2'b00:
AO=date;
2'b10:
BO=date;
2'b01:
AO=4'b0000;
2'b11:
BO=4'b0000;
default:
begin
AO=4'bx;
BO=4'bx;
end
endcase
end
endmodule
波形仿真如下:
仿真输入被乘数10,乘数12;当复位为1时,输入的14和11均无效。
(2)乘法模块
将乘数b的每一位与被乘数a相乘,如果b的该位为0则相乘得0;如果b的该位为1则相乘后左移相应的位数并寄存,最后累加得出最终结果。
程序如下:
生成模块如下:
modulemult(out,a,b,clk);
output[7:
0]out;
input[3:
0]a,b;
inputclk;
wire[7:
0]out;
wire[5:
0]out1;
wire[7:
0]out2;
reg[6:
0]temp3;
reg[5:
0]temp2;
reg[4:
0]temp1;
reg[3:
0]temp0;
function[3:
0]mult4;
input[3:
0]operand;
inputsel;
begin
mult4=(sel)?
(operand):
4'b0000;
end
endfunction
always(posedgeclk)
begin
temp0<=mult4(a,b[0]);
temp1<=((mult4(a,b[1]))<<1);
temp2<=((mult4(a,b[2]))<<2);
temp3<=((mult4(a,b[3]))<<3);
end
assignout1=temp0+temp1;
assignout2=temp2+temp3;
assignout=out1+out2;
endmodule
波形仿真如下:
仿真11*12
(3)选择模块
由ch(表乘号键)、dh(表等号键)控制,当ch=0,dh=0时选择被乘数的数值(ai)和符号(fa);当ch=1,dh=0(即按下乘号键)时选择乘数的数值(bi)和符号(fb);当ch=1,dh=1(即同时按下乘号键和等号键)时选择结果的数值(ci)和符号(fc)。
程序如下:
生成模块如下:
modulechoose(ch,dh,ai,bi,ci,fa,fb,fc,out,fo);
inputfa,fb,fc;
input[3:
0]ai,bi;
input[7:
0]ci;
inputch,dh;
outputfo;
output[7:
0]out;
regfo;
reg[7:
0]out;
always(aiorbiorci)
begin
case({ch,dh})
2'b00:
begin
out=ai;fo=fa;
end
2'b10:
begin
out=bi;fo=fb;
end
2'b11:
begin
out=ci;fo=fc;
end
default:
begin
out=8'bx;fo=1'bx;
end
endcase
end
endmodule
波形仿真如下:
仿真被乘数为-9,乘数为10,结果为-11,选择结果为fo和out。
(4)显示模块
显示模块有LED显示模块和数码管显示模块。
LED显示模块
输入Ri为四位二进制数,分别取反赋值给L0,L1,L2,L3,由L0,L1,L2,L3控制LED的亮灭(输入1灯亮,输入0灯灭)。
程序如下:
生成模块如下:
moduleledxian(Ri,L0,L1,L2,L3);
input[3:
0]Ri;
outputL0,L1,L2,L3;
assignL0=~Ri[0];
assignL1=~Ri[1];
assignL2=~Ri[2];
assignL3=~Ri[3];
endmodule
波形仿真如下:
数码管显示模块
二进制转十进制:
Step=0时,进行初始化;step=1时,若输入最高位有百位则A3加1,若最高位有十位则A2加1,若最高位只有个位则A1加1;
Step=2时,分别将寄存数A3,A2,A1赋值给bai,shi,ge。
如此循环直到输入值为0
modulebdzhuanhuan(clk,DB,bai,shi,ge);
inputclk;
input[7:
0]DB;
output[3:
0]bai,shi,ge;
reg[3:
0]A1,A2,A3,bai,shi,ge;
reg[8:
0]LDB;
reg[2:
0]step;
always(posedgeclk)
begin
case(step)
0:
begin
LDB[7:
0]<=DB;
step<=1;
A1<=0;
A2<=0;
A3<=0;
end
1:
begin
if(LDB>=100)
begin
A3<=A3+1;
LDB<=LDB-100;
end
elseif((LDB>=10)&&(LDB<100))
begin
A2<=A2+1;
LDB<=LDB-10;
end
elseif((LDB>=1)&&(LDB<10))
begin
A1<=LDB;
LDB<=0;
end
else
begin
step<=2;
end
end
2:
begin
bai<=A3;
shi<=A2;
ge<=A1;
step<=0;
end
default:
step<=0;
endcase
end
endmodule
波形仿真如下:
仿真输入为159,得到分离结果bai=1,shi=5,ge=9
显示译码:
控制数码管各段的亮灭达到显示0~9的目的。
moduleshumaxian(b,s,g,bai,shi,ge);
input[3:
0]bai,shi,ge;
output[7:
0]b,s,g;
reg[7:
0]b,s,g;
always
(1)
begin
case(bai)
4'd0:
b=8'b00000011;
4'd1:
b=8'b10011111;
4'd2:
b=8'b00100101;
4'd3:
b=8'b00001101;
4'd4:
b=8'b10011001;
4'd5:
b=8'b01001001;
4'd6:
b=8'b01000001;
4'd7:
b=8'b00011111;
4'd8:
b=8'b00000001;
4'd9:
b=8'b00001001;
default:
b=8'bx;
endcase
end
always
(1)
begin
case(shi)
4'd0:
s=8'b00000011;
4'd1:
s=8'b10011111;
4'd2:
s=8'b00100101;
4'd3:
s=8'b00001101;
4'd4:
s=8'b10011001;
4'd5:
s=8'b01001001;
4'd6:
s=8'b01000001;
4'd7:
s=8'b00011111;
4'd8:
s=8'b00000001;
4'd9:
s=8'b00001001;
default:
s=8'bx;
endcase
end
always
(1)
begin
case(ge)
4'd0:
g=8'b00000011;
4'd1:
g=8'b10011111;
4'd2:
g=8'b00100101;
4'd3:
g=8'b00001101;
4'd4:
g=8'b10011001;
4'd5:
g=8'b01001001;
4'd6:
g=8'b01000001;
4'd7:
g=8'b00011111;
4'd8:
g=8'b00000001;
4'd9:
g=8'b00001001;
default:
g=8'bx;
endcase
end
endmodule
波形仿真如下:
(5)符号模块
用乘号控制,当ch=0(未按下乘号)输入被乘数的符号,当ch=1(按下乘号)输入乘数的符号,程序如下。
用异或运算结果的符号。
modulesign(fin,fa,fb,ch);
inputch,fin;
outputfa,fb;
regfa,fb;
always(fin)
begin
if(ch==0)
begin
fa=fin;
end
if(ch==1)
begin
fb=fin;
end
end
endmodule
符号输出时灭掉数码管除符号位以外的其他段,程序如下
modulemieguan(in,out,rst);
inputin,rst;
output[7:
0]out;
reg[7:
0]out;
always
(1)
begin
case({in,rst})
2'b10:
out=8'b1111_1101;
2'b00:
out=8'b1111_1111;
2'b01:
out=8'b1111_1111;
2'b11:
out=8'b1111_1111;
default:
out=8'bx;
endcase
end
endmodule
四、
总体调试与仿真结果
总体模块结构图:
总体波形仿真:
仿真-9*12,得出结果为数码管对应的二进制数00000011显示为000001001显示为9,10011111显示为1,00100101显示为2,00000001显示为8。
符号位11111101显示负号,11111111不显示即为正。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VerilogHDL 乘法器