1 函数
- 函数名:get_width
- 变量:
- var 输入:待处理有符号数。
- width_i 输入:定点数处理过程的数据位宽。
- width_o 输出:输出有符号数的实际位宽。
- 说明: 返回有符号数的数据位宽,如果未溢出,则输出“info”,如果溢出则输出“warning”。 值得注意一点的是,为了避免2^N的误判,取出最大值后加1再计算位宽。而对于负数的边界,留有2裕量不影响FPGA位宽的设计。 代码:
function width_o = get_width(var,width_i)
% 获取变量的位宽,判断是否溢出
% var:待处理变量
% width_i:数据最大位宽
% width_o:实际位宽
% matlab 版本低于2018 max函数不支持all选项。
% width_o = ceil(log2(max(max(max(max(var)))) )) + 1;
width_o = ceil(log2( max(abs(var) + 1, [], 'all') )) + 1; % 增加一位符号位
var_name = inputname(1);
fprintf("info: width of "+var_name + " = %d\n",width_o) ;
if nargin > 1
if width_o > width_i
fprintf(2,"warning: "+var_name + "overflow!\n") ;
end
end
end
2 使用