VerilogHDL乘法器Word下载.docx
- 文档编号:4594155
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:15
- 大小:136.88KB
VerilogHDL乘法器Word下载.docx
《VerilogHDL乘法器Word下载.docx》由会员分享,可在线阅读,更多相关《VerilogHDL乘法器Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
注意,如果除法功能为引用功能模块,则难度系数将按照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;
b10:
BO=date;
b01:
AO=4'
b0000;
b11:
BO=4'
default:
begin
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:
wire[5:
0]out1;
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;
mult4=(sel)?
(operand):
4'
end
endfunction
always(posedgeclk)
temp0<
=mult4(a,b[0]);
temp1<
=((mult4(a,b[1]))<
<
1);
temp2<
=((mult4(a,b[2]))<
2);
temp3<
=((mult4(a,b[3]))<
3);
assignout1=temp0+temp1;
assignout2=temp2+temp3;
assignout=out1+out2;
仿真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;
0]ai,bi;
input[7:
0]ci;
inputch,dh;
outputfo;
regfo;
reg[7:
always(aiorbiorci)
case({ch,dh})
out=ai;
fo=fa;
begin
out=bi;
fo=fb;
out=ci;
fo=fc;
out=8'
fo=1'
仿真被乘数为-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);
0]DB;
0]bai,shi,ge;
0]A1,A2,A3,bai,shi,ge;
reg[8:
0]LDB;
reg[2:
0]step;
always(posedgeclk)
case(step)
0:
LDB[7:
0]<
=DB;
step<
=1;
A1<
=0;
A2<
A3<
1:
if(LDB>
=100)
=A3+1;
LDB<
=LDB-100;
elseif((LDB>
=10)&
&
(LDB<
100))
=A2+1;
=LDB-10;
=1)&
10))
=LDB;
else
=2;
2:
bai<
=A3;
shi<
=A2;
ge<
=A1;
step<
default:
endcase
仿真输入为159,得到分离结果bai=1,shi=5,ge=9
显示译码:
控制数码管各段的亮灭达到显示0~9的目的。
moduleshumaxian(b,s,g,bai,shi,ge);
0]bai,shi,ge;
output[7:
0]b,s,g;
reg[7:
always
(1)
case(bai)
4'
d0:
b=8'
b00000011;
d1:
b10011111;
d2:
b00100101;
d3:
b00001101;
d4:
b10011001;
d5:
b01001001;
d6:
b01000001;
d7:
b00011111;
d8:
b00000001;
d9:
b00001001;
default:
endcase
case(shi)
s=8'
s=8'
case(ge)
g=8'
(5)符号模块
用乘号控制,当ch=0(未按下乘号)输入被乘数的符号,当ch=1(按下乘号)输入乘数的符号,程序如下。
用异或运算结果的符号。
modulesign(fin,fa,fb,ch);
inputch,fin;
outputfa,fb;
regfa,fb;
always(fin)
begin
if(ch==0)
fa=fin;
if(ch==1)
fb=fin;
end
符号输出时灭掉数码管除符号位以外的其他段,程序如下
modulemieguan(in,out,rst);
inputin,rst;
always
(1)
case({in,rst})
b1111_1101;
b1111_1111;
四、
总体调试与仿真结果
总体模块结构图:
总体波形仿真:
仿真-9*12,得出结果为数码管对应的二进制数00000011显示为000001001显示为9,10011111显示为1,00100101显示为2,00000001显示为8。
符号位11111101显示负号,11111111不显示即为正。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VerilogHDL 乘法器