实现一个16进制定点字符串转浮点输出
在做FPGA数据处理时,经常会遇到定点数,仿真生成的定点数据需要转换成浮点取显示.所以搞了如下函数来实现这个转换
输入的参数
v 输入16进制字符串
s 是否是有符号输出
w 输入值位宽
f 小数位宽
返回值
返回定点代表的数值,如调用
>>>print(hex2fixpoint(‘F1’,1,8,4))
-0.9375
##代码如下
"""
Created on 2018.09.20.12
实现输入16进制数据转成定点显示值
@author: peter
@emil : xiaotai-2666@163.com
"""
def fix2float(v,s=True,w=24,f=15):
#v 输入16进制字符串 example 'f1'
#s 是否是有符号输出 example 1
#w 输入值位宽 example 8
#f 小数位宽 example 4
#return -0.9375
din = int(v,16)
max_num= 2**w
if( s and din >= max_num/2 ):
x=din^(max_num-1)
v_bin = '{0:0{1}b}'.format(x+1,w)
fraction = int(v_bin[w-f:],2)/float(2**f)
intdata = int(v_bin[:w-f],2)
x=-(fraction+intdata)
else:
v_bin = '{0:0{1}b}'.format(din,w)
fraction = int(v_bin[w-f:],2)/float(2**f)
intdata = int(v_bin[:w-f],2)
x=fraction+intdata
return x
代码并不是最优的,欢迎大家修改意见,提高处理速度