自定义Matlab功能函数——10进制整数矩阵转二进制字符矩阵

不同版本matlab的m语言语法会略有不同,这里使用的版本为Matlab 2021a。

一. 10进制整数矩阵转二进制字符矩阵

因为FPGA只能识别二进制,所以在做Verilog仿真时经常需要matlab生成有符号二进制的txt文件,涉及到进制转换,故编写此函数。

注意,函数内部加入了输入判断,输入不合法会报eroor。

A = [-64, -512, 9; -128, 5, 1; 3, 12, -19]
bit_width = 10

myDec2Bin(A, bit_width)

function yout_signed_bin_str = myDec2Bin(xin_int, bit_width)
    %{
    * description:输入十进制整数矩阵,得到指定位数的二进制补码字符矩阵,
                  整数数值满足范围:-(2^(bit_width - 1))~2^(bit_width - 1) - 1
    * @param xin_int 十进制数矩阵
    * @param bit_width 二进制位数
    * return yout_signed_bin_str 有符号的指定位数的二进制字符矩阵
    %}
    % 判断输入参数是否合法
    for i = 1:numel(xin_int)
        if fix(xin_int(i)) ~= xin_int(i) % 输入应是整数
            error('Error!, xin_int %d should be int, but there is %s', i, class(xin_int(i)));
        % 输入不能超过有符号bit_width的范围
        elseif xin_int(i) < -(2^(bit_width - 1)) || xin_int(i) > 2^(bit_width -1) - 1
            error('Error!, xin_int %d should be in %d ~ %d, but it is %d', ...
                i, -(2^(bit_width - 1)), 2^(bit_width -1) - 1, xin_int(i));
        end
    end

    yout_signed_bin_str = strings(size(xin_int)); % 创造一个与输入格式相同的字符串数组

    for i = 1:numel(xin_int) % numel(A)表示矩阵A元素个数
        yout_signed_bin_str(i) = dec2bin(xin_int(i) + (xin_int(i) < 0) * 2^bit_width, bit_width);
        if xin_int(i) < 0
            yout_signed_bin_str(i) = dec2bin((2^bit_width + xin_int(i)), bit_width);
        else
            yout_signed_bin_str(i) = dec2bin(xin_int(i), bit_width);
        end
    end

end

To be continued…

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值