直接补码阵列乘法器手工运算

本文只讲述直接补码阵列乘法器的手工运算方法(应付计算机组成原理)

Verilog HDL代码(八位)

module mul(a,b,z);
    parameter d_width=8;
	input [d_width-1:0] a,b;
	output [d_width*2-1:0] z;
	wire [d_width-1:0] ab0=b[0]?a:8'b0;
	wire [d_width-1:0] ab1=b[1]?a:8'b0;
	wire [d_width-1:0] ab2=b[2]?a:8'b0;
	wire [d_width-1:0] ab3=b[3]?a:8'b0;
	wire [d_width-1:0] ab4=b[4]?a:8'b0;
	wire [d_width-1:0] ab5=b[5]?a:8'b0;
	wire [d_width-1:0] ab6=b[6]?a:8'b0;
	wire [d_width-1:0] ab7=b[7]?a:8'b0;
	assign z=(({8'b1,~ab0[7],ab0[6:0]}+
               {7'b0,~ab1[7],ab1[6:0],1'b0})+
              ({6'b0,~ab2[7],ab2[6:0],2'b0}+
               {5'b0,~ab3[7],ab3[6:0],3'b0})+
              ({4'b0,~ab4[7],ab4[6:0],4'b0}+
               {3'b0,~ab5[7],ab5[6:0],5'b0})+
              ({2'b0,~ab6[7],ab6[6:0],6'b0}+
               {1'b1,ab7[7],~ab7[6:0],7'b0}));
endmodule

手工计算举例描述

设十进制数x=-15,y=-13,用直接补码阵列乘法器求x*y=?
[x]补=1 0001,[y]补=1 0011
例题
手工计算方法为:对于所有行 图上黑色显示的数字即是所乘之数,红色即是所乘之数取反 蓝色即额外添加的1
对应图也就是说
第一行(1)黑色即数值位乘数值位,红色即数值位乘符号位取反,最左边添1
中间几行(234)黑色即数值位乘数值位,红色即数值位乘符号位取反
最后一行(5)是用符号位去乘,红色即符号位乘数值位取反,黑色即符号位乘符号位,最左边添1
最后结果0011000011最左边的两个00判断溢出
最终的结果即为[x*y]补=011000011

  • 31
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值