FPGA中浮点数与定点数的转化原理与转化方法(并使用乘法器进行两个定点数的相乘)

基础知识

什么是浮点数与定点数

浮点数:小数点是浮动的,不是在一个固定的位置上的
定点数:小数点的位置是固定的
在FPGA内部只能处理定点数无法处理浮点数
当浮点数转换成定点数的时候要明确的知道小数有多少位,整数有多少位

浮点数转换为定点数

3位整数位宽,12位的小数位宽,最高位的符号位1位。则这个就是16位的
对于16位的符号数最大可以表示的值为32767,最小值为-32768。
第14,13,12位最大可以表示7,小数最大12位能表示多大精度呢?计算精度的方法位1/(2的12次方)= 0.000244140625,也可以用8/2^15

以2.918为例:
2.918/0.000244140625=11952.128~=11952,包含小数,小数部分进行四舍五入,这个就叫做量化的误差。这个值就是定点后的2.918。

以3.1415926为例:3.1415926/0.000244140625=12,867.9632896~=12868//量化后的值为:
3.1416015625 量化误差为3.1416015625–3.1415926=0.0000089625

浮点数与定点数的相乘

对于两个数相乘:
浮点结果:2.9183.1415926=9.1671672068
定点结果:11952
12868=153,798,336~=9.167095184326171875
整数位变为6位,小数位为24位,精度为1/2^24

固定值乘法:
a=2,3,6,8
b=5
b的值就一直不变
a=2,b=5-------->25=2’b103’b101=2’b10*(22+20)=2<<2+2<<0=4’b1010
所以定点数乘法器得时候就可以使用移位和加法器来实现

在quartusⅡ中使用乘法器完成两个定点数相乘

IP核的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

.v文件与测试未见

module	ex_mult(
			input	wire		sclk,
			input	wire		rst_n,
			input	wire [15:0] in_a,
			input	wire [15:0]	in_b,
			output	wire [31:0]	out
);

mult_16_16	mult_16_16_inst (
	.clock ( sclk ),
	.dataa ( in_a ),
	.datab ( in_b ),
	.result ( out )
	);

endmodule
`timescale	1ns/1ns

module	tb_ex_mult;

	reg		sclk,rst_n;
	reg	 [15:0] 	in_d;
	wire [31:0]		out;
	
initial	begin
	rst_n=0;
	sclk=0;
end
initial begin
	#10;
	gen_data();

end
always #10 sclk = ~sclk;

ex_mult		ex_mult_inst(

			.sclk(sclk),
			.rst_n(rst_n),
			.in_a(in_d),
			.in_b(in_d),
			.out(out)
);

task	gen_data();
		integer i;
		begin
			for(i=0;i<255;i=i+1)
				begin
					@(posedge	sclk);
					in_d <= ($random %32768);
				
				end
		end

endtask

endmodule

do文件

quit	-sim
.main	clear

vlib	./work

vmap	work  work

vlog	./tb_ex_mult.v	
vlog	./../design/ex_mult.v
vlog	./../design/quartus_prj/ipcore_dir/mult_16_16.v
vlog	./altera_lib/220model.v


vsim	-voptargs=+acc		work.tb_ex_mult

add		wave	tb_ex_mult/ex_mult_inst/*

run 10us

仿真结果

在这里插入图片描述

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值