python只使用位操作符和加号实现乘法、除法操作

def mul_cell(mult1, mult2, mult_acci):
    if(mult2 & 0x01):
        return [mult1 << 1, mult2 >> 1, mult_acci + mult1]
    else:
        return [mult1 << 1, mult2 >> 1, mult_acci]

def mult_man(mult1, mult2):
    if mult2 > mult1:
        mult1, mult2 = mult2, mult1
    mult_acci = 0
    while mult2 > 0:
        mult1,mult2,mult_acci = mul_cell(mult1,mult2,mult_acci)
    print(mult_acci)

mult_man(255,12)

根据verilog的流水级乘法器的原理

def divider_cell(divisor, dividend):
    num_dividend = int('0b' + dividend, 2)
    num_divisor = int('0b' + divisor, 2)
    if num_divisor >= num_dividend:
        return ['1', str(bin(num_divisor - num_dividend))[2:]]
    else:
        return ['0', str(bin(num_divisor))[2:]]


def get_binary_width(num):
    res = 1
    while (num >> 1) > 0:
        res += 1;
        num = num >> 1
    return res


def divider_man(dividend, divisor):
    merchant = ''
    remainder = ''

    dividend_width = get_binary_width(dividend)
    divisor_width = get_binary_width(divisor)

    return_info = divider_cell(str(bin(dividend))[2:divisor_width+2], str(bin(divisor))[2:])
    merchant += return_info[0]
    remainder = return_info[1]

    for i in range(dividend_width - divisor_width):
        return_info = divider_cell(remainder + str(bin(dividend))[2+divisor_width + i], str(bin(divisor))[2:])
        merchant += return_info[0]
        remainder = return_info[1]

    print(int('0b' + merchant, 2))
    print(int('0b' + remainder, 2))

divider_man(10,3)

根据verilog的流水线的触发器设计

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值