FPGA数字信号处理入门之有符号数与无符号数的运算

分别产生8bit任意数乘以63的有符号与无符号结果

代码

 module add_8bit_63(
//    input [7:0] d1,
//    output [13:0] sum
		
		input signed [7:0]d1,   //输入有符号的d1
		
		output signed [13:0]sum,//输出无符号的结果sum
		output signed [7:0]d2,  //输出一个d1的值
		output signed [13:0]d3	//输出d1*64的值
    );
	
//要求计算任意数乘以63的有符号‘无符号结果//	

//	assign sum={d1,6'd0}-d1; ///无符号计算:d1*64-d1即为无符号的运算结果


有符号计算
								 
/减去一个d1,位要对齐,所以加了14-8位的d1[7]		
assign sum={d1[7],d1,6'b0} -{d1[7],d1[7],d1[7],d1[7],d1[7],d1[7],d1[7],d1}; 																											
//因为是有符号计算,假如是负数,那么d1[7]就为1,但不影响d1的值。


assign d2={d1[7],d1[7],d1[7],d1[7],d1[7],d1[7],d1[7],d1};//一个d1的值                        
	
assign d3={d1[7],d1,6'b0};		//d1*64的值																 
       

endmodule
`

仿真

有符号的仿真波形如下
在这里插入图片描述
因为无符号的计算嘛就不管位宽,直接相加,不存在问题。主要是有符号的相加得严格对齐,不然结果会出错,然后是二进制乘法,利用拼接符,像乘以64就是{d1[7],d1,6’d0}。
d1[7]是防止d1为有符号数并且是负数时计算出错,因为是负值的话第一位是1,那么在d1前面加个1就可以将d1的值与其他数相加减了,并且其它数的位数要对齐结果才不会出错。

可以从图6看到黄线处输入数据是d1=-6,输出d3是d1乘以64的值,d2就是一个d1的值,最后d3减去一个d1的值就是d1乘以63的值。

激励文件只需产生输入d1的值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值