首页 > 解决方案 > PyGears 如何制作与门

问题描述

假设我有两个模块 M1 和 M2,它们都输出 32 位数据。我想对每一位做逻辑与。怎么做?我一直在 GitHub 上查看库,但找不到用于 AND 操作的模块。

接下来我想做:

X[0] = M1[0] && M2[0]
X[1] = M1[1] && M2[1]

etc.

标签: pygears

解决方案


add_gate 的代码示例:

@gear
async def and_gate(arg1, arg2) -> (Uint[32]):
    async with arg1 as a1:
        async with arg2 as a2:
            res = a1 & a2
            yield res

@alternative(and_gate)
@gear
async def and_gate_one_arg(args) -> (Uint[32]):
    async with args as (a1, a2):
            res = a1 & a2
            yield res


res_two = []
res_one = []
@gear
def consumer():
    arg1 = once(val=31, tout=Uint[32])
    arg2 = once(val=15, tout=Uint[32])
    args = once(val=(15, 31), tout=Tuple[Uint[32], Uint[32]])
    bits_and_two_args = and_gate(arg1, arg2)
    bits_and_one_arg = and_gate(args)
    collect(bits_and_two_args, result=res_two)
    collect(bits_and_one_arg, result=res_one)

consumer()
sim()
print(res_one)
print(res_two)

它在 GearBox 中的表示方式: 在此处输入图像描述


推荐阅读