当前位置:   article > 正文

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

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
`
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

仿真

有符号的仿真波形如下
在这里插入图片描述
因为无符号的计算嘛就不管位宽,直接相加,不存在问题。主要是有符号的相加得严格对齐,不然结果会出错,然后是二进制乘法,利用拼接符,像乘以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的值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/540165
推荐阅读
相关标签
  

闽ICP备14008679号