欢迎来到天天文库
浏览记录
ID:27458535
大小:47.50 KB
页数:3页
时间:2018-12-04
《8位无符号数乘法运算HDL设计实例.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、8位无符号数乘法运算HDL设计实例 加减乘除是运算的基础,也是我们在小学课堂里的重点必修课。乘除运算虽然对于我们今天来说还是小菜一碟,让计算机做起来也是九牛一毛不足挂齿,但是要真探究一下计算机是如何完乘除运算的,可还真有些学问和技巧,并不是人脑那么9*9一闪而过81出来了,计算机虽然得到结果的时间可能比人要快上不知道多少个数量级,但它怎么说还是需要一个过程的。可能不同的CPU内部的运算原理和机制略有差异,我们也无法完全去把这些运算方式搞清楚,这个例程我们就老老实实的用移位累加的方式完成两个8位无符号数的乘法运算。这里先随便举个例子来说明我们的运算原理,例如8位无符号数189和25相乘。
2、因为计算机只认识0和1,因此一切运算的基础都是0和1,所以我们的运算也必须是基于2进制来进行的。因此,我们首先要完成机制的转换。乘数189对应的2进制数为10111101,被乘数25对应的2进制数为00011001。按照我们最常用的10进制乘法运算的方式,我们可以得到如图1所示的2进制乘法。在这个运算过程中,我们从被乘数的最低位到最高位依次判断其取值是1还是0,如果是1则对乘数累加,否则不累加(即取0),需要累加的乘数根据当前被乘数位需要进行相应的移位,如被乘数的bit3为1,则乘数相应左移3次(即放大8倍)作为累加数。依据此原理,我们要设计的8位无符号乘法也是通过对被乘数进行逐位判断后
3、累加进行左移的乘数而得到最终的结果。 图12进制乘法在我们的8位无符号乘法运算中,一些基本的接口信号及其功能为:8位无符号数ain和bin是需要进行运算的两个乘数;输出的结果用16位无符号数yout表示;enable信号为运算使能信号;ready信号为运算完成标志位。用户先给ain和bin赋值,然后将enable信号拉高后即开始运算,大约8个时钟周期后运算输出结果,ready信号输出高电平表示运算结果有效,此后如果enable信号被用户拉低则ready信号也随后拉低,表示完成一次运算。接着用户可以给ain和bin赋新的运算值,然后拉高enable信号继续一次新的运算。Verilog参考
4、实例modulemux(clk,rst_n,enable,ain,bin,yout,ready);inputclk;inputrst_n;inputenable;(1)input[7:0]ain;(2)input[7:0]bin;(3)outputreg[15:0]yout;(4)outputregready;(5)reg[4:0]i;(6)always@(posedgeclk)if(!rst_n)beginready>1;(8)elseyout>1;(9)endelseif(i==4’d7)begin(10)if(ain[i])yout<=yout+{1’b0,bin,7’d0};(1
5、1)else;(12)ready<=1’b1;(13)endelseready<=1’b0;endelsebegini<=4’d0;yout<=16’h0000;endendmodule 运算使能信号。0表示无操作;1表示将对当前输入的ain和bin进行乘法运算。 8位无符号数,他将和bin进行相乘操作。 8位无符号数,他将和ain进行相乘操作。 16位的无符号数,用于存储2个8位无符号数相乘的运算结果。 乘法运算完成标志位。当前运算完成后输出高电平,此后如果enable信号拉低则该信号也拉低无效。 移位计数器,在enable=1时,每个时钟周期i会递增直到i=8停止。i=0
6、~7时,对应进行移位累加计算。
此文档下载收益归作者所有