笔记,传统乘法器

这篇笔记探讨了传统的乘法器设计,重点介绍了计算机中正负数的补码表示法。通过取反加1的方式转换正负数值,并阐述了乘法器的工作原理,即忽略符号位进行计算,最后结合符号决定结果的正负。文章提供了乘法器的Verilog代码作为参考。
摘要由CSDN通过智能技术生成

      今天的笔记是关于传统的乘法器,乘法器还是蛮有用的吧,也比较简单。

      首先是说一下计算机中数值的存储问题。在计算机中正数是以二进制来表示的,而负数则是以补码的形式来表示的,补码就是对正数二进制取反然后再加1,则形成负数的表达。

比如说4和-4,4:0000_0100   表示正4;

                             1111_1011   进行取反;

                             1111_1100   加1,表示负4;

数制转换中,正数取反加1表示负数,同样的负数取反加1也表示正数。

       然后是乘法器,设计的思路是首先判断最高位的符号位,因为在乘法计算中,我们知道最后算出的数值和符号无关,所以把符号单独判断,最后加上,乘法的计算就是把乘数加上被乘数个。代码不是自己写的,只是做下笔记整理的哦,代码如下:

//模块名:整数乘法器

//作者:昌磊

//单位:电子科技大学

//时间:2017.9.30

module multiplier_module (
   
   input clk,
	input rst_n,
	
	input Start_Sig,
	
	input [7:0]Multiplicand,
	input [7:0]Multiplier,
	
	output Done_Sig,
   output [15:0]Product
);

/********************************/

   reg [1:0]i;
	reg [7:0]Mcand;
	reg [7:0]Mer;
	reg [15:0]Temp;
	reg isNeg;
	reg isDone;
	
	always@(posedge clk or negedge rst_n)
	    if(rst_n==1'b0)
		    begin 
			    i<=2'd0;
			    Mcand<=8'd0;  //给乘数的寄存器
			    Mer<=8'd0;    //给被乘数的寄存器
			    Temp<=16'd0;  //给相乘的结果的寄存器
			    isNeg<=1'b0;   //符号标志寄存器
			    isDone<=1'b0;  //相乘结束标志信号
			end
		else if(Start_Sig)
		    
			case(i)
			   
			    0:
				begin 
				
				    isNeg<=Multiplicand[7]^Multiplier[7];
					Mcand<=Multiplicand[7]?(~Multiplicand+1'b1):Multiplicand;
                    //判断是否为正数,若是正数则直接计算,若不是,则要转换成正数
                    Mer<=Multiplier[7]?(~Multiplier+1'b1):Multiplier;
					Temp<=16'd0;
					i<=i+1'b1;
				end
			    
				1:
				if(Mer==0) i<=i+1'b1;
				else begin Temp<=Temp+Mcand;Mer<=Mer-1'b1;end 
				//乘法就是把乘数相加被乘数次数的累加和
				2:
				begin 
				isDone<=1'b1; i<=i+1'b1;
				end
				
				3:
				begin 
				isDone<=1'b0;i<=2'd0;
				end
			endcase
/********************************************************/

assign Done_Sig=isDone;
assign Product=isNeg?(~Temp+1'b1):Temp;

/*******************************************************/

endmodule 			


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值